主要内容

visionhdl。PixelStreamAligner

对齐两个像素数据流

描述

visionhdl。PixelStreamAligner系统对象™通过延迟一个流以匹配参考流的时间来同步两个像素流。许多Vision HDL Toolbox™算法延迟像素流,并且延迟量可以随着算法参数的调整而变化。您可以使用此对象来对齐流,以便叠加、比较或组合两个流,例如在高斯模糊操作中。使用延迟流作为refpixel而且refctrl参数。使用较早的流作为pixelin而且ctrlin参数。

这个波形图显示了输入流,pixelin而且refpixel,以及相关的控制信号。参考输入帧开始的时间晚于pixelin框架。输出信号显示对象延迟pixelin匹配参考流,并且两个输出流共享控制信号。波形显示输入之间的短延迟ctrl以及输出ctrl.在此模拟中,为了适应输入流之间的四行延迟,将MaxNumberofLines属性必须设置为至少4。

关于像素控制总线和视频帧尺寸的详细信息,请参见流媒体像素接口

对齐两个像素数据流:

  1. 创建visionhdl。PixelStreamAligner对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

例子

aligner = visionhdl.PixelStreamAligner(名称,值)创建一个同步像素流与参考像素流的System对象。使用一个或多个名称-值对设置属性。将每个属性名用单引号括起来。例如,“MaxNumberOfLines”,16岁设置缓冲深度,用于容纳两个输入流之间的定时偏移。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计

行内存缓冲区的大小,指定为2的幂,用于容纳水平线中活动像素的数量。如果指定的值不是2的幂,则对象使用2的次幂。该对象实现了一个2的循环缓冲区的位置,MaxNumberofLines+日志2LineBufferSize).

缓冲深度,用于容纳输入流之间的定时偏移,指定为正整数。该对象实现了一个2的循环缓冲区的位置,MaxNumberofLines+日志2LineBufferSize的行地址缓冲区MaxNumberofLines的位置。循环存储器存储较早的输入行,直到参考控制信号到达。行地址缓冲区存储每行开始的地址。当引用控制信号到达时,对象使用存储的地址读取和发送延迟线。此属性必须容纳两个输入流之间的时间差异,包括对象读取第一行之前的内部延迟。在模拟过程中,对象在发生溢出时发出警告。若要避免溢出情况,请增加MaxNumberofLines.流之间的延迟不能超过整个帧。

使用

描述

例子

