【问题标题】:Counting Objects via Mean-Shift Segmentation通过 Mean-Shift 分割计算对象
【发布时间】:2013-03-21 07:59:03
【问题描述】:

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

只需在这张图片上运行pyrMeanShiftFiltering( img, res, spatialRad, colorRad, maxPyrLevel );

产生这个图像

在这个例子中,它看起来并没有太大的不同,尽管有些图像的分割在颜色等方面产生了巨大的差异。但是,对于大多数测试用例,我将假设颜色 不会 非常明显,并且边缘将 明显(因为它们在给出的示例)足以在图像本身上使用边缘检测。

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

【问题讨论】:

    标签: algorithm opencv image-processing image-segmentation


    【解决方案1】:

    如果对象包含不同的颜色(并且这些颜色是独特的),最简单的方法是计算有多少簇(删除白色的簇,因为页面是白色/黄色的)。

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

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

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

    【讨论】:

    • 我添加了更多关于我将使用的典型图像的信息。但是,我想尝试一些不同的东西。如果你能提供一点代码,这将与 OpenCV 一起使用,在使用集群颜色或计算不同 blob 的方向上,将不胜感激。
    • 背景总是白色的?
    • 不一定,但它应该始终与我将尝试识别的对象区分开来。
    • 对于原型设计,我使用 EmguCV + AForge .NET(具有计算 blob 的功能)+ Accrod .NET(机器学习)。这些库的文档很棒,因此您可以在 Internet 上搜索如何使用 AForge .NET 或类似方法计算 blob。我没有在 OpenCV 中看到可以处理 blob 的函数(我认为您需要下载扩展程序?)
    • 最好的方法是使用MATLAB。
    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 2015-02-17
    • 2015-08-01
    • 2021-04-09
    • 1970-01-01
    • 2011-07-09
    • 2015-07-16
    • 2019-08-11
    相关资源
    最近更新 更多