Estoy tratando de diseñar un sistema de procesamiento de imágenes en un FPGA para hacer Canny Edge Detection. El diseño se muestra en la siguiente imagen.
Tengo un ram de bloque grande para almacenar mi imagen. luego tengo búferes de línea más pequeños para leer solo las líneas que estoy procesando. Tengo 3 líneas en uso a la vez (con 1 otra línea como precarga para la siguiente fila de procesamiento).
El desafío que tengo es que el filtro 1 mira un cuadro de 9 píxeles y genera un valor para el píxel central. por lo tanto, para una imagen de 10x10, el filtro solo genera datos de 8x8 píxeles en el medio.
Una vez que el filtro 1 haya terminado 3 filas, quiero que el filtro 2 comience con los valores de píxel modificados. Para canalizar este diseño, tengo dificultades para descubrir cómo lidiar con los píxeles 'faltantes' que el filtro 1 no genera. ¿Cuál sería la mejor manera de cargarlos para el Filtro 2? ¿Debería tener una forma de omitir la primera + última fila y el primer y último píxel entre sí en mi búfer de segunda línea? o hay alguna otra manera puedo hacer esto?
¿Por qué el primer filtro no genera todos los píxeles? Debería. Solo necesita averiguar qué necesita producir para los píxeles de "borde".
En mis diseños de procesamiento de video, tengo un módulo separado que llamo "generador de kernel" que se encuentra entre los búferes de línea y el filtro real. Lee los búferes de línea y emite los nueve píxeles de entrada (en paralelo) que deben operarse para cualquier píxel de salida en particular. En los bordes del marco, produce píxeles replicados para reemplazar los que estarían "fuera del borde" en el marco de entrada.
Lo que hace en los bordes depende en cierta medida de la aplicación, pero en la mayoría de los casos, funciona bien para "reflejar" los datos en el borde de la imagen. En otras palabras, cuando trabaja en la primera fila de la imagen, los datos de entrada que faltan (para la fila "cero") se completan con los datos de la segunda fila. La misma lógica se utiliza en los bordes izquierdo, derecho e inferior.
De esta forma, la salida de cualquier etapa de filtro tiene el mismo número de píxeles que su entrada y se minimizan los "efectos de borde".
David Quiñones
usuario3397008
david tweed