求图像质心的C语言实现

 

//这是其中一种方法··还有一种下次整理好再写吧~~唉~最近从杯具变洗具再杯具~~~
------------
转载自  jason懒羊羊

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

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

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

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

由上可知,图像质心的的坐标公式为:
求图像质心的C语言实现_第1张图片

质心即是第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--
作者: Steven Wang | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及 版权声明
网址: http://blog.stevenwang.name/image-centroid-217001.html

 

你可能感兴趣的:(c,语言,float,图像处理)