如何根据最长的水平边缘分割图像?

时间:2015-08-27 18:45:59

标签: matlab image-processing

例如,如何根据水平边缘拆分此书架的两排书?我使用sobel边缘检测器来检测边缘,但我不知道如何或使用什么条件来分割图像。

1 个答案:

答案 0 :(得分:1)

我可以推荐两种不同的方法来解决这个问题。

1)机器学习方法。这需要一些标记数据,指示边缘位置的y坐标,然后HOG特征加上随机森林分类器将完成这项工作。

2)图像处理方法。首先,让我们看看what i have done的输出:

enter image description here

蓝色表示得分是分离边缘的所需y位置。

这种方法总是依赖于对数据的一些假设,这里我们假设目标水平边缘分离书籍,其中包含许多垂直线。也就是说,我们正在寻找y坐标,其中找到未被垂直线切割的长水平线

一旦确定了我们的目标,其余的就开始了。

首先我们需要一个直线探测器,hough transform会这样做。

enter image description here

其次,我们使用两个分数投票选择每个y坐标作为最佳分隔符:

1)第一个分数描述了在附近有多少条水平线(之前找到)。我们称之为 s_h

2)第二个分数描述了附近有多少条长垂直线。我们称之为 s_v

enter image description here

最后,我们只需要结合 s_v s_h 来制作最终得分。例如,

s = s_h /(s_v + 1)

使用此功能,我们会在开头发布第一张得分地图。需要进行一些进一步的后期处理,但这并不困难。

这里只有一种解决方法,你可以在这里找到my code presented in a notebook