Extract signals from pixel-streaming control signal structure
If you integrate Vision HDL Toolbox designs with algorithms that use a different interface, you may need to create the structure manually, or manipulate the control signals outside of the structure.
Create a pixelcontrol
structure by passing five control signal values to the pixelcontrolstruct
function. The function arguments must be scalar values. These control signals may come from a camera or other video input source. The control signal vectors in this example describe a simple 2-by-3 pixel test image, surrounded by padding pixels.
hStart = [0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]; vStart = [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; hEnd = [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0]; vEnd = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]; valid = [0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0]; pixel = uint8([0 0 0 0 0 0 0 30 60 90 0 0 0 120 150 180 0 0 0 0 0 0 0 0]); [~,numPix] = size(pixel); ctrlIn = repmat(pixelcontrolstruct,numPix,1); for i = 1:numPix ctrlIn(i) = pixelcontrolstruct(hStart(i),vStart(i),... hEnd(i),vEnd(i),valid(i)); end
Each element of ctrlIn
is a structure containing the five control signals.
ctrlIn(8)
ans = struct with fields:
hStart: 1
hEnd: 1
vStart: 0
vEnd: 0
valid: 1
You can then pass this structure to a Vision HDL Toolbox System object. This example uses the LookupTable object to invert each pixel.
Note: This object syntax runs only in R2016b or later. If you are using an earlier release, replace each call of an object with the equivalent step
syntax. For example, replace myObject(x)
with step(myObject,x)
.
tabledata = uint8(linspace(255,0,256)); inverter = visionhdl.LookupTable(tabledata); pixelOut = zeros(numPix,1,'uint8'); ctrlOut = repmat(pixelcontrolstruct,numPix,1); for i = 1:numPix [pixelOut(i),ctrlOut(i)] = inverter(pixel(i),ctrlIn(i)); end
If you need to use the control signals directly in downstream algorithms, you can flatten each structure into five logical
control signal values by calling the pixelcontrolsignals
function.
[hStartOut,vStartOut,hEndOut,vEndOut,validOut] = deal(false(numPix,1)); for i = 1:numPix [hStartOut(i),vStartOut(i),hEndOut(i),vEndOut(i),validOut(i)] = ... pixelcontrolsignals(ctrlOut(i)); end
Each output control signal is a vector of logical values that correspond with the pixelOut
vector.
validOut'
ans = 1x24 logical array
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0
ctrl
— Pixel control signalslogical
valuesPixel control signals, specified as a structure containing five logical
values.
The pixel control structure is a specific format used by Vision HDL Toolbox™ objects. See Pixel Control Structure.
hStart
— Control signal indicating the first pixel in a horizontal linelogical
Control signal indicating the first pixel in a horizontal line,
specified as a logical
scalar.
hEnd
— Control signal indicating the last pixel in a horizontal linelogical
Control signal indicating the last pixel in a horizontal line,
specified as a logical
scalar.
vStart
— Control signal indicating the first pixel in the first (top) linelogical
Control signal indicating the first pixel in the first (top)
line, specified as a logical
scalar.
vEnd
— Control signal indicating the last pixel in the last (bottom) linelogical
Control signal indicating the last pixel in the last (bottom)
line, specified as a logical
scalar.
valid
— Control signal indicating the validity of the pixellogical
Control signal indicating the validity of the pixel, specified
as a logical
scalar.
You have a modified version of this example. Do you want to open this example with your edits?