2017-02-24 100 views
1

如何使用Python(也可能是一些工具,如OpenCV)从左侧图像转到右侧图像?在Python中以编程方式剪切图像/删除背景

original processed

我做了使用裁剪的在线工具这一手。我在图像处理(特别是在实践中)完全不知情。我正在考虑应用一些边缘或轮廓检测来创建一个蒙版,我将稍后应用于原始图像,将其他所有内容(除了感兴趣区域之外)都涂成黑色。但我失败了。

目标是预处理非常相似图像的数据集,以便训练一个CNN二元分类器。我试图通过在接近感兴趣区域的地方裁剪图像来训练它,但是噪音非常高,CNN学到的东西一无所获。

有人可以帮我做这个预处理吗?

回答

1

我用OpenCV的watershed算法来解决你的问题。如果您阅读this great tutorial,您可以了解如何使用它,所以我不会在很多细节中解释这一点。

我选择了四个点(标记)。一个位于你想要提取的区域,一个位于室外,另外两个位于内部的低位/高位部分,对你不感兴趣。然后我创建了一个空的整数数组(即所谓的标记图像)并用零填充。然后我给标记位置的像素分配唯一的值。

下图显示了标记位置和标记值,得出的原始图像:

enter image description here

我也可以选择在同一区域内多个标记(例如几个标记属于该区域你想提取),但在这种情况下,它们应该都具有相同的值(在本例中为255)。

然后我用分水岭。第一个输入是您提供的图像,第二个输入是标记图像(除了标记位置以外的任何地方都是零)。算法将结果存储在标记图像中;您感兴趣的区域被打上了标记区域的值(在这种情况下255):

enter image description here

我设置没有255值为零的所有像素。我用3x3内核扩大了获得的图像三次。然后我用的膨胀图像作为原始图像掩码(我设置掩码为零以外的所有像素),这是结果我得到:

enter image description here

你可能会需要某种方法是会自动找到标记。这项任务的难度在很大程度上取决于输入图像的集合。在某些情况下,该方法可能非常简单直接(如上面链接的教程),但有时这可能是一个棘手的难题。但是我不能推荐任何东西,因为我不知道你的图片通常如何(你只提供了一张)。 :)

+0

看起来很有希望。所有的图像都非常相似,所以我可以将整个数据集的平均值和/或标准值设置为掩码。我会尽力让它成为今天或明天,我会让你知道它是如何发生的。好的工作,谢谢! – TasosGlrs