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. [lua]写个简单的Lua拓展-sleep函数

    这几天在做一个小项目,其中用到了一些基本的API, 例如sleep,获取当前目录等等,lua标准库中没有提供这些接口,虽然所第三方库中也都有实现,但是要用的就那么几个函数,在一个嵌入式系统中安装那么多 ...

  2. SQLite 数据类型(http://www.w3cschool.cc/sqlite/sqlite-data-types.html)

    SQLite 数据类型 SQLite 数据类型是一个用来指定任何对象的数据类型的属性.SQLite 中的每一列,每个变量和表达式都有相关的数据类型. 您可以在创建表的同时使用这些数据类型.SQLite ...

  3. 获取imageView的图和背景图

    img1和img2都是ImageView,要把img1中的图片显示到img2中 前景(对应src属性) img2.setImageDrawable(img1.getDrawable()); 背景(对应 ...

  4. 自动滚动的TextView

    自动滚动的TextView 效果图 XML文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr ...

  5. Retrofit 2.0 超能实践(三),轻松实现文件/多图片上传/Json字符串

    文:http://blog.csdn.net/sk719887916/article/details/51755427 Tamic 简书&csdn同步 通过前两篇姿势的入门 Retrofit ...

  6. Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天

    网络编程 网络模型 *OSI参考模型 *Tcp/IP参考模型 网络通读要素 *IP地址 *端口号 *传输协议 1.找到对方Ip 2.数据要发送到对方指定的的应用程序上,为了标识这些应用程序,所经给这些 ...

  7. iOS中 项目开发易错知识点总结 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 点击return取消textView 的响应者 - (BOOL)textFieldShouldReturn:(UI ...

  8. Spark技术内幕:一个图搞定Spark到底有多少行代码

    Spark1.0.0发布一个多月了,那么它有多少行代码(Line of Code, LOC)? 注:代码统计未包含测试,sample.

  9. 通过邮件找回密码功能的Java实现

    1.有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人 ...

  10. Linux下多线程编程遇到的一些问题

    今天在学习了Linux的多线程编程的基础的知识点.于是就试着做了一个简单的Demo.本以为会得到预期的结果.不成想却遇到了意想不到的问题. 代码展示 我的C 代码很简单,就是一个简单的示例程序,如下: ...