我在检测图像中的对象时遇到了很大的问题 - 我知道这个主题已经在许多论坛中得到了高度讨论,但我花了最近4天的时间来寻找答案却无法解决。
事实上:我有一个分支(http://cl.ly/image/343Y193b2m1c)的图片。我的目标是计算这张照片中的每一针。所以我必须面对几个问题:
将分支及其针与背景分开(在这种情况下没有问题)。
选择针的边框。这是一个很大的问题;我尝试了不同的方法,包括所有edge()函数,但问题总是一样的 - 针周围的边框没有关闭 - 这导致了最后一个问题:
针头重叠!这导致“针之间的正方形”,如果我使用imfill()或相同的公式,则填充而不是针。并且:针头集中的地方(一个地方有许多针头)几乎无法区分。
我试过分水岭,我试图增强对比度,Kmeans聚类,我尝试了imerose,imdilate和相关功能以及随后的边缘检测。我也尝试过滤和平滑图片,以便对针头进行“不锐化”,这样就不会将每一个小的颜色变化都识别为边框(这是另一个问题)。
我对matlab比较陌生,所以我不知道我要找什么。我试着按照用于Nuclei检测的MatLab教程 - 但有了这个,我就可以得到所有的绿色物体(所有针头一次)。
我希望以前没有提出过这个问题 - 如果是的话,我为双重帖子深表歉意。如果有人知道该做什么或使用什么方法,这将是非常棒的,并且本周开始这个非常糟糕的安全。
非常感谢您提前,
菲利普
答案 0 :(得分:1)
区分重叠对象非常非常困难,特别是如果您不知道需要区分多少个对象。与我所知的任何分割算法相比,你的大脑在区分重叠对象方面要好得多,因为它能够集成大量难以编码的信息。因此:如果您无法自己区分某些功能,请忘记通过代码执行此操作。
话虽如此,您可以通过某种方式获得针的近似计数:如果您可以将图像像素分为两类:“针”与“非针”,您知道如何图片中的大部分区域被针覆盖(拍照时可能包含尺子),然后可以将“针”像素的数量除以单针所覆盖的像素数来估算总数图像中的针数。由于重叠,这会略微低估针数,并且会低估针头的密度(由于更多的重叠),但它应该允许您在具有很多针头的针头和树枝之间自动进行比较。为了确定时间的变化,这应该是你的目标之一。
答案 1 :(得分:0)
我同意@Jonas =你遇到了一个巨大的问题。
让我提几点建议。
首先,沿着@Jonas的方向,而不是获得准确的计数,另一种粗略估计的方法是计算针的提示。显然,并非所有提示都清晰可见。但是,如果你能得到一个清晰的分支掩模,那么使用你自己提到的一些形态学操作来识别针尖可能相对容易。
第二,有什么办法可以获得更多信息吗?例如,如果你可以获得深度信息,它可能有助于区分针彼此(它不会完全解决任务,但它可能会有所帮助)。您可以从立体声中获取深度信息 - 也就是说,在移动相机的同时拍摄分支的两张照片。如果你有一个Kinect设备(或其他一些范围相机),你可以直接获得深度图......