¿Existe un software para unir un gran número de pequeñas imágenes digitales sin rotarlas ni estirarlas? [cerrado]

Tengo una gran cantidad de imágenes pequeñas (360x192), tomadas en secuencia como capturas de pantalla de un juego de computadora DOS 2D. Tienen una superposición decente y me gustaría unirlos en un gran compuesto. Debido a su propia naturaleza, cada imagen subsiguiente se ajustará a la perfección en píxeles sobre la siguiente o la anterior. Como tal, no se requiere ni se desea rotación, estiramiento o distorsión.

Existe una gran cantidad de software para unir panoramas fotográficos. Pero, lamentablemente, todos ellos aplican alguna distorsión, incluso cuando se les indica explícitamente que no lo hagan.

¿Existe algún software que intente realizar uniones perfectas en píxeles?

preguntado el 01 de febrero de 12 a las 22:02

Podrías escribir fácilmente un programa para hacerlo. Díganos qué idiomas puede utilizar. -

Prácticamente solo Perl, aunque soy bastante bueno con eso. Lo consideré, pero realmente no sabía por dónde empezar. -

Lo siento, Perl es un área en la que no tengo ni idea. Agregué la etiqueta para llamar la atención sobre la pregunta. -

Es posible que desee buscar proyectos que unan imágenes de microscopio. Están resolviendo el mismo tipo de problema, es decir, creando una imagen grande a partir de partes sin distorsiones. Mira esto har2009.org/program/events/149.en.html -

El PDF de esa charla parece estar roto. : / -

2 Respuestas

Mathematica 8 presenta funciones para hacer eso:

ImageAlign[img1, img2, "Transformation" -> "Translation"] 
FindGeometricTransform[img1, img2, "Transformation" -> "Translation"] 

Al establecer la opción "Transformación" en "Traducción", se le garantiza que la transformación resultante no tendrá ninguna de las "distorsiones" que está mencionando.

Más ejemplos en la documentación:

http://reference.wolfram.com/mathematica/ref/ImageAlign.html

http://reference.wolfram.com/mathematica/ref/FindGeometricTransform.html

Sé que se puede vincular Mathematica a perl, pero todavía no lo he probado.

EDIT: Usando el enlace que enviaste, se me ocurrió lo siguiente. El único problema es que necesita especificar de antemano el tamaño de la salida --- NB Probé solo las primeras 10 imágenes.

directory = "~/Downloads/done/";
files = FileNames["*.bmp", directory];

canvas = ImagePad[Import[files[[1]]], {{100, 100}, {500, 100}}, Transparent];
Do[
    i = Import[f];
    fun = FindGeometricTransform[canvas, i, "Transformation" -> "Translation"];
    If[Head@fun === FindGeometricTransform,
        Continue[]
    ];
    canvas = ImageCompose[
               canvas,
               ImagePerspectiveTransformation[i, fun[[2]], DataRange -> Full, PlotRange -> Transpose[{{0, 0}, ImageDimensions[canvas]}], Padding -> Transparent], 
               {1, 1, -1}],
 {f, files[[;; 10]]}]

enter image description here

Respondido 14 Feb 12, 09:02

Gracias por la sugerencia. Lo intentaré. :) - Mithaldu

FindGeometricTransform funciona muy bien e incluso puede lidiar con diferencias de brillo. Sin embargo, al ensamblar cosas con ImageCompose, solo extiende la imagen resultante horizontalmente, no verticalmente. ¿Cualquier sugerencia? - Mithaldu

Siento que estamos muy cerca del resultado que deseas. Es posible que desee publicar dos imágenes para que pueda ayudar con la sintaxis exacta de la composición final. De lo contrario, puede beneficiarse de un ejemplo de unión de imágenes que se encuentra en la diapositiva n. ° 18 de la presentación en library.wolfram.com/infocenter/Conferences/7967 - Matthias Odisio

Puede obtener algunos cientos de imágenes de muestra aquí: dl.dropbox.com/u/10190786/done.zip Estoy tratando de combinarlos en una imagen contigua, a la que luego puedo agregar otra cantidad arbitraria de imágenes. En este momento, estoy considerando dejar que Mathematica extraiga relaciones a través de la línea de comando para mí, así puedo hacer un procesamiento adicional como el ajuste de luminosidad y cortar el reloj / cursor a las imágenes, pero si pudiera mostrar alguna forma de hacerlo , seria muy interesante. - Mithaldu

He llegado hasta aquí y estoy bastante contento con el resultado: gist.github.com/8848a25a15da013ed1ad El único problema es que imprime algunas cosas de depuración cada vez que se imprime una relación de posición. No puedo encontrar información sobre cómo desactivarlo. - Mithaldu

Una de las bibliotecas definitivas para realizar uniones panorámicas es Herramientas panorámicas. Puede transferir o llamar desde Perl.

Tenga en cuenta que su especificación está en desacuerdo. A menos que sus imágenes sean 100% rectilíneas (es decir, tomadas 1: 1 por un generador de imágenes del mismo tamaño que la imagen), DEBE compensar la distorsión de la lente. Para unir fotos con precisión (píxel a píxel), la imagen necesita compensar la distorsión.

Respondido 02 Feb 12, 04:02

Ya lo intenté e incluso cuando ejecuto el optimizador solo en X e Y, hará cambios de subpíxeles y guiñada / inclinación / rotación. Además, mis imágenes son capturas de pantalla de un juego de computadora en 2D. Nunca hubo ninguna lente involucrada. He aclarado mi pregunta al respecto. - Mithaldu

También puede configurar Panotools para que no realice ajustes de imagen. Lo he usado en este modo para unir escaneos de cama plana. - usuario688635

¿Podría detallar la configuración que utilizó? - Mithaldu

En la línea de comando (la mayoría de las herramientas de GUI no tienen esto), configure a = b = c = 0. Esto estableció una imagen rectilínea. - usuario688635

Sí, eso es lo que hice con hugin. Ejecutó el optimizador con todos los desactivados excepto X / Y. Tiene una pestaña de entrada masiva para eso. Aunque no ayudó. Y no había ninguna opción para deshabilitar el desplazamiento de subpíxeles en primer lugar. - Mithaldu

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.