OpenCV - BW 图像的 PCA 分析 - 面积与形状 - 是否已经有实施?

OpenCV - PCA analysis on BW image - area vs shape - is there already an implementation?

在黑白图像上检测到物体的形状。物体为黑色连续形状,背景为白色。 我们使用 PCA (http://docs.opencv.org/3.1.0/d1/dee/tutorial_introduction_to_pca.html) 来获取对象方向并对齐对象。目前形状本身(轮廓上的点)是 opencv PCA 实现的输入。这通常效果很好。但有时对象边界上会有小污垢,导致形状绕过污垢。这会导致一侧更多的点和更多的重量,稍微转动物体。

想法:我们使用对象的区域而不是轮廓作为我们 PCA 分析的输入。那里的问题是检查所有点是否在轮廓内,然后将它们用于 PCA,这会减慢应用程序的速度。这部分会慢52352倍左右

新方法:我们在图像中取随机点,检查它们是否在形状内部,如果是,则将它们用于我们的 PCA。我们必须看看我们能否从这种方法中获得所需的一致质量。

在opencv中是否已经有类似的实现,它使用面积而不是形状? 另一种方法是在对象上放置一个网格,并使用对象内部的网格点进行 PCA。 是否已经有类似的东西可以直接使用或者是否需要快速实现这样的东西?

绕着对象走直线不是一种选择。

您可以更改的参数很少,这可能会改进您的系统。

首先是用于二值化图像的阈值。我不知道你的应用是关于什么的,但你可以使用其他颜色系统,或者通过色度标准化你的图像,然后应用新的阈值。

另一方面是排除面积大于或小于预期的形状(轮廓)。

总而言之,您可以在检测轮廓之前使用模糊滤镜。

鉴于我们收到的关于您的问题的信息非常有限(发布图像会有很大帮助)并且您似乎不知道噪声的概率密度函数,最好的办法是将噪声视为高斯分布.

因此,根据您的直觉,我建议的方法是采用位于对象内部的一些随机点(我的意思是一些统计相关但不会增加那么多计算时间)并计算 PCA。

在迭代循环中重复此过程,并将从应用 PCA 到对象形状得到的旋转角度存储在某处。

一旦你有足够的点就停下来,计算旋转角度的平均值:这是对真实角度的一个不错的估计。还计算标准差以衡量估计的质量。通过 "enough points" 你可以认为,根据 中心极限定理 .[=10,~30 点通常被认为是 "enough" 代表基础人口=]

如果需要,您可以通过多种方式改进此方法,例如,在收集到足够多的点后对真实角度进行稳健估计。这完全取决于您手头的数据...以我的建议为起点。

我不知道噪音看起来如何,但是当你说 "small dirt" 我认为它可能只是几个像素,比它本身的对象小很多,但它可能附加到目的。为了减少这种噪声,可以对二值图像执行开运算(形态学)。

http://docs.opencv.org/2.4/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.html