• No se han encontrado resultados

Pre-procesamiento de la imagen

GRADO 3: determina calidad inferior, en consecuencia la mercadería con este grado recibirá un descuento sobre el precio base de compraventa La rebaja en todos los granos es del

4. Método propuesto 

4.1.2. Pre-procesamiento de la imagen

Esta etapa tiene como finalidad eliminar aquellos ruidos o elementos en la imagen que pueden distorsionar el proceso de identificación de objetos correspondiente a la muestra de maíz. Además, se reduce el área de trabajo, sólo a la región de interés, eliminando el fondo de la imagen y generando como resultado una imagen pre-procesada y binarizada.

En primer lugar, se deberá realizar una umbralización de la imagen. Para esto, la aplicación permite seleccionar uno o más fragmentos de la imagen que determinan el fondo de la misma. La umbralización busca obtener un valor de umbral que permite binarizar la imagen separando adecuadamente el fondo de los objetos. Este valor queda determinado por el valor mínimo y máximo de matiz, saturación y brillo (HSV) de cada píxel perteneciente al/los fragmento/s seleccionado/s asociado/s al fondo de la imagen.

Luego de obtener los valores HSV del umbral asociado al fondo de la imagen, se realiza la detección del rectángulo utilizado como sistema de referencia. Para esto, se implementó un algoritmo que detecta las esquinas internas del rectángulo contenedor de la muestra.

Este algoritmo consiste en detectar cada una de las esquinas del rectángulo a partir de la intersección de dos rectas perpendiculares entre sí que pertenecen al borde interno de las líneas del rectángulo. Es decir, para detectar la esquina superior izquierda, se necesita calcular el punto de intersección entre la recta que conforma el borde del rectángulo asociada a la línea vertical izquierda superior, y la recta asociada a la línea horizontal superior izquierda. Estas rectas se construyen a partir de la ecuación de la recta que pasa por dos puntos pertenecientes al borde interno de la línea del rectángulo. Por ejemplo, para construir la línea vertical izquierda superior, se necesita encontrar el punto inferior y el superior para aplicar la ecuación de la recta que pasa por

dichos puntos. Esta línea queda determinada por la función searchVerticalLeftLine cuyo pseudocódigo se puede observar en la Figura 4.3:

void ​searchVerticalLeftLine​() { heightHalf := imageHeight / 2;

//Altura Superior (heightHalf - 40%)

heightUpper := heightHalf - ((heightHalf*40)/100); y := heightUpper;

x := 0;

WHILE (x < imageWidth AND isBackground(x,y)) DO x := x + 1;

END-WHILE

WHILE (x < imageWidth AND isObject(x,y)) DO x := x + 1;

END-WHILE

Pixel upperPixel := new Pixel(x,y);

//Altura Inferior (heightHalf - 20%)

heightLower := heightHalf - ((heightHalf*20)/100); y := heightLower;

x := 0;

WHILE (x < imageWidth AND isBackground(x,y)) DO x := x + 1;

END-WHILE

WHILE (x < imageWidth AND isObject(x,y)) DO x := x + 1;

END-WHILE

Pixel lowerPixel := new Pixel(x,y);

upperLeftVerticalLine := new Line(upperPixel,lowerPixel,imageWidth,imageHeight); }

Figura 4.3: Pseudocódigo de la función searchVerticalLeftLine

A modo de ejemplo, en la Figura 4.4 se observa la esquina superior izquierda interna del rectángulo de referencia, calculada a partir de la intersección de líneas perpendiculares asociadas a dicha esquina. Es decir, la línea vertical izquierda superior y la línea horizontal superior izquierda, pintadas de color celeste en la figura. Además, se puede observar que el punto marcado en amarillo es el que pertenece a la intersección de las dos líneas anteriormente mencionadas. Para obtener una mayor aproximación de la esquina, se desplaza dicho punto en sus coordenadas x e y hasta encontrar un píxel correspondiente al borde del rectángulo. De las coordenadas resultante, surge el punto asociado a la esquina superior izquierda, punto marcado en color verde en la figura.

Figura 4.4: Esquina superior izquierda

Para corregir distorsiones en la imagen generada en el proceso de captura, se incorpora el desarrollo de transformaciones geométricas o elásticas (Anexo Transformaciones geométricas). Se aplica particularmente cuando se modifica el ángulo de la cámara levemente y ésta no queda perpendicular al fondo, o cuando el rectángulo presenta una pequeña rotación en relación a la fotografía obtenida.

