2012-08-08 10 views
5

Tengo una foto cuadrada de baja resolución, que ha sido recortada (por el usuario) de un original de alta resolución, no cuadrado. La foto de baja resolución se ha redimensionado hacia abajo en una miniatura. Me gustaría automáticamente (no se requiere intervención del usuario) volver a recortar la foto original de la misma manera para lograr una copia de mayor resolución de la versión cuadrada. I no tienen acceso a las coordenadas originales del cultivador. Todo lo que tengo son estas dos fotos.¿Cómo usar una foto recortada de baja resolución como guía para volver a cosechar una copia de mayor resolución del original?

Aquí están algunas imágenes de ejemplo (de mi perfil de Facebook) para ilustrar lo que quiero decir:

Original, high-resolution photo-Cropped, then shrunk, square photo

Una vez más, el objetivo es utilizar la foto pequeña como una guía para conseguir una mucho mayor foto cuadrada de resolución de la fuente.

Las únicas limitaciones en la solución son:

  1. Generalidad: estoy usando esto por imágenes de perfil, por lo que si sólo funciona en las caras que es perfectamente aceptable! No es necesario generalizar a todo tipo de imágenes aleatorias, las imágenes de las personas son un gran lugar para comenzar.
  2. Plataforma: Estoy usando Nodo, pero me gustaría ejecutar este proceso en Ruby, Python, Java o C++ (con enlaces de Nodo). Casi con certeza se ejecutará en Heroku o AWS.
  3. Velocidad: Va a necesitar ser bastante rápido. Para que esto sea útil, debería ejecutarse en línea, ya que estaría bloqueando la interfaz del usuario esperando esta acción.

¿Alguien tiene alguna idea? No sé mucho sobre procesamiento de imágenes, así que no sabría por dónde empezar.

EDITAR: Para Facebook, específicamente, hay una solución que no es tan difícil. La información original del cultivo está disponible para las imágenes de perfil: https://graph.facebook.com/bcherry/profile?fields=pic_crop

Esto me va a salvar de mi obstáculo inmediato, pero puede que no sea una solución a largo plazo, por lo que las respuestas proporcionadas a continuación son bastante útiles para el problema más general .

+0

¿Conoces las dimensiones de la foto de baja resolución sin recortar? – jasonlfunk

+0

No estoy seguro de lo que está preguntando, pero no tengo más información que las dos imágenes. – bcherry

+0

Supongo que no sabe cuál es la proporción de cambio de tamaño para la miniatura? Si no, esto se convierte en un problema bastante difícil. –

Respuesta

1

Si bien no voy a comentar el Javascript-ness de mi solución, básicamente estás tratando de realizar Image Registration entre la imagen original y recortada y redimensionada.

Hay many métodos diferentes para hacer algo como esto - para su propósito particular, comenzaría con un enfoque similar al Phase-Correlation.

EDIT: Acabo de encontrar una buena secuencia de comandos con ImageMagick que hace exactamente lo que necesita. NormCrossCorr "calcula la superficie de correlación cruzada normalizada para encontrar dónde una imagen pequeña se adapta mejor a una imagen más grande".

Espero que esto ayude!

+0

Sí, eso ciertamente suena lo correcto. ¡Gracias por la respuesta! – bcherry

+0

Eso no funcionará. Solo funcionaría si la miniatura no se redujera, es decir, tendrían que tener la misma resolución. – reptilicus

+0

Sin embargo, podría escalar gradualmente la miniatura, luego hacer una correlación cruzada y encontrar dónde está la correlación máxima. – reptilicus

0

Probablemente importa mucho si la reducción se realiza promediando o píxel más cercano. Si la reducción fue realizada por el píxel más cercano, puede buscar coincidencias de valores de píxeles con los píxeles correspondientes en la imagen original con píxeles en la imagen recortada/reducida. A menos que las imágenes se almacenen en un formato sin pérdidas, deberá hacer que la coincidencia sea bastante borrosa, pero si puede identificar coincidencias probables, la escala y la posición del recorte estarán disponibles de inmediato.

Si hubo algún promedio en la escala, o demasiada pérdida en la compresión de la imagen, es posible que gaussiano difumine ambas imágenes e intente hacer coincidir según las características locales de las imágenes borrosas, por ejemplo, la x, y de mínimos locales o máximos de colores primarios. De nuevo, el partido tendrá que ser borroso.

Cuestiones relacionadas