Pregunta:
¿Existen herramientas para nivelar automáticamente una imagen?
pkaeding
2010-12-07 12:28:14 UTC
view on stackexchange narkive permalink

Me pregunto si hay herramientas (independientes, complementos de Lightroom / Photoshop u otras) que puedan tomar una foto, buscar líneas que sean casi verticales u horizontales (por ejemplo, horizontes, postes telefónicos, etc.) y rotar automáticamente y recortar la imagen?

Este es un proceso manual para mí en este momento, y parece que podría automatizarse.

¿Existe algo como esto?

Estaba pensando que Image Magick podría lograr esto, pero luego encontré esto: http://www.wizards-toolkit.org/discourse-server/viewtopic.php?f=1&t=13597
Tenga en cuenta que girar su imagen incluso unos pocos grados es una operación destructiva comparable a ejecutar un filtro de desenfoque sobre su imagen. Eso puede estar bien, pero es mejor practicar en primer lugar cómo corregir las imágenes. (Y / o use una cámara que pueda girar automáticamente su sensor ligeramente para igualar un nivel).
si usa la interpolación lanczos3, ¿es más como ejecutar un filtro de nitidez sobre él :)
Original, bilineal, bicúbica, lanczos2: http://www.sequoiagrove.dk/images/rotateinterp.jpg
digikam parece tener un complemento para esto https://www.digikam.org/node/445
Cinco respuestas:
#1
+6
Matt Grum
2010-12-07 16:17:14 UTC
view on stackexchange narkive permalink

Es posible que haya programas que intenten hacer lo que usted describe, pero dudo que sea tan efectivo. Si la cámara se inclina ligeramente hacia arriba o hacia abajo, entonces podría tener una imagen perfectamente nivelada, a pesar de no tener una sola línea horizontal o vertical.

La razón de esto es que, a menos que su cámara esté completamente plana a lo largo del eje óptico (que corre paralelo a la lente), los postes de telégrafo, etc.no serán verticales en una imagen, incluso si la cámara Está nivelado: todas las líneas convergerán en un punto de fuga imaginario en el cielo. Del mismo modo, si la cámara no está orientada hacia una verdadera línea horizontal, no se mostrará horizontal en la imagen.

Es posible emplear un enfoque más sofisticado, ya sea intentando identificar el horizonte en las imágenes. , o incluso mejor agrupando líneas que comparten un punto de fuga común, estimando el ángulo de inclinación y, por lo tanto, el ángulo correcto para rotar la imagen, pero este proceso sería considerablemente más complicado.

¿Cómo podría un programa de procesamiento de imágenes saber qué es "nivel"?
@PatFarrell cosas como horizonte, edificios, postes o letreros, etc. Yo diría que sería mucho más fácil que el reconocimiento facial o la detección de sonrisas.
Donde vivo, rara vez se puede ver el horizonte, demasiados árboles. Supongo que el 99% de mis fotos no tienen un cartel, publicación, etc.en ellas.
#2
+3
jrista
2010-12-08 00:40:08 UTC
view on stackexchange narkive permalink

Estoy totalmente de acuerdo con lo que dijo Matt Grum ... tratar de "nivelar" automáticamente una imagen basada en un algoritmo puramente lógico realmente solo sería efectivo en la situación ideal: donde tienes un horizonte perfectamente plano en una imagen correctamente centrada que minimiza las distorsiones de la lente y la perspectiva.

Considere el escenario en el que usted, como fotógrafo, tomó una foto nivelada de algo, como un lago, que no tiene una orilla perfectamente "horizontalmente plana" ... la orilla se curva a su alrededor y finalmente se encuentra con usted. Un algoritmo informático puede intentar nivelar esa imagen haciendo que la orilla del lago sea lo más plana posible ... pero eso es incorrecto. La orilla del lago debe estar inclinada y eventualmente curvarse hacia usted. El ojo humano puede detectar tal cosa, ya que involucra numerosas señales de toda la escena, no solo líneas primarias. Pequeñas cosas, como cómo se ven los árboles "verticales" (que puede ser algo muy efímero que sería difícil de acomodar para un algoritmo informático).

Creo que este es uno de esos buenos argumentos para hacer lo mejor que pueda en la cámara, antes de tomar la foto, para asegurarse de que sus tomas estén niveladas. Más allá de las dificultades técnicas de nivelar las tomas con precisión con un algoritmo automático, las rotaciones que no sean de 90 grados son una de las ediciones más destructivas que puede realizar, ya que requiere volver a muestrear cada píxel de la imagen. Si puede tomar sus fotos en la cámara de manera que estén niveladas correctamente, no tendrá que realizar ninguna rotación que cause esa degradación en los detalles de la imagen.

#3
+1
RyanN
2013-02-20 01:44:05 UTC
view on stackexchange narkive permalink

Sí, no lo he hecho y hay algo de programación en C o Python, pero lo intentaré pronto.

Mi situación es una cámara montada en un mástil que está en una boya tomar una foto que siempre contenga el horizonte. Esta debería ser una aplicación más simple que la suya.

Primero, busque en OpenCV. Específicamente la Transformación de línea Hough.

Para mi caso, espero que el horizonte sea mucho más distintivo que cualquier otra línea, puedo ajustarlo para encontrar solo una línea. Luego puedo rotar en función del ángulo de la línea.

Para su aplicación, creo que debería filtrar cualquier línea con más de X grados de horizontal o vertical.

Un poco de estadísticas, y es posible que pueda calcular cuánto girar.

En cuanto a la calidad de imagen degradada, convertiré archivos RAW a ppm en lugar de jpeg, por lo que no debería haber mucho más que recortar.

#4
  0
John
2016-01-04 19:58:40 UTC
view on stackexchange narkive permalink

El módulo de desarrollo de Lightroom ahora tiene esto como una opción incorporada. No se necesitan programas externos. Se puede nivelar tanto horizontal como verticalmente o, en modo automático completo, también compensará las líneas divergentes, etc. Es razonablemente bueno en imágenes donde las líneas verticales y horizontales esperadas son obvias.

#5
  0
LogicDaemon
2017-11-26 19:52:22 UTC
view on stackexchange narkive permalink

Google Fotos https://photos.google.com/ también puede hacer esto hoy en día. Sin embargo, no es compatible con RAW ni procesamiento por lotes, y solo muestra la opción de nivel automático cuando lo desea.

level option auto



Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 2.0 bajo la que se distribuye.
Loading...