2013-08-26 72 views
4

我有一個從攝像機中獲得的圖像流。我發現有時流中的圖像亮度會大幅度上升(每個像素跳躍或下降),然後在下一個圖像中返回到其正常亮度級別。如何消除視頻中劇烈的亮度變化?

這是我的算法的一個巨大的問題。無論如何,我可以防止亮度的這個尖峯?我在想像每個像素都有低通濾波器,但我想知道是否有人對這個問題有更多的經驗。

我將在MATLAB中進行設計並在OpenCV中實現。如果任一平臺都有一些漂亮的功能,我很樂意聽到他們的消息。

謝謝你的時間!

+0

相機可以具備自動對焦或它可根據亮度條件自動調整其曝光(亮度)級別。嘗試控制/禁用相機本身的某些功能。 – Alexey

回答

10

一個相當天真的解決方案是將您的圖像轉換爲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); 

這產生如下所示的效果。請注意,均衡的列中的兩個圖像的亮度與兩個原始圖像的亮度更相似。你的里程會有所不同。

Luminance Equalization

0

每個像素?聽起來像是照明或照相機問題。如果你無法控制任何一個,我只是檢測到壞幀並放棄/忽略它們。無論如何,它們可能都是麻煩的,因爲你可能有飽和或剪切的區域。

爲了檢測我只是通過查看圖像中不同區域的直方圖的低百分啓動,並查找框架,他們也都跳向上或向下