【问题标题】:How Can I Remove Drastic Brightness Variations In A Video?如何消除视频中的剧烈亮度变化?
【发布时间】:2013-08-26 20:26:30
【问题描述】:

我有一个从摄像机获取的图像流。我发现有时流中的图像会出现较大的亮度峰值(每个像素的值都会跳跃或下降),然后在下一张图像中恢复到正常的亮度水平。

这对我的算法来说是个大问题。无论如何我可以防止这种亮度峰值吗?我在想每个像素上的低通滤波器之类的东西,但我想知道是否有人对这个问题有更多经验。

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

感谢您的宝贵时间!

【问题讨论】:

  • 您的相机可能具有自动对焦功能,或者它可能会根据亮度条件自动调整其曝光(亮度)级别。尝试在相机本身上控制/禁用其中一些功能。

标签: matlab opencv image-processing computer-vision


【解决方案1】:

一个相当幼稚的解决方案是将图像转换为 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);

这会产生如下所示的效果。请注意,均衡列中的两张图片的亮度比两张原始图片的亮度更相似。您的里程会有所不同。

【讨论】:

    【解决方案2】:

    每个像素?听起来像是照明或相机问题。如果你不能控制任何一个,我只会检测坏帧并丢弃/忽略它们。无论如何,它们可能很麻烦,因为您可能有饱和或剪裁的区域。

    对于检测,我首先查看图像中不同区域中直方图的低百分位数,然后查找它们都向上或向下跳跃的帧

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      相关资源
      最近更新 更多