我用OpenCV的watershed算法来解决你的问题。如果您阅读this great tutorial,您可以了解如何使用它,所以我不会在很多细节中解释这一点。
我选择了四个点(标记)。一个位于你想要提取的区域,一个位于室外,另外两个位于内部的低位/高位部分,对你不感兴趣。然后我创建了一个空的整数数组(即所谓的标记图像)并用零填充。然后我给标记位置的像素分配唯一的值。
下图显示了标记位置和标记值,得出的原始图像:
我也可以选择在同一区域内多个标记(例如几个标记属于该区域你想提取),但在这种情况下,它们应该都具有相同的值(在本例中为255)。
然后我用分水岭。第一个输入是您提供的图像,第二个输入是标记图像(除了标记位置以外的任何地方都是零)。算法将结果存储在标记图像中;您感兴趣的区域被打上了标记区域的值(在这种情况下255):
我设置没有255值为零的所有像素。我用3x3内核扩大了获得的图像三次。然后我用的膨胀图像作为原始图像掩码(我设置掩码为零以外的所有像素),这是结果我得到:
你可能会需要某种方法是会自动找到标记。这项任务的难度在很大程度上取决于输入图像的集合。在某些情况下,该方法可能非常简单直接(如上面链接的教程),但有时这可能是一个棘手的难题。但是我不能推荐任何东西,因为我不知道你的图片通常如何(你只提供了一张)。 :)
看起来很有希望。所有的图像都非常相似,所以我可以将整个数据集的平均值和/或标准值设置为掩码。我会尽力让它成为今天或明天,我会让你知道它是如何发生的。好的工作,谢谢! – TasosGlrs