Xcode, iOS – Reconocimiento de línea / image de image

Quiero identificar cuadrados / rectangularjs dentro de mi UIImageView (o UIImage ).

Miré " Reconocimiento de imágenes muy simple en iOS ", pero eso no es lo que estoy buscando.

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

La mayoría de los UIImage tiene cuadrados / rectangularjs negros como este: img . Pero las esquinas pueden (o no) tener bordes networkingondeados.

¿Cómo puedo identificar el primer tamaño del cuadrado negro / 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. Al igual que: img con iPhone

Si sus imágenes siempre serán cuadrados negros definidos en una fila horizontal, puede usar la detección de esquinas para identificar los rectangularjs y luego seleccionar las cuatro esquinas más a la izquierda. Tengo tres variantes de detectores de esquina en mi marco GPUImage de código abierto basado en los methods de detección de esquinas de Harris, Noble y Shi-Tomasi.

Ejecutar un GPUImageHarrisCornerDetectionFilter en sus casillas con un umbral de 0.4 y una sensibilidad de 4.0 produce el siguiente resultado:

Resultados de detección de esquinas de Harris

Son un poco difíciles de ver, pero las cruces rojas marcan donde el detector encontró las esquinas de sus cajas. Nuevamente, solo necesita tomar los cuatro puntos más a la izquierda para encontrar el rectángulo de destino, y luego simplemente escalar su image o ver para que este rectángulo ahora llene su vista.

Se 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 process por el cual hago esto en esta respuesta en Signal Processing.

Parece la solución más fácil sería:

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

El ancho se puede derivar de (2).

Por lo que he entendido acerca de su pregunta, debe implementar el algorithm de detección Canny Edge para detectar los bordes de los bordes negros en su image.

Para ello, debe utilizar el marco de image processing disponible en los siguientes enlaces

  • Google
  • Github

Utilice la function ImageWrapper *Image::cannyEdgeExtract(float tlow, float thigh) del file Image.m .