RGB 颜色空间转 HSI 颜色空间的matlab程序实现
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程序实现的更多相关文章
- RGB颜色空间、HSV颜色空间的理解
HSV是把H(色相),S(饱和度),V(亮度)当做色值来定位颜色的空间. 1.HSV模型 色相:取值范围是0~360度,用来表示颜色的类别.其中红色是0度,绿色是120度,蓝色是240度.饱和度:取值 ...
- [zz]求一维序列的信息熵(香浓熵)的matlab程序实例
对于一个二维信号,比如灰度图像,灰度值的范围是0-255,因此只要根据像素灰度值(0-255)出现的概率,就可以计算出信息熵. 但是,对于一个一维信号,比如说心电信号,数据值的范围并不是确定的, ...
- 条件随机场matlab程序下载
19:44:23 1 http://www.cs.ubc.ca/~murphyk/Software/CRF/crf.html matlab程序包: 该条件随机场程序(CRF)是针对语句进行标注,mat ...
- 【matlab】MATLAB程序调试方法和过程
3.8 MATLAB程序的调试和优化 在MATLAB的程序调试过程中,不仅要求程序能够满足设计者的设计需求,而且还要求程序调试能够优化程序的性能,这样使得程序调试有时比程序设计更为复杂.MATLAB ...
- C/C++程序通过动态链接库调用MATLAB程序
C/C++程序通过动态链接库调用MATLAB程序 1 MATLAB编译器设置 需要设定对应的C++编译器才能编译.m文件生成可供C++调用的库文件. 在MATLAB命令行输入:mex –setup:然 ...
- 非均匀B样条拟合MATLAB程序
直接上代码,多的不再说了. %------------------非均匀B样条拟合MATLAB程序----------------- clear k=; x=load('data.txt'); [n, ...
- 蚁群算法 matlab程序(已执行)
下面是解放军信息project大学一个老师编的matlab程序,请尊重原作者劳动,引用时请注明出处. 我经过改动添加了凝视,已经执行过,无误, function [R_best,L_best,L_av ...
- 现代控制理论习题解答与Matlab程序示例
现代控制理论习题解答与Matlab程序示例 现代控制理论 第三版 课后习题参考解答: http://download.csdn.net/detail/zhangrelay/9544934 下面给出部分 ...
- MATLAB程序:用FCM分割脑图像
MATLAB程序:用FCM分割脑图像 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 脑图像基础知识请看:脑图像:FCM算法介绍请看:聚类——FCM:数据 ...
随机推荐
- 由防止表单重复提交引发的一系列问题--servletRequest的复制、body值的获取
@Time:2019年1月4日 16:19:19 @Author:QGuo 背景:最开始打算写个防止表单重复提交的拦截器:网上见到一种不错的方式,比较合适前后端分离,校验在后台实现: 我在此基础上 ...
- tail---显示文件中的尾部内容
tail命令用于输入文件中的尾部内容.tail命令默认在屏幕上显示指定文件的末尾10行.如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题.如果没有指定文件或者文件名为“-”,则读取标准输 ...
- Find problem in eXtremeDB
class table1 { char<8> f1; char<80> f2; uint4 f3; uint4 f4; double ...
- 从零開始怎么写android native service?
从零開始怎么写android native service Android service对于从事android开发的人都不是一个陌生的东西,非常多人可能会认为服务非常easy. 服务是简单,由于复杂 ...
- IDEA中的maven web 项目中如何设置自己的本地仓库
我们在创建maven项目的时候如何不使用系统指定的本地仓库,而使用自己设置的仓库呢,这里小女子就来进行讲解一下吧! 讲解一:你要想找到settings.xml你就要自己我去官网上去下载apache-m ...
- 在VPS上用Outline Manager 建立*** 增强版服务器
在VPS上用Outline Manager 建立*** 增强版服务器 原文 https://free.com.tw/google-outline/ Outline 是Google Jigsaw的一款开 ...
- FZU--2188--过河(bfs暴力条件判断)
过河I Time Limit: 3000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status De ...
- 让透明div里的文字不透明
最近在工作中遇到一个问题,我在div里写上文字,当我把div变为半透明的时候,里面的文字也会随之透明.情况如下: <div class="box"> 这是一段不应该透明 ...
- PHP写文件到指定位置
<?php $fp = fopen("output.json", "r+"); $flag = fseek($fp, -3, SEEK_END); if( ...
- 使用acme.sh快速生成SSL证书
起因 早上收到了一封来自MySSL EE <noreply@notify.myssl.com>的邮件提示证书即将过期, 少于7天,但是acme.sh应该是60天自动renew的.于是查看下 ...