数字手势识别App--(2)图像处理

上部分先介绍下图像预处理涉及到的算法,其主要目的就是根据肤色特征过滤掉无用信息生成一张二值图(黑色为无关背景,白色即为手势区域),二值图无效信息较少有利于之后机器学习识别。

一、均值漂移滤波

用均值漂移滤波(meanshift)做图像平滑和分割,其本质是经过迭代,将收敛点的像素值(概率密度较高)代替原来的像素值,直到结束。进而能使一些局部相似的纹理相互融合,但边缘等差异较大的特征依旧可以保存。经过此步骤后,能使前景背景聚类效果更加明显,有利于之后的肤色分割。

 如上图即为均值漂移滤波的效果过程,经过大量实验将距离半径设置为5,像素半径为30有较好的聚类平滑效果。

Imgproc.pyrMeanShiftFiltering(src,src,5,30);

 

二、肤色分割算法

肤色在某些颜色空间中,具有恒长性。而肤色在YCBCR空间中随着亮度Y的改变,蓝色色度Cb和红色色度Cr并不会随之大幅度改变,且呈稳定状态, 则可以得出结论Cr与Cb受光照影响较小,可知肤色在YCRCB空间更适合聚类, 能更好地提取肤色区域。

对比在YCrCb空间上有多种肤色分割算法如下①基于椭圆皮肤模型的皮肤检测。②基于YCrCb颜色空间的Cr,Cb范围筛选法(常黄种人的Cr分量大约在133至173之间,Cb分量大约在77至127之间)。③YCrCb颜色空间Cr分量+OTSU法阈值分割。经过大量测试目前③方法是一种自适应阈值算法,其分割稳定效果较稳定

Imgproc.cvtColor(src, src, Imgproc.COLOR_RGB2YCrCb);
List<Mat> mv=new ArrayList<>();
Core.split(src,mv);
Mat dst=new Mat();
//对Cr量进行OTSU阈值分割
Imgproc.threshold(mv.get(1),dst,127,255, Imgproc.THRESH_BINARY| Imgproc.THRESH_OTSU);

 

三、形态学操作及面积筛选 

形态学操作的对象是二值化图像。形态学图像处理的基本运算有:膨胀、腐蚀、形态学梯度、黑帽变换和顶帽变换。在本文中对肤色预处理后生成的二值图用5×5大小方形掩码先腐蚀后膨胀,能去掉一些噪点干扰区域且细化一些边缘轮廓。 

由于原始图像可能会出现不与手势区域相连通的类肤色区域,但最大类间方差会误认为其为前景而保留。所以可通过Opencv中的countArea函数(利用向量叉乘计算闭合轮廓区域面积)设定一定的面积阈值筛选掉不相连通的类肤色区域,如下图所示不粘连的类肤色区域被筛选除去了。

//膨胀腐蚀操作
Mat k= Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(5,5),new Point(-1,-1));
Imgproc.morphologyEx(dst,dst, Imgproc.MORPH_ERODE,k);
Imgproc.morphologyEx(dst,dst, Imgproc.MORPH_DILATE,k);
//获取轮廓
Mat hierarchy=new Mat();
List<MatOfPoint> contours=new ArrayList<MatOfPoint>();
Imgproc.findContours(dst,contours,hierarchy,Imgproc.RETR_LIST,Imgproc.CHAIN_APPROX_NONE,new Point(0,0));

for(int i=0;i<contours.size();i++)
{
    double area= Imgproc.contourArea(contours.get(i));
    if(area>3000)
    {
        Log.i("wsy","轮廓面积: " + area);
        Imgproc.drawContours(Dst,contours,i,new Scalar(255,255,255),-1);
    }
}
Imgproc.cvtColor(Dst,Dst,Imgproc.COLOR_BGR2GRAY);

 即图像预处理的整体作用就是从图4.1左到图4.4右,获得一张较完整的手势轮廓二值图,识别部分后面那篇再说。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值