我對matlab很新,但我希望有人能夠幫助解決這個問題。所以我有一個彩色圖像,我想要轉換爲灰度,然後減少灰度級數。所以我在圖像中閱讀,並使用rgb2gray()將圖像轉換爲灰度。但是,我不確定如何將圖像轉換爲僅使用32灰度級而不是255灰度級。更改matlab中灰度圖像中灰度級的數量
我試圖使用colormap(灰色(32)),但這似乎對繪圖圖像本身或圖像下的顏色條沒有影響。所以我不知道還有什麼可以看的。有任何提示嗎?謝謝。
我對matlab很新,但我希望有人能夠幫助解決這個問題。所以我有一個彩色圖像,我想要轉換爲灰度,然後減少灰度級數。所以我在圖像中閱讀,並使用rgb2gray()將圖像轉換爲灰度。但是,我不確定如何將圖像轉換爲僅使用32灰度級而不是255灰度級。更改matlab中灰度圖像中灰度級的數量
我試圖使用colormap(灰色(32)),但這似乎對繪圖圖像本身或圖像下的顏色條沒有影響。所以我不知道還有什麼可以看的。有任何提示嗎?謝謝。
檢查您的圖像數據的類型是否是我懷疑的uint8
。如果是這種情況,將圖像分成8份以濫用整數除法的地板效果,再乘以8,然後設置爲:I2=(I/8)*8
。 I2
將只有32個灰度級。
可以通過簡單的舍入減少不同值的數量的圖像中:
I = rgb2gray(imread('image.gif'));
J = 8*round(I/8)
的效果見imhist(I)
和imhist(J)
。
但是,如果您想縮小圖像大小,最好使用Photoshop,Gimp或IrfanView等圖像處理程序,並保存爲32色gif。通過這種方式,你實際上會減少文件的調色板,我認爲這是Matlab無法做到的。
雖然result = (img/8)*8
會將[0,255]範圍內的灰度圖像轉換爲該範圍的子集,但現在只使用32個值,但可能會產生不希望的人爲現象。一種可能產生視覺上更好的圖像的方法稱爲改進的灰度量化(縮寫爲IGS)。用於執行它的僞代碼可被給定爲:
mult = 256/(2^bits)
mask = 2^(8 - bits) - 1
prev_sum = 0
for x = 1 to width
for y = 1 to height
value = img[x, y]
if value >> bits != mask:
prev_sum = value + (prev_sum & mask)
else:
prev_sum = value
res[x, y] = (prev_sum >> (8 - bits)) * mult
作爲一個例子,考慮下面的圖中,並與bits = 5
相應quantizations,bits = 4
,和bits = 3
使用上述方法:
現在同樣的圖像,但量化做(img/(256/(2^bits)))*(256/(2^bits))
:
這不是一個病理例子。
你真的不想通過簡單地選擇8種顏色的間隔進行量化。考慮使用改進的灰度量化方法。 – mmgp