<< Chapter < Page Chapter >> Page >
function [Thetas, Rhos] = fcn( thetas,rhos)% This block supports an embeddable subset of the MATLAB language. % See the help menu for details.%initialise a frame count persistent count;if isempty(count) count = 0;end %remember previous outputspersistent lastRhos; persistent lastThetas;%initialise to same as first input for first entry into function if isempty(lastRhos)lastRhos = rhos; endif isempty(lastThetas) lastThetas = thetas;end %Assume that all is OK initiallyRhos = rhos; Thetas = thetas;if count == 4 %after the 4th frame, engage the test logicfor I = 1:length(rhos) if (abs(rhos(I) - lastRhos(I))>30) || (abs(thetas(I) - lastThetas(I))>10*(pi/180)) %too much change - just use the old values% outR(I) = lastRhos(I); % outT(I) = lastThetas(I);Rhos(I) = lastRhos(I); Thetas(I) = lastThetas(I);end endelse %otherwise just output the computed valuescount = count+1; end%assign outputs %Rhos = outR;%Thetas = outT;%remember outputs for next time lastRhos = Rhos;lastThetas = Thetas;

Connect the block as shown in the following picture:

In the main model, double-click the “Line Drawing and Image Construction” block.

Change the configuration of the “Draw Lines” block as follows:

Now, it will draw the polygon based on the two longest lines.

Add the following blocks to the subsystem:

Block Library Quantity
Concatenate Simulink /Math Operations 2
Selector Simulink / Signal Routing 3
Gain Simulink / Math Operations 1
Relational Operator Simulink / Logic and Bit Operations 1
Logical Operator Simulink / Logic and Bit Operations 1
Submatrix Signal Processing Toolbox:“Math Functions / Matrices and Linear Algebra / Matrix Operations” or “Signal Management / Indexing” 1

Connect the blocks as follows:

The blocks should be configured as follows:

  • Selector5:
  • Selector4:
  • Selector3:
  • Vertices Matrix:
  • Draw Lane
  • Superposition of Lane and Original Image
  • Extraction

Rename the “Line Detection” to “Lane Detection”. Save the model as “LaneDetection.mdl” The model should look as follows:

Double Click the Lane Detection block. You may rename the blocks’ names. It will look as follows:

Run your model.

Running this gives you the images in Figure 7.

Edge Detection on a Video Stream

Real time implementation using tcp/ip

Procedure

Open the “ RW_dm6437_tcpip.mdl ” Simulink model (generated in the " A Framework for Video Processing with the DM6437 DVDP " module).

Save the model as "lane_dm6437_tcpip.mdl".

Change the name of the “R_W Algorithm” block to “Lane Algorithm”.

The Real Time Implementation Model for Lane Detection

Right click on the "Build/Reload&Run" subsystem, choose “Block Properties”. Go to the Callbacks tab, and under OpenFcn* enter: “lane_tcpip_script('lane_pcl_tcpip');”, as shown in the following picture:

Double-click the “Task” block and make the same changes as shown:

Double-Click the “Lane Algorithm” subsystem.

Copy "Lane Detection and Tracking" block from "LaneDetection.mdl" into this model as shown.

Configure the "TCP/IP Receive" block :

Configure the "TCP/IP Send" block :

Configure the "Byte Unpack" block :

Configure the "Byte Pack" block :

Open the "RW_pcl_tcpip.mdl" model, created in the "Video R_W" directory.

Save the model as "lane_pcl_tcpip.mdl".

Double-click the “Video Source” block and make the same changes as shown:

Configure the "TCP/IP Receive" block :

Double-click the “Display” block, Double-click the “Data Unpack” block and Configure the "Byte Unpack" block as shown:

function lane_tcpip_script(hostModelName) % controls host-side TCP/IP processing for% Video Surveillance demo: %********** Initialization ********************% Get model name modelName = gcs;% Connect to CCS CCS_Obj = connectToCCS(modelName);saved_visibility = CCS_Obj.isvisible; CCS_Obj.visible(1);% Load application loadApp(modelName, CCS_Obj);% Run application fprintf('Running application: %s\n', modelName);CCS_Obj.run; % Allow some time for DHCP address acquisitionpause(3); % Retrieve target's host nameboardType = get_param([modelName '/IP Config'], 'boardType');userPrompt = sprintf('Enter the IP address or the host name of the %s board: ', boardType); hostName = inputdlg(userPrompt, 'Target IP address');if isempty(hostName) errordlg('You have to provide a valid IP address or host name to run the demo.',...'TCP/IP Surveillance Recording', 'modal'); return;end hostName = strtrim(hostName{1});% Launch host side UDP receive / Video display model fprintf('Launching host side application: %s\n', hostModelName);open_system(hostModelName); % Update host side TCP/IP blocks with target's IP addressset_param([hostModelName '/TCP//IP Send'], 'Host', hostName);set_param([hostModelName '/TCP//IP Receive'], 'Host', hostName);fprintf('Click on play button to start running the host side application!\n\n') %[EOF]tcpip_surveil_script.m

Open a new m-file, copy the following code and save it as "lane_tcpip_script.m" at the same directory as the model.

Running the real-time model

Build load and run the project from the "lane_dm6437l_tcpip.mdl" model. Double-click the "Build / Reload&Run" block.

Running the script, you will see:

Real-Time Edge Detection through a TCP/IP Interface

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, From matlab and simulink to real-time with ti dsp's. OpenStax CNX. Jun 08, 2009 Download for free at http://cnx.org/content/col10713/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'From matlab and simulink to real-time with ti dsp's' conversation and receive update notifications?

Ask