我有星系的照片。这些图像上有一些不需要的数据(如星星或飞机条纹)被掩盖了。我不只是想用一些平均值填充蒙面区域,而是根据周围的数据对它们进行插值。我如何在python中做到这一点?
我们尝试了 SciPy.interpolate 包中的各种函数:RectBivariateSpline、interp2d、splrep/splev、map_coordinates,但它们似乎都可以在现有像素之间找到新像素,我们无法让它们填充数据中的任意“洞” .
我有星系的照片。这些图像上有一些不需要的数据(如星星或飞机条纹)被掩盖了。我不只是想用一些平均值填充蒙面区域,而是根据周围的数据对它们进行插值。我如何在python中做到这一点?
我们尝试了 SciPy.interpolate 包中的各种函数:RectBivariateSpline、interp2d、splrep/splev、map_coordinates,但它们似乎都可以在现有像素之间找到新像素,我们无法让它们填充数据中的任意“洞” .
你想要的叫做Inpainting。
OpenCV 有一个inpaint()
功能可以满足您的需求。
你想要的根本不是插值。插值取决于已知点之间的数据大致连续的假设。在任何重要的图像中,情况都不会如此。
您实际上想要 Photoshop CS5 中的内容感知填充之类的东西。The GIMP 通过 GIMP-resynthesize 插件提供了一个免费的替代方案。这些过滤器非常先进,尝试重新实现它们是疯狂的。更好的选择是弄清楚如何在您的程序中使用 GIMP-resynthesize。
我制作了我的第一个可能对您有帮助的 gimp python 脚本: 我的脚本
它被称为条件过滤器,因为它是一个矩阵过滤器,根据其 4 个不透明的最近邻域的平均值填充图像中的所有透明像素。请务必使用只有 0 和 255 透明值的 RGBA 图像。
它粗糙、简单、缓慢、未优化但没有错误。