2010-02-27 20 views
5

Tengo una situación bastante simple. Simplemente no conozco ningún término específico para buscar. Tengo una sola imagen, en esa imagen tengo varias otras imágenes que siguen un patrón básico. Son rectángulos y posiblemente tendrán una imagen histórica de la cual basar las cosas. Una parte importante es que necesito detectar subimágenes con rotación/escala incorrecta.Encontrar Sub-Imágenes en una imagen

Básicamente lo que tengo que hacer es dividir 'tarjetas de visita' de una sola imagen en imágenes individuales debidamente alineadas.

Disculpe mis malas habilidades de pintura! http://yfrog.com/eaproblemjj Como también estoy diseñando las tarjetas para escanear puedo poner cualquier símbolo o algo que haría la detección más fácil (como dije un hito)

+0

¿Son azulejos uniformes o está tratando de detectar imágenes más o menos rectangulares de diferentes tamaños y relaciones de aspecto? – Josh

+1

¡Agregue una imagen de ejemplo a su pregunta! Además, ¿entiendo correctamente que tiene estas subimágenes conocidas de antemano? Si no, ¿qué sabes de ellos? – AVB

+0

intenté aclarar mi pregunta y agregué un ejemplo de dolor horrible, disculpe el arte de mierda. No sé EXACTAMENTE lo que está en la sub-imagen, ya que tendrán algunas modificaciones de usuario, que tendré que analizar de forma pragmática. Pero eso es fácil después de separarlos y orientarlos correctamente. – Lex

Respuesta

2

Si su ejemplo es representativo (lo cual dudo por alguna razón) entonces Hough transform es tu amigo (google, hay muchas explicaciones y códigos). Con él podrás detectar los rectángulos.

Algunos ejemplos de transformada de Hough en C# son http://www.koders.com/csharp/fid3A88BC1FF95FCA9D6A182698263A40EE7883CF26.aspx y http://www.shedletsky.com/hough/index.html

Si lo que realmente sucede es que escanear algunas tarjetas, y usted tiene cierto control sobre el proceso, entonces yo sugeriría que se asegure de que no hay se superponen entre tarjetas, y proporcionan un fondo contrastante (algo muy diferente de las cartas). Entonces, cualquier detección de bordes lo acercará lo suficiente a lo que dibujó en su ejemplo, y luego podrá usar la transformación Hough.

Como alternativa, puede implementar el papel http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.59.4239 que utiliza la transformada Hough para detectar rectángulos directamente, sin detección de bordes.

Si no entendí su problema o si necesita aclaraciones, modifique su pregunta y publique un comentario sobre esta respuesta.

+0

Debo estar teniendo realmente mala suerte, pero parece que no puedo encontrar ningún código de ejemplo usando la transformación Hough, encontré el artículo de la wiki obviamente, pero no parecí entenderlo. En realidad, no podré controlar el proceso de escaneo, excepto el diseño de las tarjetas físicas. Si esto ayuda, piense que quiero tomar una imagen escaneada de un revoltijo de tarjetas de presentación estándar (podemos suponer que son todas rectangulares y tienen un logotipo en la esquina superior izquierda), y separarlas en tarjetas individuales orientadas correctamente. – Lex

+0

Las tarjetas serán blancas, sobre un fondo negro, y tendrán texto/símbolos en negro. – Lex

+0

Ver la respuesta actualizada. Con blanco sobre negro, debería estar bien con casi cualquier método. No pude encontrar una buena explicación de Hough transform en línea; probablemente un libro de procesamiento de imágenes sea su mejor opción si puede averiguarlo a través de Internet. No es algo trivial, pero tampoco complicado. – AVB

1

Pruebe AForge.NET (si usa C#). Tiene DocumentSkewChecker que calculará el ángulo de la imagen girada.

Cuestiones relacionadas