www.gusucode.com > visionhdl工具箱matlab源码程序 > visionhdl/visionhdlexamples/html/MultizoneMeteringHDLExample.m

    %% Multi-Zone Metering
% There are numerous applications where the input video is divided into 
% several zones, and the statistic is then computed over each zone. For 
% example, many auto-exposure algorithms compute the difference in the mean 
% intensity between zones. This allows the shutter controller logic to 
% determine whether the image is under-exposed (overall low illumination), 
% correctly-exposed (uniform illumination) or over-exposed (one or more 
% ROIs have a larger mean).
%
% This example shows how to use the Image Statistics block to perform 
% multi-zone metering in order to extract a region of interest (ROI).
% 
% Copyright 2014 The MathWorks, Inc.
 
%% Introduction
% The <matlab:MultizoneMeteringHDLExample MultizoneMeteringHDLExample.slx> system is shown below.
 
modelname = 'MultizoneMeteringHDLExample';
open_system(modelname);
set_param(modelname, 'SampleTimeColors', 'on');
set_param(modelname,'SimulationCommand','Update');
set_param(modelname, 'Open', 'on');
set(allchild(0),'Visible', 'off');
 
%% 
% The green and red lines represent full-frame processing and pixel-stream 
% processing, respectively. The color difference indicates the change in 
% the image rate on the streaming branch of the model. This rate transition 
% is because the pixel stream is sent out in the same amount of time as the 
% full video frames and therefore it is transmitted at a higher rate.
%
% In this example, the *Pixel-Stream ROI extraction* subsystem calculates 
% the mean intensity value over 12 predefined ROIs in a frame and outputs 
% the index number (1-12) that corresponds to the most illuminated ROI. The 
% downstream *Mask Selection* subsystem accepts this index number and 
% outputs the associated binary mask image. The binary mask image is 
% applied to the source video to display only the most illuminated ROI, and 
% mask off the other 11 ROIs. The *Delay* block at the top level of the 
% model is used to match the latency introduced by pixel-stream processing.
%
% One frame of the source image, the binary mask image, and the ROI output, 
% are shown from left to right in the diagram below.
%
% <<visionhdlmultizone_viewer.png>>
%
% You can generate HDL code from the *Pixel-Stream ROI Extraction* 
% subsystem.
 
%% Video Source
% The video format is 240p. Each frame consists of 240 lines and 320
% pixels per line. In this example, video frames are divided into 12 non-overlapping
% rectangular ROIs, denoted as ROI number 1 to 12, as shown in the diagram
% below. Each ROI includes one key of the input keypad image.
%
% <<visionhdlmultizone_roi.png>>
%
% ROI number 1 has a 107-pixel width and a 60-pixel height, and the 
% (x,y) coordinate of its top-left pixel is (1,1). ROI number 2 has a 
% 107-pixel width and a 60-pixel height, and the coordinate of its top left 
% pixel is (108,1), and so on. The first frame of the input video has 
% brighter pixels within ROI number 1, as shown above. The second frame has 
% brighter pixels within ROI number 2, and so on.
 
%% Frame To Pixels: Generating a Pixel Stream
% *Frame To Pixels* converts a full-frame image to a pixel stream. To 
% simulate the effect of horizontal and vertical blanking periods found in 
% real life hardware video systems, the active image is augmented with 
% non-image data. For more information on the streaming pixel protocol, 
% click <matlab:helpview(fullfile(docroot,'visionhdl','ug','streaming-pixel-interface.html')) here>.
% The *Frame To Pixels* block is configured as shown:
%
% <<Frame2PixelsMask.png>>
%
% The *Number of components* field is set to 1 for grayscale image input, 
% and the *Video format* field is 240p to match that of the video source. 
%
% In this example, the Active Video region corresponds to the 240x320 
% matrix of the source image. Six other 
% parameters, namely, *Total pixels per line*, *Total video lines*, 
% *Starting active line*, *Ending active line*, *Front porch*, and *Back 
% porch* specify how many non-image data will be augmented on the four 
% sides of the Active Video. For more information, see the Frame To Pixels 
% block <matlab:helpview(fullfile(docroot,'toolbox','visionhdl','visionhdl.map'),'visionhdlframetopixels') reference page>.
%
% Note that the sample time of the *Video Source* is determined by the 
% product of *Total pixels per line* and *Total video lines*. 
 
