我有一个大的图像,其中包含一个背景感兴趣的“斑点”。我有所有气泡的位置(质心,包围盒,面积)。我想在图像中裁剪有限数量的固定大小的区域,这样我就可以捕捉到大部分的气泡。下面是同一图像中1、2或3个裁剪区域的示例。
这个例子显示,裁剪1区域(红色)相对容易:只要选择尽可能多的气泡区域。这可以通过尝试所有的方法来解决,也可以通过使用核密度估计器或类似的方法来计算一个blobs的密度。
但是,种植2个区域(以虚蓝色表示)并不仅仅是在上面选择的第一个区域之后种植下一个最好的作物。这是一个新的问题,我需要找到两种作物的最佳组合。尝试两种作物的所有组合(蛮力)可能会导致计算成本过高(我有许多图像要处理,而且它们很大)。
同样,种植3个区域(绿色)是一个新的问题,而蛮力更不适合这个问题。在这个特殊的例子中,3个区域中的2个与蓝色的情况相同,并添加了一个新的区域,但这不是一般情况(我只是想展示一个稍微复杂的场景)。
我不知道解决n作物问题的算法。我想知道这个问题是否有一个理论上的/众所周知的解决办法。
此外:
提前谢谢你的指点。
PS:编码语言在这里并不重要,因为算法的核心(在给定块的位置/大小的情况下找到作物的最佳位置)只需要计算小阵列(每幅图像的位置/大小为100块)。我可能会用Python或R。
发布于 2016-01-05 21:41:05
如果blob相对较小,如图中所示,您可以使用blob中心x,y对运行k均值聚类。python learn包相当成熟,应该运行良好:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html ( KMeans分类器的函数fit_predict )。
K是一个输入,表示你想要的簇数。该算法将blobs (样本)分解成k个簇(集合)。然后,你可以计算每个集合的x,y帧(min,max-x,min,max-y),还可以包括各个小块的大小,或者只是取它们的最大值(如果它们很小)。
然后,您可以根据它们的#块/帧面积比率对集群进行排序,并将它们相加,例如,直到覆盖足够多的块(完成)--或者整个区域变得太大(在这种情况下,用更大的k重新运行)。
https://stackoverflow.com/questions/29776583
复制相似问题