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