www.gusucode.com > visionhdl 源码程序 matlab案例代码 > visionhdl/MorphErodeSysObjExample.m

    %% Morphological Erode
% Perform morphological erode on a thumbnail image.
%%
% Load a source image from a file. Select a portion of the image that matches 
% the desired test size. This source image contains |uint8| pixel intensity 
% values. Apply a threshold to convert to binary pixel data. 
frmOrig = imread('rice.png');
frmActivePixels = 64;
frmActiveLines = 48;
frmInput = frmOrig(1:frmActiveLines,1:frmActivePixels);
frmInput = frmInput>128;
figure
imshow(frmInput,'InitialMagnification',300)
title 'Input Image'
%% 
% Create a serializer object and define inactive pixel regions. Make the 
% number of inactive pixels following each active line at least double the
% horizontal size of the neighborhood. Make the number of lines following
% each frame at least double the vertical size of the neighborhood.
frm2pix = visionhdl.FrameToPixels(...
      'NumComponents',1,...
      'VideoFormat','custom',...
      'ActivePixelsPerLine',frmActivePixels,...
      'ActiveVideoLines',frmActiveLines,...
      'TotalPixelsPerLine',frmActivePixels+20,...
      'TotalVideoLines',frmActiveLines+10,...
      'StartingActiveLine',3,...     
      'FrontPorch',10);
%%
% Create a filter object.
 merode = visionhdl.Erosion( ...
          'Neighborhood',ones(2,7));
%%
% Serialize the test image by calling |step| on the serializer object. 
% |pixIn| is a vector of intensity values. |ctrlIn| is a vector of control 
% signal structures.
[pixIn,ctrlIn] = step(frm2pix,frmInput);
%%
% Prepare to process pixels by preallocating output vectors.
[~,~,numPixelsPerFrame] = getparamfromfrm2pix(frm2pix);
pixOut = false(numPixelsPerFrame,1);
ctrlOut  = repmat(pixelcontrolstruct,numPixelsPerFrame,1);
%%
% For each pixel in the padded frame, compute the morphed value. Monitor 
% the control signals to determine latency of the object. The latency of a 
% configuration depends on the number of active pixels in a line and the 
% size of the neighborhood
foundValIn = false;
foundValOut = false;
for p = 1:numPixelsPerFrame  
    if (ctrlIn(p).valid && foundValIn==0)
        foundValIn = p;
    end
    [pixOut(p),ctrlOut(p)] = step(merode,pixIn(p),ctrlIn(p));
    if (ctrlOut(p).valid && foundValOut==0)
        foundValOut = p;
    end
end
sprintf('object latency is %d cycles',foundValOut-foundValIn)	
%%
% Create a deserializer object with a format matching that of the serializer.
% Convert the pixel stream to an image frame by calling |step| on the
% deserializer object. Display the resulting image. 
pix2frm = visionhdl.PixelsToFrame(...
      'NumComponents',1,...
      'VideoFormat','custom',...
      'ActivePixelsPerLine',frmActivePixels,...
      'ActiveVideoLines',frmActiveLines);
[frmOutput,frmValid] = step(pix2frm,pixOut,ctrlOut);
if frmValid
    figure
    imshow(frmOutput, 'InitialMagnification',300)
    title 'Output Image'
end