理工的小蔡同学

导航

【数字图像处理】彩色图像处理的应用之去红眼

 去红眼技术常用的颜色模型有:RGB彩色模型、CIE Lab彩色模型、HIS彩色模型。

统计资料表明,人眼中的红眼有以下特征:

$\left\{\begin{matrix} -\frac{\pi }{4}< H< \frac{\pi }{4}\\S> 0.3 \end{matrix}\right.$

这里采用HSI彩色模型进行去红眼操作:

clear;
clc;
close all;
Img=im2double(imread('Exp_redeyes.jpg'));%读取并转换图像数据类型
r=Img(:,:,1);%分别提取图像的三个彩色分量
g=Img(:,:,2);
b=Img(:,:,3);
I=(r+g+b)/3;%计算图像HSI空间中I分量值
tmp1=min(min(r,g),b);%为计算S定义中间临时变量
tmp2=r+g+b;
tmp2(tmp2==0)=eps;  %EPS是MATLAB中的函数,表示浮点相对精度。 对双精度数值来说eps表示从 1.0 到下一个最大双精度数的距离。
                    %对 单精度 数值来说eps表示从 1.0 到下一个最大单精度数的距离。
S=1-3.*tmp1./tmp2;
tmp1=0.5*((r-g)+(r-b));
tmp2=sqrt((r-g).^2+(r-b).*(g-b));
theta=acos(tmp1./(tmp2+eps));%求反余弦值
H=theta;
H(b>g)=2*pi-H(b>g);
H=H/(2*pi);
H(S==0)=0;
[rows,clos]=size(Img);
clos=clos/3;
for i=1:rows
    for j=1:clos
        h=H(i,j);
        s=S(i,j);
        if s>0.3
            %if (((-pi/4)<h)<(pi/4))%根据图像差异灵活选择H范围
            if (((-pi/3)<h)<(pi/3))
                S(i,j,:)=0;
            end
        end
    end
end
hsi=cat(3,H,S,I);%得到眼部区域HSI图像,以下是HSI-RGB的过程
R=zeros(size(hsi,1),size(hsi,2));%分量初值
G=zeros(size(hsi,1),size(hsi,2));%HSI彩色模型转换到RGB彩色模型的G分量初值
B=zeros(size(hsi,1),size(hsi,2));

idn=find((0<=H)&(H<2*pi/3));%H范围在[0,2π/3]
B(idn)=I(idn).*(1-S(idn));
R(idn)=I(idn).*(1+S(idn).*cos(H(idn))./cos(pi/3-H(idn)));
G(idn)=3*I(idn)-(R(idn)+B(idn));

idn=find((2*pi/3<=H)&(H<4*pi/3));%H范围
H(idn)=find((H>2*pi/3)&(H<4*pi/4));
R(idn)=I(idn).*(1-S(idn));
G(idn)=I(idn).*(1+S(idn).*cos(H(idn)-2*pi/3)./cos(pi-H(idn)));
B(idn)=3*I(idn)-(R(idn)+G(idn));

idn=find((4*pi/3<=H)&(H<=2*pi));%H范围
H(idn)=H(idn)-pi*4/3;
G(idn)=I(idn).*(1-S(idn));
B(idn)=I(idn).*(1+S(idn).*cos(H(idn)-4*pi/3)./cos(5*pi/3-H(idn)));
R(idn)=3*I(idn)-(G(idn)+B(idn));
RGB=cat(3,R,G,B);

figure;subplot(121),imshow(Img);
subplot(122),imshow(RGB);

  结果展示:

图片原图来自网络,侵删

 

posted on 2022-04-21 09:19  董舒尧呀  阅读(450)  评论(2编辑  收藏  举报