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


 去红眼技术常用的颜色模型有: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)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);