# MATLABͼ����_HSV��RGB��ɫ�ռ以ת

���ߣ�  �������ڣ�2015-01-10 22:51:19
Tag��ǩ��ͼ����  ��ɫ  �ռ�
• �ϻ�����˵��ûʲô������������Ϊ����Ĵ�����matlab���Դ���ת��������������������ֻ��Ϊ�˷����Ժ�ϰ���о���ת�����㷨��

HSV�ռ䣺�ֱ���H(ɫ��)����S(���Ͷ�)����V(����)

��HSI��ɫ�ռ���似���ֱ���H(ɫ��)����S(���Ͷ�)����I(ǿ��)

ע�⣺

ǿ�Ⱥ�������ʵ��һ�����

���Ͷȴ�����������׹�����������׹�Խ�࣬���Ͷ�ԽС���׹�Խ�٣����Ͷ�Խ�󣬱�ʾ��ɫ�Ĵ��ȸ���

�����Ǵ��룺

rgb2hsv.m

```function [h,s,v] = rgb2hsv(r,g,b)
%RGB2HSV Convert red-green-blue colors to hue-saturation-value.
%   H = RGB2HSV(M) converts an RGB color map to an HSV color map.
%   Each map is a matrix with any number of rows, exactly three columns,
%   and elements in the interval 0 to 1.  The columns of the input matrix,
%   M, represent intensity of red, blue and green, respectively.  The
%   columns of the resulting output matrix, H, represent hue, saturation
%   and color value, respectively.
%
%   HSV = RGB2HSV(RGB) converts the RGB image RGB (3-D array) to the
%   equivalent HSV image HSV (3-D array).
%
%   CLASS SUPPORT
%   -------------
%   If the input is an RGB image, it can be of class uint8, uint16, or
%   double; the output image is of class double.  If the input is a
%   colormap, the input and output colormaps are both of class double.
%

%   Undocumented syntaxes:
%   [H,S,V] = RGB2HSV(R,G,B) converts the RGB image R,G,B to the
%   equivalent HSV image H,S,V.
%
%   HSV = RGB2HSV(R,G,B) converts the RGB image R,G,B to the
%   equivalent HSV image stored in the 3-D array (HSV).
%
%   [H,S,V] = RGB2HSV(RGB) converts the RGB image RGB (3-D array) to
%   the equivalent HSV image H,S,V.
%
%   See Alvy Ray Smith, Color Gamut Transform Pairs, SIGGRAPH '78.

%   Copyright 1984-2006 The MathWorks, Inc.
%   \$Revision: 5.15.4.3 \$  \$Date: 2010/08/23 23:13:14 \$

switch nargin
case 1,
if isa(r, 'uint8'),
r = double(r) / 255;
elseif isa(r, 'uint16')
r = double(r) / 65535;
end
case 3,
if isa(r, 'uint8'),
r = double(r) / 255;
elseif isa(r, 'uint16')
r = double(r) / 65535;
end

if isa(g, 'uint8'),
g = double(g) / 255;
elseif isa(g, 'uint16')
g = double(g) / 65535;
end

if isa(b, 'uint8'),
b = double(b) / 255;
elseif isa(b, 'uint16')
b = double(b) / 65535;
end

otherwise,
error(message('MATLAB:rgb2hsv:WrongInputNum'));
end

threeD = (ndims(r)==3); % Determine if input includes a 3-D array

if threeD,
g = r(:,:,2); b = r(:,:,3); r = r(:,:,1);
siz = size(r);
r = r(:); g = g(:); b = b(:);
elseif nargin==1,
g = r(:,2); b = r(:,3); r = r(:,1);
siz = size(r);
else
if ~isequal(size(r),size(g),size(b)),
error(message('MATLAB:rgb2hsv:InputSizeMismatch'));
end
siz = size(r);
r = r(:); g = g(:); b = b(:);
end

v = max(max(r,g),b);
h = zeros(size(v));
s = (v - min(min(r,g),b));

z = ~s;
s = s + z;
k = find(r == v);
h(k) = (g(k) - b(k))./s(k);
k = find(g == v);
h(k) = 2 + (b(k) - r(k))./s(k);
k = find(b == v);
h(k) = 4 + (r(k) - g(k))./s(k);
h = h/6;
k = find(h < 0);
h(k) = h(k) + 1;
h=(~z).*h;

k = find(v);
s(k) = (~z(k)).*s(k)./v(k);
s(~v) = 0;

if nargout<=1,
if (threeD || nargin==3),
h = reshape(h,siz);
s = reshape(s,siz);
v = reshape(v,siz);
h=cat(3,h,s,v);
else
h=[h s v];
end
else
h = reshape(h,siz);
s = reshape(s,siz);
v = reshape(v,siz);
end
```

