fpga驱动rgb液晶屏_正点原子开拓者FPGA开发板资料连载第五十四章基于的数字识别实验...
1)實驗平臺:正點(diǎn)原子開拓者FPGA 開發(fā)板
2)摘自《開拓者FPGA開發(fā)指南》關(guān)注官方微信號公眾號,獲取更多資料:正點(diǎn)原子
3)全套實驗源碼+手冊+視頻下載地址:http://www.openedv.com/thread-13912-1-1.html
第五十四章 基于 OV5640 的數(shù)字識別實驗
數(shù)字是人們?nèi)粘I钪羞M(jìn)行信息交流時不可缺少的信息載體,面對大量的數(shù)字如何讓機(jī)器
識別處理,包括身份證號識別、車牌號識別等就成為了一個研究點(diǎn),同時,數(shù)字識別必然涉及
到圖像處理,本章我們通過數(shù)字特征識別入手對數(shù)字識別有一個基本的了解,以及對數(shù)字圖像
處理有一個基本的認(rèn)識。本章包括以下幾個部分:
54.1 簡介
54.2 實驗任務(wù)
54.3 硬件設(shè)計
54.4 程序設(shè)計
54.5 下載驗證
簡介
數(shù)字識別一般通過特征匹配及特征判別的方法來進(jìn)行處理,前者一般適用于規(guī)范化的印刷
體字符識別,現(xiàn)今該技術(shù)基本成熟,后者多用于手寫字符識別,其研究還處于探索階段,識別
率還比較低。本章我們通過對印刷體數(shù)字識別入手,了解特征匹配識別的應(yīng)用。
數(shù)字特征識別是通過對數(shù)字的形狀以及結(jié)構(gòu)等幾何特征進(jìn)行分析與統(tǒng)計,通過對數(shù)字特征
的匹配從而達(dá)到對圖像中數(shù)字的識別,如下圖所示:
圖 54.1.1 數(shù)字幾何特征
x1、x2是水平方向的兩條直線,與數(shù)字長度成特定比例關(guān)系,y是豎直方向的直線,占數(shù)
字寬度一半,這三條線與數(shù)字的交點(diǎn)可以得到數(shù)字的特征值。下面以數(shù)字0為例,如下圖所示:
圖 54.1.2 數(shù)字0的幾何特征
紅框是數(shù)字的邊界,x1取上下邊界的2/5處,x2取上下邊界的2/3處,y取左右邊界的1/2,
可以看到x1與數(shù)字0有兩個交點(diǎn),左右(以y為分界)各一個,x2同樣與數(shù)字0有兩個交點(diǎn),左
右各一個,y與數(shù)字0有兩個交點(diǎn)。以此統(tǒng)計數(shù)字特征實現(xiàn)識別,如下表所示:
表 54.1.1 數(shù)字特征表
實驗任務(wù)
本章我們在開拓者FPGA開發(fā)板上實現(xiàn)數(shù)字識別,利用4'3寸RGB屏顯示OV5640攝像頭捕獲到
的數(shù)字,并將識別到的數(shù)字顯示在數(shù)碼管上。
硬件設(shè)計
本次實驗用到了OV5640攝像頭、SDRAM、4'3寸RGB TFT-LCD模塊,我們可以在“OV5640攝
像頭RGB TFT-LCD顯示實驗”的基礎(chǔ)上搭建本實驗。
程序設(shè)計
根據(jù)實驗任務(wù),我們設(shè)計如圖 54.4.1所示的系統(tǒng)架構(gòu),OV5640攝像頭采集到的數(shù)據(jù)通過
寫FIFO模塊wrfifo寫入SDRAM,然后通過讀FIFO模塊讀出,讀出的數(shù)據(jù)在LCD驅(qū)動模塊的驅(qū)動下
進(jìn)入vip模塊,在vip模塊內(nèi)部圖像數(shù)據(jù)先由rgb2ycbcr模塊將RGB轉(zhuǎn)化為YCbCr,然后進(jìn)行二值
化處理,得到二值圖像,對二值圖像進(jìn)行水平垂直投影即圖像分割,得到各個數(shù)字的水平和垂
直邊界,將數(shù)字邊界信息送入特征識別模塊進(jìn)行特征匹配,從而識別圖像中的數(shù)字,將識別到
的數(shù)字送入數(shù)碼管驅(qū)動模塊顯示在數(shù)碼管上。LCD顯示器顯示處理后的二值化圖像和圖像的邊
界。
圖 54.4.1 系統(tǒng)架構(gòu)
了解了整個處理流程后,我們來看一下底層硬件中各個模塊的設(shè)計思路。由于除vip模塊
之外的模塊都在先前的實驗中介紹過,這里就不多做介紹。
圖 54.4.2 vip模塊接口定義
vip模塊的輸入端除了幀數(shù)據(jù)使能信號pre_frame_de、幀行同步信號pre_frame_hsync、幀
場同步信號pre_frame_vsync外,還有位置坐標(biāo)信號xpos和ypos和像素pre_rgb,這些信號由LCD
驅(qū)動模塊輸入。輸出除了vip模塊處理后的幀數(shù)據(jù)使能信號post_frame_de、幀行同步信號
post_frame_hsync、幀場同步信號post_frame_vsync外,還有一個識別后的數(shù)字信號digit,由于開拓者開發(fā)板板載6位數(shù)碼管,每位數(shù)碼管用壓縮的8421BCD編碼顯示,總共需要4*6=24位,
即digit信號位寬為24位,該信號輸出給數(shù)碼管驅(qū)動模塊在數(shù)碼管上顯示識別到的數(shù)字
vip模塊有五個參數(shù),如下圖所示:
圖 54.4.3 vip模塊的參數(shù)
NUM_ROW和NUM_COL分別指需識別的數(shù)字的行數(shù)和列數(shù),這里我們指定識別1行4列的數(shù)字;
H_PIXEL和V_PIXEL是圖像的水平和垂直像素大小,因為在4'3寸RGB屏上顯示,其分辨率為
480*272;DEPBIT是數(shù)據(jù)的位寬,主要用于確定數(shù)字邊界大小的位寬,與水平和垂直像素大小
有關(guān)。
vip模塊是封裝層模塊,是對圖像處理子模塊的頂層封裝,其內(nèi)部模塊如下圖所示:
圖 54.4.4 vip模塊的子模塊
rgb2ycbcr是RGB轉(zhuǎn)YCbCr模塊、binarization是二值化模塊、projection是投影分割模塊、
digital recognition是特征匹配識別模塊。下面我們按照處理的先后順序依次介紹各模塊。
1) rgb2ycbcr 模塊
rgb2ycbcr模塊實現(xiàn)RGB到Y(jié)CbCr的轉(zhuǎn)換,模塊接口如下圖所示:
圖 54.4.5 rgb2ycbcr模塊接口定義
可以看到輸入為rgb565,輸出為ycbcr,內(nèi)部進(jìn)行rgb565到Y(jié)CbCr的轉(zhuǎn)換,依據(jù)OV5640的官
方手冊,轉(zhuǎn)換公式如下:
圖 54.4.6 RGB888轉(zhuǎn)YCbCr
需要注意的是這里的RGB為RGB888,所以我們需要將RGB565轉(zhuǎn)換為RGB888??梢圆捎酶呶?/p>
填充低位的方式,如下圖所示:
圖 54.4.7 RGB565轉(zhuǎn)RGB888
只所以進(jìn)行色彩空間的轉(zhuǎn)換,是因為后面我們需要根據(jù)亮度信息進(jìn)二值化處理,而YCbCr
色彩空間的特點(diǎn)是將亮度和色度分離開,從而適合于圖像處理。后面我們根據(jù)亮度信息Y進(jìn)行
二值化。
2) binarization 二值化模塊
binarization是二值化模塊,圖像二值化的目的是最大限度的將圖象中感興趣的部分保留
下來,在很多情況下,也是進(jìn)行圖像分析、特征提取與模式識別之前的必要的圖像預(yù)處理過程。
模塊接口如下圖所示:
圖 54.4.8 binarization模塊接口定義
根據(jù)輸入的color轉(zhuǎn)換為相應(yīng)的二值化圖像輸出,輸出的monoc為像素的二值化后的信息,
1代表白色,0代表黑色,monoc_fall是像素變化的標(biāo)志信號,即由1變?yōu)?。
3) projection 投影分割模塊
projection是投影分割模塊,實現(xiàn)對二值化后的圖像的水平垂直投影,從而實現(xiàn)對圖像的
分割。模塊接口如下圖所示:
圖 54.4.9 projection模塊接口定義
該 模 塊 輸 出 投 影 后 得 到 的 邊 界 信 息 , row_border_data_rd 是 行 邊 界 信 息 ,
col_border_data_rd是列邊界信息,這些信息存放在自定義的ram里面,如下圖所示:
圖 54.4.10 自定義存儲邊界信息的ram接口
當(dāng) 外 面 模 塊 需 要 讀 取 邊 界 信 息 時 , 只 需 要 通 過 給 定 地 址 row_border_addr_rd 和
col_border_addr_rd就可得到邊界地址信息,需要說明的是對于row_border_addr_rd而言,當(dāng)
row_border_addr_rd[0]為0時存放的是行上邊界信息,為1時存放的是行下邊界信息,對于
col_border_addr_rd,當(dāng)col_border_addr_rd[0]為0時存放的數(shù)字的左列邊界信息,為1時存
放的是右列邊界信息。num_col是采集到的數(shù)字列數(shù),num_row是采集到的數(shù)字行數(shù),
project_done_flag是投影完成標(biāo)志,表明可以進(jìn)行后期處理。
4) digital recognition 特征匹配識別模塊
digital recognition是特征匹配識別模塊,根據(jù)投影分割模塊對分割后的單個數(shù)字進(jìn)行
特征匹配識別。模塊接口如下圖所示:
圖 54.4.11 digital recognition模塊接口定義
該模塊最主要的輸出是識別到的數(shù)字digit和color_rgb,可以看到這里的digit是16位的,
這是因為我們識別的1行4列的數(shù)字,每個數(shù)字用壓縮的8421BCD編碼表示,需要4*4=16位,digit
的位寬是自動匹配的,不需要關(guān)心。輸出的color_rgb信息顯示在RGB顯示屏上,為二值化后的
圖像和圖像中數(shù)字的邊界。
該模塊主要用到我們在簡介中介紹到的數(shù)字特征,由于獲取數(shù)字特征的x1和x2是邊界的小
數(shù)如2/5(0.4)、2/3(0.6667),而Verilog HDL不直接支持小數(shù)的使用,所以需要對這些小
數(shù)進(jìn)行處理,FPGA中對于小數(shù)的處理通常有三種方法:
方法1:將小數(shù)乘某個數(shù)(一般為2的指數(shù))得到一個整數(shù),再將乘積除以該整數(shù),一般通
過移位實現(xiàn)除的效果,如0.25,乘以4得到1,乘積右移2位(除以4)即可,我們在RGB轉(zhuǎn)YCbCr
時就用到了此方法;
方法2:將小數(shù)進(jìn)行定點(diǎn)化處理。所謂的定點(diǎn)化就是人為的確定用多少位來表示小數(shù),即
把1多少等分。如果我們用6個位來表示小數(shù),相當(dāng)于將1分成2^6=64等份,每份為1/64=
0.015625,如果我們想用此表示2/5,只需要知道2/5中有多少個1/64(0.015625),2/5除以
1/64為25.6,約等于26,26用二進(jìn)制表示為011010,所以2/5即0.4的6位定點(diǎn)化為011010。
方法3:使用IP核。使用軟件提供的處理浮點(diǎn)數(shù)的IP核或乘除IP核。
識別數(shù)字的方法使用的是簡介部分的數(shù)字特征表,特征匹配的Verilog HDL實現(xiàn)如下:
圖 54.4.12 特征匹配
介紹完了vip整個模塊,我們還需要對lcd驅(qū)動模塊進(jìn)行相應(yīng)的修改,關(guān)鍵的修改點(diǎn)如下:
圖 54.4.13 修改lcd驅(qū)動模塊
只所以需要修改是因為之前我們使用的是lcd_de信號,現(xiàn)在我們需要使用lcd_hs和lcd_vs
信號。
下載驗證
首 先 我 們 打 開 數(shù)字識別工 程digital_recognition , 在 工 程 所 在 的 路 徑
下 打 開digital_recognition/par文件夾,在里面找到“digital_recognition.qpf”并雙擊
打開。注意工程所在的路徑名只能由字母、數(shù)字以及下劃線組成,不能出現(xiàn)中文、空格以及特
殊字符等。工程打開后如下圖所示:
圖 54.5.1 數(shù)字識別實驗工程
將下載器一端連電腦,另一端與開發(fā)板上對應(yīng)端口連接,接上OV5640和4.3寸RGB顯示屏后,
連接電源線并打開電源開關(guān)。接下來我們下載程序,驗證數(shù)字識別功能。
工程打開后通過點(diǎn)擊工具欄中的“Programmer”圖標(biāo)打開下載界面,通過“Add File”按
鈕選擇digital_recognition /par/output_files目錄下的“digital_recognition.sof”文件。
在程序下載界面點(diǎn)擊“Hardware Setup”,在彈出的對話框中選擇當(dāng)前的硬件連接為“USB
Blaster[USB-0]”。然后點(diǎn)擊“Start”將工程編譯完成后得到的sof文件下載到開發(fā)板中,如
圖所示:
圖 54.5.2 程序下載完成界面
下載完成后,我們將下圖中的數(shù)字圖片合適的放在OV5640攝像頭前面。
圖 54.5.3 需識別的數(shù)字
從下圖實驗結(jié)果中我們可以看到RGB顯示屏上顯示出捕獲到的數(shù)字,并框出數(shù)字的邊界,
數(shù)碼管顯示2345。
圖 54.5.4 實驗結(jié)果
至此,我們的數(shù)字識別實驗就完成了。
總結(jié)
以上是生活随笔為你收集整理的fpga驱动rgb液晶屏_正点原子开拓者FPGA开发板资料连载第五十四章基于的数字识别实验...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript在发送ajax请求时
- 下一篇: gridreport5.6如何设置打印3