圖像屬于二維信號,如果想在Simulink中采集和輸出圖像,進行圖像處理算法的仿真時會遇到一些問題。本文將介紹如何搭建圖像的采集與輸出模型。
采集圖像需要解決的問題
Computer Vision System Toolbox中包含兩個模塊:Image From File可以讀取圖片格式的文件;Video Viewer可以輸入圖像并顯示(類似于Scope觀察信號波形一樣)。
但是Image From File一次讀出的便是完整的圖片信息,是一個向量形式,而Gateway In只能接收標量數(shù)據(jù)的輸入(即單個數(shù)據(jù))。如果將兩者直接相連,會出現(xiàn)如下錯誤:
Image From File讀取一個256*256大小的圖像,讀出數(shù)據(jù)為一個256*256*3的數(shù)據(jù)(RGB三個通道),這個數(shù)據(jù)不能直接輸入到FPGA中。我們需要利用Simulink提供的功能豐富的block完成數(shù)據(jù)之間的轉(zhuǎn)換。
圖像采集實現(xiàn)
在Simulink中添加block按下圖連接:
下面以列表的形式給出每個block的作用(以讀取256*256的RGB圖像為例,工作空間中設置變量ImSize=256):
●Image From File:讀取圖像:
“File name”設置圖片文件路徑;“Sample time”設置為ImSize*ImSize即只做一次完整的圖像采集;“Image signal”設置為Separate color signals可以獨立輸出圖像的R、G、B三個通道,每個通道都是256*256大小。
●Math Function:該block可以運行一些基本的數(shù)學函數(shù)(如指數(shù)、對數(shù)、平方等),這里設置為Transpose,計算圖像的轉(zhuǎn)置矩陣。
●Convert 2-D to 1-D:該block可以將二維數(shù)組重新按一維數(shù)組的順序排列,從矩陣的列開始轉(zhuǎn)換,如下圖例子所示:
由于圖像處理算法大多都是以行為單位,因此在前面加了一個Math Function模塊求轉(zhuǎn)置矩陣,這樣在轉(zhuǎn)換后的一維數(shù)組中便是按圖像的每一行依次排列。
●Frame Conversion和Unbuffer:這兩個block配合使用,將一維數(shù)組(向量)轉(zhuǎn)換為Gateway In可以接收的標量形式。示例如下:
Unbuffer將幀格式(frame)轉(zhuǎn)換為標量數(shù)據(jù);Frame Conversion的作用便是將一維數(shù)組以幀格式采樣輸出,即將一副圖像共(256*256=)65536個數(shù)據(jù)打包為一幀,再由Unbuffer轉(zhuǎn)換為標量。
●Data Type Conversion:目前的RGB圖像每個通道大多都是uint8格式,該模塊將數(shù)據(jù)格式轉(zhuǎn)換為uint8。
●Unit Delay:延時一個單位,數(shù)據(jù)緩存。
●Gateway In:讀取uint8格式的圖像數(shù)據(jù),數(shù)據(jù)格式設置為UFix_8_0。
圖像輸出實現(xiàn)
圖像輸出的流程恰好與圖像采集相反,是為了將FPGA處理后的標量數(shù)據(jù)重新轉(zhuǎn)換組織成圖片的數(shù)組形式。在Simulink中添加block按下圖連接:
下面以列表的形式給出每個block的作用(以輸出256*256的RGB圖像為例,工作空間中設置變量ImSize=256):
●Data Type Conversion:Simulink從Gateway Out讀出的數(shù)據(jù)會默認轉(zhuǎn)換為double,這里加入該block將數(shù)據(jù)轉(zhuǎn)換為圖像的uint8格式。
●Buffer:與Unbuffer作用相反,將標量數(shù)據(jù)重新組織為指定幀格式輸出。示例如下:
雙擊配置該block,將“Output buffer size”設置為ImSize*ImSize,即每幅圖像的數(shù)據(jù)為一幀。
●Convert 1-D to 2-D:將一維數(shù)組重新整理為指定格式的二維數(shù)組,示例如下:
雙擊配置該block,將“Number of output rows”和“Number of output columns”都設置為ImSize,即以256*256的格式輸出。
●Math Function:由上圖可知,整形為二維數(shù)組后,原本圖像的每一行數(shù)據(jù)變成了矩陣的每一列。因此需要加入此模塊再求一此轉(zhuǎn)置矩陣,得到原圖像的數(shù)據(jù)排列方式。
●Video Viewer:雙擊打開,點擊File->Image Signal->Separate Color Signals,即可分別輸入R、G、B三個通道的數(shù)據(jù)。
打包子系統(tǒng)
可以看到上面的整個模型已經(jīng)很龐大,因此將圖像采集部分和圖像輸出部分分別打包為子系統(tǒng)。選中對應部分,右鍵->Create Subsystem from selection。代開子系統(tǒng),修改IN/OUT管腳的名稱為R、G、B。此時系統(tǒng)整體連接如下圖:
在System Generator和Gateway In中將采樣時間設置為1S;Simulink仿真時長設置為256*256,即保證采集完一幅圖像。再添加一個Video Viewer觀察原始圖片。運行仿真,結(jié)果如下:
輸入與輸出圖片相同,表明結(jié)果正確。如果需要進行數(shù)字圖像處理算法的仿真驗證,在其中加入其它block實現(xiàn)算法即可。本系統(tǒng)實現(xiàn)了圖像的采集與輸出,使仿真時的結(jié)果更直觀,更容易觀察算法效果,大大提升了仿真效率。
編輯:hfy
-
Simulink
+關注
關注
22文章
540瀏覽量
63648 -
數(shù)字圖像處理
+關注
關注
7文章
103瀏覽量
19277
發(fā)布評論請先 登錄
如何實現(xiàn)MC33774IC在Simulink環(huán)境中使用基于模型的設計?
如何使用圖像采集卡

Simulink與 Simscape的結(jié)合使用
Simulink與 MATLAB 的結(jié)合使用 Simulink中的信號處理方法
Simulink模型仿真與分析技巧
Simulink自定義模塊開發(fā)教程 Simulink 在控制系統(tǒng)中的應用
圖像采集卡的保養(yǎng)和維護

評論