【数字图像处理】彩色图像处理的应用之去红眼
去红眼技术常用的颜色模型有: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);