[matlab数字图像处理8]提取一副彩色图像中红色,用HIS模型处理,RGB模型对比显示

  • Post author:
  • Post category:其他




一、 问题描述

提取一副彩色图像中红色,用HIS模型处理,RGB模型对比显示;



二、 求解思路

彩色图像的处理有两种主要方法,RBG(红,绿,蓝)和HIS(色调,饱和度,亮度),matlab可以直接读取彩色图像的R,G,B值,对于RGB模型,只需要提取R值,就可以提取图像的红色。HIS模型与RGB模型间有一定的数学方程对应。红色在HIS模型中对应的是色调(H)大约为0-25和300-360以及饱和度(S)大于0.2的模型,将该范围外的数据全部变为0,然后再利用转换公式将HIS模型转换为RGB模型,即可提取红色。



三、 程序代码



主程序:

clc
clear
close all
x=imread('5.png');
x=im2double(x);
figure(1)
subplot(1,3,1)
imshow(x,[])
R= x(:,:,1);
G= x(:,:,2);
B= x(:,:,3);
subplot(1,3,2)
imshow(R,[])
title('红色的RGB提取')
subplot(1,3,3)
H_RANGE_1=25;
H_RANGE_2=300;
[H,S,I]=rgb2hsi(R,G,B);
for i=1:size(R,1)
    for j=1:size(R,2)
        if (H(i,j) >= H_RANGE_1 && H(i,j) < H_RANGE_2)
            H(i,j) = 0;
            S(i,j) = 0;
            I(i,j)= 0;
        end
        if (S(i,j) < 0.2)
            H(i,j) = 0;
            S(i,j) = 0;
            I(i,j)= 0;
        end
    end
end
		
 [R1,G1,B1]=hsi2rgb(H,S,I);
 
RGB = cat(3, R1, G1, B1);
imshow(RGB,[])

title('红色的HSI提取')



RGB转为HIS的函数

function [H,S,I]=rgb2hsi(R,G,B)
pom=((R-G)+(R-B))/2;
den=sqrt((R-G).^2+(R-G).*(G-B));
kop=zeros(size(R));
for i=1:size(R,1)
    for j=1:size(R,2)
        if den(i,j)==0
            kop(i,j)=1;
        else 
            kop(i,j)=pom(i,j)/den(i,j);
        end
    end
end
theta=real(acos(kop))*180/pi;
H=theta.*(B<=G)+(360-theta).*(B>G);
minrgb=min(min(R,G),B);
S=1-3*minrgb./(R+G+B+eps);
I=(R+G+B)/3;
end



HIS转化为RGB的函数

function [R1,G1,B1]=hsi2rgb(H,S,I)
R1=zeros(size(H));
G1=zeros(size(H));
B1=zeros(size(H));
for i=1:size(H,1)
    for j=1:size(H,2)
        if (H(i,j) >= 0 && H(i,j) < 120)
            B1(i,j) = I(i,j) * (1 - S(i,j));
            R1(i,j) = I(i,j) * (1 + (S(i,j) * cos(H(i,j) * pi / 180)) / (cos((60 - H(i,j)) * pi / 180)));
            G1(i,j)= 3 * I(i,j) - (R1(i,j) + B1(i,j));
        elseif (H(i,j) >= 120 && H(i,j) < 240)
            H(i,j) = H(i,j) - 120;
            R1(i,j) = I(i,j) * (1 - S(i,j));
            G1(i,j) = I(i,j) * (1 + (S(i,j) * cos(H(i,j) * pi / 180)) / (cos((60 - H(i,j)) * pi / 180)));
            B1(i,j) = 3 * I(i,j) - (R1(i,j) + G1(i,j));
        elseif (H(i,j) >= 240 && H(i,j) <= 360)
            H(i,j) = H(i,j) - 240;
            G1(i,j) = I(i,j) * (1 - S(i,j));
            B1(i,j) = I(i,j) * (1 + (S(i,j) * cos(H(i,j) * pi / 180)) / (cos((60 - H(i,j)) * pi / 180)));
            R1(i,j) = 3 * I(i,j) - (G1(i,j) + B1(i,j));
        end
    end
end



四、 实验结果

在这里插入图片描述

如图为程序的运行结果,可以看见在用RGB提取(中间)的图形中,红色的花瓣部分被显示为白色,但背景也是白色,不易区分,利用HIS提取的图形很好的将红色的花瓣部分提取了出来



五、 实验心得

利用HSI模型相较于RGB模型在提取颜色方面具有一定的优势,但应注意HIS模型中对应颜色的相关属性



版权声明:本文为qq_46535765原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。