我想从源 RAW 图像创建两个图像,在这种情况下是 Canon CR2。我已经对 RAW 转换进行了排序和一些处理。我的最终图像需要是带有 alpha 蒙版的 PNG 和 95% 质量的 JPG,其中 alpha 区域用黑色填充。我在这里设置了一个测试图像,显示了我在检测主题方面取得的进展:
所以基本上,如您所见,我想将主题与灰色背景隔离开来。我还想尽可能多地屏蔽掉灰色背景上的任何阴影,最好是完全屏蔽掉。我正在使用我编写的 Python2 脚本,到目前为止主要是 scikit-image。如果需要,我会换成另一个 Python 兼容的图像处理库。此外,我需要在内存中执行所有步骤,以便在使用 PNG 和 JPG 进行所有图像处理结束时只保存一次。所以没有 subprocess.Popen 等。
您将从示例图像中看到,至少我认为我已经找到了解决方案。对于您在示例中看到的图像,我使用了 scikit-image 及其 Canny 边缘算法。
我现在需要做的是弄清楚如何用白色填充 Canny 图像中的主题,以便获得合适的纯白色蒙版。在我的大多数示例图像中,应用 Canny 过滤器后,似乎可以对主体本身进行良好的边缘检测,通常具有主要的完整边界。但是,我猜我将来可能会得到一些不会发生这种情况的图像,并且主要边界可能会有小中断。如果它看起来会成为以后处理步骤的问题,我需要处理这种情况。
另外,我想知道是否需要将整体边框增加一个像素并将其设置为与我的 0,0 像素相同的颜色(即背景中的第一个像素顶部/左侧),然后运行我的 Canny 过滤器,然后缩小我的再次边框1px?这应该允许检测到底部边缘以及主体何时打破框架的顶部或侧面?
所以真的,我只是在寻找建议,想知道下一步该去哪里买一个漂亮的固体面具。它需要保持二进制作为二进制掩码,(即主体之外的所有内容都需要完全掩码为 0)。这意味着我需要运行一些东西,在某个时候寻找低于某个像素体积的孤立像素岛——可能是最后一步,并将它们添加到蒙版(例如 50px 左右)。
此外,总体而言,经验法则是,如果主体的一点点被蒙版而不是更少的背景被蒙版(即我希望所有或尽可能多的背景/阴影区域被蒙版),效果会更好。 )
我已经尝试了一些东西,但还没有达到目标。我在想一些类似于 sci_kit 中 find_contours 的东西可能会有所帮助。但是我不能从 scikit-image 示例中完全看到我将如何选择然后将检测到的轮廓变成蒙版。我今天花了很多时间进行实验但没有成功,所以我想我会在这里问一下,看看是否有人有更好的想法。
这是一种看起来很有前途的基于 OpenCV 的方法:
如果可能的话,我想坚持使用 scikit-image 或其他一些可互换的 Python numty 图像库。但是,如果使用 OpenCV 或其他库更容易、更快捷,那么只要我能坚持使用 Python,我就会对想法持开放态度。
还值得记住的是,对于我的应用程序,我将始终拥有没有主题的背景图像。所以也许我应该走这条路。问题是我认为简单的差异方法不能很好地处理阴影。在我看来,在某些时候需要某种边缘检测才能获得更好的掩蔽方法。
“来源 1”
“来源 2”
“来源 3”
“结果 1”
“结果 2”
“结果 3”