2009-11-22 14 views
5

Así que aquí está mi problema:imagen perceptual Downsampling

tengo una imagen, esa imagen es grande (alta resolución) y tiene que ser pequeño (resolución mucho más baja).

Así que hago lo ingenuo (matar a cada dos píxeles) y el resultado parece pobre.

Así que trato de hacer algo más inteligente (filtrado de paso bajo utilizando una transformada de Fourier y re-muestreo en el espacio de Fourier) y el resultado es un poco mejor, pero aún bastante pobre.

Así que mi pregunta es si existe un algoritmo (o implementación) de muestreo de imágenes con motivación perceptiva.

edit: Si bien conozco una serie de técnicas de remuestreo, mi aplicación está más preocupada por preservar las características perceptivas, en lugar de producir imágenes uniformes.

Edit2: es seguro asumir que tengo un cierto nivel de familiaridad con el procesamiento de señal digital, circunvoluciones, las transformadas de tren de ondas, etc

+0

bien, ¿qué tipo de imágenes está tratando de ¿escala? ¿Dibujos de líneas? ¿Fotografías? He tratado principalmente con imágenes de video, y los algoritmos de escalado que funcionan bien en video pueden no funcionar bien cuando intentas preservar características específicas (como líneas en la animación tradicional, por ejemplo). –

+0

Por el momento digamos que es la imagen de un oso (eliminado de su fondo) y una vez redimensionado quiero que todavía se vea como un oso. – tzenes

+1

oso dibujado a mano? Una fotografía de un oso? Pedobear? ¿Por qué factor estás escalando? Según su descripción ("matar a todos los demás píxeles"), parece que solo está escalando por un factor de 2, por lo que un buen algoritmo de propósito general debería funcionar bien (a menos que su imagen sea lineal con líneas de 1 píxel de ancho, caso, no se verá tan bien ...) Me gustaría saber cómo funciona ese enfoque de vectorización para usted. –

Respuesta

2

Bicubic interpolation es generalmente considerado como suficientemente bueno, pero no hay una solución perfecta, que depende de personas y en las propiedades de la imagen que se remuestrea.

Enlaces relacionados:

ni siquiera saben que la nitidez también fue llamado acutance.

Aliasing es un problema que puede producirse cuando se reduce la resolución ingenuamente.

+2

Estoy familiarizado con las técnicas de remuestreo más mundanas (gaussianas, bicúbicas, Lanczos), son efectivas para la ampliación, pero a la reducción de escala pierden demasiada información perceptualmente importante. No había considerado usar una máscara de enfoque, que probablemente resolverá la mayoría de mis problemas, pero todavía habrá algunos problemas donde las líneas que deberían desaparecer se conservarán y viceversa, según mi configuración. – tzenes

+1

En este caso, aparte del tallado de costuras ya mencionado en otra respuesta, solo veo la "vectorización de la imagen de alta resolución seguida de la visualización de la versión vectorizada en una resolución más baja". –

+0

Un algoritmo de vectorización definitivamente ayudaría en eso. Quizás podría aplicar una métrica de prominencia (es decir, Itti) para dar vectores de pesos relativos y hacerlos desaparecer más allá de ciertos umbrales. Déjame jugar con esto un poco, podría ser la solución que estoy buscando. – tzenes

0

Puede intentar con un algoritmo de cambio de tamaño de contenido. Ver: http://www.seamcarving.com/

+0

Si bien el reorientado de imagen está más en línea con lo que trato de hacer, la aplicación real es insuficiente. La retardación de imágenes se basa en identificar características importantes y recortarlas de un "fondo". Donde lo que estoy buscando hacer es tomar la imagen de decir, un oso, y remuestrear que – tzenes

1

Pascal tiene razón. Depende de la imagen y de lo que quieras. Algunos factores:

  • alterar los bordes afilados
  • colores preservando
  • velocidad algoritmo

Ésta es your method.

Algunos otros:

cuenta que a veces remuestreo hacia abajo se puede obtener un resultado más agudo que, por ejemplo, usando una cámara de baja resolución, porque Habrá bordes en la imagen de alta resolución que no pueden ser detectados por un dispositivo de menor resolución.

Nota al margen: muchos algoritmos (especialmente el vecino más cercano) se pueden optimizar si se reduce en un número entero (por ejemplo, dividiendo por 4 o 6).

+0

Como la mayoría de las personas, has olvidado el paso vitalmente importante del paso bajo al filtrar primero la imagen. El solo uso de uno de los métodos de interpolación que ha enumerado dará como resultado un alias y la imagen se verá como basura. – Timmmm

5

leyeron:

http://www.dspguide.com/

OK, que es bastante una lectura. Pero entender el diseño del filtro sería útil.

En general, el proceso para escalar una imagen de W1 x H1 a W2 x H2 donde W1, W2, H1, H2 son enteros, es encontrar nuevos W3, H3 de modo que W1 y W2 sean factores enteros de W3 y H1 y H2 son factores enteros de H3, y luego rellenar la imagen original con ceros (que se utilizan para espaciar los píxeles de la imagen original) de modo que ahora tiene un tamaño de W3 x H3. Esto introduce altas frecuencias debido a discontinuidades en la imagen, por lo que aplica un filtro de paso bajo a la imagen y luego diezma la imagen filtrada a su nuevo tamaño (W2 x H2). Suena como si ya estuvieras tratando de hacer esto, pero el filtrado se puede hacer en el dominio del tiempo para que la transformación de Fourier no sea realmente necesaria.

En la práctica, el proceso que acabo de describir está optimizado (notará que al aplicar un filtro de convolución a la imagen escalada la mayoría de los términos serán 0, por lo que puede evitar la mayoría de las operaciones de multiplicación en su algoritmo, por ejemplo, y como terminas tirando muchos de los resultados filtrados, no necesitas calcularlos, por lo que terminas con un puñado de multiplicaciones y adiciones para cada píxel en la imagen objetivo, básicamente. averiguar qué coeficientes usar.)

libswscale en el proyecto ffmpeg hace algo como esto, creo. Compruébelo usted mismo:

http://gitorious.org/libswscale

Como otros señalaron, (y que aparentemente notado) diezmando la imagen introduce aliasing artefactos. No puedo estar seguro de su implementación de remuestreo, pero la técnica tiene errores interesantes dependiendo del tamaño de la ventana que usa y otros detalles de implementación.

0
+0

Por lo que puedo decir, esto no filtra la imagen correctamente y no se debe usar para reducir la resolución. – Timmmm

+0

Dado que se usa en Paint.NET para la reducción de resolución, diría que hace bien su trabajo. También comencé a usarlo en mi propio software y los resultados están bien: http://braincrunch.tumblr.com/post/13459650973/maperitive-beta-subpixel-accuracy –

+1

@Timmmm Si tiene algo que usted siente es Es importante decirlo, explícalo adecuadamente en tu propia respuesta. Comentar todas las respuestas existentes sin dar detalles nunca parece muy constructivo. Así no es como funciona este sitio. –

Cuestiones relacionadas