我有一個灰度圖像,其像素值範圍從1.000到1.003。在MATLAB中增加圖像對比度
我想增加不同像素之間的對比度。我已經嘗試imcontrast
下imtool
,但我沒有看到任何改善視覺。
也許一個想法是增加像素> 1.000的值。例如,如果我可以將1.001映射到10,1.002到20等,那將是非常好的。這會增加對比度嗎?
我有一個灰度圖像,其像素值範圍從1.000到1.003。在MATLAB中增加圖像對比度
我想增加不同像素之間的對比度。我已經嘗試imcontrast
下imtool
,但我沒有看到任何改善視覺。
也許一個想法是增加像素> 1.000的值。例如,如果我可以將1.001映射到10,1.002到20等,那將是非常好的。這會增加對比度嗎?
嘗試
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;
然後,你仍然需要留意的可能性,圖像可能爲空(這將導致一個除以零問題)。
如果希望放大的範圍不是真正的最小值或最大值,可以手動設置imgMin
和imgMax
值。
如果您只想顯示帶有更多對比度的圖像,則可以使用imagesc
,它將圖像數據縮放到當前顏色圖的全部範圍並顯示圖像。
如果您確實想要調整圖像的範圍,您可以通過減去最小值併除以可用範圍來對其進行歸一化。
如果您使用imshow(image, [lowerBound upperBound])
來顯示圖像,它應該在出現黑色的lowerBound
和顯示爲白色的upperBound
之間出現線性縮放。因此,舉個例子,你會使用類似imshow(image, [1.000 1.003])
的東西來顯示你的圖片。
我意識到這並不是什麼問題,但問題的標題可能會導致像我這樣的其他人來這裏尋求一種方式來(非破壞性地)增加圖像對比度即使它是標準化 - 在Photoshop類似於一個可以用曲線做的功能,通過其設置爲sigmoid形狀:
一個簡單的方法來做到這一點(假設我們在[0,1]
範圍內標準化的圖像,例如在通過MATLAB的mat2gray
函數之後)就是使用cos ine功能。方法如下:我們首先反映餘弦曲線,使其最低點在零點上,而在π上最高,而不是相反;那麼我們將輸入縮放π,因此當輸入具有最大值1時出現最高點;最後我們通過增加1除以2正常化結果的輸出範圍[0,1]
(從餘弦的原始[-1,1]
)結果如下簡單的公式:
img_contrast = (-cos(pi * mat2gray(img_original)) + 1)/2;
希望幫助!
當你有一個帶有double值的灰度圖像時,大多數函數都希望這些值位於'[0.0,1.0]'範圍內。因此,無論您如何轉換強度(線性或非線性),您都應該考慮將結果映射到'[0,1]'範圍。 – Amro