主要内容

在MATLAB环境下设计Hardware-Targeted图像过滤器

这个例子展示了如何使用视觉设计hardware-targeted图像滤波器HDL工具箱™对象。

模型的关键特性在MATLAB®hardware-targeted视频处理是:

  • 流像素接口:在视觉系统对象HDL工具箱使用流像素接口。硬件设计的串行处理是有效的,因为需要更少的内存来存储像素数据。串行接口使对象能够独立运作的图像大小和格式,使设计更有弹性的视频时间错误。为进一步的信息,请参阅流像素接口

  • 针对HDL代码生成功能:一旦数据流转换为一个像素,您可以设计一个硬件模型通过选择系统对象从视觉上高密度脂蛋白工具箱库。设计针对HDL代码生成的部分必须在一个单独的功能。

  • 转换为框架的视频:为验证,您可以显示框架视频,或者你可以比较的结果hardware-compatible设计与MATLAB的输出框架行为模型。视觉HDL工具箱提供了一个系统对象™,允许您设计的输出进行反序列化。

导入数据

一个图像文件读入工作区。这个示例图像包含256×256像素。每一个像素都是单身uint8代表强度值。减少仿真速度测试时,选择一个缩略图图像的一部分。

在MATLAB模拟串行视频解释语言可以耗时。一旦调试设计小图像大小,墨西哥人使用代码生成与较大的图像加速测试。看到加速Pixel-Streaming使用MATLAB编码器的设计

origIm = imread (“rice.png”);origImSize =大小(origIm) imActivePixels = 64;imActiveLines = 48;inputIm = origIm (1: imActiveLines, 1: imActivePixels);图imshow (inputIm,“InitialMagnification”标题,300)输入图像的
origImSize = 256 256

序列化数据

visionhdl.FrameToPixels系统对象转换视频像素流和控制结构。这个对象提供了一个函数输入针对HDL代码生成,但它本身不支持HDL代码生成。金宝app

与标准模拟视频格式,选择一个预定义的视频填充格式以匹配您的输入源。与自定义图像模拟,选择维度不活跃地区的形象。本教程使用一个自定义图像。的属性visionhdl.FrameToPixels对象对应的尺寸图。

创建一个visionhdl.FrameToPixels对象并设置图像属性。图像是一个标量值表示每个像素的强度图像,因此集NumComponents属性为1。本教程垫的缩略图5不活跃的上下线,和10不活跃的像素每一行的正面和背面。

使用getparamfromfrm2pix函数来得到有用的图像尺寸的序列化器对象。这个语法丢弃前两个返回值,仅保留填补帧的像素总数。调用对象将图像转换为矢量的像素和矢量控制信号。

注意:这个语法只运行在R2016b或更高版本。如果您使用的是较早的版本中,每个对象的调用替换为等价的一步语法。例如,替换myObject (x)步骤(myObject x)

frm2pix = visionhdl.FrameToPixels (“NumComponents”,1“VideoFormat”,“自定义”,“ActivePixelsPerLine”imActivePixels,“ActiveVideoLines”imActiveLines,“TotalPixelsPerLine”imActivePixels + 20,“TotalVideoLines”imActiveLines + 10,“StartingActiveLine”6“FrontPorch”10);[~,~,numPixelsPerFrame] = getparamfromfrm2pix (frm2pix);(像素,ctrl) = frm2pix (inputIm);

设计HDL-Compatible模型

选择一个图像处理的对象visionhdl图书馆。本教程使用visionhdl.ImageFilter

构造一个函数包含该对象的持久实例。函数过程单一像素通过执行一个调用对象。

ctrlInctrlOut参数对象的结构,包含五个控制信号。信号表示每个像素的有效性和帧中的每个像素的位置。

设置的滤波器系数visionhdl.ImageFilter执行一个2×2模糊操作。

对于本教程,您不需要更改LineBufferSize过滤器对象的属性。这个参数不影响仿真速度,所以它不需要修改当模拟小测试图像。在选择LineBufferSize选择2的幂,提供活动所需的管道尺寸最大的帧格式。默认值2048,容纳1080 p的视频格式。

函数[pixOut, ctrlOut] = HDLTargetedDesign (pixIn ctrlIn)持续的filt2d如果isempty (filt2d) filt2d = visionhdl.ImageFilter (“系数”,(2,2)/ 4,“CoefficientsDataType”,“自定义”,“CustomCoefficientsDataType”numerictype (0, 1, 2),“PaddingMethod”,“对称”);结束[pixOut, ctrlOut] = filt2d (pixIn ctrlIn);结束

Preallocate更有效的仿真的输出向量。然后,调用的函数中每一个像素填充框架后,所代表的像素向量。

pixelOut = 0 (numPixelsPerFrame 1“uint8”);ctrlOut = repmat (pixelcontrolstruct numPixelsPerFrame 1);p = 1: numPixelsPerFrame [pixelOut (p), ctrlOut (p)] = HDLTargetedDesign(像素(p), ctrl (p));结束

反序列化像素流过滤

visionhdl.PixelsToFrame系统对象将一个像素流转换为框架的视频。使用这个对象序列化过滤数据visionhdl.ImageFilter。设置图像的维度属性匹配测试图像。调用对象HDL-targeted函数的输出转换为一个矩阵。

pix2frm = visionhdl.PixelsToFrame (“NumComponents”,1“VideoFormat”,“自定义”,“ActivePixelsPerLine”imActivePixels,“ActiveVideoLines”imActiveLines,“TotalPixelsPerLine”,imActivePixels + 20);[outputIm, validIm] = pix2frm (pixelOut ctrlOut);

显示结果

使用imshow函数来显示操作的结果。

如果validIm图imshow (outputIm,“InitialMagnification”标题,300)输出图像的结束

与行为模型

如果你有一个行为模型的设计,您可以比较输出帧视觉或数学。对于过滤,可以比较visionhdl.ImageFilterimfilter(图像处理工具箱)函数在图像处理工具箱™。的imfilter函数作用于框架作为一个矩阵,并返回一个修改的框架作为一个矩阵。你可以比较这个矩阵与矩阵的输出pix2frm对象。

为了避免依赖于图像处理工具箱的许可证,本教程不执行比较。

HDL代码生成

一旦你的设计是在仿真工作,使用HDL编码器™生成HDL代码HDLTargetedDesign函数。看到从MATLAB生成HDL代码

相关的话题