【图像处理】人眼区域分割(2)
2017-12-01 15:24
302 查看
人眼区域分割(2)
在人眼区域分割(1)中,对人脸图片求水平投影曲线(也叫IPF),其反映的是每行像素和的变化曲线,即反应了整体的灰度变化,并没有反映眼睛局部灰度变化明显的特点,所以在曲线中不能唯一而又准确的显示眼睛的位置,若想找到眼睛,则必须要良好的滤波。对于此,采用了其他的投影方法,并通过该曲线来截取人眼区域。目录:
梯度积分投影
分析投影曲线
人眼区域分割
总结
一、梯度积分投影
其实我们用sobel算子计算人脸水平梯度图像,很容易发现,眼睛这一区域局部灰度变化明显。这也从侧面验证了计算梯度图的投影曲线的正确性。首先我们生成尺度不变行梯度算子,用该算子与图像进行卷积运算,再对图像进行水平投影计算。生成尺度不变梯度算子
L=round(n/100)∗2+1L=round(n/100)∗2+1
其中n是图像的宽度,L为该算子的长度,该算子的形式为下:
尺度不变梯度算子长度应该跟随图片的宽度而变化,即图片宽度除以的数字是可以改变的,例如图片宽度不足100,则可除以10,再乘以2加1。
卷积运算
用该算子与图片进行卷积运算,注意遍历图像进行计算时行列的初始值
代码:
//卷积,卷积后的梯度图片保存到test中 int border = len / 2;//len为尺度不变行梯度算子的长度 Mat test(Gauss.size(), Gauss.type(), Scalar(0)); uchar *t = test.data; uchar *g = Gauss.data; int step = Gauss.step[0]; double sum = 0; for (int i = 0; i < rows; i++) { for (int j = border; j < cols - border; j++) { sum = 0; for (int k = -border; k <= border; k++) { sum += Scale[border+k] * g[i*step + j+k]; } //一定要做饱和处理 if (sum > 255)sum = 255; if (sum < 0)sum = 0; t[i*step + j] = sum; } }
梯度图:从图片也可以看出,水平方向上眼睛梯度值较大而且滤去了眉毛的影响。
![这里写图片描述](https://img-blog.csdn.net/20171130210308666?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1bGluemh1bGlubGlu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3 计算水平灰度曲线
// 这里计算了上半张图的投影曲线(rows/2) vector<int>curve(rows / 2); for (int i = 0; i < rows / 2; i++) { curve[i] = 0; for (int j = 0; j < cols; j++) { uchar *p = test.data + i*test.step[0] + j; curve[i] += *p; } }
二、分析投影曲线
1. 画出该投影曲线其实曲线的最大值点就为眼睛所在的行标eyePos
三、人眼区域分割
对eyePos向前向后求波谷,可以确定人眼区域的上下部分,如下图note:求波谷前可对曲线进行滤波
同时注意曲线波谷的求法,因为曲线显示在图片时经过缩放了,但实则曲线可能在波谷是尖锐的点,即用一阶导为0,二阶导为正的方法不能正确的找到我们期待的波谷,因为在尖锐处的点是没有导数的。
//利用简单的数值比较方法寻找波谷 for (int i = eyePosx; i < curve.size()-1; i++) { if (curve[i - 1]>curve[i] && curve[i + 1]>curve[i]) { range2 = i; break; } }
2.区域分割
若所获得人脸图片大部分包含人脸,则只需要截取上图中绿色横线包含的区域,若图像中不包含大部分人脸,可以对图片求取肤色部分,然后进行二值化求取轮廓,其中最大的轮廓就为人脸的轮廓,如下图其中红色方框与绿色坐标的相交部分即为人眼区域。如下图所示:
总结
利用尺度不变梯度算子进行卷积从而计算梯度投影曲线发现曲线中的最大值点就为眼睛所在的行坐标。利用眼睛局部灰度变化明显的特征从而将眼睛区域分割开,为下一步精准定位去除更多干扰,同时这一中方法抗噪性强并不依赖于滤波。相关文章推荐
- 【图像处理】人眼区域分割(1)
- Matlab形态学图像处理:二值图像分割 标记连通区域和重心位置 删除连通区域
- OpenCV图像处理-区域分割-形态学操作应用
- 图像处理: 超像素(superpixels)分割 SLIC算法
- 【OpenCV学习笔记 016】图像分割-种子区域生长
- 图像分割——区域生长
- 图像分割_区域生长
- 转载]图像分割——区域生长法
- 图像处理算法1——区域生长法
- 图像处理学习笔记(一)二值图像连通区域的几何中心
- 数字图像处理----区域生长之面积统计
- 图像处理之计算连通区域的角度方向
- 冈萨雷斯数字图像处理学习7:图像分割 基于区域的分割分水岭
- 区域生长(基于区域的图像分割)
- 图形图像处理之——实现图像子区域图像的简单提取
- 图像处理中项目代码合集,包括特征提取-图像分割-分类-匹配-降噪等等
- Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI
- C# EmguCV图像处理截取矩形区域
- 分割图像并指定多个灰度阀值,对同一幅图像进行分区域的二值化
- 图像分割_区域分裂合并