本文將介紹如何使用Simulink提供的回調(diào)函數(shù)機(jī)制,實(shí)現(xiàn)從MATLAB工作空間采集和輸出圖像。
Simulink回調(diào)函數(shù)機(jī)制
在空白處右鍵->Model Properties,切換到“Callbacks”標(biāo)簽下,可以看到Simulink支持的回調(diào)函數(shù),這些函數(shù)在某些時(shí)刻會(huì)自動(dòng)觸發(fā),執(zhí)行M文件中的程序:
點(diǎn)擊每個(gè)函數(shù),可以在右邊看到該函數(shù)的觸發(fā)時(shí)刻;右邊的編輯框中輸入執(zhí)行的M文件的名稱。M文件與slx文件在同一目錄下。
System Generator設(shè)計(jì)
數(shù)據(jù)流方法完成圖像的采集與輸出,其實(shí)就是從MATLAB的工作空間中導(dǎo)入圖像數(shù)據(jù),再將結(jié)果導(dǎo)出到工作空間。按下圖連接model:
From Workspace從工作空間中讀取數(shù)據(jù);To Workspace將數(shù)據(jù)導(dǎo)出到工作空間。讀出數(shù)據(jù)時(shí)會(huì)受到采樣時(shí)間的控制,因此讀出的為標(biāo)量數(shù)據(jù),可以直接接入Gateway In中。三個(gè)輸入模塊和輸出模塊分別對(duì)應(yīng)R、G、B三個(gè)通道,雙擊打開(kāi)配置界面,在“Data”中設(shè)置變量名稱。
設(shè)計(jì)思路如下:在啟動(dòng)模型時(shí),設(shè)計(jì)一個(gè)函數(shù)讀取圖片并將圖片轉(zhuǎn)換為From Worspace兼容的格式;在仿真結(jié)束時(shí),設(shè)計(jì)一個(gè)函數(shù)將輸出的數(shù)據(jù)重新整理為圖片格式并顯示結(jié)果。添加一個(gè)PreLoadFcn回調(diào)函數(shù)LoadImg.m、一個(gè)StopFcn回調(diào)函數(shù)ShowImg.m,分別完成上述功能。
回調(diào)函數(shù)設(shè)計(jì)
LoadImg.m文件的代碼清單如下:
%讀取圖片
img = imread('test.jpg');
%讀取圖片尺寸
width = size(img, 2); %長(zhǎng)
height = size(img, 1); %寬
%讀取R、G、B通道,2維轉(zhuǎn)1維
inimg_r = reshape(img(:,:,1), 1, width*height);
inimg_g = reshape(img(:,:,2), 1, width*height);
inimg_b = reshape(img(:,:,3), 1, width*height);
%From Workspace讀取的變量要求為double類型矩陣
%第一列為時(shí)間;其余列為數(shù)據(jù)
inimg_r = [(0:width*height-1)' double(inimg_r)'];
inimg_g = [(0:width*height-1)' double(inimg_g)'];
inimg_b = [(0:width*height-1)' double(inimg_b)'];
注意From Workspace讀取的變量(inimg_r、inimg_g、inimg_b)中的第一列為采樣時(shí)間設(shè)置,這里設(shè)計(jì)為每個(gè)時(shí)刻讀一個(gè)像素值。StopFcn.m文件的代碼清單如下:
%一維轉(zhuǎn)二維
out_r = reshape(outimg_r(1:width*height), height, width);
out_g = reshape(outimg_g(1:width*height), height, width);
out_b = reshape(outimg_b(1:width*height), height, width);
%組合R、G、B通道
showimg = zeros(width, height, 3);
showimg(:,:,1) = out_r;
showimg(:,:,2) = out_g;
showimg(:,:,3) = out_b;
subplot(121);
imshow(img); title('輸入圖像');
subplot(122);
imshow(uint8(showimg)); title('輸出圖像');
將RGB三通道合為一副圖像并顯示。
仿真測(cè)試
讀取一副256*256的RGB圖像,系統(tǒng)采樣時(shí)間為1s,仿真時(shí)長(zhǎng)設(shè)置為256*256,即只讀取一次完整的圖像。先關(guān)閉slx文件,再次啟動(dòng),此時(shí)MATLAB的工作空間:
可見(jiàn)啟動(dòng)時(shí)執(zhí)行了LoadImg函數(shù)。運(yùn)行仿真后,MATLAB的工作空間:
可見(jiàn)仿真結(jié)束時(shí)執(zhí)行了ShowImg函數(shù),彈出結(jié)果圖如下:
在某些方面講,基于數(shù)據(jù)流方法的圖像采集與輸出要更靈活,設(shè)計(jì)者可以根據(jù)需要隨意設(shè)計(jì)回調(diào)函數(shù)(當(dāng)然回調(diào)函數(shù)的用途不限于此)。
編輯:hfy
-
matlab
+關(guān)注
關(guān)注
189文章
3001瀏覽量
234010 -
Simulink
+關(guān)注
關(guān)注
22文章
542瀏覽量
63998
發(fā)布評(píng)論請(qǐng)先 登錄
普源示波器如何連接MATLAB實(shí)現(xiàn)數(shù)據(jù)采集與分析
工業(yè)相機(jī)圖像采集卡:機(jī)器視覺(jué)的核心樞紐

MATLAB/Simulink驅(qū)動(dòng)汽車行業(yè)能效革命

如何實(shí)現(xiàn)MC33774IC在Simulink環(huán)境中使用基于模型的設(shè)計(jì)?
圖像采集卡:現(xiàn)代圖像處理技術(shù)的關(guān)鍵組件

圖像采集卡:技術(shù)原理、應(yīng)用與未來(lái)趨勢(shì)

用matlab里的simulink仿真一個(gè)推挽升壓仿真電路,輸出帶載能力很差?
MathWorks積極推動(dòng)MATLAB與Simulink在教學(xué)項(xiàng)目中的應(yīng)用
如何使用圖像采集卡

Simulink與 MATLAB 的結(jié)合使用 Simulink中的信號(hào)處理方法
分享兩則MATLAB和Simulink助力教學(xué)案例

圖像采集卡的保養(yǎng)和維護(hù)

Matlab/Simulink/Stateflow建模開(kāi)發(fā)及仿真測(cè)試
圖像采集卡:增強(qiáng)視覺(jué)數(shù)據(jù)采集

評(píng)論