matlab中rgb转hsv,matlab实现RGB与HSV(HSB)、HSL和HSI的色彩空间互转
rgb2hsv,hsv2rgb
RGB(HSL)
1. RGB→HSL的算法描述
步骤1: 把RGB值转换成[0,1]中数值
例:R=0.83, G=0.07, B=0.07
步骤2: 找出R, G和B中的最大值
本例中,maxcolor = 0.83, mincolor=0.07
步骤3: L = (maxcolor + mincolor)/2
本例中,L = (0.83+0.07)/2 =0.45
步骤4: 如果最大和最小的颜色值相同,即表示灰色,那么S定义为0,而H未定义并在程序中通常写成0。
步骤5: 否则, 测试L:
If L < 0.5, S=(maxcolor-mincolor)/(maxcolor+mincolor)
If L >=0.5, S=(maxcolor-mincolor)/(2.0-maxcolor-mincolor)
本例中,L=0.45,因此,S=(0.83-0.07)/(0.83+0.07) = 0.84
步骤6: If R=maxcolor, H = (G-B)/(maxcolor-mincolor)
If G=maxcolor, H = 2.0 + (B-R)/(maxcolor-mincolor)
If B=maxcolor, H = 4.0 + (R-G)/(maxcolor-mincolor)
本例中,R=maxcolor,所以H = (0.07-0.07)/(0.83-0.07) = 0
步骤7: 从第6步的计算看,H分成0~6区域。RGB颜色空间是一个立方体,而HSL颜色空间是两个六角形锥体,其中的L是RGB立方体的主对角线。因此,RGB立方体的顶点:红、黄、绿、青、蓝和品红就成为HSL六角形的顶点,而数值0~6就告诉我们H在哪个部分。H用[0o, 360o]中的数值表示,因此, H = H*60.0.如果H为负值,则加360o。
2. HSL→RGB的算法描述
步骤1: If S=0, 表示灰色,定义R, G和B都为L
步骤2: 否则, 测试L:
If L < 0.5, temp2= L*(1.0+S)
If L >= 0.5, temp2= L+S - L*S
转换 例如,如果H=120, S=0.79, L=0.52, 则,
temp2= (0.52+0.79) - (0.52*0.79) = 0.899
步骤3: temp1= 2.0*L -temp2
在本例中, temp1= 2.0*0.52 - 0.899 = 0.141
步骤4: 把H转换到0~1
在本例中,H=120/360 = 0.33
步骤5: 对于R, G, B, 计算另外的临时值 。方法如下:
for R, = H+1.0/3.0
for G, = H
for B, = H-1.0/3.0
if temp3 < 0, temp3= temp3+ 1.0
if temp3> 1, temp3 = temp3 - 1.0
在本例中,R = 0.33+0.33 = 0.66, G = 0.33, B= 0.33-0.33=0
步骤6: 对于R, G, B, 做如下测试:
If 6.0* temp3 < 1, color = temp1 +( temp2- temp1)*6.0* temp3 ;
Else if 2.0* temp3 < 1, color = temp2;
Else if 3.0* temp3 < 2, color = temp1+( temp2- temp1)*((2.0/3.0) - temp3)*6.0
Else color = temp1
在本例中,
3.0* Rtemp3< 2,因此 R=0.141+(0.899-0.141)*((2.0/3.0-0.66)*6.0=0.141
2.0* Gtemp3< 1,因此 G=0.899
6.0* Btemp3< 1,因此 B=0.141+(0.899-0.141)*6.0*0=0.141
RGB(HSI)
1. RGB→HSI (Gonzalez and Woods)算法描述
RGB→HSI(Gonzalez and Woods)的算法如下:
I = 1/3(R+G+B)
S = 1 - (3/(R+G+B))*a //其中的a=min(R, G, B)
H = cos^(-1)((0.5*((R-G)+(R-B))) / ((R-G)^2 + (R-B)*(G-B))^(0.5))
If S = 0, H=0 //表示H无意义
If (B/I) > (G/I) then
H = 360–H//H用角度表示,并用H=H/360进行标称化处理
2. HSI→RGB算法描述
HSI→RGB(Gonzalez and Woods)的算法如下:
首先用H=360*H把H换算成用角度表示。
If 0 < H <= 120 then
B = 1/3(1-S)
R = 1/3(1+ ((S cos H) / (cos(60 - H))))
G = 1 - (B+R)
If 120 < H <= 240 then
H = H – 120
R = 1/3(1-S)
G = 1/3(1+ ((S cos H) / (cos(60 - H))))
B = 1 - (R+G)
If 240 < H <= 360 then
H = H – 240
G = 1/3(1-S)
B = 1/3(1+ ((S cos H) / (cos(60 - H))))
R = 1 - (G+B)
本人均按照上述步骤,实现了基于不同彩色空间的图像融合:
基于HSV的图像融合
基于HSI的图像融合
基于HSL的图像融合
matlab中rgb转hsv,matlab实现RGB与HSV(HSB)、HSL和HSI的色彩空间互转相关推荐
- matlab中dist的命令,matlab dist函数
dist--欧式距离加权函数(Euclidean distance weight function) 语法: Z = dist(W,P) df = dist('deriv') D = dist(pos ...
- matlab中错误使用fmincon,MATLAB中fmincon 函数问题
MATLAB中fmincon 函数问题 Matlab的fmincon优化问题 请问: 各位高手帮忙看看我的程序又什么问题?显示错误 Error in ==> Fun at 33 [w,fval] ...
- matlab中集合的表示,Matlab常用命令集合
1.常用命令-->管理命令和函数 addpath添加目录到MATLAB搜索路径doc在Web浏览器上现实HTML文档help显示Matlab命令和M文件的在线帮助helpwin helpdesk ...
- MATLAB中 raw(,利用Photoshop + Matlab 解析10-bit RAW
1.Photoshop处理RAW 运行Photoshop,打开RAW图.在跳出的选项窗口填入图像基本信息: 宽度.长度:Sensor长宽: 通道数量:1: 位深(Depth):16Bits: 字节顺序 ...
- matlab中rigid是什么,matlab中Y = zeros(spnum,1)什么意思
matlab中scan怎么用 [r c] = size(f); label = zeros(r,c); scan = z 错误如下:你的最后一句scan(1:r+1,2:c+1)=f中,后面是r*c的 ...
- matlab中oad什么意思,MATLAB函数参考
MATLAB主要命令汇总: 附录1.1 管理用命令 函数名 功能描述 函数名 功能描述 addpath 增加一条搜索路径 rmpath 删除一条搜索路径 demo ...
- m 文件 dll matlab 中调用_Java与MatLab混编
该篇介绍Java与MatLab的混合编程 环境:Windows10,Jdk 1.8.0_261 64位,MatLab r2018b 64位 先安装MatLab MatLab安装 一.打开MatLab, ...
- matlab中向量norm,【Matlab开发】matlab中norm范数以及向量点积、绘图设置相关
[Matlab开发]matlab中norm范数以及向量点积.绘图设置相关 标签(空格分隔): [Matlab开发] 声明:引用请注明出处外链网址已屏蔽 norm范数使用 help norm norm ...
- Matlab中的类(Class),Matlab中的class用法
Matlab中的class主要是返回对象的数据类型,用法为class(); 可能的返回值有: double -- Double precision floating point nu ...
最新文章
- DDoS***如此猖獗,我们该如何解决?
- [Android ] linux命令英文缩写的含义(方便记忆)
- CFCC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
- 修改anaconda中conda和pip的源为清华源
- 前端学习(2866):vue3数据劫持解析1
- android Context
- cad怎么向下位移_CAD制图初学入门教程:阵列功能的使用技巧
- python-批量插入多条数据-pymysql-executemany方法
- 华为P50E全方位曝光:延续P50设计 换装骁龙778G 4G芯片
- 不同操作系统查看FC HBA卡信息的方法总结
- Using Flume要点
- 微pe工具箱 系统安装教程_微PE工具箱 V2.0正式版(附安装系统教程)
- Protell99中的铺铜设置
- java之等差素数的求法
- 我和电赛的成长故事与总结#2019年全国大学生电子设计竞赛#
- 程序设计,就是这样——如何学习程序设计(完整版)
- 信托资金将分辨用于向邢台依林山庄食物有限公司、唐山国泰纸业有限公司、唐山蓝猫饮品团体有限公司发放流动资金贷款1亿、1.5亿、1亿
- Delphi 中关于Double类型精度以及使用Ceil和Trunc取整引发的问题
- epson me 300清零
- 【微信小程序】微信小程序实现在线音频播放
热门文章
- 获取当前网页的绝对URL地址
- IntellijIDEA配置Tomcat
- leetcode938.RangeSumofBST
- 【机房收费系统】--SSTab控件与MSHFlexGrid控件
- 【面试经典】redis 常见数据结构以及使用场景分析
- zend studio如何更改字符集
- JadClipse反编译工具在MyEclipse中的安装(先看Eclipse的配置方式)
- 移动端照片上传、头像裁剪完整功能,兼容iphone,android (一)
- C#.NET常见问题(FAQ)-如何使用DataGridView跟Excel数据交互
- HDU #5733 tetrahedron