How do i fill “holes” in an image?

2019-02-13 15:46发布

I have photo images of galaxies. There are some unwanted data on these images (like stars or aeroplane streaks) that are masked out. I don't just want to fill the masked areas with some mean value, but to interpolate them according to surrounding data. How do i do that in python?

We've tried various functions in SciPy.interpolate package: RectBivariateSpline, interp2d, splrep/splev, map_coordinates, but all of them seem to work in finding new pixels between existing pixels, we were unable to make them fill arbitrary "hole" in data.

3条回答
Viruses.
2楼-- · 2019-02-13 16:25

I made my first gimp python script that might help you: my scripts

It is called conditional filter as it is a matrix filter that fill all transparent pixels from an image according to the mean value of its 4 nearest neighbours that are not transparent. Be sure to use a RGBA image with only 0 and 255 transparent values.

Its is rough, simple, slow, unoptimized but bug free.

查看更多
We Are One
3楼-- · 2019-02-13 16:31

What you want is called Inpainting.
OpenCV has an inpaint() function that does what you want.

查看更多
对你真心纯属浪费
4楼-- · 2019-02-13 16:32

What you want is not interpolation at all. Interpolation depends on the assumption that data between known points is roughly contiguous. In any non-trivial image, this will not be the case.

You actually want something like the content-aware fill that is in Photoshop CS5. There is a free alternative available in The GIMP through the GIMP-resynthesize plugin. These filters are extremely advanced and to try to re-implement them is insane. A better choice would be to figure out how to use GIMP-resynthesize in your program instead.

查看更多
登录 后发表回答