pixeloutrefoutctrlout= aligner(pixelinctrlinrefpixelrefctrl将像素流同步到参考流,refpixel而且refctrl,通过延迟第一个输入,pixelin,以与参考输入对齐。得到的对齐像素流,pixelout而且refout,共享控制信号,ctrlout.您可以使用此对象对流进行叠加或比较。

该对象使用流像素接口,该接口具有帧控制信号的结构。该接口使对象能够独立于图像大小和格式进行操作,并与其他Vision HDL Toolbox对象连接。对象以包含五个信号的结构形式接受并返回标量像素值和控制信号。控制信号指示每个像素的有效性及其在帧中的位置。若要将像素矩阵转换为像素流和控制信号,请使用visionhdl。FrameToPixels对象。有关接口的描述,请参见流媒体像素接口

输入参数

全部展开

输入像素流,指定为标量强度值或代表R' g ' b '或Y' cbcr颜色空间中一个像素的三个值的行向量。因为对象延迟这个像素流以匹配参考流的控制信号,refpixelpixelin肯定是两条流中较早的那条。

可以使用多像素流接口模拟System对象,但不能为使用多像素流的System对象生成HDL代码。要为多像素算法生成HDL代码,请使用等效的Simulink金宝app®块。

而且数据类型支持模拟,但不支持HD金宝appL代码生成。

数据类型:fi|使用uint|int|逻辑||

与输入像素流伴随的控制信号,指定为pixelcontrol结构包含五个逻辑数据类型信号。信号描述像素的有效性和它在帧中的位置。详情请参见像素控制结构

数据类型:结构体

输入像素,指定为标量强度值或在R' g ' b '或Y' cbcr colorspace中表示一个像素的三个值的行向量。因为对象延迟pixelin输入流以匹配参考控制信号,refpixel肯定是两条流中较晚的那条。参考数据及其控制信号以很小的延迟通过对象。

可以使用多像素流接口模拟System对象,但不能为使用多像素流的System对象生成HDL代码。要为多像素算法生成HDL代码,请使用等效的Simulink块。金宝app

而且数据类型支持模拟,但不支持HD金宝appL代码生成。

数据类型:fi|使用uint|int|逻辑||

参考像素流控制信号,指定为包含五个的结构逻辑信号。对象将这些控制信号用于对齐的输出流。详情请参见像素控制结构

输出参数

全部展开

输出像素,返回为标量强度值或表示R' g ' b '或Y' cbcr颜色空间中一个像素的三个值的行向量。

的数据类型与的数据类型相同pixelin

数据类型:fi|使用uint|int|逻辑||

输出参考像素,返回为标量强度值或表示R' g ' b '或Y' cbcr颜色空间中一个像素的三个值的行向量。

的数据类型与的数据类型相同refpixel

数据类型:fi|使用uint|int|逻辑||

两个输出流的像素流控制信号,作为包含5的结构返回逻辑信号。详情请参见像素控制结构.这些信号是延迟版的refctrl输入。

数据类型:结构体

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

在输入流上叠加一个处理过的视频流。

通过选择图像文件的一部分来准备一个测试图像。

frmActivePixels = 64;frmActiveLines = 48;from morig = imread(“rice.png”);frmInput = frmOrig(1:frmActiveLines,1:frmActivePixels);图imshow (frmInput,“InitialMagnification”标题,300)输入图像的

创建一个序列化器并指定非活动像素区域的大小。

Frm2pix = visionhdl。FrameToPixels (...“NumComponents”,1,...“VideoFormat”“自定义”...“ActivePixelsPerLine”frmActivePixels,...“ActiveVideoLines”frmActiveLines,...“TotalPixelsPerLine”frmActivePixels + 10,...“TotalVideoLines”frmActiveLines + 10,...“StartingActiveLine”6...“FrontPorch”5);

序列化测试映像。pixIn是强度值的向量。ctrlIn是一种矢量控制信号结构。为输出信号预分配向量。

[pixIn,ctrlIn] = frm2pix(frmInput);[~,~,numPixelsPerFrame] = getparamfromfrm2pix(frm2pix);ctrlOut = repmat(pixelcontrolstruct,numPixelsPerFrame,1);overlayOut = 0 (numPixelsPerFrame,1,“uint8”);

编写一个函数,创建并调用System对象来检测边缘,并将边缘数据与原始像素数据对齐。的时延使边缘结果延迟visionhdl。EdgeDetector对象。相关的控制信号成为对齐流的参考。您可以从这个函数生成HDL。

函数[pixelOut,ctrlOut] = edgedetectanoverlay (pixelIn,ctrlIn)% EdgeDetectandOverlay检测输入流中的边,并将边数据覆盖到%原始流。% pixelIn和ctrlIn是一个标量像素及其关联的像素控件%结构,分别。您可以从这个函数生成HDL代码。持续的对齐如果isempty(align) align = visionhdl.PixelStreamAligner;结束持续的find_edges如果isempty(find_edges) find_edges = visionhdl.EdgeDetector;结束[edgeOut,edgeCtrl] = find_edges(pixelIn,ctrlIn);[origOut,alignedEdgeOut,ctrlOut] = align(pixelIn,ctrlIn,edgeOut,edgeCtrl);如果(align dedgeout) pixelOut = uint8(0);将边缘像素设置为黑色其他的pixelOut = origOut;结束结束

对于帧中的每个像素,调用函数搜索边缘并将边缘数据与输入流对齐。

p = 1:numPixelsPerFrame [overlayOut(p),ctrlOut(p)] = edgedetectanoverlay (pixIn(p),ctrlIn(p)));结束

创建格式与序列化器相匹配的反序列化器对象。通过调用反序列化对象将像素流转换为图像帧。显示结果图像。

Pix2frm = visionhdl。PixelsToFrame (...“NumComponents”,1,...“VideoFormat”“自定义”...“ActivePixelsPerLine”frmActivePixels,...“ActiveVideoLines”frmActiveLines,...“TotalPixelsPerLine”, frmActivePixels + 10);[frmOutput,frmValid] = pix2frm(overlayOut,ctrlOut);如果(frmOutput,“InitialMagnification”标题,300)输出图像的结束

扩展功能

版本历史

在R2017a中引入

全部展开