本文將介紹如何使用Simulink提供的回調函數機制,實現(xiàn)從MATLAB工作空間采集和輸出圖像。
Simulink回調函數機制
在空白處右鍵->Model Properties,切換到“Callbacks”標簽下,可以看到Simulink支持的回調函數,這些函數在某些時刻會自動觸發(fā),執(zhí)行M文件中的程序:
點擊每個函數,可以在右邊看到該函數的觸發(fā)時刻;右邊的編輯框中輸入執(zhí)行的M文件的名稱。M文件與slx文件在同一目錄下。
System Generator設計
數據流方法完成圖像的采集與輸出,其實就是從MATLAB的工作空間中導入圖像數據,再將結果導出到工作空間。按下圖連接model:
From Workspace從工作空間中讀取數據;To Workspace將數據導出到工作空間。讀出數據時會受到采樣時間的控制,因此讀出的為標量數據,可以直接接入Gateway In中。三個輸入模塊和輸出模塊分別對應R、G、B三個通道,雙擊打開配置界面,在“Data”中設置變量名稱。
設計思路如下:在啟動模型時,設計一個函數讀取圖片并將圖片轉換為From Worspace兼容的格式;在仿真結束時,設計一個函數將輸出的數據重新整理為圖片格式并顯示結果。添加一個PreLoadFcn回調函數LoadImg.m、一個StopFcn回調函數ShowImg.m,分別完成上述功能。
回調函數設計
LoadImg.m文件的代碼清單如下:
%讀取圖片
img = imread('test.jpg');
%讀取圖片尺寸
width = size(img, 2); %長
height = size(img, 1); %寬
%讀取R、G、B通道,2維轉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類型矩陣
%第一列為時間;其余列為數據
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)中的第一列為采樣時間設置,這里設計為每個時刻讀一個像素值。StopFcn.m文件的代碼清單如下:
%一維轉二維
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三通道合為一副圖像并顯示。
仿真測試
讀取一副256*256的RGB圖像,系統(tǒng)采樣時間為1s,仿真時長設置為256*256,即只讀取一次完整的圖像。先關閉slx文件,再次啟動,此時MATLAB的工作空間:
可見啟動時執(zhí)行了LoadImg函數。運行仿真后,MATLAB的工作空間:
可見仿真結束時執(zhí)行了ShowImg函數,彈出結果圖如下:
在某些方面講,基于數據流方法的圖像采集與輸出要更靈活,設計者可以根據需要隨意設計回調函數(當然回調函數的用途不限于此)。
編輯:hfy
-
matlab
+關注
關注
187文章
2989瀏覽量
232699 -
Simulink
+關注
關注
22文章
537瀏覽量
63393
發(fā)布評論請先 登錄
相關推薦
如何實現(xiàn)MC33774IC在Simulink環(huán)境中使用基于模型的設計?
圖像采集卡:現(xiàn)代圖像處理技術的關鍵組件

用matlab里的simulink仿真一個推挽升壓仿真電路,輸出帶載能力很差?
MathWorks積極推動MATLAB與Simulink在教學項目中的應用
如何使用圖像采集卡

Simulink與 MATLAB 的結合使用 Simulink中的信號處理方法
分享兩則MATLAB和Simulink助力教學案例

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

Matlab/Simulink/Stateflow建模開發(fā)及仿真測試
利用Matlab函數實現(xiàn)深度學習算法
圖像采集卡的選擇技巧

評論