Matlab 如何消除视频中亮度的剧烈变化?
我有一个从摄像机上获取的图像流。我发现,有时流中的图像会有一个较大的亮度峰值(每个像素的值都会跳变或下降),然后在下一幅图像中恢复到正常的亮度水平 这对我的算法来说是个大问题。有没有什么方法可以防止亮度骤增?我想在每个像素上设置一个低通滤波器,但我想知道是否有人对这个问题有更多的经验 我将在MATLAB中设计,并在OpenCV中实现。如果任何一个平台都有一些漂亮的功能,我很想听听Matlab 如何消除视频中亮度的剧烈变化?,matlab,opencv,image-processing,computer-vision,Matlab,Opencv,Image Processing,Computer Vision,我有一个从摄像机上获取的图像流。我发现,有时流中的图像会有一个较大的亮度峰值(每个像素的值都会跳变或下降),然后在下一幅图像中恢复到正常的亮度水平 这对我的算法来说是个大问题。有没有什么方法可以防止亮度骤增?我想在每个像素上设置一个低通滤波器,但我想知道是否有人对这个问题有更多的经验 我将在MATLAB中设计,并在OpenCV中实现。如果任何一个平台都有一些漂亮的功能,我很想听听 谢谢你的时间 一个相当简单的解决方案是将图像转换为YUV颜色空间,在Y通道上执行直方图均衡化,然后再转换回RGB。该
谢谢你的时间 一个相当简单的解决方案是将图像转换为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);
cv::cvtColor(img,img,cv_BGR2YUV);
矢量信道;
cv::分割(img,通道);
cv::equalizeHist(通道[0],通道[0]);
cv::合并(通道、img);
cv::CVT颜色(img、img、cv_YUV2BGR);
这将产生如下所示的效果。请注意,均衡列中的两个图像的亮度比两个原始图像的亮度更相似。你的里程数会有所不同
每个像素?听起来像是灯光或相机的问题。如果两者都无法控制,我只会检测坏帧并删除/忽略它们。不管怎么说,它们很可能是麻烦,因为你可能有饱和或修剪的区域
对于检测,我只需从查看图像中不同区域中直方图的低百分位开始,并查找它们都向上或向下跳跃的帧您的相机可能具有自动对焦功能,或者根据亮度条件自动调整曝光(亮度)级别。尝试控制/禁用相机本身的某些功能。