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

2014.10.20之前的内容有误,这里依据wikipedia更新了算法内容. 算法以wiki为准

https://en.wikipedia.org/wiki/HSL_and_HSV

这里demo出 HSI中 S 空间的图像和暗通道图的对照.

会发现,确实右边到非常暗,这是由于HSV转换的时候对RGB值做了归一化处理,假设打印出归一化处理后的R+G+B值会发现输出图像非常亮(白茫茫一片~)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2lubXloZWFydA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

下图是取自图像第321列的数据分布,能够看见图像的灰度分布是非常明晰的

以下给出了我写的转换函数,直接调用就可以.

%%**************************************************************************
% Function writer : EOF
% code file : RGB2SHI_Color.m
% code date : 2014.10.16
% Translate RGB into HSI-space
%
% Code Description:
%
% If you want to translate a colourful Image which is coded as
% RGB colour space into HSI space, what you need to do is just input your
% colour image.
%
% This function would return HSI as a matrix [H,S,I].
%
%% *************************************************************************
function [H,S,I] = RGB2SHI_Color(Image) if size(Image,3) ~= 3
fprintf('ERROR Imput-Image must be three channel image\n');
return;
end Height_Image = size(Image,1);
Width_Image = size(Image,2);
Channel_Image = size(Image,3); H = zeros(1,Height_Image * Width_Image);
H_temp = zeros(1,Height_Image * Width_Image);
S = zeros(1,Height_Image * Width_Image);
I = zeros(1,Height_Image * Width_Image);
%% Normalization into (0,1)
R_temp = double(Image(:,:,1));
G_temp = double(Image(:,:,2));
B_temp = double(Image(:,:,3)); R = R_temp./(R_temp + G_temp + B_temp);
G = G_temp./(R_temp + G_temp + B_temp);
B = B_temp./(R_temp + G_temp + B_temp); Max_channel = max(max(R,G),B);
Min_channel = min(min(R,G),B);
Difference = Max_channel - Min_channel; I = (R + G + B)./3; for row = 1:Height_Image
for col = 1: Width_Image % In fact , if Difference(row,col) is zero, the H_temp is
% undefine , it means that H_temp(row,col) close to
% infinite.
if Difference(row,col) == 0
H_temp(row,col) = 0;
end if Max_channel(row,col) == R(row,col)
H_temp(row,col) = mod((G(row,col) - B(row,col)) ...
./Difference(row,col), 6 );
end if Max_channel(row,col) == G(row,col)
H_temp(row,col) = (B(row,col) - R(row,col)) ...
./Difference(row,col) + 2;
end if Max_channel(row,col) == B(row,col)
H_temp(row,col) = (B(row,col) - R(row,col)) ...
./Difference(row,col) + 4;
end H(row,col) = H_temp(row,col)*60; if I(row,col) == 0
S(row,col) = 0;
else
S(row,col) = 1 - (Min_channel(row,col)./I(row,col));
end
end
end end

