红眼消除多媒体作业附matlab程序Word文件下载.docx

上传人:b****6 文档编号:22177555 上传时间:2023-02-02 格式:DOCX 页数:11 大小:818.84KB
下载 相关 举报
红眼消除多媒体作业附matlab程序Word文件下载.docx_第1页
第1页 / 共11页
红眼消除多媒体作业附matlab程序Word文件下载.docx_第2页
第2页 / 共11页
红眼消除多媒体作业附matlab程序Word文件下载.docx_第3页
第3页 / 共11页
红眼消除多媒体作业附matlab程序Word文件下载.docx_第4页
第4页 / 共11页
红眼消除多媒体作业附matlab程序Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

红眼消除多媒体作业附matlab程序Word文件下载.docx

《红眼消除多媒体作业附matlab程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《红眼消除多媒体作业附matlab程序Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

红眼消除多媒体作业附matlab程序Word文件下载.docx

1.1RGB模型

RGB模型也称为加色法混色模型。

它是以RGB三色光互相叠加来实现混色的方法,因而适合于显示器等发光体的显示。

其混色规律是:

以等量的红、绿、蓝基色光混合。

设颜色传感器把数字图像上的一个像素编码成(R,G,B),每个分量量化范围为[0,255]共256级。

因此,RGB模型可以大约表示成1670万种颜色。

这足以表示自然界的任一颜色,故又称其为24位真彩色。

RGB模型与显示器等设备有着很好的对应关系,RGB显示器中,有三种荧光粉能够分别发出红、绿、蓝三种颜色,三个相邻的荧光点构成一个像素,这些荧光点受到三束强度分别为c1、c2、c3的电子束的轰击,会发生不同的亮度,通过物理上的叠加或混合,使可显示出相应的颜色。

1.2HSI模型

HSI模型是美国色彩学家蒙塞尔于1915年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。

色调H(Hue)与光波的波长有关,它表示人的感官对不同的颜色的感受,如红色、绿色、蓝色等,它可以表示一定的范围的颜色,如暖色、冷色等。

饱和度S(Saturatuin)表示颜色的纯度,纯光谱色是完全饱和的,加入白光会稀释饱和度。

饱和度越大,颜色看起来就会越鲜艳,反之亦然。

强度I(Intensity),对应成像亮度和图像灰度,是颜色的明亮程度。

HSI模型的建立是基于两个重要的事实:

a、I分量与图像的彩色信息无关;

b、H和S分量与人感受颜色的方式是紧密相联的。

这些特点使得HIS模型非常适合彩色特性检测与分析。

HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,因而它们之间存在着如下转换关系。

(l)RGB转换到HSI

对任何3个[0,l]范围内的RGB值,其对应的HSI空间中的ISH分量

的计算公式如式(1-1)下所示:

式(1-1)

式中

式中计算出的H值的范围为[0°

,180°

],对应于G≥B.在G<

B时,H值大于180°

只要令H=360°

-H,即可把H转换到[180°

360°

]区间,所以若将两种情况都考虑上,则由式可得H是在[O°

]范围内.当s=0时对应无色彩的中心点,这时H就没有意义,此时定义H为O,当I=O时,S也没有意义"

(2)HSI转换到RGB

假设s、I的值在[0,1]之间,R、G、B的值也在[0,l]之间,则HSI转换到RGB的计算公式如式(1-2)、式(1-3)和式(1-4)所示(分成三个区间以利用对称性)。

当H在[0°

120°

]之间:

式(1-2)

