2016-02-25 182 views
1

我有大約160張圖片用於實驗。然而,一些圖像與其他圖像相比亮度和對比度明顯不同。舉例來說,我有類似下面的兩張圖片:在多張圖像上均衡對比度和亮度

enter image description here enter image description here

我想均衡兩張照片在亮度和對比度方面(可能會發現在中間的一些水平,並不等於一個圖像到另一個 - 雖然這可能是好的,如果這使事情變得更容易)。有沒有人有任何建議,如何去做這件事?我對Matlab中的圖像分析並不熟悉,所以如果出現這些問題,請耐心等待我的後續問題。這裏已經有一個關於Equalizing luminance, brightness and contrast for a set of images的問題,但代碼對我來說沒有多大意義(由於我在Matlab中使用圖像的經驗不足)。

目前,我使用Gimp來操縱圖像,但它耗時160圖像,而且只是與主觀眼睛判斷是不是很可靠。謝謝!

+1

可能['histeq'命令](http://www.mathworks.com/help/images/ref/histeq.html)可以幫助你。 – dfri

+0

我試過了,但結果因圖片而異。 –

+0

仔細檢查:當您嘗試過時,您是否使用了預設的直方圖;對強度值爲等間隔的箱子預設計數? _「...轉換強度圖像'I',以便使用」長度(hgram)「區域的輸出強度圖像」J「的直方圖與」hgram「」_「大致匹配。 – dfri

回答

2

您可以使用histeq執行直方圖規範其中算法將盡最大努力使目標圖像與源圖像的強度/直方圖分佈相匹配。這也叫做histogram matching and you can read up about it on my previous answer

實際上,兩幅圖像之間的強度分佈應該是相同的。如果要使用histeq的優勢,則可以指定一個指定目標直方圖的附加參數。因此,輸入圖像會嘗試將其自身與目標直方圖進行匹配。像這樣的東西會工作假設你有存儲在im1im2圖像:

out = histeq(im1, imhist(im2)); 

然而,imhistmatch是更多更好的版本使用。除非您不需要手動計算直方圖,否則它幾乎與您撥打histeq的方式相同。您只需指定實際圖像以匹配其自身:

out = imhistmatch(im1, im2); 

下面是使用兩個圖像的運行示例。請注意,我會選擇使用imhistmatch。我直接從StackOverflow中讀取兩個圖像,我執行直方圖匹配,以便第一個圖像與第二個圖像的亮度分佈匹配,並將這個結果全部顯示在一個窗口中。

im1 = imread('http://i.stack.imgur.com/oaopV.png'); 
im2 = imread('http://i.stack.imgur.com/4fQPq.png'); 
out = imhistmatch(im1, im2); 
figure; 
subplot(1,3,1); 
imshow(im1); 
subplot(1,3,2); 
imshow(im2); 
subplot(1,3,3); 
imshow(out); 

這就是我得到:

enter image description here

注意,在與第二圖像分佈,從第一圖像現在或多或少的比賽。

我們也可以翻轉它並將第一張圖片作爲源代碼,我們可以嘗試將第二張圖片與第一張圖片進行匹配。只是imhistmatch翻轉兩個參數:

out = imhistmatch(im2, im1); 

重複上面的代碼顯示的數字,我得到這個:

enter image description here

這看起來更有趣一點。我們絕對可以看到第二張圖片的眼睛的形狀,並且一些面部特徵更加明顯。


這樣,你終於可以做到底是選擇具有最佳的亮度和對比度,然後在其他每個圖像,並使用該源的圖像作爲每次調用imhistmatch迴路一個很好的代表形象參考,以便其他圖像將嘗試並將其強度分佈與該源圖像匹配。我無法真正編寫代碼,因爲我不知道如何在MATLAB中存儲這些圖像。如果你分享一些代碼,我想寫更多。

+0

Rayryeng,非常感謝你的幫助!這當然是問題的一部分,但圖像質量似乎受到影響。我還發現了一個潛在的解決方案:http://www.mathworks.com/matlabcentral/fileexchange/28972-custom-shaped-histogram如果這個工程,我會在這裏發佈。 –

相關問題