En 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:
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:
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:
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:
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:
RGB por debajo de 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.