matlab rgb2hsi中rgb2hsi函数怎么用

查看: 7333|回复: 6|关注: 0
[求助]Matlab如何将RGB空间转换成HSL空间
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
希望能有原理或公式,和程序。谢谢!
[ 本帖最后由 mooni 于
16:17 编辑 ]
<h1 style="color:# 麦片财富积分
关注者: 31
MATLAB里面自带的函数是rgb2hsv,其意义就是把rgb图像转换成色调,饱和度,亮度的算法。你也可以自己找公式自己编写程序。冈萨雷斯 数字图像处理(第二版)P236页。里面就有这些公式。我也在关注这个转换问题。转换之后的结果是0--1,不懂如何跟windows里面画图工具的色度,饱和度,亮度进行对应。。。
<h1 style="color:# 麦片财富积分
关注者: 31
刚刚被管理员表扬了一下。一高兴。想到又这个程序。。哈哈发给你看看。中间一部分注释掉的是我写的一小段。
function hsi=rgb2hsi(rgb)
%RGB2HSI Converts an RGB image to HSI
%& &HSI=RGB2HSI(rgb) converts an RGB image to HSI. The input image is
%& &assumed to be of size M-by-N-by-3, where the third dimension accounts
%& &for three image planes:red, green, and blue, in that order. If all RGB
%& &component images are equal, the HSI conversion is undefined. Ths input
%& &image can be of class double (with values in the rang[0,1]), uint8, or
%& &uint16.
%& &The output image, HSI, is of class double, where:
%& && & hsi(:,:,1)= hue image normalized values to the range [0,1] by
%& && && && && && & dividing all angle values by 2*pi.
%& && & hsi(:,:,2)=saturation image, in the range [0,1].
%& && & hsi(:,:,3)=intensity image, in the range [0,1].
%Extract the individual component images.
rgb=im2double(rgb);
r=rgb(:,:,1);
g=rgb(:,:,2);
b=rgb(:,:,3);
%Implement the conversion equations.
num=0.5*((r-g)+(r-b));
den=sqrt((r-g).^2+(r-g).*(g-b));%den=sqrt((r-g).^2+(r-b).*(g-b));
theta=acos(num./(den+eps));
H(b&g)=2*pi-H(b&g);
H=H/(2*pi);
%& & H=theta/(2*pi)*360;
%& & H=(2*pi-theta)/(2*pi)*360;
num=min(min(r,g),b);
den=r+g+b;
den(den==0)=
S=(1-3.*num./den);
H(S==0)=0;
I=(r+g+b)/3;
%Combine all three results into an hsi image.
hsi=cat(3,H,S,I);
<h1 style="color:# 麦片财富积分
shagua668 发表于
刚刚被管理员表扬了一下。一高兴。想到又这个程序。。哈哈发给你看看。中间一部分注释掉的是我写的一小段。 ...
受教了,但是算出来的I值都是小数,怎么让他成为整数?
还有就是转化成为整数后,丢失的小数部分会不会对图像造成很大的影响?
<h1 style="color:# 麦片财富积分
我怎么无法运行?要加什么,在哪加?
<h1 style="color:# 麦片财富积分
受教了,但是算出来的I值都是小数,怎么让他成为整数?
还有就是转化成为整数后,丢失的小数部分会不会对 ...
可以用uint5转换
<h1 style="color:# 麦片财富积分
matlab有自带的rgb2hsv,改下里面的V就行了
站长推荐 /3
使用MATLAB和Simulink进行软件无线电设计
Powered byHSI彩色空间
本文所属图书&>&
《数字图像处理的MATLAB实现(第2版)》是第一本介绍图像处理的基础理论以及图像处理实现中所使用软件原理的书籍,汇集了Digital Image Processing 一书的基本概念和MathWorks公司的图像处理工具箱(MathWorks公...&&
除了HSV之外,至今为止,我们讨论过的彩色空间还没有根据人的解释适合以术语描述彩色的方式。例如,没有人会用给出构成颜色的每一种颜料原色的百分比这种方法来提供汽车的颜色。
当人们观察彩色物体时,往往倾向于使用色调、饱和度和亮度来描述。色调是描述纯色的颜色属性,而饱和度给出了纯色被白光冲淡程度的度量。亮度是主观描述符,事实上几乎无法度量。这使得无色的亮度概念得以具体化,并且是描述颜色感觉的关键因素之一。我们已经知道,亮度(灰度)是描述单色图像的最有用描述子。这个明确的分量可以被度量,也可以被容易地描述出来。
我们将要讨论的彩色空间叫做HSI(色彩、饱和度、强度),该模型将强度分量与从一幅彩色图像中承载的彩色信息分开。正如结果那样,HSI模型是开发基于彩色描述的图像处理算法的理想工具。对于人来说,这种描述自然而直观,毕竟人是这些算法的开发者和使用者。HSV彩色空间有些类似,当按照画家的调色板来解释时,HSV关注的是所能呈现的有意义的色彩。
正如在6.1.1节中讨论过的那样,RGB彩色图像是由三个单色的亮度图像构成的,所以,我们可以从一幅RGB图像中提取出亮度并不奇怪。如果采用图6-2中的彩色立方体,假设我们站在黑色顶点(0,0,0)处,那么正上方正对是白色顶点(1,1,1),如图6-6(a)所示。再同图6-2联系起来看,亮度是沿着连接两个顶点的连线分布的。在图6-6中,这条连接黑色和白色顶点的线(亮度轴)是垂直的。因此,如果想确定图6-6中任意彩色点的亮度分量,就需要经过包含彩色点且垂直于亮度轴的平面。这个平面和亮度轴的交点将给出范围在[0,1]之间的亮度值。我们还注意到,饱和度随着与亮度轴之间的距离函数而增加。事实上,在亮度轴上的点的饱和度为0,事实很明显,沿这个轴上的所有点都是灰度色调。
为了弄清从已经给出的RGB点怎样决定色调,考虑图6-6(b),其中显示了由三个点(分别为黑色、白色和青色)定义的平面。在这个平面上,含有黑色和白色顶点的这个事实告诉我们:亮度轴同样在这个平面上。此外我们看到,由亮度轴和立方体边界共同定义的、这个平面上包含的所有点都有相同的色调(在此例中为青色)。这是因为在彩色三角形内,颜色是这三个顶点颜色的各种组合或者是由它们混合而成的。如果这些顶点中的两个是黑色和白色,第三个顶点是彩色的点,那么这个三角形中所有点的色调都是相同的,因为白色和黑色分量对于色彩的变化没有影响(当然在这个三角形中,点的亮度和饱和度会有变化)。以垂直的亮度轴旋转这个深浅平面,我们可以获得不同的色调。从这些概念中,我们得到下面的结论:形成HSI空间所需的色调、饱和度和亮度值,可以通过RGB彩色立方体得到。也就是说,通过算出刚刚在前边推出的几何推理公式,就可以将任意的RGB点转换成HSI模型中对应的点。
基于前面的讨论,我们认识到,HSI空间由垂直的亮度轴以及垂直于此轴的某个平面上彩色点的轨迹组成。当平面沿着垂直轴上下移动时,由平面和立方体表面相交定义的边界为三角形或六边形。如果从立方体的灰度轴向下看去,如图6-7(a)所示,这可能变得更加直观。在这个平面上,我们看到各原色之间都相隔了120&,各二次色和各原色之间相隔了60&,这意味着各二次色之间也相隔了120&。
图6-7(b)显示了六边形和某个任意的彩色点(用点的形式显示)。这个点的色调由某个参考点的夹角决定。通常(但也并不总是),距红轴0&的角,表示色调为0,并且色调从此点逆时针增长。饱和度(到垂直轴的距离)就是从原点到此点的矢量的长度。注意,这个原点由色彩平面和垂直亮度轴的交点决定。HSI色彩空间的重要组成部分是:垂直亮度轴到彩色点的矢量长度,以及该矢量与红轴的夹角。因此,当用刚才讨论过的六边形,甚至如图6-7(c)和图6-7(d)所示的三角形或圆形定义HSI平面是不足为奇的。选择哪个形状并不重要,因为任意形状都可以通过几何变换变换成另外两个。
图6-8显示了基于彩色三角形和圆形的HSI模型。
1. 将颜色从RGB转换为HSI
在下面的讨论中,我们给出从RGB到HSI必要的转换公式,这里不予推导。对公式的详细推导可参考本书网站(1.5节列出了地址)。给出一幅RGB彩色格式的图像,那么每个RGB像素的H分量可用下面的公式得到:
饱和度由下面的式子给出:
最后,亮度由下面的式子给出:
假定RGB值已经归一化在[0,1]之间,角度&使用关于HSI空间的红轴来度量,正如图6-7中指出的那样。将从H的公式中得出的所有结果除以360&,即可将色调归一化在[0,1]之间。如果给出的RGB值在[0,1]之间,那么其他的两个HSI分量就已经在[0,1]之间了。
2. 将颜色从HSI转换为RGB
给定在[0,1]之间的HSI值,我们现在希望找出同一范围内相应的RGB值。可用的公式依赖于H的值。有三个感兴趣的部分,正如早些时候提到的那样,分别对应原色之间相隔120&的范围。我们用360&乘以H,这样就将色调的值还原成了原来的范围&& [0&, 360&]。
RG区域&& 如果H在这个区域内,那么RGB分量由下式给出:
GB区域&& 如果给出的H值在这个区域内,我们就先从中减去120&:
那么,这时RGB分量是:
BR区域(240&&H&360&)& 最后,如果H在这个区域内,我们就从中减去240&:
RGB分量分别是:
我们将在6.5.1节说明这些公式在图像处理中的应用。
3. 用于从RGB到HIS进行转换的M-函数
下面是惯用的函数:
hsi = rgb2hsi(rgb)
该函数执行刚刚讨论过的把RGB转换成HSI格式的公式。其中,rgb和hsi分别表示RGB和HSI图像。下面的代码演示了这个函数的使用:
function hsi = rgb2hsi(rgb)
%RGB2HSI Converts an RGB image to HSI.
%&&& HSI = RGB2HSI(RGB) converts an RGB image to HSI. The input image
%&&& is assumed to be of size M-by-N-by-3, where the third dimension
%&&& accounts for three image planes: red, green, and blue, in that
%&&& order. If all RGB component images are equal, the HSI conversion
%&&& is undefined. The input image can be of class double (with
%&&& values in the range [0, 1]), uint8, or uint16.
%&&& The output image, HSI, is of class double, where:
%&&&&&&& HSI(:, :, 1) = hue image normalized to the range [0,1] by
%&&&&&&&&&&&&&&&&&&&&&&&&& dividing all angle values by 2*pi.
%&&&&&&& HSI(:, :, 2) = saturation image, in the range [0, 1].
%&&&&&&& HSI(:, :, 3) = intensity image, in the range [0, 1].
%&&&&&&& Extract the individual component images.
rgb = im2double(rgb);
r = rgb(:, :, 1);
g = rgb(:, :, 2);
b = rgb(:, :, 3);
% Implement the conversion equations.
num = 0.5*((r & g) + (r & b));
den = sqrt((r & g).^2 + (r & b).*(g & b));
theta = acos(num./(den + eps));
H(b & g) = 2*pi & H(b & g);
H = H/(2*pi);
num = min(min(r, g), b);
den = r + g +
den(den == 0) =
S = 1 & 3.* num./
H(S == 0) = 0;
I = (r + g + b)/3;
% Combine all three results into an hsi image.
hsi = cat(3, H, S, I);
4. 用于从HSI到RGB进行转换的M-函数
下边的函数:
rgb = hsi2rgb(hsi)
执行把HSI 转换成RGB格式的公式。下面的代码演示了这个函数的使用:
function rgb = hsi2rgb(hsi)
%HSI2RGB Converts an HSI image to RGB.
%&&& RGB = HSI2RGB(HSI) converts an HSI image RGB, where HSI is
%&&& assumed to be of class double with:
%&&&&&&& HSI(:, :, 1) = hue image, assumed to be in the range
%&&&&&&&&&&&&&&&&&&&&&&&&& [0, 1] by having been divided by 2*pi.
%&&&&&&& HSI(:, :, 2) = saturation image, in the range [0, 1];
%&&&&&&& HSI(:, :, 3) = intensity image, in the range [0, 1].
%&&& The components of the output image are:
%&&&&&&& RGB(:, :, 1) = red.
%&&&&&&& RGB(:, :, 2) = green.
%&&&&&&& RGB(:, :, 3) = blue.
% Extract the individual HSI component images.
H = hsi(:, :, 1) * 2 *
S = hsi(:, :, 2);
I = hsi(:, :, 3);
% Implement the conversion equations.
R = zeros(size(hsi, 1), size(hsi, 2));
G = zeros(size(hsi, 1), size(hsi, 2));
B = zeros(size(hsi, 1), size(hsi, 2));
% RG sector (0 &= H & 2*pi/3).
idx = find( (0 &= H) & (H & 2*pi/3));
B(idx) = I(idx) .* (1 & S(idx));
R(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx))./ ...
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& cos(pi/3 & H(idx)));
G(idx) = 3*I(idx) & (R(idx) + B(idx));
% BG sector (2*pi/3 &= H & 4*pi/3).
idx = find( (2*pi/3 &= H) & (H & 4*pi/3) );
R(idx) = I(idx) .* (1 & S(idx));
G(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx) & 2*pi/3) ./ ...
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& cos (pi & H(idx)));
B(idx) = 3*I(idx) & (R(idx) + G(idx));
% BR sector.
idx = find( (4*pi/3 &= H) & (H &= 2*pi));
G(idx) = I(idx).* (1 & S(idx));
B(idx) = I(idx).* (1 + S(idx).* cos(H(idx) & 4*pi/3)./ ...
&&&&&&&&&&&&&&&&&&&&&&& cos(5*pi/3 & H(idx)));
R(idx) = 3*I(idx) & (G(idx) + B(idx));
% Combine all three results into an RGB image. Clip to [0, 1] to
% compensate for floating-point arithmetic rounding effects.
rgb = cat(3, R, G, B);
rgb = max(min(rgb, 1), 0);
例6.2& 从RGB转换为HSI
图6-9显示了在白色背景下一幅RGB立方体图像的色调、饱和度和亮度分量,这类似于图6-2(b)中的图像。图6-9(a)是色调图像,它的最大特征是:在立方体的前(红)平面中沿45&线是不连续的。为理解不连续的原因,可参考图6-2(b),从立方体的红顶点到白顶点画一条线,并在这条线的中间选择一个点。从这个点开始向右画一条路径,沿着立方体周围直到返回起始点。在这一路径上遇到的彩色是黄、绿、青、蓝、深红、红。根据图6-7,沿着这条路径的色调的值应该从0&到360&(也就是说,从色调可能的最低值到最高值)增加。这正好是图6-9中显示的,因为在图中,最低值表示黑,最高值表示白。
图6-9(b)中的饱和度图像显示了较暗的值逐渐逼近RGB立方体的白色顶点,指示彩色饱和度越来越弱,直至白色。最后,在图6-9(c)中显示了图像中的每个像素都是相应于图6-2(b)中RGB像素值的平均值。注意,这幅图像的背景是白色,因为在彩色图像中,背景的亮度是白色。其他两幅图的背景是黑色的,因为白色的色调和饱和度是0。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。【图文】彩色图像处理MATLAB函数简介_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
彩色图像处理MATLAB函数简介
上传于|0|0|文档简介
&&计算机图像处理
大小:144.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢hsi2rgb 利用matlab来实现颜色分量的RGB到HSI的转换。
238万源代码下载-
&文件名称: hsi2rgb
& & & & &&]
&&所属分类:
&&开发工具: matlab
&&文件大小: 1 KB
&&上传时间:
&&下载次数: 1
&&提 供 者:
&详细说明:利用matlab来实现颜色分量的RGB到HSI的转换。-Transformation to achieve the color components of the RGB to HSI using MATLAB
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&hsi2rgb.m
&近期下载过的用户:
&输入关键字,在本站238万海量源码库中尽情搜索:扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
求解一段简单的MATLAB程序%将RGB图像转换为HSI图像% 显示HSI图像%直方图均衡化HSI图像%将HSI图像转换回RGB图像function rgbtohsi(x)F=imread(x);F=im2double(F);r=F(:,:,1);g=F(:,:,2);b=F(:,:,3);th=acos((0.5*((r-g)+(r-b)))./((sqrt((r-g).^2+(r-b).*(g-b)))+eps));H=H(b>g)=2*pi-H(b>g);H=H/(2*pi);S=1-3.*(min(min(r,g),b))./(r+g+b+eps);I=(r+g+b)/3;hsi=cat(3,H,S,I);HE=H*2*HE=histeq(HE);HE=HE/(2*pi);SE=histeq(S);IE=histeq(I);choice=input('1:RGB 转换为 HSI\n2:显示HSI图像\n3:HSI转换为RGB图像\n4:色调均衡\n5:饱和度均衡\n6:亮度均衡 \n7:HSI均衡\n 输入您的选择 :');switch choicecase 1figure,imshow(F),title('RGB 图像');figure, imshow(hsi),title('HSI 图像');case 2figure,imshow(F),title('RGB 图像');figure, imshow(H),title('Hue 图像');figure, imshow(S),title('饱和度图像');figure, imshow(I),title('亮度图像');
case 3C=hsitorgb(hsi);figure,imshow(hsi),title('HSI 图像');figure, imshow(C),title('RGB 图像');case 4RV=cat(3,HE,S,I);C=hsitorgb(RV);figure,imshow(hsi),title('HSI 图像');figure,imshow(F),title('RGB 图像');figure, imshow(C),title('RGB Image-Hue Equalized');case 5RV=cat(3,H,SE,I);C=hsitorgb(RV);figure,imshow(hsi),title('HSI 图像');figure,imshow(F),title('RGB 图像');figure, imshow(C),title('RGB 饱和度均衡');case 6RV=cat(3,H,S,IE);C=hsitorgb(RV);figure,imshow(hsi),title('HSI 图像');figure,imshow(F),title('RGB 图像');figure, imshow(C),title('RGB 亮度均衡');case 7RV=cat(3,HE,SE,IE);C=hsitorgb(RV);figure,imshow(hsi),title('HSI 图像');figure,imshow(F),title('RGB 图像');figure, imshow(C),title('RGB HSI 均衡');otherwisedisplay('选择错误');endend%函数,将HSI图像转换为RGB图像function C=hsitorgb(hsi)HV=hsi(:,:,1)*2*SV=hsi(:,:,2);IV=hsi(:,:,3);R=zeros(size(HV));G=zeros(size(HV));B=zeros(size(HV));%RG Sectorid=find((0
滴哒ccSC58t
扫二维码下载作业帮
1.75亿学生的选择
程序没有错误啊,估计是你使用上的问题.把上面代码保存为名字 rpgtohsi.m 的文件,放到我的文档--Matlab文件夹里(win7是库--文档--Matlab文件夹).假设你要处理的图片为E盘根目录下的001.jpg,就只要把语句F=imread(x)中的x换成 'e:\001.jpg’ 即可(注意有引号).启动Matlab在命令窗口输入rpgtohsi就可以运行了,输入1~7选择你想要的处理方式.
为您推荐:
其他类似问题
扫描下载二维码}

我要回帖

更多关于 matlab rgb2hsi函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信