%% Pixel-Stream ROI Extraction
% The *Pixel-Stream ROI Extraction* subsystem contains two subsystems, 
% namely, *Multi-Zone Metering* and *ROI Indexer*.
 
set_param(modelname, 'SampleTimeColors', 'off');
open_system([modelname '/Pixel-Stream ROI Extraction'],'force');
 
%%
% The *Multi-Zone Metering* subsystem computes the mean intensity value 
% over the 12 predefined ROIs. The resulting 12 mean values are passed
% to the downstream *ROI Indexer* subsystem. *ROI Indexer* outputs the  
% index (1-12) of the ROI that has the maximum mean intensity value (or 
% equivalently, the most illuminated ROI) among the 12 candidates.
% 
% The structure of the *Multi-Zone Metering* subsystem is shown in the
% diagram below.
 
close_system([modelname '/Pixel-Stream ROI Extraction']);
open_system([modelname '/Pixel-Stream ROI Extraction/Multi-Zone Metering'],'force');
 
 
%% 
% The *Multi-Zone Metering* subsystem contains 12 identical *ROIStatistic* 
% subsystems. Each instance of *ROIStatistic* calculates the mean intensity 
% value over one ROI. All of the 12 *ROIStatistic* subsystems take pixel 
% and ctrl as their first two inputs. The remaining four inputs specify 
% which ROI this subsystem works on and they are different from one 
% subsystem to another. For example, the *ROIStaticstic1* subsystem focuses 
% on ROI number 1 by accepting the (x,y) coordinate of the top left pixel 
% (1,1), ROI width of 107, and height 60. Similarly, the *ROIStaticstic12* 
% subsystem focuses on ROI number 12, whose (x,y) coordinate of the top 
% left pixel is (215,181), and whose width and height are 106 and 60, 
% respectively.
%
% The *ROIStatistic1* - *ROIStatistic12* subsystems share the same structure shown
% below.
 
close_system([modelname '/Pixel-Stream ROI Extraction/Multi-Zone Metering']);
open_system([modelname '/Pixel-Stream ROI Extraction/Multi-Zone Metering/ROIStatistic1'],'force');
 
%%
% It contains a *ROI* subsystem followed by an *Image Statistics* 
% block. The *ROI* subsystem manipulates the control signal of the original 
% 240p image, and constructs the control signals associated only with the 
% ROI specified by (x,y) pair, ROIWidth, and ROIHeight.
 
%% Mask Selection
% The structure of the *Mask Selection* subsystem is shown below.
 
close_system([modelname '/Pixel-Stream ROI Extraction/Multi-Zone Metering/ROIStatistic1']);
open_system([modelname '/Mask Selection'],'force');
 
%%
% Twelve mask images are available, corresponding to the 12 different 
% ROIs. These mask patterns are shown as BM{1} to BM{12} in the above
% diagram. When you open the model, the model loads the predefined BM cell 
% array into the workspace. Masks are binary images with 240p video format. For mask BM{n}
% (n=1,2,...,12), the ROI number n is filled with logical 1 pixels (white) and all
% the other 11 ROIs are filled with logical 0 pixels (black).
% Based on the index input (1-12), the *Mask Selection* subsystem outputs 
% the associated binary mask image.
 
%% HDL Code Generation
% To check and generate the HDL code referenced in this example, you must
% have an HDL Coder(TM) license.
%
% To generate the HDL code, use the following command.
%
%   makehdl('MultizoneMeteringHDLExample/Pixel-Stream ROI Extraction')
%
% To generate testbench, use the following command. Note that the test 
% bench generation takes a long time due to the large data size. You may 
% want to reduce the simulation time before generating the test bench.
% 
%   makehdltb('MultizoneMeteringHDLExample/Pixel-Stream ROI Extraction')
%
 
close_system(modelname,0);
close all;