我需要使用OpenCV在网络摄像头镜头中进行相当敏感的颜色(亮度)测量.我遇到的问题是环境光波动,这使得很难得到准确的结果.我正在寻找一种方法来不断更新视频的连续帧,以消除全局光照差异.我试图过滤掉的光线变化在大部分或全部图像中全局发生.我试图计算差异并减去差异,但运气不佳.有没有人对如何处理这个问题有什么建议?
编辑:下面的2张图片来自同一视频,颜色变化略微放大.如果你在它们之间交替,你会发现光线有轻微变化,可能是由于云层向外移动.问题是这些变化掩盖了我可能想要检测的任何其他颜色变化.
所以我想过滤掉这些特殊的变化.鉴于我只需要捕获的部分帧,我认为应该可以过滤掉其他镜头中发生的灯光变化.在我感兴趣的领域之外.
我试图用dft捕捉变化中的主导频率,简单地忽略光照的变化.但我对该功能的使用还不够熟悉.我只使用opencv一个星期,所以我还在学习.
简答:对照明作为一个整体的时间低通滤波器
考虑照明,在概念上,作为表示像的光束入射到场景值的时间序列被拍摄.你理想的情况是这个函数是恒定的,但第二好的情况是它变化尽可能慢.甲低通滤波器改变,可以快速地改变到一个变化更慢的函数.基本步骤如下:(1)计算总照度函数(2)使用低通滤波器计算新的照明函数(3)将原始图像序列归一化为新的照明值.
(1)计算照明函数的最简单方法是将图像中每个像素的所有亮度值相加.在简单的情况下,这甚至可能有效; 你可能会从我的语气中猜出有很多警告.
一个重要的问题是,您更喜欢将光照值添加到某些色彩空间(例如HSV),而不是某种物理光照度量.从色彩空间回到房间中的实际光线需要图像中不存在的数据,例如图像中每个表面的光谱反射率,因此不太可能.作为此代理,您只能使用图像的一部分,即具有一致反射率的图像.在样本图像中,可以使用图像顶部的桌面.选择一个几何区域并从中计算总照明数.
与此相关的是,如果图像的区域中摄像机已经饱和,则会丢失大量信息,并且总照度值与物理照明无关.简单地删除任何这样的区域(但在所有框架上一致地执行).
(2)计算照明功能的低通滤波器.这些变换是每个信号处理包的基本部分.我不太了解OpenCV是否知道它本身是否具有适当的功能,因此您可能需要另一个库.有许多不同类型的低通滤波器,但它们都应该给你类似的结果.
(3)一旦你得到了一个低通时间序列,你想用它作为整个照射归一化功能.计算低通系列的平均值并除以它,得到平均值为1的时间序列.现在通过将图像中的照度乘以归一化因子来变换每个图像.关于理想地在物理照明空间而不是颜色空间中工作的所有警告都适用.
| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |