Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV-BW图像PCA分析-面积与形状-是否已经实现?_C++_Opencv_Shape_Pca_Area - Fatal编程技术网

C++ OpenCV-BW图像PCA分析-面积与形状-是否已经实现?

C++ OpenCV-BW图像PCA分析-面积与形状-是否已经实现?,c++,opencv,shape,pca,area,C++,Opencv,Shape,Pca,Area,在bw图像上检测对象的形状。对象为黑色连续形状,背景为白色。 我们使用PCA()获取对象方向并对齐对象。当前,形状本身(轮廓上的点)是opencv PCA实现的输入。这通常效果很好。但有时在对象边界上会有小的污垢,导致形状绕过污垢。这会在一侧产生更多的点和更多的权重,从而稍微转动对象 想法:我们使用物体的面积作为PCA分析的输入,而不是轮廓。这里的问题是,检查所有点是否在轮廓内,然后将其用于PCA会降低应用程序的速度。这部分速度将慢52352倍 新方法:我们在图像中随机选取点,检查它们是否在形状

在bw图像上检测对象的形状。对象为黑色连续形状,背景为白色。 我们使用PCA()获取对象方向并对齐对象。当前,形状本身(轮廓上的点)是opencv PCA实现的输入。这通常效果很好。但有时在对象边界上会有小的污垢,导致形状绕过污垢。这会在一侧产生更多的点和更多的权重,从而稍微转动对象

想法:我们使用物体的面积作为PCA分析的输入,而不是轮廓。这里的问题是,检查所有点是否在轮廓内,然后将其用于PCA会降低应用程序的速度。这部分速度将慢52352倍

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

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


在对象周围画直线不是一个选项。

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

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

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


>加起来,在检测轮廓之前,你可以使用模糊滤镜。

< P>因为我们已经收到了关于你的问题的非常有限的信息(张贴图像会有很大帮助),而且你似乎不知道噪声的概率密度函数,你最好的办法是考虑噪声是高斯的。 因此,根据您的直觉,我建议的方法是取位于对象内部的几个随机点(我指的是统计相关但不会增加那么多的计算时间),然后计算PCA

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

一旦你们有了足够的点,停止,计算旋转角度的平均值:这是对真实角度的一个不错的估计。还要计算标准偏差,以获得估计质量的度量。通过“足够的点”,你可以认为,根据中心极限定理,30点通常被认为是代表底层人口的“足够”。
如果您愿意,您可以在许多方面对该方法进行改进,例如,一旦收集了足够多的点,就可以对真实角度进行稳健估计。这一切都取决于你手头的数据……把我的建议作为一个起点。

我不知道噪音看起来如何,但当你说“小污垢”时,我认为可能只有几个像素比物体本身小得多,但它可能附着在物体上。为了减少这种噪声,可以对二值图像执行打开(形态学)


您可以共享的任何样本图像?以及代码的相关部分获取轮廓的傅里叶描述符,将高于选定阈值的频率分量设置为零,然后进行傅里叶逆变换。通过这种方式,您可以获得轮廓的平滑版本,您可以对其应用PCA。请看一个很好的演示。