【发布时间】:2020-06-22 22:39:41
【问题描述】:
给定一个背景上的拼图图像(取决于任务的难度),识别上面的拼图数量并对图像上的每个拼图进行分类(对于每个拼图,说明它有多少个半岛和海湾)
背景可以是红色
或彩色
我设法使用 opencv 解决(或几乎解决)这个问题的简单版本(红色背景)(otsu 阈值处理 -> 扩张 -> 一些平滑卷积 -> findContours,然后将轮廓传递给某个分类器)
但是当我尝试解决一个复杂的版本时,我遇到了严重的困难。这个
是迄今为止我使用 otsu thresholding 和 erode + dilate 取得的最好成绩。看来,这种阈值方法对于硬背景效果不佳。
我的数据集非常小(少于 10 张图像),所以我想它不可能使用一些深度学习分割技术。但是我可以使用一些预训练的模型吗? 这是我的第一个简历问题,所以我对此知之甚少。我有点想不通,请您帮助我。
谢谢!
【问题讨论】:
-
在您的第二张图片上。检查您感兴趣的 Blob 的大小。与其他“噪音”相比,它们显得相当大。你为什么不根据面积过滤你的斑点?过滤器不会给你一个完美的分割,因为你的一些 blob 被破坏了,但它是一个很好的近似值。此外,您可以在过滤掉较小的 blob 后尝试合并 blob 位!
-
通过 cv2.inRange() 在几乎恒定的颜色背景(如您的第一个示例)上使用颜色阈值来阈值您的图像,而不是 OTSU 阈值。使用形态来清理较小的区域。如果您需要删除更小或更大的区域,则获取轮廓并按区域过滤。
-
具有恒定背景的图像很容易解决,但对于彩色图像则似乎很难。
-
另外,在第二张图像上,尝试中值/平均滤波器,然后进行 HSV 转换。按照建议,通过在 V 通道上搜索高值像素来执行阈值处理,然后执行区域过滤。这应该给你一个很好的分割掩码。顺便说一句,我喜欢你的用户名。这是我醒来时的第一感觉。
标签: python opencv deep-learning computer-vision image-segmentation