您好,欢迎访问三七文档
图像处理综合实践课程设计报告设计题目:NO1、肤色检测学院自动化与信息工程学院专业班级姓名学号指导教师张志禹2011年秋季学期起止时间:2011年12月25日至2012年1月2日一、设计思路肤色检测原理是根据皮肤的固有色彩,在图像中选取相对应的颜色范围作为皮肤颜色。给定一幅包含人像的彩色图像,将其转换至其它表色系,利用肤色检测算法将皮肤区域以二值图像的形式检测出来并对比算法效果。在本次课程设计中,我们组确定将图像分别转换到HSV表色系和YCbCr表色系下,然后将不同表色系下的图像分别转换成相应的二值图,对比观察图像转换结果,以得到实验的实验结论。1)HSV表色系下的肤色检测原理HSV表色系包含三个属性:图像的色调(Hue),即表示相应的颜色;饱和度(Saturation),即表示颜色的纯度;亮度(Value),即颜色的亮暗程度。所以该表色系是分别对图像的色调,饱和度和亮度进行描述的,根据皮肤的固有色调可以提取出皮肤区域。图像从Rgb表色系转换到hsv表色系固定公式如下:max(,,)VRGB[min(,,)]/,00,0VRGBVVSV60()/,60(2()/),60(4()/),00360,0GBSVVRBRSVVGHRGSVVBVHH2)YCbCr表色系下的肤色检测YCbCr颜色空间将色彩表示为三个分景。即亮度Y,蓝色色度Cb和红色色度Cr。YCbCr表色系中将亮度信息与色彩信息分开,充分考虑了RGB三个分量在视觉感觉中的不同重要性而确定的。图像从Rgb表色系转换到YCrCb表色系的转换公式为:1665.738129.05725.064112837.94574.494112.439256128112.43994.15418.285YRCbGCrB二、MATLAB程序流程1)HSV表色系下二值图转换流程2)YCbCr表色系下二值图转换流程该点值为0开始初始化读取图像并进行数值格式转换提取R,G,B通道建立与原图大小相同的矩阵利用公式将原图转换到HSV表色系下将HSV表色系下图像确定皮肤RGB的取值范围依次判断图像各点RGB是否在皮肤范围内该点值为1结束NY三、设计中的难点及解决方案该点值为0开始初始化读取图像并进行数值格式转换提取R,G,B通道建立与原图大小相同的矩阵利用公式将原图转换到YCbCr表色系下将YCbCr表色系下图像确定皮肤RGB的取值范围判断图像各点RGB是否在皮肤范围内该点值为1结束NY1、该设计方案思路整体比较简单明确,设计过程中出现的问题主要集中在数据格式之间的转换问题,以及matlab图像的显示范围之间的问题1)在将原图转换成HSV表色系下的图像时,开始时候无法得到准确的HSV图像。在将原图像的unit8数据类型转换为im2double型,在H通道转换完成后的值除以360,保证了HSV图像的正确显示以及准确的RGB数据提取,进而得到正确的二值图像。2)在将原图转换成YCbCr表色系下的图像时,以double型读取图像,相应的通道转换完成时将三个通道的值除以256,保证显示范围在(0,1)之间,得到正确的YCbCr表色系下的图像,然后才提取相应皮肤的RGB的范围,完成二值图像的转换。四、实验结果实验所用的原图、HSV表色系下转换的二值图、YCbCr表色系下转换的二值图分别如下:原图像HSV转换下的二值图像YCbCr转换下的二值图像五、实验结论:1)对比上图的实验结果可知,YCbCr表色系下转换的二值图像比HSV表色系下转换的二值图像效果好,对皮肤面积以及重点的处理结果,前者也是明显好于后者。2)通过这周的设计,我们获得巨大收获:首先,通过学习使自己对课本上的知识可以应用于实际,使的理论与实际相结合,加深自己对课本知识的更好理解,同时实习也段练了我们团结合作精神,能够充分利用图书馆去查阅资料,增加了许多课本以外的知识,能达到学以致用。对我们学生来说,理论与实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。六、程序清单如下1)HSV表色系下二值图像程序:clcclearall;closeall;Xsrc=imread('E:\Mylove\Cheer\陈绮贞\1.jpg');%读取待转换图imshow(Xsrc);%显示原图title('原图像');%给原图像加标题X=im2double(Xsrc);%将原图转换成im2double格式R=X(:,:,1);%R通道G=X(:,:,2);%G通道B=X(:,:,3);%B通道height=size(X,1);%获取原图矩阵的列值width=size(X,2);%获取原图矩阵的行值H=zeros(height,width);%建立与原图大小相同的矩阵S=zeros(height,width);V=zeros(height,width);forr=1:height%将原图转换到HSV空间forc=1:widthV(r,c)=max(X(r,c,:));if(V(r,c)0)S(r,c)=(V(r,c)-min(X(r,c,:)))/V(r,c);elseif(V(r,c)==0)S(r,c)=0;endif(V(r,c)==R(r,c))H(r,c)=60*(G(r,c)-B(r,c))/(S(r,c)*V(r,c));elseif(V(r,c)==G(r,c))H(r,c)=60*(2+(B(r,c)-R(r,c))/(S(r,c)*V(r,c)));elseif(V(r,c)==B(r,c))H(r,c)=60*(4+(R(r,c)-G(r,c))/(S(r,c)*V(r,c)));elseif(V(r,c)==0)H(r,c)=0;endif(H(r,c)0)H(r,c)=H(r,c)+360;endH(r,c)=H(r,c)/360.0;endend%K=cat(3,H,S,V);%figure,imshow(K)K(:,:,1)=H;%将HSV空间下图像转换成二值图K(:,:,2)=S;K(:,:,3)=V;height1=size(K,1);width1=size(K,2);forr=1:height1forc=1:width1if(H(r,c)0.128&H(r,c)0.0100...&S(r,c)0.306&S(r,c)0.675...&V(r,c)0.567&V(r,c)0.979)K1(r,c)=1;elseK1(r,c)=0;endendendfigure,imshow(K1);%显示二值图title('HSV转换下的二值图像');%给转换后的图像加标题2)YCbCr表色系下的二值图像转换程序:clcclearall;closeall;%Xsrc=imread('E:\Mylove\Cheer\陈绮贞\1.jpg');%imshow(Xsrc);%X=im2double(Xsrc);X=double(imread('E:\Mylove\Cheer\陈绮贞\1.jpg'));%以double格式读取图像R=X(:,:,1);%R通道G=X(:,:,2);%G通道B=X(:,:,3);%B通道height=size(X,1);%获得原图像矩阵的列宽width=size(X,2);%获得原图像矩阵的行宽Y=zeros(height,width);%建立与原图大小相同的矩阵Cb=zeros(height,width);Cr=zeros(height,width);forr=1:heightforc=1:width%将原图像转换到YCbCr空间Y(r,c)=16+(1/256)*(65.738*R(r,c)+129.057*G(r,c)+25.064*B(r,c));Cb(r,c)=128+(1/256)*(-37.945*R(r,c)-74.494*G(r,c)+112.436*B(r,c));Cr(r,c)=128+(1/256)*(112.439*R(r,c)-94.154*G(r,c)-18.285*B(r,c));endEndY=Y/256;%将Y取值转换到合适显示范围Cb=Cb/256;Cr=Cr/256;K(:,:,1)=Y;%将YCbCr空间下图像转换为二值图K(:,:,2)=Cb;K(:,:,3)=Cr;height1=size(K,1);width1=size(K,2);forr=1:height1forc=1:width1if(Y(r,c)0.738&Y(r,c)0.352...&Cb(r,c)0.266&Cb(r,c)0.421...&Cr(r,c)0.416&Cr(r,c)0.664)K1(r,c)=1;elseK1(r,c)=0;endendendfigure,imshow(K1);%显示转换后的二值图title('YCbCr转换下的二值图像');%给转换后的图像加标题
本文标题:肤色检测
链接地址:https://www.777doc.com/doc-5218420 .html