Me gustaría tener un proceso de revisión más rápido de mis fotos cuando las descargue de la cámara a la computadora. Seguramente hay algunos parámetros que puedo extraer mediante programación de las fotos y este valor podría ser suficiente para poner automáticamente algunas fotos en la pila de "descarte".
Estoy pensando en algoritmos para detectar bordes, obtener una nitidez / desenfoque promedio de la imagen o algo así.
Sé que este script realmente no descartará todas las fotos malas y conservará las buenas, pero espero descartar las totalmente basura.
Estoy bastante seguro de que puedo programar un script de shell usando ImageMagick (pero estoy abierto a cualquier software de línea de comandos) para obtener lo que necesito. El problema es que no sé qué valores debo buscar para obtener mejores resultados.
TLDR; ¿Qué cosas debo buscar para poder descartar una imagen mediante programación (detección de bordes, nitidez)?
Estoy usando Fedora Linux.
editar: No creo que esta pregunta sea un duplicado de ¿Existe un software de análisis de fotos que clasifique previamente las imágenes identificando posibles problemas técnicos? porque esa pregunta pide una recomendación de software y se sugiere hacer un cambio en el flujo de trabajo en las respuestas (y usar un software que no está disponible en Linux), mientras pregunto qué dará mejores resultados en la detección de malas fotos.
fuente
Respuestas:
Una respuesta razonable a esto sería "depende" (otra perspectiva es " luchar un poco contra la idea de métricas objetivas ")
Recomiendo consultar este cuadro para determinar cuánto tiempo debe pasar tratando de descubrir una forma más rápida si 'rapidez' es lo que está buscando.
Sin embargo, si decide abordar esto como un ejercicio para comprender el análisis de imágenes computacionales, eche un vistazo a OpenCV .
Para comenzar, probablemente necesitará una definición más clara de "totalmente basura". Sugeriría un enfoque basado en datos; revise manualmente una muestra razonable de sus imágenes, divídalas aproximadamente en buenas / malas / basura (G / B / C) eche un vistazo más de cerca a cualquier característica que pueda separar C de G o B, intente describir estas características de la manera más simple posible (p. ej., niveles de color, borroso, demasiado claro, demasiado oscuro, etc.) traduzca esto en términos de OpenCV. escribe un código para probar la teoría. clasificar. Repita hasta que esté satisfecho.
fuente
Dependiendo del idioma que esté usando OpenCV como se sugirió anteriormente o es .gu equitativo Emgu . Básicamente, querrá escalar la imagen en escala de grises, luego usar un Desenfoque laplaciano, luego obtener los datos de la imagen y verificar la imagen para ver si está dentro de un rango de umbral. Si está en un cierto rango, la imagen no está borrosa, si la imagen está fuera de ese rango, lo está.
A continuación se muestra mi implementación de varias fotos usando VB.net
fuente
ImageMagick es tu amigo aquí. Vas a escribir muchos guiones que lo llaman prorrams.
Por ejemplo, aritmética de imagen:
Toma la imagen. Desenfoque a una nueva imagen. Reste la imagen 2 de la imagen 1, tomando el valor absoluto del resultado. Suma los píxeles del resultado y promedia. Límite.
Una imagen nítida es considerablemente diferente de la imagen borrosa, por lo que el valor promedio de la resta será alto.
Una imagen borrosa es mucho menos diferente de una imagen borrosa borrosa.
Como señala uno de los comentarios a otra respuesta, a veces una imagen es intencionalmente borrosa. Algunas personas realmente les gusta el bokeh. Así que dé otro paso y tome el tercio medio o cuarto medio de la imagen.
Toma el histograma de la imagen. Si más del X% de los píxeles están saturados (> 248) para cualquier canal, entonces se resaltan los resaltados.
fuente