您可以使用histeq
執行直方圖規範其中算法將盡最大努力使目標圖像與源圖像的強度/直方圖分佈相匹配。這也叫做histogram matching and you can read up about it on my previous answer。
實際上,兩幅圖像之間的強度分佈應該是相同的。如果要使用histeq
的優勢,則可以指定一個指定目標直方圖的附加參數。因此,輸入圖像會嘗試將其自身與目標直方圖進行匹配。像這樣的東西會工作假設你有存儲在im1
和im2
圖像:
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);
這就是我得到:
注意,在與第二圖像分佈,從第一圖像現在或多或少的比賽。
我們也可以翻轉它並將第一張圖片作爲源代碼,我們可以嘗試將第二張圖片與第一張圖片進行匹配。只是imhistmatch
翻轉兩個參數:
out = imhistmatch(im2, im1);
重複上面的代碼顯示的數字,我得到這個:
這看起來更有趣一點。我們絕對可以看到第二張圖片的眼睛的形狀,並且一些面部特徵更加明顯。
這樣,你終於可以做到底是選擇具有最佳的亮度和對比度,然後在其他每個圖像,並使用該源的圖像作爲每次調用imhistmatch
迴路一個很好的代表形象參考,以便其他圖像將嘗試並將其強度分佈與該源圖像匹配。我無法真正編寫代碼,因爲我不知道如何在MATLAB中存儲這些圖像。如果你分享一些代碼,我想寫更多。
可能['histeq'命令](http://www.mathworks.com/help/images/ref/histeq.html)可以幫助你。 – dfri
我試過了,但結果因圖片而異。 –
仔細檢查:當您嘗試過時,您是否使用了預設的直方圖;對強度值爲等間隔的箱子預設計數? _「...轉換強度圖像'I',以便使用」長度(hgram)「區域的輸出強度圖像」J「的直方圖與」hgram「」_「大致匹配。 – dfri