如何在视频中删除剧烈的亮度变化?

tri*_*ta2 4 matlab opencv image-processing computer-vision

我有一个图像流,我从摄像机.我发现有时来自流的图像亮度会有很大的峰值(每个像素跳跃或下降值),然后在下一个图像中返回到正常的亮度级别.

这对我的算法来说是个大问题.无论如何我可以防止这种亮度上升?我在考虑像每个像素上的低通滤波器,但我想知道是否有人有更多这方面的经验.

我将在MATLAB中进行设计并在OpenCV中实现.如果任何一个平台都有一些漂亮的功能,我很乐意听到它们.

谢谢你的时间!

Aur*_*ius 11

一个相当天真的解决方案是将图像转换为YUV颜色空间,在Y通道上执行直方图均衡,然后转换回RGB.该方法试图将图像的亮度归一化为每帧的相同分布,从而补偿亮度的变化.

在OpenCV中执行此操作的代码是:

cv::cvtColor(img, img, CV_BGR2YUV);
std::vector<cv::Mat> channels;
cv::split(img, channels);
cv::equalizeHist(channels[0], channels[0]);
cv::merge(channels, img);
cv::cvtColor(img, img, CV_YUV2BGR);
Run Code Online (Sandbox Code Playgroud)

这产生如下所示的效果.请注意,均衡列中两个图像的亮度与两个原始图像的亮度更相似.你的里程会有所不同.

亮度均衡