一、 问题描述
提取一副彩色图像中红色,用HIS模型处理,RGB模型对比显示;
二、 求解思路
彩色图像的处理有两种主要方法,RBG(红,绿,蓝)和HIS(色调,饱和度,亮度),matlab可以直接读取彩色图像的R,G,B值,对于RGB模型,只需要提取R值,就可以提取图像的红色。HIS模型与RGB模型间有一定的数学方程对应。红色在HIS模型中对应的是色调(H)大约为0-25和300-360以及饱和度(S)大于0.2的模型,将该范围外的数据全部变为0,然后再利用转换公式将HIS模型转换为RGB模型,即可提取红色。
三、 程序代码
主程序:
clcclearclose allx=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;endif (S(i,j) < 0.2)H(i,j) = 0;S(i,j) = 0;I(i,j)= 0;endendend[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)==0kop(i,j)=1;else kop(i,j)=pom(i,j)/den(i,j);endendendtheta=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));endendend
四、 实验结果
如图为程序的运行结果,可以看见在用RGB提取(中间)的图形中,红色的花瓣部分被显示为白色,但背景也是白色,不易区分,利用HIS提取的图形很好的将红色的花瓣部分提取了出来
五、 实验心得
利用HSI模型相较于RGB模型在提取颜色方面具有一定的优势,但应注意HIS模型中对应颜色的相关属性
如果觉得《[matlab数字图像处理8]提取一副彩色图像中红色 用HIS模型处理 RGB模型对比显示》对你有帮助,请点赞、收藏,并留下你的观点哦!