概要[Abstract]將RGB格式轉為YCbCr格式對于圖像的處理更為方便。在集創賽作品中,幾乎所有的參賽項目都涉及到圖像處理領域,比較常見的有顏色識別、圖像二值化、膨脹腐蝕算法消除多余的陰影、邊緣檢測等等。
實現功能:
此模塊實現將RGB888色彩格式轉為YCbCr格式。
實現原理:
RGB888轉YCbCr的數學公式里涉及到較多的浮點運算,這并非FPGA所擅長的領域,因此我們需要將標準數學公式轉換和化簡:
以下為RGB888轉YCbCr的標準數學公式:
Y = 0.299R +0.587G + 0.114B
Cb = 0.568(B - Y) + 128 = -0.172R - 0.339G + 0.511B + 128
Cr = 0.713(R - Y) + 128 = 0.511R-0.428G -0.083B + 128
我們通過先乘后除的方式將小數部分去掉,注意這里乘與除的值最好是2n,
方便除法可以直接轉化為移位運算,效率更高。去掉小數的公式如下:
Y = (77*R + 150*G + 29 *B) >> 8
Cb = (-43*R - 85 *G + 128*B) >> 8 + 128
Cr = (128*R - 107*G - 21*B) >> 8 + 128
我們將公式形式化簡為一致,方便后續使用三級流水將加法、乘法和除法(移位運算)分開同時計算,保證FPGA處理的速度。化簡后的公式如下:
Y = (77 *R + 150*G + 29 *B) >> 8
Cb = (-43*R - 85*G + 128*B + 32768) >> 8
Cr = (128*R - 107*G - 21*B + 32768) >> 8
最后,使用Verilog代碼將公式實現即可,具體實現參考模塊源碼。