2012-02-28 3 views
6

Tengo imágenes de galaxias. Hay algunos datos no deseados en estas imágenes (como estrellas o rayas de aviones) que están enmascarados. No solo quiero llenar las áreas enmascaradas con algún valor medio, sino que las interpolas de acuerdo con los datos circundantes. ¿Cómo hago eso en Python?¿Cómo llené "agujeros" en una imagen?

Hemos intentado varias funciones en el paquete SciPy.interpolate: RectBivariateSpline, interp2d, splrep/splev, map_coordinates, pero todas parecen funcionar para encontrar nuevos píxeles entre los píxeles existentes, no hemos podido hacer que se llenen arbitrariamente " agujero "en los datos.

+8

Lanza dos o más sondas al espacio en diferentes direcciones. Después de que su vista ya no esté obstruida por el objeto que bloquea su vista desde la Tierra, pídales que tomen una fotografía de la sección de espacio que le interesa. Combinando las imágenes con alguna forma de interpolación, puede obtener una muy buena aproximación de cómo sería esa sección del espacio desde la Tierra si la vista no estuviera bloqueada. – Swiss

+0

@Swiss lol ... seriuosly? – neizod

+1

@Swiss: publica eso como respuesta, si es aceptado serás un héroe de Internet para siempre. – Gleno

Respuesta

6

Lo que quiere se llama Inpainting.
OpenCV tiene una función inpaint() que hace lo que quiere.

+0

gracias por la palabra clave correcta - inpaint. openCV podría no ser la mejor opción, ya que las imágenes astronómicas son de 64 bits por píxel, cuando openCV permite imágenes de 1 canal de 8 bits o 3 canales de 8 bits (máximo de 24 bits por píxel). He encontrado una implementación simple de la pintura en imprenta: https://github.com/gasagna/openpiv-python/blob/master/openpiv/src/lib.pyx – miceuz

+0

@miceuz Mathematica tiene una función Inpaint que puede operar en imágenes de doble precisión . –

+0

Ver también G'MIC para pintar, http://gmic.eu. Lo he usado para áreas NO_DATA con gran éxito. 'gmic -h -inpaint' – RobLabs

3

Lo que desea no es la interpolación en absoluto. La interpolación depende de la suposición de que los datos entre puntos conocidos son aproximadamente contiguos. En cualquier imagen no trivial, este no será el caso.

Realmente desea algo así como el relleno de contenido consciente que está en Photoshop CS5. Hay una alternativa gratuita disponible en The GIMP a través del plugin GIMP-resynthesize. Estos filtros son extremadamente avanzados y tratar de volver a implementarlos es una locura. Una mejor opción sería averiguar cómo usar GIMP-resintetizar en su programa.

+3

En realidad, resintetizar estaba allí antes, por lo que es "hay una alternativa de pago disponible en CS5 a través del relleno de contenido consciente" ... – Kheldar

1

hice mi primer script en Python gimp que pueden ayudar: my scripts

Se llama filtro condicional ya que es un filtro de matriz que se llenan todos los píxeles transparentes de una imagen de acuerdo con el valor medio de sus 4 más cercana vecinos que no son transparentes. Asegúrese de utilizar una imagen RGBA con solo 0 y 255 valores transparentes.

Es áspero, simple, lento, sin optimizar pero sin errores.

Cuestiones relacionadas