?(本系列只需要modelsim即可完成數字圖像的處理,每個工程都搭建了全自動化的仿真環境,只需要雙擊top_tb.bat文件就可以完成整個的仿真,大大降低了初學者的門檻!!!!如需要該系列的工程文件請關注知識星球:成工fpga,https://t.zsxq.com/DMeqH,關注即送200GB學習資料,鏈接已置頂!)
上周我們完成了直方圖統計的FPGA實現,這課我們要把直方圖和灰度圖像疊加在一起。
我們首先分析一下,要在FPGA中實現直方圖數據的疊加,至少需要處理兩幀的圖像,第一幀完成圖像直方圖的統計,然后在第二幅圖像中將第一幀圖像的直方圖統計數據疊加上去。
上篇我們直接把直方圖的數據輸入顯示,并沒有進行存儲,而要把直方圖的數據疊加到圖像上,那首先必須把直方圖的數據存儲起來,等待第二幅圖像到來后在取出來疊加上去。
在\src\hist文件夾下新建hist_mem.sv文件,完成圖像直方圖數據的存儲,實現非常的簡單,將直方圖的數據存儲到數組,然后根據讀地址將數組中的數據都出去。
那如何將直方圖的圖像疊加到灰度圖像中呢?如果第二幅圖像根據行號在每行的開始的時候讀一個直方圖的數據,根據讀取的直方圖數據來進行繪制,那得到的直方圖應該是橫向的,看起來比較別扭,那如何得到縱向的直方圖呢?那就要在繪制直方圖的區域,每行根據列號讀出所有的直方圖值,根據直方圖值進行繪制,就可以得到縱向的直方圖。
解釋起來可能不太清楚,我們直接看代碼,在\src\hist文件夾下新建plot_chnl_hist.sv文件,直方圖疊加在圖像的左下方,區域大小用HIST_NUM參數來定義。在hist_domain區域內,將將列計算hsync_cnt作為地址從直方圖的數組中去出來直方圖的值;再將直方圖的值和列計數vsync_cnt比較,到底是顯示直方圖的值還是原始的圖像。
在top文件中例化了rgb2ycbcr,hist_statistics,hist_norm,hist_mem,plot_chnl_hist等模塊。
在tb_image_sim文件中的第二個initial塊中,將圖像測試平臺和FPGA硬件仿真的結果保存并比對,需要注意一點,要完成兩幀圖像的處理,通過wait((frame_cnt == 1) & frame_done)來實現。
雙擊sim文件夾下的top_tb.bat文件,完成系統的自動化仿真。
可以看到在modelsim的Transcript有如下的打印信息,圖像測試平臺和FPGA硬件仿真的結果一致。
打開img文件夾,也可以看到圖像測試平臺和FPGA硬件仿真的結果是一致的(no_seq*是圖像測試平臺處理后的圖片,seq*是FPGA硬件仿真處理后的結果)。