2011-08-02 376 views
3

我有一個灰度圖像,其像素值範圍從1.000到1.003。在MATLAB中增加圖像對比度

我想增加不同像素之間的對比度。我已經嘗試imcontrastimtool,但我沒有看到任何改善視覺。

也許一個想法是增加像素> 1.000的值。例如,如果我可以將1.001映射到10,1.002到20等,那將是非常好的。這會增加對比度嗎?

+0

當你有一個帶有double值的灰度圖像時,大多數函數都希望這些值位於'[0.0,1.0]'範圍內。因此,無論您如何轉換強度(線性或非線性),您都應該考慮將結果映射到'[0,1]'範圍。 – Amro

回答

11

嘗試

newRange = 1.0; %// choose the new maximum. (new minimum always at 0.0) 
imgMin = double(min(image(:))); 
imgMax = double(max(image(:))); 
image = (image - imgMin)/(imgMax - imgMin) * newRange; 

然後,你仍然需要留意的可能性,圖像可能爲空(這將導致一個除以零問題)。

如果希望放大的範圍不是真正的最小值或最大值,可以手動設置imgMinimgMax值。

1

如果您只想顯示帶有更多對比度的圖像,則可以使用imagesc,它將圖像數據縮放到當前顏色圖的全部範圍並顯示圖像。

如果您確實想要調整圖像的範圍,您可以通過減去最小值併除以可用範圍來對其進行歸一化。

0

如果您使用imshow(image, [lowerBound upperBound])來顯示圖像,它應該在出現黑色的lowerBound和顯示爲白色的upperBound之間出現線性縮放。因此,舉個例子,你會使用類似imshow(image, [1.000 1.003])的東西來顯示你的圖片。

4

我意識到這並不是什麼問題,但問題的標題可能會導致像我這樣的其他人來這裏尋求一種方式來(非破壞性地)增加圖像對比度即使它是標準化 - 在Photoshop類似於一個可以用曲線做的功能,通過其設置爲sigmoid形狀:

sigmoid curve on photoshop

一個簡單的方法來做到這一點(假設我們在[0,1]範圍內標準化的圖像,例如在通過MATLAB的mat2gray函數之後)就是使用cos ine功能。方法如下:我們首先反映餘弦曲線,使其最低點在零點上,而在π上最高,而不是相反;那麼我們將輸入縮放π,因此當輸入具有最大值1時出現最高點;最後我們通過增加1除以2正常化結果的輸出範圍[0,1](從餘弦的原始[-1,1])結果如下簡單的公式:

img_contrast = (-cos(pi * mat2gray(img_original)) + 1)/2; 

希望幫助!