Manejo de imagenes y shift register en LabVIEW

Shift Register 5En el artículo del Lunes vimos como recorrer imágenes con LabVIEW. Para ello necesitábamos un bucle anidado que podíamos recorrer gracias a que teníamos la información de la altura, la anchura y el color de la imagen. A la hora de manejar bucles muchas veces nos interesa saber los resultados de operaciones en iteraciones anteriores para poder manejarlos y operar con ellos, aquí es donde entran los Shift Register, que guardan la información que queramos de una iteración anterior para que podamos usarla cuando queramos. En el artículo de hoy vamos a crear una nueva imagen a partir de la información que saquemos de una que ya tengamos. En resumen, manejo de imagenes y shift register en LabVIEW-

Uso del Shift Register:

En primer lugar necesitamos crear el bucle. Una vez tengamos el bucle creado (ya sea while, for…) clickeamos en el con el botón derecho y le damos a Add Shift Register:

Shift Register 1
Y quedará de la siguiente manera:

Shift Register 2
Donde la conexión exterior del lado izquierdo es donde se inicializa (lo que va a valer en la primera iteración), la interior de este mismo lado es el valor de la variable que en la iteracción anterior hayamos conectado a la conexión interior del derecho. Finalmente la conexión exterior del lado derecho es el resultado de la ultima iteración.

Es fundamental inicializar el Shift Register usando la conexión exterior del lado izquierdo, o tendrá un valor indeterminado y hará que la operación que hagamos en la primera iteración de un resultado no deseado. Al tener un elemento conectado a la salida (conexión exterior del lado derecho) nos aseguramos de que se ejecute de manera secuencial, ya que tendrá que esperar a que acabe el bucle para ejecutarse.

Un ejemplo sencillo de uso de los Shift Register sería una multiplicación. Una multiplicación no es más que sumar un número a si mismo varias veces. Por tanto podríamos hacer un bucle donde en cada iteración sume dicho numero a lo que ya tuviéramos en la iteración anterior, teniendo en cuenta que inicializaríamos a 0 el Shift Register. Ese programa quedaría de la siguiente manera:

Shift Register 3
Es posible utilizar el valor de varias iteraciones atrás, no solo de la anterior. Para ello podéis arrastrar en Shift Register una vez lo hayáis puesto. Cada Shift Register coincide con una iteración anterior, si tenemos cinco significa que tendremos los valores de las cinco iteraciones anteriores:

Shift Register 4
Crear una imagen:

Para crear una imagen necesitamos crear un cluster que contenga todos los datos necesarios. Eso se hace con la función bundle que podéis encontrar en Programming → Cluster, Class & Variant:

Clusters LabVIEW
Este cluster lo conectaremos a una función de escritura de imágenes, como por ejemplo Write JPEG File que podéis encontrar en Programming → Graphics & Sound → Graphics:

Write jpg
Una vez tengamos la imagen podremos manejarla tranquilamente para mostrarla por pantalla por ejemplo.

Programa de ejemplo:

En este programa vamos a leer una imagen, vamos a recorrerla píxel a píxel, y en una imagen nueva vamos a dibujar un píxel de color negro por cada píxel negro que detectemos en la primera. Usaremos un umbral RGB que iremos variando para ver los resultados, como cuanta línea es capaz de detectar en la imagen de una linea negra sobre fondo blanco.

El Block Diagram sería el siguiente:

Shift-Register-41

Tarda un poco en recorrer la imagen y crear la nueva. Hemos hecho varias pruebas, para que veáis un ejemplo aquí tenéis dos imágenes del panel frontal con distintos RGB umbral:

RGB por debajo de 60:

Linea valor 60

RGB por debajo de 100:

Linea valor 100

Como podéis imaginar esto tiene muchas aplicaciones, y es por ejemplo el primer paso para un sigue líneas con cámara. Teniendo la linea sabemos por ejemplo dónde se encuentra el robot respecto a ella y podemos corregir su posición.

Comments are closed.