2012-09-09 8 views
6

Quiero identificar cuadrados/rectángulos dentro de mi UIImageView (o UIImage).Xcode, iOS - reconocimiento de línea/forma de imagen

Miré "Very simple image recognition on iOS", pero eso no es lo que estoy buscando.

Por el momento tengo un UIImageView que se le da un UIImage de vez en cuando.

La mayoría de los UIImage es tiene cuadrados/rectángulos negros como este: img. Pero las esquinas pueden (o no) tener bordes redondeados.

¿Cómo puedo identificar el primer cuadrado negro/tamaño del rectángulo? El resultado final sería cambiar el tamaño de mi UIImageView para hacer que el primer cuadrado negro en el UIImage llene la pantalla. Como lo siguiente: img With iPhone

+0

¿Puedes aclarar la clase de imágenes que utilizarás en la práctica? ¿Usará literalmente siempre cuadros de contorno negro con todo lo demás blanco o será, por ejemplo, cuadros con contenido arbitrario rodeado por un borde negro sobre blanco, o alguna otra cosa otra vez? – Tommy

+2

por "cuadrado" ¿realmente quieres decir "rectángulo"? por favor aclare ... – Felix

+0

haciendo un visor de historietas? Es probable que tengas que hacer un reconocimiento de patrones, pero no debería ser tan malo si solo estás buscando líneas de separación como esa. – TomSwift

Respuesta

10

Si sus imágenes siempre serán cuadrados negros nítidos en una fila horizontal, podría usar la detección de esquina para identificar los rectángulos, luego seleccione las cuatro esquinas más a la izquierda. Tengo tres variantes de detectores de esquina en mi marco de código abierto GPUImage basado en los métodos de detección de esquina de Harris, Noble y Shi-Tomasi.

Ejecución de un GPUImageHarrisCornerDetectionFilter contra sus cajas con un umbral de 0,4 y la sensibilidad de 4.0 produce el siguiente resultado:

Harris corner detection results

Son un poco difícil de ver, pero Mark punto de mira de color rojo, donde el detector encontró las esquinas de tus cajas. Nuevamente, solo necesita tomar los cuatro puntos más a la izquierda para encontrar su rectángulo objetivo, y luego simplemente escalar su imagen o ver para que este rectángulo ahora llene su vista.

Puede encontrar un ejemplo de cómo ejecutar dicha detección de características en el ejemplo FilterShowcase o FeatureExtractionTest dentro de mi marco. Describo el proceso mediante el cual hago esto en this answer en Procesamiento de señal.

+0

¡Muy buena solución! +1 de mi parte Lamentablemente, la pregunta se ha modificado para que también contenga esquinas redondeadas ... –

+0

¡Gracias por un marco increíble! Sin embargo, no puedo hacer que esto funcione. Incluso probé el ejemplo de FeatureExtractionTest y no encontré ninguna esquina. He publicado mi propia pregunta aquí (antes de ver esto) http://stackoverflow.com/questions/18914461/gpuimage-how-to-chain-filters-with-gpuimagepicture – Mikael

+0

Parece ser un problema de iOS 7.0 ... – Mikael

-2

Por lo que entendí acerca de su pregunta, debe implementar el Canny Edge Detection Algorithm para detectar los bordes de los bordes negros en su imagen.

Para ello, debe utilizar el marco de procesamiento de imágenes disponibles en los siguientes enlaces

Utilice la función ImageWrapper *Image::cannyEdgeExtract(float tlow, float thigh) del archivo Image.m.

+0

La detección de bordes astutos no te ayudará aquí, porque aún necesitarás determinar los cuadros delimitadores que definen esos bordes. Además, recogerá dos bordes: uno para el exterior de la caja y otro para el interior. Un filtro de cresta probablemente sea más apropiado, pero igual tendrá que determinar las casillas de eso. –

0

Parece solución más sencilla sería:

  1. suma a todos los píxeles verticalmente a la fila más superior (como una tabla de Excel)
  2. filas con el mayor valor/más pequeño son su región "brecha"

ancho se puede derivar de (2).

Cuestiones relacionadas