RGB to HSI

I=(R+G+B)/3;

S=1-3*min(R,G,B)/(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 ;

If B > G; H=360-H;

HSI to RGB

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)

算法参考来源: 冈萨雷斯 《数字图像处理》

function  [H,S,I]=RgbToHsi(Image_Input)



Image_Input=double(Image_Input)/255;

R_Input=Image_Input(:,:,1);

G_Input=Image_Input(:,:,2);

B_Input=Image_Input(:,:,3);

I = (R_Input+G_Input+B_Input)/3.0;



[heigth,width]=size(R_Input);

S(1:heigth,1:width)=0;

H(1:heigth,1:width)=0;



for i=1:heigth

    for j=1:width

        temp=[R_Input(i,j),G_Input(i,j),B_Input(i,j)];

        S(i,j)=1-3*min(temp)/sum(temp);

        X=R_Input(i,j);

        Y=G_Input(i,j);

        Z=B_Input(i,j);

        temp_1=((X-Y)+(X-Z)+1e-6)/(2*sqrt((X-Y).^2+(X-Z)*(Y-Z))+1e-6);

        Sigma=acos(temp_1);

        if(Z<=Y)

            H(i,j)=Sigma/(2*pi);

        else

            H(i,j)=(2*pi-Sigma)/(2*pi);

        end

    end

end

function Image_out=HsiToRgb(H,S,I)



H_angle=H*360;

[heigth,width]=size(H);

R(1:heigth,1:width)=0;

G(1:heigth,1:width)=0;

B(1:heigth,1:width)=0;



for i=1:heigth

    for j=1:width

        if(S(i,j)<1e-6)

            R(i,j)=I(i,j);

            G(i,j)=I(i,j);

            B(i,j)=I(i,j);

        else

            if(H_angle(i,j)>=0 && H_angle(i,j)<=120)

                B(i,j)=(1-S(i,j))*I(i,j);

                sigma=(H_angle(i,j)-60)*pi/180;

                temp=tan(sigma)/sqrt(3);

                G(i,j)=(1.5+1.5*temp)*I(i,j)-(0.5+1.5*temp)*B(i,j);

                R(i,j)=3*I(i,j)-G(i,j)-B(i,j);

            else

                if(H_angle(i,j)>=120 && H_angle(i,j)<=240)

                    R(i,j)=(1-S(i,j))*I(i,j);

                    sigma=(H_angle(i,j)-180)*pi/180;

                    temp=tan(sigma)/sqrt(3);

                    B(i,j)=(1.5+1.5*temp)*I(i,j)-(0.5+1.5*temp)*R(i,j);

                    G(i,j)=3*I(i,j)-R(i,j)-B(i,j);

                else

                    G(i,j)=(1-S(i,j))*I(i,j);

                    sigma=(H_angle(i,j)-300)*pi/180;

                    temp=(tan(sigma))/sqrt(3);

                    R(i,j)=(1.5+1.5*temp)*I(i,j)-(0.5+1.5*temp)*G(i,j);

                    B(i,j)=3*I(i,j)-R(i,j)-G(i,j);

                end

            end

        end

    end

end



Image_out(:,:,1)=R;

Image_out(:,:,2)=G;

Image_out(:,:,3)=B;

色彩转换——RGB & HSI的更多相关文章

  1. 色彩转换——RGB & HSL

    RGB to HSL The R,G,B values are divided by 255 to change the range from 0..255 to 0..1: R' = R/255 G ...

  2. 色彩转换——RGB & HSV

    RGB to HSV The R,G,B values are divided by 255 to change the range from 0..255 to 0..1: R' = R/255 G ...

  3. PhotoShop 图像处理 算法 汇总

    不定期更新 ...... 直接点标题即可链接到原文. OpenCV 版:OpenCV 图像处理 图层混合算法: PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡)PS图层混合算法之二(线性 ...

  4. Color Models (RGB, CMY, HSI)

    目录 概 定义 RGB CMY CMYK HSI 相互的转换 RGB <=> CMY CMY <=> CMYK CMY > CMYK CMYK > CMY RGB ...

  5. RGB to HSI, HSI to RGB Conversion Calculator

    The RGB color model is an additive system in which each color is defined by the amount of red, green ...

  6. QT 实现彩色图亮度均衡,RGB和HSI空间互相转换

    从昨天折腾到今天.再折腾下去我都要上主楼了  大致和灰度图均衡是一样的,主要是不能像平滑什么的直接对R,G,B三个分量进行.这样出来的图像时没法看的.因此我们要对亮度进行均衡.而HSI彩色空间中的分量 ...

  7. 【转载】颜色空间-RGB、HSI、HSV、YUV、YCbCr的简介

    转载自缘佳荟的博客. 颜色通常用三个相对独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.而颜色可以由不同的角度,用三个一组的不同属性加以描述,就产生了不同的颜色空间.但 ...

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

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

  9. 基于RGB与HSI颜色模型的图像提取法

    现实中我们要处理的往往是RGB彩色图像.对其主要通过HSI转换.分量色差等技术来提出目标. RGB分量灰度化: RGB可以分为R.G.B三分量.当R=G=B即为灰度图像,很多时候为了方便,会直接利用某 ...

随机推荐

  1. html5全解析

    htm是软件开发中非常基础的知识,也是很重要的知识,在web中是很重要的知识点,在此梳理一下主要内容: 1.HTML是什么? 全称为HyperText Markup Language,超文本标记语言, ...

  2. FORM当前状态分析

     变量  SYSTEM.RECORD_STATUS 确定当前记录状态.有四种返回值:CHANGED表示记录从数据库取来,并且该记录至少一个基表列被更新:INSERT表示给一个非取自数据库记录的基表 ...

  3. IDEA阅读Spark源码

    将spark编译成idea-sbt工程 tar -zxvf spark-1.1.0.tgz cd spark-1.1.0 sbt/sbt gen-idea 等待-- 成功后就能以SBT工程的形式导入i ...

  4. ubuntu连接android设备(附最简单方法)

    在ubuntu下连接android设备,虽然不用像windows那样安装驱动,然而却会遇见一个错误:输入adb shell,会提示insufficient permissions for device ...

  5. Oracle开发环境搭建

    一.软件准备 地址:oracle官网 安装包:因为个人学习用,所以就安装服务器端就可以了,不需要客户端. 一共两个压缩文件,解压时一起解压到到一个文件夹. 本人使用的:win32_11gR2_data ...

  6. gitlab6 配置的几个问题说明

    gitlab6 配置的几个问题说明 按照gitlab的网站的详细步骤,终于把gitlab 6.1 stable安装到2台虚拟机上了.由于gitlab6运行于虚拟机上,所以配置这个虚拟机的hostnam ...

  7. 实战项目:通讯录&nbsp;UI—第十一天

     1.推出视图的两种方式:  1.通过导航控制器push到下一个界面,使用pop返回到上一个界面 2.通过模态的形式推出视图,不需要依赖于导航控制器,通过使用present到下一个界面,通过dismi ...

  8. MinerUtil.java 爬虫工具类

    MinerUtil.java 爬虫工具类 package com.iteye.injavawetrust.miner; import java.io.File; import java.io.File ...

  9. Microsoft Office Excel cannot access the file, There are several possible reasons

    今天在做EXCEL打印读取模板时报错了,错误信息如下: Microsoft Excel cannot access the file 'D:\xx.xlsx'. There are several p ...

  10. 【Unity Shaders】Using Textures for Effects——通过修改UV坐标来滚动textures

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...