c语言提取质心坐标,求图像质心的C语言实现

在讲图像质心之前,首先需要了解图像矩的概念。

对一副二维连续图像f(x, y),p + q阶矩的定义为:

a7b36b8fe03c896ecf4bd4291b92d55a.png

其中p和q为非负整数,对离散化的数字图像,上式可变为:

37ec66cad66be6a343ed23fd336e98cc.png

通常,前10个矩(p + q ≤ 3)获得最为广泛的应用,而且它们都有实在的物理意义。0阶矩(m00)为物体的质量,1阶矩(m10, m01)表示物体的质心,2阶矩(m20, m02, m11)表示旋转半径,3阶矩(m30, m03, m12, m21)描述物体的方位和斜度。基于低阶的10个矩,能给出一组不变矩, 不变矩有平移、旋转、缩放不变的特性,由于其独特的性质而获得广大图像处理研究者的喜爱,并在图像分类、模式识别、计算机视觉等图像处理和分析领域获得广 泛的应用。

由上可知,图像质心的的坐标公式为:

a91fcfeddc70eb551c6fc79dac9c3866.png

质心即是第0阶矩和第1阶矩。

以下是一段在OpenCV中实现的求图像质心的C语言程序,输入的参数依次为:当前二值图像数据指针、图像宽度、图像高度、质心横坐标指针、质心纵坐标指针。

//求图像质心 void calCentroid(uchar* data, int width, int height, float *x, float *y) { int i, j; float m00 = 0, m10 = 0, m01 = 0; for(i = 0;i < height;i++) { for(j = 0;j < width;j++) { uchar tmp = data[i * width + j]; m00 += tmp; m10 += tmp * j; m01 += tmp * i; } } if(m00 != 0) { *x = m10 / m00; *y = m01 / m00; } } --End--

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值