Cómo hacer procesamiento de datos de imagen con módulo de cámara incorporado

Posible problema 1:

Intente ver si está procesando sus datos YUV correctamente. A veces, los datos Y Cb Cr en el formato 4: 2: 2 tienen un orden de bytes invertido.

Entonces, en lugar de recibir | Cb0 Y0 | Cr0 Y1 | Cb2 Y2 | Cr2 Y3 |, en palabras de 16 bits por píxel, puede estar recibiendo | Y0 Cb0 | Y1 Cr0 |…

Posible problema 2:

Su conversión de JPG puede ser errónea. ¿Dónde se implementa, y se convierte de YUV 4: 2: 2 a YUV 4: 4: 4 y luego a RGB, antes de comprimir la imagen para almacenarla como JPG? Creo que esto se puede verificar comparando sus píxeles en su formato sin formato.

Posible problema 3:

Puede ser un poco trivial, pero solo trate de sondear y observar si su canal UART funciona como se esperaba, a través de un osciloscopio o algo similar. Simultáneamente, es posible que desee verificar sus controladores UART para asegurarse de que estén dividiendo los píxeles de 16 bits de manera adecuada mientras los transmite, y sus controladores UART del lado del receptor para asegurarse de que están poniendo correctamente esas palabras de 8 bits de nuevo juntos en sus palabras originales de 16 bits.

En otros comentarios:

Sugeriría descargar un visor de imágenes que sea capaz de manejar una gran variedad de formatos, como IrfanView. Uno de los formatos que puede manejar es el formato P2 PGM.

Una imagen PGM contiene todos los píxeles representados como una matriz de valores enteros en formato ASCII. Esto ayuda a observar los valores de cada píxel individual en cualquier editor de texto directamente, aunque puede ocupar más espacio que una imagen JPG o PNG, ya que está tanto en bruto como en caracteres ASCII, haciendo que cada píxel de 2 bytes tome mínimo 5 o 6 bytes, sin incluir espacios.

Entonces, por ejemplo, una imagen PGM P2 de tamaño [4,3] sería la siguiente dentro de un archivo llamado “image.pgm”:

P2
4 3
65535 # Valor máximo tomado en la pantalla, dado el valor de 2 ^ 16–1
54000 18000 24000 11000
14000 15000 22000 44000
56000 65000 22300 12345

Ahora que almacenar y observar los píxeles de su imagen es más sencillo, puede intentar escribir un código para separar los bytes de su canal Y y observarlo como una imagen de escala de grises de un solo canal. Asi que:

P2
4 3
255 # Valor máximo tomado en pantalla, dado el valor de 2 ^ 8–1
240 80192248 # Cada píxel son los 8 bits inferiores de los píxeles originales

Bueno, lea la documentación del módulo de la cámara. Luego muestre la imagen en su formato sin formato, para asegurarse de que la comunicación en serie esté bien. Entonces puedes comenzar con la conversión de imágenes.

Comience por obtener la documentación del módulo. ¿Por qué adivinar cuándo puedes saber? Luego, dado que la conversión a Jpeg es complicada y propensa a errores, primero intente mostrar la imagen a medida que la obtiene, para asegurarse de que el formato es el que cree que es.