「博文連載」「VGA+USB」RGB888轉YCbCr444算法實現

雖說OV7725可以通過寄存器的設置,直接輸出YCbCr444格式的視頻流,但為了研究圖像處理,以及最基本的視頻格式轉換,Bingo有意執行一次RGB888轉YCbCr444操作(並且直接輸出的YCbCr一個時鐘2個像素,不能滿幀率跑)。

關於YCbCr(YUV)格式視頻流的介紹,詳見Bingo的博文,地址如下:

「博文连载」「VGA+USB」RGB888转YCbCr444算法实现

http://www.cnblogs.com/crazybingo/archive/2012/06/07/2540595.htmlhttp://www.cnblogs.com/crazybingo/archive/2012/06/08/2541700.htmlhttp://www.cnblogs.com/crazybingo/archive/2011/03/27/1996946.html

「博文连载」「VGA+USB」RGB888转YCbCr444算法实现

RGB轉YCbCr,實際上只是色度空間的轉換,前者為三原色色度空間,後者為亮度與色差,具體的公式可見板卡資料包中的OV7725 Camera Module Software Application Notes》pdf的page5。OV7725相機的軟件應用手冊詳細給出了RGB與YCbCr色度空間轉換公式,其中RGB轉YCbCr的公式如下所示:

「博文连载」「VGA+USB」RGB888转YCbCr444算法实现

由於Verilog HDL無法進行浮點運算,因此使用擴大256倍,再向右移8Bit的方式,來轉換公式,如下所示:

「博文连载」「VGA+USB」RGB888转YCbCr444算法实现

此時,剩下的問題就是如何將上面的公式移植到FPGA中去。FPGA內嵌了乘法器,移位寄存器,加法器,如果直接用表達式描述上面的運算,理論上也是能計算出結果的;但是這不是我們的峰哥,因為代價是效率、資源;同時當表達式小於0的時候,運算結果出錯!!!

因此,在正式進行算法移植前,我們需要進行運算的拆分,同時進行一定的變換。過程中為了防止過程中出現負數,先將128提取到括號內,如下:

「博文连载」「VGA+USB」RGB888转YCbCr444算法实现


分享到:


相關文章: