相关疑难解决方法(0)

如何裁掉凸性缺陷?

我正试图从轮廓中检测并精确定位图像中的一些物体.我得到的轮廓通常包括一些噪音(可能形成背景,我不知道).对象看起来应该类似于矩形或正方形,如:

在此输入图像描述

我通过形状匹配(cv::matchShapes)来获得非常好的结果,以检测其中包含这些对象的轮廓,有无噪音,但是在出现噪音的情况下我会遇到精确定位的问题.

噪音看起来像:

在此输入图像描述 要么 在此输入图像描述 例如.

我的想法是找到凸起缺陷,如果它们变得太强,就会以某种方式去除导致凹陷的部分.检测缺陷是可以的,通常我会在每个"不需要的结构"中得到两个缺陷,但我仍然坚持如何决定从轮廓中删除点的位置和位置.

这里有一些轮廓,它们的面具(因此你可以很容易地提取轮廓)和包括阈值凸面缺陷的凸包:

在此输入图像描述在此输入图像描述在此输入图像描述

在此输入图像描述在此输入图像描述在此输入图像描述

在此输入图像描述在此输入图像描述在此输入图像描述

在此输入图像描述在此输入图像描述在此输入图像描述

在此输入图像描述在此输入图像描述在此输入图像描述

在此输入图像描述在此输入图像描述在此输入图像描述

在此输入图像描述在此输入图像描述在此输入图像描述

在此输入图像描述在此输入图像描述在此输入图像描述

在此输入图像描述在此输入图像描述在此输入图像描述

我是否可以在轮廓中走动并在局部判断轮廓是否执行"左转"(如果顺时针方向行走),如果是,则移除轮廓点直到下一个左转弯?也许从凸性缺陷开始?

我在寻找算法或代码,编程语言应该不重要,算法更重要.

opencv image-processing contour computer-vision convexity-defects

10
推荐指数
2
解决办法
1976
查看次数

如何删除由形态学引起的blob的扩展

我有一个像我正在侵蚀和扩张的图像:

kernel = np.ones((5,5),np.float32)/1
        eroded_img = cv2.erode(self.inpainted_adjusted_image, kernel, iterations=10)
        dilated_img = cv2.dilate(eroded_img, kernel, iterations=10)
Run Code Online (Sandbox Code Playgroud)

这是侵蚀和膨胀的结果:

在此输入图像描述

然后我就像这样采取它的门槛:

self.thresh = cv2.threshold(dilated_img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
Run Code Online (Sandbox Code Playgroud)

但是阈值给了我一个不必要的扩展,我在下面的图像中标记了(红线上方的区域是不需要的区域):

在此输入图像描述

如何摆脱这个不受欢迎的区域?有没有更好的方法来做我正在做的事情?

python opencv image-processing scipy

8
推荐指数
2
解决办法
246
查看次数