【图像处理】人眼区域分割(1)
2017-10-20 21:09
274 查看
人眼区域分割(1)
通过尝试计算水平灰度曲线来定位人眼。因为人眼周围灰度变化明显,可以通过灰度曲线图来确定眼睛所在的水平方向坐标。
求水平方向的灰度投影曲线
P(i)=∑j=1nM(i,j)
图像在内存中庸MxN的矩阵存储,i,j为矩阵的行列。图像的水平灰度投影曲线,其横坐标为矩阵的行号,纵坐标为矩阵每行元素之和(即为图片中每行像素值的和)。则该曲线实则包含了图像每行像素值和的变化。
在灰度曲线求取的基础上,求出该曲线的波峰和波谷,因黑色灰度值为0,白色的灰度值为255,则在波谷中包含眼睛等灰度值较小区域的坐标信息。实现方法:用matlab的findpeaks.
pks = findpeaks(data)
[pks,locs] = findpeaks(data)
pks为峰值,locs为峰值所在横坐标值
对波峰波谷横坐标所代表的图像的行信息画出,在这里注意对应关系
|——————————x(矩阵的列标)
|
|
|
|
|
y(矩阵的行标)
灰度投影曲线的波谷与人脸图片的具体对应关系:
波峰和波谷对应的人脸矩阵的行:
利用滤波函数平滑曲线:
平滑曲线与未平滑对应的图片的行号,(红色为平滑后,绿色为未平滑):
平滑之后条数变少,干扰变少。
matlab代码:
通过尝试计算水平灰度曲线来定位人眼。因为人眼周围灰度变化明显,可以通过灰度曲线图来确定眼睛所在的水平方向坐标。
步骤:
灰度化求水平方向的灰度投影曲线
P(i)=∑j=1nM(i,j)
图像在内存中庸MxN的矩阵存储,i,j为矩阵的行列。图像的水平灰度投影曲线,其横坐标为矩阵的行号,纵坐标为矩阵每行元素之和(即为图片中每行像素值的和)。则该曲线实则包含了图像每行像素值和的变化。
在灰度曲线求取的基础上,求出该曲线的波峰和波谷,因黑色灰度值为0,白色的灰度值为255,则在波谷中包含眼睛等灰度值较小区域的坐标信息。实现方法:用matlab的findpeaks.
pks = findpeaks(data)
[pks,locs] = findpeaks(data)
pks为峰值,locs为峰值所在横坐标值
对波峰波谷横坐标所代表的图像的行信息画出,在这里注意对应关系
|——————————x(矩阵的列标)
|
|
|
|
|
y(矩阵的行标)
灰度投影曲线的波谷与人脸图片的具体对应关系:
波峰和波谷对应的人脸矩阵的行:
需要注意的地方:
要对该水平投影曲线进行一定的平滑处理,使曲线避免小幅抖动。使波峰波谷定位稳定便于下一步提取包含眼睛区域的图片。利用滤波函数平滑曲线:
平滑曲线与未平滑对应的图片的行号,(红色为平滑后,绿色为未平滑):
平滑之后条数变少,干扰变少。
实现:
利用matlab实现并验证正确性,因为matlab内有丰富的数学函数。matlab代码:
clear; close all; %求图像的水平方向灰度投影曲线 img=imread('face9.jpg'); gray=rgb2gray(img); row=size(gray,1); col=size(gray,2); %[m,n]=size(img); %若在未转换为灰度图片时矩阵的列元素为灰度的列元素乘以3 for i=1:row%行 count(i)=sum(img(i,1:col));%每行的像素值 end %画图 x=1:1:row; figure; plot(x,count); title('水平方向'); hold on; % [pks,locs] = findpeaks(count); % 若加以限制峰值数量会变少 [pks,locs] = findpeaks(count,'minpeakdistance',20); plot(locs,pks,'*','color','r'); hold on; [min,locmin]=findpeaks(-count,'minpeakdistance',20);%峰值之间的最小间隔 plot(locmin,count(locmin),'x','color','g'); hold off; figure; imshow(img); title('波峰'); hold on; for i=1:length(locs) y=line([0,col],[locs(i),locs(i)]); set(y,'linestyle','-','color','green'); end hold off; figure; imshow(img); title('波谷'); hold on; for i=1:length(locmin) y=line([0,col],[locmin(i),locmin(i)]); set(y,'linestyle','-','color','green'); end hold off;
总结:
上述是通过matlab验证了水平灰度投影曲线与人脸部分的对应关系,则初步确定在图片上半部分的波谷的横坐标即为眼睛所在的y轴坐标。相关文章推荐
- 【图像处理】人眼区域分割(2)
- OpenCV图像处理-区域分割-形态学操作应用
- Matlab形态学图像处理:二值图像分割 标记连通区域和重心位置 删除连通区域
- 【OpenCV学习笔记 016】图像分割-种子区域生长
- 基于数字图像处理的车牌定位和分割的研究 -- 开题报告
- 将图像分割成以每个像素为中心32*32的区域
- 图像处理之区域标记
- 分割图像并指定多个灰度阀值,对同一幅图像进行分区域的二值化
- OpenCV图像处理->鼠标移动区域放大
- 图像处理之图像分割(三)之图割(Graph cut)分割简单梳理
- 图像处理算法1——区域生长法
- 灰度图像--图像分割 区域分割之区域生长
- 图形图像处理之——实现图形图像之子区域提取2
- Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI
- 基于轮廓的图像分割、连通区域提取
- OpenCV图像处理->鼠标移动区域放大
- 灰度图像--图像分割 区域分割之分水岭算法
- 【OpenCV3图像处理】图像分割
- 图像的分割和灰度处理(VC++实现)
- 区域医疗移动医疗影像解决方案--基于HTML5的PACS--HTML5图像处理【转】