RGB 颜色空间转 HSI 颜色空间的matlab程序实现的更多相关文章

  1. RGB颜色空间、HSV颜色空间的理解

    HSV是把H(色相),S(饱和度),V(亮度)当做色值来定位颜色的空间. 1.HSV模型 色相:取值范围是0~360度,用来表示颜色的类别.其中红色是0度,绿色是120度,蓝色是240度.饱和度:取值 ...

  2. [zz]求一维序列的信息熵(香浓熵)的matlab程序实例

    对于一个二维信号,比如灰度图像,灰度值的范围是0-255,因此只要根据像素灰度值(0-255)出现的概率,就可以计算出信息熵.    但是,对于一个一维信号,比如说心电信号,数据值的范围并不是确定的, ...

  3. 条件随机场matlab程序下载

    19:44:23 1 http://www.cs.ubc.ca/~murphyk/Software/CRF/crf.html matlab程序包: 该条件随机场程序(CRF)是针对语句进行标注,mat ...

  4. 【matlab】MATLAB程序调试方法和过程

    3.8  MATLAB程序的调试和优化 在MATLAB的程序调试过程中,不仅要求程序能够满足设计者的设计需求,而且还要求程序调试能够优化程序的性能,这样使得程序调试有时比程序设计更为复杂.MATLAB ...

  5. C/C++程序通过动态链接库调用MATLAB程序

    C/C++程序通过动态链接库调用MATLAB程序 1 MATLAB编译器设置 需要设定对应的C++编译器才能编译.m文件生成可供C++调用的库文件. 在MATLAB命令行输入:mex –setup:然 ...

  6. 非均匀B样条拟合MATLAB程序

    直接上代码,多的不再说了. %------------------非均匀B样条拟合MATLAB程序----------------- clear k=; x=load('data.txt'); [n, ...

  7. 蚁群算法 matlab程序(已执行)

    下面是解放军信息project大学一个老师编的matlab程序,请尊重原作者劳动,引用时请注明出处. 我经过改动添加了凝视,已经执行过,无误, function [R_best,L_best,L_av ...

  8. 现代控制理论习题解答与Matlab程序示例

    现代控制理论习题解答与Matlab程序示例 现代控制理论 第三版 课后习题参考解答: http://download.csdn.net/detail/zhangrelay/9544934 下面给出部分 ...

  9. MATLAB程序:用FCM分割脑图像

    MATLAB程序:用FCM分割脑图像 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 脑图像基础知识请看:脑图像:FCM算法介绍请看:聚类——FCM:数据 ...

随机推荐

  1. opencv3.4.1和vs2017配置

    官网下载opencv,双击之后会将文件提取出来,提取出来的文件放在一个合适的位置(选个好地方,不要乱改,环境的配置依赖于这个目录),我放在了D:\program下 配置环境变量: 右键此电脑--> ...

  2. Unity 框架(一)

    当项目需求中,后期可能接入多种输入设备的时候,可以借鉴一下以下代码 using System.Collections; using System.Collections.Generic; using ...

  3. C#调用C/C++动态库,封装各种复杂结构体

    C#调用C/C++动态库,封装各种复杂结构体. 标签: c++结构内存typedefc# 2014-07-05 12:10 6571人阅读 评论(1) 收藏 举报  分类: C(8)  C#(6)  ...

  4. AP设备漫游阈值设置

    在多个AP部署的场景下,默认情况下,手持移动设备(如PDA.手机)信号弱到断掉时才切换AP,无线信号很弱的情况下网络是非常的不稳定的,因此我们需要配置AP设备的漫游阈值(RSSI阈值),以便连接的无线 ...

  5. PIO Core

    PIO核概述 具有Avalon接口的并行输入/输出(parallel input/output - PIO)核,在Avalon存储器映射(Avalon Memory-Mapped Avalon-MM) ...

  6. centos7 安装好python3 yum报错

    解决方法: 修改两个地方 vi /usr/bin/yum 将最前面的改为#! /usr/bin/python2 vi /usr/libexec/urlgrabber-ext-down #! /usr/ ...

  7. HDU 5889 Barricade (Dijkstra+Dinic)

    思路: 首先 先Dijkstra一遍 找出来最短路 不是最短路上的边都不要 然后呢 套个Dinic模板就好了-- 求个最小割 输出 大功告成~~ //By SiriusRen #include < ...

  8. 《五》uploadify插件上传文件

    下载地址:http://www.uploadify.com/wp-content/uploads/files/uploadify.zip 相关配置:http://www.uploadify.com/d ...

  9. javaScript 三目运算符初探

    三目运算符 三目运算符,又称条件运算符,是计算机语言的重要组成部分.它是唯一有3个操作数的运算符,所以有时又称为三元运算符.一般来说,三目运算符的结合性是右结合的. 定义 对于条件表达式b ? x : ...

  10. js编码方式详解

    escape.encodeURI 和encodeURIComponent 的区别 escape(), encodeURI()和encodeURIComponent()是在Javascript中用于编码 ...