使用sobel滤波器在边缘检测后提取每个对象

时间:2016-10-17 11:33:27

标签: python opencv image-processing image-segmentation scikit-image

Sobel Edge检测:
Sobel Edge detection

原始图片:
Original Image

我使用sobel边缘检测技术来识别给定图像中每个对象的边界。如何使用这些边界提取原始图像中的对象。我们可以忽略像素数较少的对象。

2 个答案:

答案 0 :(得分:1)

您所追求的是图像分割。由于家具元素之间的对比度低,以及纹理和阴影,您的情况看起来特别困难。

你也会意识到你需要定义你所谓的“对象”,你会发现在这个场景中隔离家具几乎是不可能的。

另一个坏消息:Sobel和Canny都不会很好地解决这个问题,因为真正的边缘会在某些地方不连续,会有很多错误的反应。

在我看来,目前的技术水平无法解决您的问题。

答案 1 :(得分:0)

什么

您希望将cv2.findContours()hierarchy enabled一起使用。试试retr_ccomp。

为什么

这将尝试找到可以填充的区域。或者更准确地说,是封闭轮廓中的孔。由于sobel滤波器返回软边缘,我们希望检测软边缘之间的闭合轮廓,这些边缘本身就是边缘。 是对象。

如何

您将同时获得contours,点列表和hierarchy元组列表。如果层次[i] [3]为正,则轮廓[i]具有父级,因此是一个洞,因为ccomp只允许2个级别。

我应该注意到我们已经处理了50年的图像分割问题,没有人有一个很好的解决方案。你会发现这种方法对任意场景来说都是不可靠的。