Code covered by the BSD License  

Highlights from
Send Video from Simulink diretly to MATLAB GUI - Example.

image thumbnail

Send Video from Simulink diretly to MATLAB GUI - Example.


Roni Peer (view profile)


This simple example shows how you can take a Simulink signal (Video feed), and disply it in a GUI.

function sfuntmpl_imaq(block)
%% This function is a Level-2 MATLAB S-Function that is used to send Image 
% data from Simulink and display it within a MATLAB GUI. It uses the
% Level-2 S-Function template supplied by MathWorks.
% Created by Roni Peer, 4-Sep-2012


function setup(block)
  %% Register number of ports
  block.NumInputPorts  = 3; % If you want to disply a RGB video.
  block.NumOutputPorts = 0; % Only a 'sink'.
  %% Setup functional port properties

  % Need three inputs for each color. Level-2 sfunctions can't receieve
  % signals greater than 2 dimensions, so have to split the input to 3
  % signals.... :-(
  block.InputPort(1).DatatypeID   = 3; %uint8
  block.InputPort(1).Complexity   = 'Real';
  block.InputPort(1).SamplingMode = 'Sample';
  block.InputPort(2).DatatypeID   = 3; %uint8
  block.InputPort(2).Complexity   = 'Real';
  block.InputPort(2).SamplingMode = 'Sample';
  block.InputPort(3).DatatypeID   = 3; %uint8
  block.InputPort(3).Complexity   = 'Real';
  block.InputPort(3).SamplingMode = 'Sample';
  %% Register dialog parameters
  block.NumDialogPrms = 0; % Not needed.

  %% Set the block simStateCompliance to none.
  % This will ensure that the handle store in dwork is not saved and restored
  block.SimStateCompliance = 'HasNoSimState';

  %% Register block methods
  block.RegBlockMethod('SetInputPortDimensions',  @SetInpPortDims);
  block.RegBlockMethod('Outputs',                 @Output);

function SetInpPortDims(block,idx,di) %#ok<INUSL>
  block.InputPort(1).Dimensions = di; % Get the dimension from the block.
  block.InputPort(2).Dimensions = di;
  block.InputPort(3).Dimensions = di;

function Output(block)
% This function plots the image directly to the GUI.
fig = simpleGUI_imaq; % Get handle to the GUI.
h = guihandles(fig);  
a = get(h.figure1,'Children'); % Needed to get to the axes..

% Concatenate the 3 images into one.
img = cat(3,...
    block.InputPort(2).Data, ...

% Display Original Image:
title('RGB Image');
axis off;
%Display image with Edges:
gr = rgb2gray(img);
bw = uint8(edge(gr,'canny')*255);
img = img+cat(3,bw/255,bw,bw/255);
axis off;
title('Image with Edges');
% image(img);

Contact us