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. HTTP状态码总结

    HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.有些 App 端接口与 HTML 接口用的是同一个,所以做移动端开发也有必要了解一下HTTP状态码 ...

  2. #VSTS日志# Xamarin构建支持和一大波更新

    距离上次更新#VSTS日志#已经有将近3个月的时间了,赶上最近Xamarin开源免费的消息,VSTS也推出了更多跨平台的支持和许多其他功能.这里列出一些小编觉得比较重要. 1. Xamarin 构建模 ...

  3. android:shape属性详解

    这一类的shape定义在xml中 file location: res/drawable/filename.xml The filename is used as the resource ID.(这 ...

  4. 6.QT信号和槽

     新建项目SignalAndSlot项目 编写代码如下: mysignal.h #ifndef MYSIGNAL_H #define MYSIGNAL_H   #include <QObje ...

  5. 【IOS 开发】基本 UI 控件详解 (UISegmentedControl | UIImageView | UIProgressView | UISlider | UIAlertView )

    转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50163725 一. 分段控件 (UISegmentedControl) 控件展 ...

  6. Apache Commons Configuration读取xml配置

    近期项目自己手写一个字符串连接池.因为环境不同有开发版本.测试版本.上线版本.每一个版本用到的数据库也是不一样的.所以需要能灵活的切换数据库连接.当然这个用maven就解决了.Apache Commo ...

  7. 05 Activity生命周期

    生命周期:一个Activity从创建到销毁经过的全部方法 1.onCreate() 创建一个Activity的时候执行的方法 2.onStart()Activity可以被看见到时候无法交互(没有焦点) ...

  8. 后端分布式系列:分布式存储-HDFS NameNode 设计实现解析

    接前文 分布式存储-HDFS 架构解析,我们总体分析了 HDFS 架构的主要构成组件包括:NameNode.DataNode 和 Client.本文首先进一步解析 HDFS NameNode 的设计和 ...

  9. Android Service详解

    service作为四大组件值得我们的更多的关注 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务.例如,一个从service播放音乐的音乐播放器,应 ...

  10. J2EE进阶(九)org.hibernate.LazyInitializationException: could not initialize proxy - no Session

    org.hibernate.LazyInitializationException: could not initialize proxy - no Session 前言 在<many-to-o ...