hsv2rgb.m

```function [rout,g,b] = hsv2rgb(hin,s,v)
%HSV2RGB Convert hue-saturation-value colors to red-green-blue.
%   M = HSV2RGB(H) converts an HSV color map to an RGB color map.
%   Each map is a matrix with any number of rows, exactly three columns,
%   and elements in the interval 0 to 1.  The columns of the input matrix,
%   H, represent hue, saturation and value, respectively.  The columns of
%   the resulting output matrix, M, represent intensity of red, blue and
%   green, respectively.
%
%   RGB = HSV2RGB(HSV) converts the HSV image HSV (3-D array) to the
%   equivalent RGB image RGB (3-D array).
%
%   As the hue varies from 0 to 1, the resulting color varies from
%   red, through yellow, green, cyan, blue and magenta, back to red.
%   When the saturation is 0, the colors are unsaturated; they are
%   simply shades of gray.  When the saturation is 1, the colors are
%   fully saturated; they contain no white component.  As the value
%   varies from 0 to 1, the brightness increases.
%
%   The colormap HSV is hsv2rgb([h s v]) where h is a linear ramp
%   from 0 to 1 and both s and v are all 1's.
%

%   Undocumented syntaxes:
%   [R,G,B] = HSV2RGB(H,S,V) converts the HSV image H,S,V to the
%   equivalent RGB image R,G,B.
%
%   RGB = HSV2RGB(H,S,V) converts the HSV image H,S,V to the
%   equivalent RGB image stored in the 3-D array (RGB).
%
%   [R,G,B] = HSV2RGB(HSV) converts the HSV image HSV (3-D array) to
%   the equivalent RGB image R,G,B.

%   See Alvy Ray Smith, Color Gamut Transform Pairs, SIGGRAPH '78.
%   Copyright 1984-2011 The MathWorks, Inc.

if nargin == 1 % HSV colormap
threeD = ndims(hin)==3; % Determine if input includes a 3-D array
if threeD,
h = hin(:,:,1); s = hin(:,:,2); v = hin(:,:,3);
else
h = hin(:,1); s = hin(:,2); v = hin(:,3);
end
elseif nargin == 3
if ~isequal(size(hin),size(s),size(v)),
error(message('MATLAB:hsv2rgb:InputSizeMismatch'));
end
h = hin;
else
error(message('MATLAB:hsv2rgb:WrongInputNum'));
end

h = 6.*h;
k = floor(h);
p = h-k;
t = 1-s;
n = 1-s.*p;
p = 1-(s.*(1-p));

% Processing each value of k separately to avoid simultaneously storing
% many temporary matrices the same size as k in memory
kc = (k==0 | k==6);
r = kc;
g = kc.*p;
b = kc.*t;

kc = (k==1);
r = r + kc.*n;
g = g + kc;
b = b + kc.*t;

kc = (k==2);
r = r + kc.*t;
g = g + kc;
b = b + kc.*p;

kc = (k==3);
r = r + kc.*t;
g = g + kc.*n;
b = b + kc;

kc = (k==4);
r = r + kc.*p;
g = g + kc.*t;
b = b + kc;

kc = (k==5);
r = r + kc;
g = g + kc.*t;
b = b + kc.*n;

if nargout <= 1
if nargin == 3 || threeD
rout = cat(3,r,g,b);
else
rout = [r g b];
end
rout = bsxfun(@times, v./max(rout(:)), rout);
else
f = v./max([max(r(:)); max(g(:)); max(b(:))]);
rout = f.*r;
g = f.*g;
b = f.*b;
end
```

### ���ص���̴��

About IT165 - ������ - ��˽���� - ��Ȩ���� - �������� - ��վ��ͼ - ����Ͷ�� - ��ϵ��ʽ
��վ���������ڻ�����,�����������缼��ѧϰ,ѧϰ������ѭ��ط��ɷ���