El objetivo de esta técnica de transformaciones geométricas es aplicar correcciones a la imagen, reubicando los píxeles desde sus coordenadas espaciales (x,y) en la imagen de entrada a una nueva coordenada en la imagen de salida. A los objetos resultantes se les aplica las correcciones necesarias para poder obtener las longitudes de los objetos con el mínimo margen de error.

El resultado de esta transformación genera una nueva imagen de la muestra contenedora, como se observa en la Figura 4.5. Para esto, es necesario conocer las cuatro esquinas internas del rectángulo de referencia asociadas a la imagen de entrada y las dimensiones de dicho rectángulo.

Figura 4.5: Transformación geométricas o elástica

De esta imagen resultante, puede suceder que el borde del rectángulo quede incorporado en la imagen. Para este caso se aplica un algoritmo que elimina dicho borde. Este algoritmo se basa en el recorrido de los cuatros lados de la imagen, donde para cada píxel analizado que no pertenece al fondo, se lo pinta con el valor promedio del fondo de la imagen. Para cada uno de ellos, se vuelve a analizar con el criterio de vecindad a los pixeles que no son fondo. Se repite el proceso hasta obtener una imagen que no incluya el borde dicho rectángulo. El pseudocódigo de la función que lo resuelve se visualiza en la Figura 4.6.

Dado que la longitud del rectángulo utilizado es de 199 mm. de alto y 299 mm. de ancho, como resultado de este proceso, se obtiene una imagen de 1990 pixeles de alto y 2990 de ancho. Esto surge de multiplicar el alto y ancho de las dimensiones del rectángulo por un factor de 10.

private Image eliminateEdge() {

List<Pixel> visited =new ArrayList<Pixel>(); for (int i = 0; i < image.getWidth(); i++) {

if (isObject(i, 0)) {

eliminateEdge(new Pixel(i, 0,null),visited); }

if (isObject(i, image.getHeight() - 1)) {

eliminateEdge(new Pixel(i, image.getHeight() - 1,null),visited); }

}

for (int j = 0; j < image.getHeight(); j++) { if (isObject(0, j)) {

eliminateEdge(new Pixel(0, j,null),visited); }

if (isObject(image.getWidth() - 1, j)) {

eliminateEdge(new Pixel(image.getWidth() - 1, j,null),visited); }

}

return image; }

private void eliminateEdge(Pixel p, List<Pixel> visited) { List<Pixel> neighbords = neighbords(p);

if ( neighbords.size() == 0) {

image.setRGB(p.getX(), p.getY(),rangeFondo.getColorMedio().getRGB()); } else {

image.setRGB(p.getX(), p.getY(),rangeFondo.getColorMedio().getRGB()); visited.add(p);

for (int i = 0; i < neighbords.size() ; i++){ p=neighbords.get(i); if(!visited.contains(p)){ eliminateEdge(p, visited); } } } }

Figura 4.6: Pseudocódigo de la función eliminateEdge

Posteriormente, se aplica la técnica de binarización que permite convertir una imagen digital en una imagen en blanco y negro, de tal manera que se preserven las propiedades esenciales de la imagen (Gonzalez & Woods, 1992). Para esto, se utiliza el valor umbral (definido anteriormente) o valor límite que determina si un píxel es de color blanco asociado a parte de un objeto, o de color negro asociado al fondo de la imagen.

El algoritmo implementado compara el valor HSV de cada pixel de la imagen de entrada con el valor HSV del umbral. Es decir, si el valor de HSV del pixel a procesar está contenido entre el mínimo y máximo del HSV correspondiente al umbral, entonces el proceso de binarización genera un pixel en negro, de lo contrario uno blanco.

Figura 4.7: Proceso de binarización

A modo de ejemplo, en la Figura 4.7 se observa la separación de los objetos del fondo de la imagen aplicando el proceso de binarización. La imagen de la izquierda corresponde a una pequeña muestra de maíz, y a la derecha, el resultado de la imagen binarizada, quedando representado el fondo de color negro y los objetos de interés en blanco.

Para culminar con esta etapa se realiza una binarización sobre la imagen obtenida por la transformación elástica.

Documento similar