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的色彩空间互转相关推荐

  1. matlab中dist的命令,matlab dist函数

    dist--欧式距离加权函数(Euclidean distance weight function) 语法: Z = dist(W,P) df = dist('deriv') D = dist(pos ...

  2. matlab中错误使用fmincon,MATLAB中fmincon 函数问题

    MATLAB中fmincon 函数问题 Matlab的fmincon优化问题 请问: 各位高手帮忙看看我的程序又什么问题?显示错误 Error in ==> Fun at 33 [w,fval] ...

  3. matlab中集合的表示,Matlab常用命令集合

    1.常用命令-->管理命令和函数 addpath添加目录到MATLAB搜索路径doc在Web浏览器上现实HTML文档help显示Matlab命令和M文件的在线帮助helpwin helpdesk ...

  4. MATLAB中 raw(,利用Photoshop + Matlab 解析10-bit RAW

    1.Photoshop处理RAW 运行Photoshop,打开RAW图.在跳出的选项窗口填入图像基本信息: 宽度.长度:Sensor长宽: 通道数量:1: 位深(Depth):16Bits: 字节顺序 ...

  5. 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的 ...

  6. matlab中oad什么意思,MATLAB函数参考

    MATLAB主要命令汇总: 附录1.1 管理用命令 函数名    功能描述    函数名    功能描述 addpath    增加一条搜索路径    rmpath    删除一条搜索路径 demo  ...

  7. m 文件 dll matlab 中调用_Java与MatLab混编

    该篇介绍Java与MatLab的混合编程 环境:Windows10,Jdk 1.8.0_261 64位,MatLab r2018b 64位 先安装MatLab MatLab安装 一.打开MatLab, ...

  8. matlab中向量norm,【Matlab开发】matlab中norm范数以及向量点积、绘图设置相关

    [Matlab开发]matlab中norm范数以及向量点积.绘图设置相关 标签(空格分隔): [Matlab开发] 声明:引用请注明出处外链网址已屏蔽 norm范数使用 help norm norm ...

  9. Matlab中的类(Class),Matlab中的class用法

    Matlab中的class主要是返回对象的数据类型,用法为class(); 可能的返回值有: double          -- Double precision floating point nu ...

最新文章

  1. DDoS***如此猖獗,我们该如何解决?
  2. [Android ] linux命令英文缩写的含义(方便记忆)
  3. CFCC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
  4. 修改anaconda中conda和pip的源为清华源
  5. 前端学习(2866):vue3数据劫持解析1
  6. android Context
  7. cad怎么向下位移_CAD制图初学入门教程:阵列功能的使用技巧
  8. python-批量插入多条数据-pymysql-executemany方法
  9. 华为P50E全方位曝光:延续P50设计 换装骁龙778G 4G芯片
  10. 不同操作系统查看FC HBA卡信息的方法总结
  11. Using Flume要点
  12. 微pe工具箱 系统安装教程_微PE工具箱 V2.0正式版(附安装系统教程)
  13. Protell99中的铺铜设置
  14. java之等差素数的求法
  15. 我和电赛的成长故事与总结#2019年全国大学生电子设计竞赛#
  16. 程序设计,就是这样——如何学习程序设计(完整版)
  17. 信托资金将分辨用于向邢台依林山庄食物有限公司、唐山国泰纸业有限公司、唐山蓝猫饮品团体有限公司发放流动资金贷款1亿、1.5亿、1亿
  18. Delphi 中关于Double类型精度以及使用Ceil和Trunc取整引发的问题
  19. epson me 300清零
  20. 【微信小程序】微信小程序实现在线音频播放

热门文章

  1. 获取当前网页的绝对URL地址
  2. IntellijIDEA配置Tomcat
  3. leetcode938.RangeSumofBST
  4. 【机房收费系统】--SSTab控件与MSHFlexGrid控件
  5. 【面试经典】redis 常见数据结构以及使用场景分析
  6. zend studio如何更改字符集
  7. JadClipse反编译工具在MyEclipse中的安装(先看Eclipse的配置方式)
  8. 移动端照片上传、头像裁剪完整功能,兼容iphone,android (一)
  9. C#.NET常见问题(FAQ)-如何使用DataGridView跟Excel数据交互
  10. HDU #5733 tetrahedron