关于matlab中hsv2rgb的用法,给详细解释下,下面用hsv2rgb之前那些数据处理有什么用啊?

V=V-min(V(:));
V=V/max(V(:));
V=.25+0.75*V;

M=M-min(M(:));
M=M/max(M(:));

H=0.0+zeros(size(V));
S=M;
RGB=hsv2rgb(H,S,V);
其中H为什么是个零矩阵呢?

首先说明下,hsv2rgb(H,S,V)的调用有误,正确的调用方法为hsv2rgb(h)
(不知道是你抄写错误还是原程序的错误?)
当h为m*3的矩阵时,hsv2rgb是把hsv调色板转换成rgb调色板。
当h为m*n*3的矩阵时,hsv2rgb是把hsv图像转换成rgb图像。

什么是调色板呢?调色板是一个存贮各种颜色值的列表。
这样索引图像只需存贮列表中的索引就可以了,具体的颜色值只需要到颜色列表中去查找。

但是表示颜色的方法有很多种。
最常见的RGB,第一个分量表示红色,第二个绿色,第三个蓝色。
RGB虽然方便计算机处理,但对人并不直观
HSV则对人很直观,H表示颜色,S表示饱和度(可以理解为纯度),V为亮度。例如“有点浓的暗红色”对应成HSV即“H为红色,S比较高(纯),V比较低(暗)”。
H,S,V三个变量的取值均在0和1之间。

程序解释如下:

V=V-min(V(:));
V=V/max(V(:));
V=.25+0.75*V;
是将V的值映射到[0.25,1]之间

M=M-min(M(:));
M=M/max(M(:));
是将M映射到[0,1]之间

H为0表示底色为红色。

开始提到函数的调用是错误的,那么正确的调用是什么呢?我的理解应该如下:
h(:,:,1)=H(:,:);
h(:,:,2)=S(:,:);
h(:,:,3)=V(:,:);
RGB=hsv2rgb(h);
figure,imshow(RGB,[]);
特别地,如果令h(:,:,2)=1,h(:,:,3)=1则图像是纯深红色。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-08
hsv2rgb是一个把hsv图像转化为rgb图像的函数,这两种图像都是索引图像。
hsv图像是由H、S、V三个分量构成的图像,你给出的程序前面部分就是计算了这三个分量;
rgb图像由r(红)、g(绿)、b(蓝)三个分量构成。
第2个回答  2010-11-09
这个函数的功能是把HSV色图转换为RGB色图。
H是一个m×3矩阵,其中m是色图中的颜色数目。H的列分别代表色调、饱和度和相应的值。
H为零矩阵,也许是你的初始图像(待转图像)的特性决定的,只要大小合适就行。
相似回答