image moment图像矩应用:质心与朝向orientation

1 图像矩概念

矩、中心矩等概念直接看百科http://en.wikipedia.org/wiki/Image_moment

应用方面包括:一阶矩求质心、不变矩HuMoments形状匹配、二阶矩求orientation

2 质心

这里仅使用二值图做矩计算,用于物体形状分析,灰度图还需考虑像素强度。

首先,计算一个二值图的一到三阶矩,直接用moments。

		Moments m = moments(img,true);
		double c_x = m.m10/m.m00;
		double c_y = m.m01/m.m00;

可直接求出质心c_x,c_y.

3 不变矩 

见《学习opencv》,这里不做介绍

4 Orientation

原理出处见这里:http://people.csail.mit.edu/bkph/courses/papers/RoVis/ch3_BI_geometric.pdf

计算公式也不难:http://en.wikipedia.org/wiki/Image_moment

该理论跟最小二乘法直线拟合有点像,区别在于前者使用矩来计算(输入是一整张图像),后者通过拟合方法计算(输入是一系列点坐标)。

    cv::Moments m =cv::moments(img);
    //中心
    float x_ = m.m10/m.m00;
    float y_ = m.m01/m.m00;
    //中心距, my_mu20 = mu20
    float my_mu20 = m.m20 - x_*m.m10;
    float mu20 = m.mu20;
    //计算旋转,两种计算等价,theta = theta2
    float theta = 0.5*atan2(2*m.mu11,(m.mu20-m.mu02)) * 180/3.1415;
    
    //wiki公式
    float u20 = m.m20/m.m00 - x_*x_;//u20 = m.mu20/m.mu00 = m.mu20/m.m00
    float u02 = m.m02/m.m00 - y_*y_;
    float u11 = m.m11/m.m00 - x_*y_;
    float theta2 = 0.5*atan2(2*u11,(u20-u02)) * 180/3.1415;

后来用fitLine取参数CV_DIST_L2做了简单对比,结果差别不大。

		Vec4f linePara;
		fitLine(linePts,linePara,CV_DIST_L2,0,0.01,0.01);

灰色是二值点,白色粗线是矩计算结果,白色细线是拟合计算结果:

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值