主要内容

MATLAB视觉算法到Simulink硬件目标模型工作金宝app流

这个例子展示了如何在Simulink®中创建一个硬件目标设计,实现与MATLAB®参考设计相同的行为。金宝app

工作流程

图像处理工具箱™ 计算机视觉工具箱™ 函数在帧、浮点和整数数据上运行,并提供良好的行为参考。硬件设计必须使用流布尔或定点数据。

这个例子展示了如何在MATLAB中执行一个帧图像处理操作,然后使用流数据在Simulink模型中实现相同的操作。金宝appSimu金宝applink模型将输入视频转换为像素流,以实现硬件友好设计。在Simulink中的硬件算法和MATLAB中的行为算法中都应用了相同的数据。金宝appSimu金宝applink模型将输出像素流转换为帧,并将这些帧输出到MATLAB,以与行为结果进行比较。

本例的MATLAB部分加载输入视频,运行行为代码,运行Simulink模型以导入视频帧和导出修改后的视频帧,并将MATLAB行为结果与Simulink输出帧进行比较。金宝app

视频源

创建一个视频文件读取器对象,将视频文件导入到MATLAB工作区。视频源文件为240p格式。创建一个视频播放器对象来显示输入帧、Simulink过滤帧和MATLAB参考帧。金宝app

videoIn=vision.VideoFileReader(...“文件名”,“rhinos.avi”,...“图像色彩空间”,“强度”,...“VideoOutputDataType”,‘uint8’);numFrm=10;活动框架尺寸%actPixelsPerLine=320;actLines=240;%包括冲裁在内的尺寸全像素直线=402;全像素直线=324;%查看结果查看器=vision.DeployableVideoPlayer(...“尺寸”,“自定义”,...“定制尺寸”,[3*actPixelsPerLine actLines]);

边缘检测与叠加

检测视频帧中的边缘,然后将这些边缘覆盖到原始帧上阿尔法值混合两个像素值。Simulink模型还使用金宝app埃杰斯霍尔德阿尔法此处指定的参数。

MATLAB边缘函数将阈值解释为从0到1的双精度值。因此,将阈值表示为范围的一个分数uint8数据类型,从0到255。属性返回的像素值边缘函数必然的数据类型。将这些像素值转换为uint8输入覆盖,乘以255。此缩放操作将逻辑1转换为255,逻辑0保持为0。

edgeThreshold = 8;α= 0.75;frmFull = uint8 (0 (actLines, actPixelsPerLine numFrm));frmRef = frmFull;对于f = 1:numFrm frmFull(:,:,f) = videoIn();=边缘(边缘frmFull (:: f),“索贝尔”,edgeThreshold/255,“没什么”)边8=255*uint8(边)*(1-alpha);frmRef(:,:,f)=alpha*frmFull(:,:,f)+边8;查看器([edges-edges8-frmRef(:,:,f)];终止

为Simulink模拟金宝app设置

Simu金宝applink模型使用video Source块将输入视频加载到模型中。属性配置模型的示例时间totPixPerFrame变量。此值包括240×320帧周围的非活动像素区域。视频源采样时间为每帧1个时间步长,模型流像素部分的速率为1/totPixPerFrame。使用同时变量

totPixPerFrame=totalPixelsPerLine*totalLines;simTime=(numFrm+1)*totPixPerFrame;modelname=“VerifySLDesignAgainstMLReference”;打开系统(modelname);设置参数(modelname,“SampleTimeColor”,“开”);设置参数(型号名称,“模拟命令”,“更新”);设置参数(型号名称,“开放式”,“开”);

硬件目标算法

HDL算法子系统支持HDL代码生成。金宝app

子系统使用边缘检测器块来查找边缘。该块的输出是一个数据流布尔像素值。模型将这些值缩放到uint8覆盖的数据类型值。

由于内部行缓冲器和过滤逻辑,块在几行延迟后返回检测边缘的像素流。在执行叠加之前,模型必须延迟输入流以匹配边缘流。像素流对齐器块使用输出边缘流的控制信号作为参考来执行此对齐。该块将输入流存储在FIFO中,直到检测到的边缘可用。

图像覆盖子系统按比例缩放两个流阿尔法考虑到硬件实现,图像覆盖子系统包括围绕每个乘法器和加法器之后的流水线级。

有关此边缘检测器设计的更多详细信息,请参阅边缘检测与图像叠加的例子。

打开系统([modelname“/ HDL算法”]);

运行仿真金宝app软件模型

运行Simuli金宝appnk模型以返回十个与检测到的边重叠的帧。

模拟(“VerifySLDesignAgainstMLReference”);

将Simulin金宝appk结果与MATLAB结果进行比较

将Simulink返回的每个视频帧与MATLAB行为代码返回的结果进行比较。金宝app图像看起来非常相似,但由于叠加混合,像素值差异很小。MATLAB覆盖混合使用浮点值,而Simulink覆盖混合使用定点值。金宝app这种比较计数每帧中值相差超过2的像素,并计算帧之间的峰值信噪比(PSNR)。要查看每个帧的详细差异,取消对循环中的最后两行的注释。

对于f=1:numFrm frmResult=frmOut.signals.values(:,:,f);viewer([frmFull(:,:,f)frmResult frmRef(:,:,f)];diff=frmRef(:,:,f)-frmResult;errcnt=sum(diff(:)>2);noisecheck=psnr(frmRef(:,:,f),frmResult);fprintf([“\n帧#%d有%d个像素与行为结果不同(相差超过2)。PSNR=%2.2f\n”), f, errcnt noisecheck);%bar3(diff);%查看器([frmResult frmRef(:,:,f)diff]);终止
帧# 1有2个像素不同于行为结果(超过2)。PSNR值= 48.33帧# 2 1像素,不同于行为结果(超过2)。PSNR值= 48.72帧# 3 1像素,不同于行为结果(超过2)。PSNR值= 48.80帧# 4 2像素,不同于行为结果(2)以上PSNR =48.66帧# 5 2像素,不同于行为结果(超过2)。PSNR值= 48.70帧# 6 4像素,不同于行为结果(超过2)。PSNR值= 48.27帧# 7 2像素,不同于行为结果(超过2)。PSNR值= 48.88帧# 8 3像素不同于行为结果(2)以上PSNR第10帧有3个像素点,与行为结果不同(超过2)

生成HDL代码并验证其行为

一旦您的设计在模拟中工作,您就可以使用HDL编码器™ 为HDL算法子系统生成HDL代码和测试台。

makehdl ([modelname“/ HDL算法”])%生成HDL代码makehdltb([modelname“/ HDL算法”])生成HDL测试平台

另见

|

相关的话题