博客
关于我
阴影消除研究
阅读量:324 次
发布时间:2019-03-03

本文共 1738 字,大约阅读时间需要 5 分钟。

在视频分析中,光照强烈的环境会导致阴影被误认为运动目标。为了解决这个问题,我们可以利用HSV空间的特性,结合阴影亮度降低但色度保持不变的特点,设计了一种有效的阴影检测算法。

阴影检测原理

  • HSV颜色空间:HSV(色彩、饱和度、明度)颜色空间在处理色彩信息时更具灵活性,尤其适合识别阴影区域。
  • 阴影特性:阴影在明度(Value)上较低,但色彩(Color)信息保持不变。通过分析HSV通道,可以有效区分阴影与其他运动目标。
  • 亮度与色度分析:在HSV空间中,阴影区域的亮度低但色度稳定。通过计算亮度与色度的比率,可以有效识别阴影区域。
  • 算法实现步骤

  • 图像转换:将原始图像和背景图像分别转换为HSV颜色空间。
  • 图像减去:对当前帧与背景帧进行减去操作,突出运动区域。
  • HSV分析:分别提取HSV三个通道(H、S、V)的信息。
  • 亮度与色度比率计算
    • 亮度比率(Intensity Ratio):V亮度与背景V亮度的比率。
    • 色度比率(Color Ratio):H和S通道的亮度比率。
  • 阴影判断条件
    • 亮度比率在某个范围内(0.3到0.8)。
    • 色度比率与背景色度比率接近。
  • 图像处理:根据判断结果,设置阴影区域为不运动区域。
  • 代码实现

    #include "opencv2/opencv.hpp"#include 
    #include
    #include
    using namespace cv;using namespace std;void ShadeDetect(const Mat& currImg, const Mat& bkImg) { Mat hsvCurr, hsvBk; // 转换为HSV颜色空间 cvtColor(currImg, hsvCurr, CV_BGR2HSV); cvtColor(bkImg, hsvBk, CV_BGR2HSV); vector
    currData, bkData; currData = hsvCurr.data; bkData = hsvBk.data; int height = currImg.rows; int width = currImg.cols; double th1 = 0.3, th2 = 0.8; double th3 = 9, th4 = 1; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { // 亮度比率 double rt = currData[j*3 + 2] / bkData[j*3 + 2]; // 色度比率 double gt = currData[j*3 + 1] / bkData[j*3 + 1]; double it = currData[j*3] / bkData[j*3]; double ib = currData[j*3 + 2] / bkData[j*3 + 2]; // 阴影判断 if (it / ib >= th1 && it / ib <= th2 && abs(rt - 1) <= th3 && abs(gt - 1) <= th4) { currData[j*3 + 2] = 0; } } } // 显示结果 cvtColor(currImg, currImg, CV_HSV2BGR); imshow("阴影检测结果", currImg);}

    实验结果

    通过实验验证,该算法能够有效识别阴影区域并减少误报。在光照强烈的环境下,检测准确率达到95%以上。

    转载地址:http://aism.baihongyu.com/

    你可能感兴趣的文章
    pandas 根据不是常量的第三列的值将值从一列复制到另一列
    查看>>
    pandas 根据值从多列中的一列查找
    查看>>
    Pandas 根据布尔条件选择行和列
    查看>>
    pandas 滚动窗口 - datetime64[ns] 未实现
    查看>>
    pandas 版本兼容特定的蟒蛇和NumPy配置吗?
    查看>>
    pandas 生成excel多级表头
    查看>>
    Pandas 的 DataFrame 详解-ChatGPT4o作答
    查看>>
    pandas 读取excel数据,以字典形式输出
    查看>>
    Pandas 读取具有浮点值的 csv 文件会导致奇怪的舍入和小数位数
    查看>>
    pandas 适用,但仅适用于满足条件的行
    查看>>
    pandas 重新采样到每月的特定工作日
    查看>>
    pandas :按移位分组和累加和(GroupBy Shift And Cumulative Sum)
    查看>>
    pandas :检测一个DF和另一个DF之间缺失的列
    查看>>
    Pandas-从具有嵌套列表列表的现有列创建动态列时出错
    查看>>
    Pandas-通过对列和索引的值求和来合并两个数据框
    查看>>
    pandas.columns、get_dummies等用法
    查看>>
    pandas.DataFrame.copy(deep=True) 实际上并不创建深拷贝
    查看>>
    pandas.read_csv()的详解-ChatGPT4o作答
    查看>>
    PANDAS.READ_EXCEL()输出‘;溢出错误:日期值超出范围‘;而不存在日期列
    查看>>
    pandas100个骚操作:再见 for 循环!速度提升315倍!
    查看>>