本文將介紹如何使用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è)通道,雙擊打開配置界面,在“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的工作空間:
可見啟動(dòng)時(shí)執(zhí)行了LoadImg函數(shù)。運(yùn)行仿真后,MATLAB的工作空間:
可見仿真結(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)注
185文章
2979瀏覽量
230693 -
Simulink
+關(guān)注
關(guān)注
22文章
536瀏覽量
62473
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論