通过Mean-Shift分段计算对象

时间:2013-03-30 20:33:59

标签: algorithm opencv image-processing image-segmentation

我正在尝试使用均值漂移分段来计算图像中找到的对象。我一直在OpenCV中使用[pyrMeanShiftFiltering][1]。使用以下代码,我能够生成已分段的图像。但是,我不知道如何实际计算该图像中“项目”的数量。

只需在此图片上运行pyrMeanShiftFiltering( img, res, spatialRad, colorRad, maxPyrLevel );
unsegmented books

生成图片 enter image description here

在这个例子中,它似乎并没有太大的不同,尽管有一些图像,其中分割在颜色和这样的存在上产生巨大的差异。但是,对于大多数测试用例,我将假设颜色非常明显,边缘不同(因为它们在给出的例子足以在图像本身上使用边缘检测。

基于此,我如何才能找到在该图像中找到的对象数量?我正在寻找一些代码,虽然任何正确方向的戳都会有所帮助。

1 个答案:

答案 0 :(得分:2)

如果对象包含不同的颜色(并且这些颜色是独特的),最简单的灵魂就是计算那里有多少个聚类(由于页面为白色/黄色,因此删除了白色的聚类)。

在您显示的图像上,您也可以使用角点检测器,因为您有非常独特的角落,然后查看周围并按颜色过滤这些角落(周围的颜色必须包含一些颜色和白色(从页面))然后匹配位于同一垂直线的角落并最终计算它们。

另一个想法是从页面推断白色/黄色(聚类+直方图滤波)并计算不同的斑点。

也许最好的方法是通过寻找封面颜色(蓝色,绿色)和最接近的白色=>来从页面推断白色/ yeelow颜色。找到blob。这些斑点可以标记为最接近的封面颜色。然后你有blob显示页面,并根据最接近的封面颜色进行标记。 那些斑点可能被分成几块(一本书部分覆盖另一本书),两个不同的斑点可能属于同一个对象(一本有多个颜色封面的书) 但是你现在那些斑点必须是矩形的。因此,您可以在该二值化图像中找到线条,并尝试将它们与最近的线条连接起来。然后你最终会有一个匹配一本书的blob。最后你可以数数吧。