概述
本篇记录了利用基于HSV颜色模型的肤色提取与连通区域过滤实现图片的人脸定位,附带知识的介绍略烦多,附带Matlab相关程序代码。
一、预备知识
图像预处理
1.1 灰度化
在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。一般有分量法 最大值法平均值法加权平均法四种方法对彩色图像进行灰度化。
Matlab:Matlab:Matlab:
I = imread('img.jpg');
I2 = rgb2gray(I);
subpolt(1,2,1),imshow(I),title('原图');
subpolt(1,2,2),imshow(I2),title('灰度化');
1.2 锐化滤波
应用锐化可以快速聚焦模糊边缘,提高图像中某一部位的清晰度或者焦距程度,使图像特定区域的色彩更加
鲜明。
Matlab:Matlab:Matlab:
I = imread('img.jpg');
I2 = double(rgb2gray(I));
H = [0 1 0,1 -41,0 1 0];
J = conv2(I2,H,'same');
K = I2-J;
subplot(1,2,1),imshow(rgb2gray(I)),title('原图灰度化');
subplot(1,2,2),imshow(K,[]),title('锐化滤波');
1.3 中值滤波
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。
Matlab:Matlab:Matlab:
I = imread('img.jpg');
I2 = medfilt2(rgb2gray(I),[9 9]); %9×9中值滤波
subplot(1,2,1),imshow(rgb2gray(I)),title('原图灰度化');
subplot(1,2,2),imshow(I2,[]),title('9×9中值滤波');
1.4 二值化
图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。
Matlab:Matlab:Matlab:
I = imread('img.jpg');
I2 = rgb2gray(I);%灰度化
thresh = graythresh(I2); %从原图确定二值化阈值;
I3 = im2bw(I2,thresh);%二值化
subplot(1,2,1),imshow(I2),title('原图灰度化');
subplot(1,2,2),imshow(I3),title('二值化');
1.5 形态学操作(腐蚀、膨胀、开操作、闭操作)
点我学习详细原理
几种颜色模型
2.1 RGB模型
最典型、最常用的面向硬件设备的彩色模型是三基色模型,即RGB模型。电视、摄像机和彩色扫描仪都是根据RGB模型工作的。RGB颜色模型建立在笛卡尔坐标系统里,其中三个坐标轴分别代表R、G、B,如图1所示,RGB模型是一个立方体,原点对应黑色,离原点最远的顶点对应白色。RGB是加色,是基于光的叠加的,红光加绿光加蓝光等于白光。应用于显示器这样的设备。
RGB颜色空间的主要缺点是不直观,从R、G、B的值中