2014-06-20 32 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的标准文件格式?如果是的话,我会仔细看看这种格式。