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

一、 问题描述

提取一副彩色图像中红色,用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模型中对应颜色的相关属性

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值