rgbImage = grayImage/max(max(grayImage));
rgbImage = grayImage/255;
這上面是正確的,原因是什麼?
rgbImage = grayImage/max(max(grayImage));
rgbImage = grayImage/255;
這上面是正確的,原因是什麼?
要轉換grayscale image到RGB image,有兩個問題必須解決:
double
數據類型存儲時,圖像像素值應該是0到1範圍內的浮點數。存儲爲uint8
數據類型時,圖像像素值應該是0到255範圍內的整數。您可以使用功能class
檢查圖像矩陣的數據類型。這裏有3個典型的狀況下,你可能會遇到:
要將uint8
或double
灰度圖像轉換成的RGB圖像相同的數據類型,您可以使用的功能repmat
或cat
:
rgbImage = repmat(grayImage,[1 1 3]);
rgbImage = cat(3,grayImage,grayImage,grayImage);
要轉換uint8
gra到double
RGB圖像yscale圖像,你應該轉換爲double
第一,然後規模由255:
rgbImage = repmat(double(grayImage)./255,[1 1 3]);
要在double
灰度圖像轉換爲uint8
RGB圖像,你應該通過255第一標尺,然後轉換成uint8
:
rgbImage = repmat(uint8(255.*grayImage),[1 1 3]);
根據定義,RGB圖像有3個通道,這意味着您需要一個三維矩陣來表示圖像。所以,正確的答案是:
rgbImage = repmat(255*grayImage/max(grayImage(:)),[1 1 3]);
正常化時要小心grayImage
。如果grayImage
是uint8
那麼您將在255*grayImage/max(grayImage(:))
操作中失去一些精度。
此外,標準化grayImage
取決於數據。在你的問題,你用兩種方法:
rgbImage = grayImage/max(max(grayImage));
其標準化的灰度圖像,使得圖像中的最大值爲1
和
rgbImage = grayImage/255;
它纔有意義,如果在grayImage
謊言中的值0-255
系列。
所以它真的取決於你想要做什麼。但是,如果您需要RGB圖像,則需要將單通道矩陣轉換爲3通道矩陣。
我認爲,通過定義'rgbImage'的最大值爲'1',表示'white',但這似乎不是如此呢? – user198729 2010-04-12 08:42:31
不是,它取決於您對圖像的使用情況。 – Jacob 2010-04-12 14:10:46
我剛做了一個測試,看起來'double(grayImage)'和'grayImage'是一樣的嗎?在MATLAB中用'./'和'。*'來劃分和乘積運算符?似乎'。/'和'/'是一樣的嗎? – user198729 2010-04-12 13:11:02
@ user198729:運算符'./'和'。*'表示*元素*分割和乘法,以便圖像矩陣的每個元素除以或乘以255.您可以檢查類(即數據類型)通過輸入'class(grayImage)'來輸入矩陣。雖然'double(grayImage)'和'grayImage'可能會出現*相同,它們可能每個都是不同的類(使得它們以不同的方式存儲它們的值)。 – gnovice 2010-04-12 13:17:28
我嘗試了各種操作,但是'/'和'。/'從不給出不同的結果...並且因爲double(grayImage)與'grayImage'相同,所以double(grayImage)./ 255'也是和'grayImage./255'一樣。所以,你可以舉兩個例子來說明爲什麼'./'和'double'是必須的? – user198729 2010-04-12 13:25:13