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.
%
% See also HSV2RGB, COLORMAP, RGBPLOT. % 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

  

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.
%
% See also RGB2HSV, COLORMAP, RGBPLOT. % 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

  

paper 74:MATLAB图像处理_HSV与RGB颜色空间互转的更多相关文章

  1. RGB 颜色空间转 HSI 颜色空间的matlab程序实现

    RGB 颜色空间转 HSI 颜色空间的matlab程序实现 2014.10.20之前的内容有误,这里依据wikipedia更新了算法内容. 算法以wiki为准 https://en.wikipedia ...

  2. MATLAB图像处理函数汇总(二)

    60.imnoise 功能:增加图像的渲染效果. 语法: J = imnoise(I,type) J = imnoise(I,type,parameters) 举例 I = imread('eight ...

  3. MATLAB图像处理函数汇总(一)

    1.applylut功能: 在二进制图像中利用lookup表进行边沿操作.语法:A = applylut(BW,lut)举例lut = makelut('sum(x(:)) == 4',2);BW1 ...

  4. matlab图像处理

    matlab图像处理 转自:http://www.cnblogs.com/lovebay/p/5094146.html 1. 图像和图像数据 缺省情况下,MATLAB将图像中的数据存储为双精度类型(d ...

  5. 学习笔记(2)---Matlab 图像处理相关函数命令大全

    Matlab 图像处理相关函数命令大全 一.通用函数: colorbar  显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ col ...

  6. MATLAB图像处理工具箱

    下列表格中除了个别函数外,其余函数都是图像处理工具箱提供的关于图像处理的函数,现摘录到此以备查找. 表1 图像显示 函数名 功能说明 函数名 功能说明 colorbar 颜色条显示 montage 按 ...

  7. MATLAB图像处理基础

    MATLAB图像处理基础 2.2.1 图像文件格式及图像类型 1.MATLAB支持的几种图像文件格式: ⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像 ...

  8. Matlab图像处理(01)-Matlab基础

    枫竹梦对于Matlab几乎是零基础,只是在上学的时候稍稍接触一点,万万没有想到现在还能用到Matlab.进入正题>>> 图像的基本概念 一幅图像可以被定义为一个二维函数f(x,y), ...

  9. Matlab图像处理相关

    相关函数: 读取:imread() %参数为文件名(路径)或url,格式等 写入:imwrite() %参数为写入数据矩阵,写入文件名(路径),格式等 显示:imshow() %显示由输入决定,属性自 ...

随机推荐

  1. js模拟类的公有与私有 方法与变量

    var myConstructor = function(message){ //实例变量 this.message = message; //私有变量,外部不可见.用var声明的变量具有块作用域 v ...

  2. ActiveMQ发布订阅模式

    ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...

  3. 让Eclipse不格式化数组或某段代码

    用过eclipse ctrl+shit+f的人肯定都感觉eclipse这个功能很爽. 但对于数组,有时候就不是这样了. 比如在opengl中定义一些顶点信息: int one = 0x010000; ...

  4. 内存分配、C++变量的生命周期和作用域

    1.内存分配 程序的内存分配有以下几个区域:堆区.栈区.全局区.程序代码区,另外还有文字常量区. 栈区 ——存放局部变量,即由auto修饰的变量,一般auto省略.由编译器自动分配释放.局部变量定义在 ...

  5. iOS xib传值--定义方法传值

    事件描述: 用xib创建了一个View,里面有按钮,有TableView.我需要将数据在初始化时传递进去,方便TableView来显示信息. 首先想到的是awakeFromNib这个方法(我以为是和V ...

  6. Selenium2学习-007-WebUI自动化实战实例-005-解决 Firefox 版本不兼容:org.openqa.selenium.WebDriverException: Failed to connect to binary FirefoxBinary

    此文主要讲述 Java 运行 Selenium 脚本时,因 Friefox 浏览器版本与 selenium-server-standalone-x.xx.x.jar 不兼容引起的 org.openqa ...

  7. [代码片段]读取BMP文件(二)

    #include <stdio.h> #include <stdlib.h> #pragma pack(2) /*定义WORD为两个字节的类型*/ typedef unsign ...

  8. How to read the HTML DTD

    Contents How to read the HTML DTD 1. DTD Comments 2. Parameter Entity definitions 3. Element declara ...

  9. 细聊分布式ID生成方法

    细聊分布式ID生成方法 https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=403837240&idx=1&sn=ae9 ...

  10. kernel 模块与简单 hello 模块

    Kernel 模块与简单 hello 模块 kernel 模块的简介 Linux 内核进行扩展时,例如编写驱动程序.netfilter功能等,最方便的方式是通过编写模块,然后加载到内核中.由于 ker ...