2014-06-20 33 views
2

我想在Matlab中將RGB值的數組轉換爲HSV值的數組。我正在運行以下代碼:Matlab rgb2hsv改變圖像

pic = imread('ColoradoMountains.jpg'); 

pic = rgb2hsv(pic); 

imwrite(pic,'pic.jpg') 

但是寫入的圖像具有完全不同的顏色。我一直在試圖設置色彩映射到hsv,但我不確定這是否合理。互聯網上沒有關於我的關鍵詞的信息,請問有人能指出我的正確方向嗎?

+0

jpeg不支持hsv或rgb,jpeg永遠是YCbCr – Daniel

回答

2

您可以指定imwrite應該使用的顏色映射表。試試這個:

imwrite(pic,colormap('HSV'),'pic.png'); 

下面是imwrite的文檔:http://www.mathworks.com/help/matlab/ref/imwrite.html

+0

這是行不通的嗎?根據文檔,我希望'pic'是一個HSV-Indexed n * m * 1圖像,而不是本地n * m * 3 hsv圖像。我沒有設法正確地寫。 – Daniel

+0

這使我得到「錯誤:feval:功能'HSV'未找到」。也許只是寫回rgb會更容易些? – user3761002

+0

@丹尼爾,對,我本能地把它寫成png文件。我會研究如何做到這一點jpg很快。 – svastiKaThluhu

0

在Matlab中你有一個索引圖像和3通道圖像之間進行區分。索引圖像是一個n * m * 1圖像,其中[0,1]範圍的每個值都與一種顏色相關聯。這種關聯稱爲彩色圖,例如可以是HSV或RGB中的單位圓。這可以使用地圖參數imwrite來編寫,但這不是你想要的。

你明顯想要的是一個HSV編碼圖像,這意味着三個rgb通道被轉換爲三個hsv通道。這是(據我所知)不可能。如果您查看imwrite的文檔,您可以看到如何編寫CMYK編碼的圖像,這是通過一個n * m * 4圖像隱式完成的。有沒有支持HSV的標準文件格式?如果是的話,我會仔細看看這種格式。