了解opencv中的Moments函数
Posted
技术标签:
【中文标题】了解opencv中的Moments函数【英文标题】:Understanding Moments function in opencv 【发布时间】:2014-03-18 05:14:13 【问题描述】:在 OpenCV 中使用矩求中心坐标时,使用
Point(moment[i].m10/moment[i].m00,moment[i].m01/moment[i].m00);
有人可以向我解释一下吗?“m10”、“m00”、“m01”和“m00”是什么意思??
【问题讨论】:
时刻是如何定义的? 你要这个:Moments moment(InputArray array, bool binaryImage=false) ? 【参考方案1】:图像处理中矩的定义是从物理学中借来的。假设图像中每个像素的权重等于其强度。那么你定义的点就是图像的质心(a.k.a. center of mass)。
假设 I(x,y) 是图像中像素 (x,y) 的强度。那么 m(i,j) 是所有可能的 x 和 y 的和:I(x,y) * (x^i) * (y^j)。
Here 你可以阅读 OpenCV 中使用的时刻的文档。它们被称为原始时刻。
而here 你可以阅读关于各种图像矩(原始矩、中心矩、尺度/旋转不变矩等)的 wiki 文章。很不错,推荐阅读。
【讨论】:
感谢@Michael,但我仍然对此感到困惑。 m(i,j) 你的意思是上面的 m10,m00 等等。但是为什么它必须除以 m00?为什么这个 I(x,y) * (x^i) * (y^j)?跨度> 质心是像素的加权平均值(其中每个权重是强度)。某物的加权平均值是:权重(i)*item(i)的总和除以权重(i)的总和。在图像权重总和相等的情况下,灰度总和等于 m00。 您写道,“假设图像中的每个像素的权重等于其强度”。从 Wikipedia 链接来看,“图像时刻是图像像素的 强度 的某个特定加权平均值(时刻)”。这里的强度是指color intensity
(与“颜色饱和度”相同)吗?提前谢谢你。
@Solace,我说的是单色图像,而不是彩色图像。每个像素只有一个值——它的强度(权重)。函数 Moments() 需要一个单通道图像。如果您使用的是彩色图像,您可以通过多种不同的方式将其转换为单通道图像。
在获得所有 m00、m01 后如何获得轮廓的面积。等等?以上是关于了解opencv中的Moments函数的主要内容,如果未能解决你的问题,请参考以下文章