当H在[120°

240°

式(1-3)

当H在[240°

式(1-4)

2.自动红眼消除

本实验的思路是先将获取自数码相机中的红眼图像,由RGB模型转换到HSI模型下,再检测出红色通道的值,当它大于某个设定值后,让s通道的值为0,处理后的图像再转到RGB模型下。

下面图2.1至图2.4是由这个方法试验出来的效果:

图2.1小狗处理前图2.2小狗处理后

图2.3人脸处理前图2.4人脸处理后

从上述实验的例子可以看出,本方法虽然简单,处理某些图像有点效果,但仅仅只限于红眼红色值远远大于其它部位的情况,所以处理之前需要对RGB图像的R通道进行检测。

所以此方法还远达不到所谓的自动处理的要求。

3.手动选定区域红眼处理

本方法需要人工手动选定照片红眼区域,需要操作细心,可分多次选定区域。

选定区域后,把RGB图像转换到HSI下进行处理,跟前面方法一样,对于红眼部分S通道为0,再把处理过的图像转换到RGB模型下。

下面图3.1至图3.4是该方法的实验效果。

图3.1小狗处理前图3.2小狗处理后

      

图3.3人脸处理前        图3.4人脸处理后

上述实验可以看出,本方法效果明显,但操作麻烦,由于选取红眼区域全靠手工,而选取的方式是确定一些点,用这些点围成一个圈,来选取红眼区域。

有时候选定一个红眼区域往往需要几遍才能成功。

红眼区域一般是圆的,或者椭圆状的,这些手工选的点围成的圈是个多边形,所以想把红眼全包进去肯定会有一定的误差,带来一些不必要的处理。

4.总结

通过这次红眼处理,使我对图像处理有了新的认识,图像处理看似简单,实则不易。

本次实验没用到比较难的算法,只是简单的实现了手动去红眼。

本次设计用matlab编程,这样我对matlab的相关功能又有了一次熟悉和训练的机会,不但把一些以前运用过的知识温习了一遍,更是在这次去红眼编程实现的训练中学习到了更多的函数,感受到了matlab的强大之处。

本次设计还有很多不足之处,现在已经出现了很多自动去红眼的解决方案。

以后需要多加学习别人的先进经验,了解最新解决思路,争取以后我也能提出一种自动去红眼的方法。

附程序

functionhsi=rgb2hsi(rgb)

%RGB转换到HSI

rgb=im2double(rgb);

r=rgb(:

:

1);

g=rgb(:

2);

b=rgb(:

3);

%Implementtheconversionequations.

num=0.5*((r-g)+(r-b));

den=sqrt((r-g).^2+(r-b).*(g-b));

theta=acos(num./(den+eps));

H=theta;

H(b>

g)=2*pi-H(b>

g);

H=H/(2*pi);

num=min(min(r,g),b);

den=r+g+b;

den(den==0)=eps;

S=1-3.*num./den;

H(S==0)=0;

I=(r+g+b)/3;

%Combineallthreeresultsintoanhsiimage.

hsi=cat(3,H,S,I);

functionrgb=hsi2rgb(hsi)

%HSI转换到RGB

H=hsi(:

1)*2*pi;

S=hsi(:

I=hsi(:

R=zeros(size(hsi,1),size(hsi,2));

G=zeros(size(hsi,1),size(hsi,2));

B=zeros(size(hsi,1),size(hsi,2));

%RGsector(0<

=H<

2*pi/3).

idx=find((0<

=H)&

(H<

2*pi/3));

B(idx)=I(idx).*(1-S(idx));

R(idx)=I(idx).*(1+S(idx).*cos(H(idx))./cos(pi/3-H(idx)));

G(idx)=3*I(idx)-(R(idx)+B(idx));

%BGsector(2*pi/3<

4*pi/3).

idx=find((2*pi/3<

4*pi/3));

R(idx)=I(idx).*(1-S(idx));

G(idx)=I(idx).*(1+S(idx).*cos(H(idx)-2*pi/3)./cos(pi-H(idx)));

B(idx)=3*I(idx)-(R(idx)+G(idx));

%BRsector.

idx=find((4*pi/3<

=2*pi));

G(idx)=I(idx).*(1-S(idx));

B(idx)=I(idx).*(1+S(idx).*cos(H(idx)-4*pi/3)./cos(5*pi/3-H(idx)));

R(idx)=3*I(idx)-(G(idx)+B(idx));

rgb=cat(3,R,G,B);

rgb=max(min(rgb,1),0);

%本程序的功能是去除用户指定区域的红眼

clearall;

clc;

%内存清理

[file,path]=uigetfile('

*.bmp'

'

Image'

);

%获取图像名及存储位置

ifisequal(file,0)%未选择图像,退出

disp('

取消选择'

else

file=[path,file];

%获取图像路径

[]=imread(file);

%读取图像

ifndims()~=3%是否为灰度图像,是退出并显示图像

非彩色图像'

imshow();

else%去红眼操作

goagain=1;

%操作控制变量,1进行操作

change=2;

%参数更改控制变量,1更改预设参数

h1=1/6;

%预设对rol区域内-pi/3<

H<

pi/3,S>

0.2的像素点进行去红眼操作

h2=1/6;

s=0.2;

fprintf('

预设对rol区域内-pi/3<

0.2的像素点进行去红眼操作,即令S=0\n'

whilegoagain==1

fprintf('

是否修改H、S预设值:

1、是;

2、否\n'

change=input('

请选择:

'

%是否更改预设参数

whilechange~=1&

change~=2

错误命令!

请重新输入~~\n'

end

ifchange==1%预设参数更改

h1=input('

请输入H下限值(-2*pi/3~0):

)/pi/2;

while(h1>

0)||(h1<

-1/3)

end;

h2=input('

请输入H上限值(0~2*pi/3):

while(h2<

0)||(h2>

1/3)

)/pi/2

s=input('

请输入S值(0~1):

while(s>

1)||(s<

0)

B=roipoly();

%绘制要去红眼的rol区域,返回与大小相同的逻辑矩阵B,rol内像素值为1

%用户通过鼠标绘制任意多边形,点左键绘制顶点,点右键绘制最后的一

%个顶点

[hsi,H,S,I]=rgb2hsi();

%rgb->

hsi

rol=find(B~=0);

%获取rol内像素数

[L,M]=size(rol);

fori=1:

L%遍历rol内像素,判定-1/6<

h<

1/6且s>

0.2为红眼,并令s=0以去除红眼

if(((H(rol(i))>

0)&

(H(rol(i))<

h2))|((H(rol(i))>

(1-abs(h1)))&

1)))

ifS(rol(i))>

s

S(rol(i))=0;

I(rol(i))=0;

hsi=cat(3,H,S,I);

%生成去红眼后的hsi图像

rgb=hsi2rgb(hsi);

%hsi->

rgb

imshow(rgb);

%显示去红眼后的rgb图像

是否继续操作:

%提示是否继续操作

goagain=input('

whilegoagain~=1&

goagain~=2

ifgoagain==1

;

clf;

end;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1