主要内容

转换相机控制信号为pixelcontrol格式

此示例显示如何将Camera Link®信号转换为pixelcontrol结构,用Vision HDL Toolbox™对象反转像素,并将控制信号转换回Camera Link格式。

Vision HDL工具箱块和对象使用自定义流视频格式。如果您的系统操作来自摄像机的流视频数据,则必须将摄像机控制信号转换为这种自定义格式。或者,如果您将Vision HDL Toolbox算法集成到现有的设计和以相机格式运行的验证代码中,您还必须将Vision HDL Toolbox设计的输出信号转换回相机格式。

您可以从本例中的三个函数生成HDL代码。要创建本例中所有文件的本地副本,以便查看和编辑它们,请单击Open Script按钮。

创建输入数据在相机链接格式

Camera Link格式由三个控制信号组成:F表示有效帧,L表示每个有效行,D表示每个有效像素。对于本例,创建Camera Link格式的输入向量来表示一个基本的填充视频帧。向量描述了这个2乘3 8位的灰度帧。在图中,活动图像区域位于虚线矩形中,非活动像素围绕它。像素用它们的灰度值标记。

F =逻辑([0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,- 1,0,0,0,0,0,0,0,0));L =逻辑([0,0,0,0,0,0,0,1,1,- 1,0,0,0,1,1,- 1,0,0,0,0,0,0,0,0));D =逻辑([0,0,0,0,0,0,0,1,1,- 1,0,0,0,1,1,- 1,0,0,0,0,0,0,0,0));像素= uint8([0, 0, 0, 0, 0, 0, 0, 30岁,60岁,90年,0,0,0120150180,0,0,0,0,0,0,0,0));

设计视觉HDL工具箱算法

创建一个使用视觉HDL工具箱算法反转图像的函数。该函数包含一个支持HDL代码生成的System对象。金宝app这个函数期望并返回一个像素和相关的控制信号在视觉HDL工具箱格式。

函数[pixOut,ctrlOut] = InvertImage(pixIn,ctrlIn)持续的invertI;如果isempty(invertI) tabledata = linspace(255,0,256);invertI = visionhdl.LookupTable(uint8(tabledata));结束% *注意:*此语法仅在R2016b或更高版本中运行。如果你正在使用将对象的每次调用替换为等效的|步骤|%的语法。例如,将|myObject(x)|替换为|step(myObject,x)|。[pixOut,ctrlOut] = invertI(pixIn,ctrlIn);结束

转换相机链接控制信号为pixelcontrol格式

编写一个自定义System对象,将Camera Link信号转换为Vision HDL Toolbox控件信号格式。对象转换控制信号,然后调用pixelcontrolstruct函数来创建视觉HDL工具箱系统对象所期望的结构。此代码片段显示了转换信号的逻辑。

ctrl = pixelcontrolstruct(obj.hStartOutReg,obj.hEndOutReg,…obj.vStartOutReg、obj.vEndOutReg obj.validOutReg);
vStart = obj。FReg && ~obj.FPrevReg; vEnd = ~F && obj.FReg; hStart = obj.LReg && ~obj.LPrevReg; hEnd = ~L && obj.LReg;
obj。vStartOutReg = vStart;obj。vEndOutReg = vEnd;obj。hStartOutReg = hStart;obj。这个到OutReg = hEnd; obj.validOutReg = obj.DReg;

对象将输入和输出控制信号值存储在寄存器中。音速启动在开始的时候,一个周期的频率很高F公开发表在一个循环结束的时候FhStart而且这个到相似地从l.对象返回的当前值ctrl每次你调用它。

这个处理过程给控制信号增加了两个周期的延迟。对象在匹配延迟周期后通过像素值。有关System对象的完整代码,请参见CAMERALINKtoVHT_Adapter.m

转换pixelcontrol摄像头链接

编写一个自定义系统对象,将Vision HDL工具箱信号转换回Camera Link格式。对象调用pixelcontrolsignals函数将控制结构平展为其组件信号。然后计算等效的摄像链路信号。此代码片段显示了转换信号的逻辑。

[hStart,hEnd,vStart,vEnd,valid] = pixelcontrolsignals(ctrl);
Fnew = (~obj.)FOutReg&& vStart) || (obj.FPrevReg && ~obj.vEndReg); Lnew = (~obj.LOutReg && hStart) || (obj.LPrevReg && ~obj.hEndReg);
obj。FOutReg = Fnew; obj.LOutReg = Lnew; obj.DOutReg = valid;

对象将输入和输出控制信号值存储在寄存器中。F音速启动公开发表lhStart这个到.对象返回的当前值FOutRegLOutReg,DOutReg每次你调用它。

这个处理过程给控制信号增加了一个周期的延迟。对象在匹配的延迟周期后通过像素值。有关System对象的完整代码,请参见VHTtoCAMERALINKAdapter.m

创建支持HDL代码生成的转换函数金宝app

将转换器System对象包装在函数中,类似于InvertImage,因此您可以为这些算法生成HDL代码。

函数[ctrl,pixelOut] = CameraLinkToVisionHDL(F,L,D,pixel)% CameraLink2VisionHDL:转换一个周期的CameraLink控制信号%转换为Vision HDL格式,使用自定义System对象。为ctrl信号和像素数据引入两个周期的延迟。持续的CL2VHT;如果isempty(CL2VHT) CL2VHT = CAMERALINKtoVHT_Adapter();结束[ctrl,pixelOut] = CL2VHT(F,L,D,pixel);

看到CameraLinkToVisionHDL.m,VisionHDLToCameraLink.m

编写测试平台

要使用这些组件反转Camera Link像素流,请编写一个测试平台脚本:

  1. 预分配输出向量以减少模拟时间

  2. 将每个像素的Camera Link控制信号转换为Vision HDL工具箱格式

  3. 调用函数翻转每个像素值

  4. 将该像素的控制信号转换回相机链接格式

[~,numPixelsPerFrame] = size(像素);pixOut = 0 (numPixelsPerFrame,1,“uint8”);像素= 0 (numPixelsPerFrame,1,“uint8”);pixOut_d = 0 (numPixelsPerFrame,1,“uint8”);DOut = false(numPixelsPerFrame,1);FOut = false(numPixelsPerFrame,1);LOut = false(numPixelsPerFrame,1);ctrl = repmat(pixelcontrolstruct,numPixelsPerFrame,1);ctrlOut = repmat(pixelcontrolstruct,numPixelsPerFrame,1);p = 1:numPixelsPerFrame [pixel_d(p),ctrl(p)] = CameraLinkToVisionHDL(像素(p),F(p),L(p),D(p));[pixOut (p)、ctrlOut (p)) =反转(pixel_d (p), ctrl (p));[pixOut_d(p),FOut(p),LOut(p),DOut(p)] = VisionHDLToCameraLink(pixOut(p),ctrlOut(p));结束

查看结果

得到的向量表示这个倒置的2 × 3、8位灰度帧。在图中,活动图像区域位于虚线矩形中,非活动像素围绕它。像素用它们的灰度值标记。

如果您有DSP System Toolbox™许可证,您可以使用逻辑分析仪将矢量作为随时间变化的信号。此波形显示pixelcontrol和Camera Link控制信号、起始像素值以及每次操作后延迟的像素值。

另请参阅

|

相关的话题