主要内容

基于计算机视觉工具箱的Sobel边缘检测算法

此示例显示并解释了“自上而下”设计了用于Sobel边缘检测算法的方法。Sobel边缘检测算法是一种流行但简单的边缘检测算法,也是本例的重点。通过这个例子,你将学到:

  • Simu金宝applink®如何允许您在系统级设计数字信号处理(DSP)算法。

  • 如何详细说明设计,使其在硬件上实现。

  • 如何在Simulink环境中与ModelSim®或Cadence®Incisive®共同模拟手写的HDL代码(对应于您的Simu金宝applink模型)。

这种方法就是一个例子基于模型的设计。有关基于模型的设计的更多信息,请参阅//www.tatmou.com/金宝搏官方网站solutions/model-based-design.html

您需要以下产品来运行示例中的所有模型:下载188bet金宝搏

  • MATLAB®

  • 金宝app

  • 定点设计师™

  • 高密度脂蛋白校验™

  • 计算机视觉工具箱™

  • DSP系统工具箱™

  • ModelSim SE或PE。或节奏敏锐的

Sobel边缘检测算法的可执行规范

随着设计变得越来越大、越来越复杂,有必要从更高的层次来描述设计。这种高级描述不仅使设计人员能够更快地运行仿真,还可以在整个开发过程中使用它进行验证。由此产生的过程允许开发人员在早期识别bug,并避免在开发结束时发现代价高昂的bug。这种高级设计通常由系统工程师完成。

为了在ASIC或FPGA等硬件上实现DSP算法,系统级工程师首先设计算法并验证算法是否满足项目要求。该设计后来成为负责将算法引入硬件的工程师的黄金参考。

在本例中,在Simulink中实现了Sobel边缘检测算法。金宝app打开可执行模型并双击“Sobel Edge Detection”模块来学习该算法是如何在Simulink中实现的。金宝app当您双击Sobel Edge Detection块时,您可以看到该算法由两个2D过滤器组成,一个用于计算列方向的梯度(顶部过滤器),另一个用于计算行方向的梯度(底部过滤器)。这两个过滤器都使用3x3内核。

这个Sim金宝appulink模型作为其余开发路径的规范。这是一个可执行规范,这意味着您可以在Simulink环境中轻松执行此模型。金宝app

本例使用卫星图像作为边缘检测算法的输入。此图像用作输入测试向量,并在整个示例中使用。如果负责算法硬件实现的工程师也在Simulink环境中工作,那么在将测试向量移植到不同的应用程序或创建容易出现人为错误的测试线束时,就不需要额外的开销。可执行规范中使用的测试线束贯穿整个示例。金宝app

实现算法的设计与验证

在设计可执行模型时,系统工程师通常不会记住实现细节,而是实现算法以匹配行为需求。一旦系统工程师将可执行规范提交给开发团队,开发团队可能需要对可执行规范进行修改,以使设计适应可能具有有限资源(如内存或处理能力)的实时系统。

在本例中,开发人员可能会决定消除平方运算,并将其替换为绝对值运算,以实现更高效的硬件实现。这将导致协同模拟结果与黄金参考值之间存在差异,但出于本示例的考虑,我们假设差异是可接受的。打开边缘检测设计模型。您可以看到与前一个模型相同的测试向量仍在使用。结果可以很容易地对照黄金参考进行验证。数值显示显示黄金参考和新设计之间的平均差异。

定点设计

由于我们的最终目标是在FPGA或ASIC中实现该算法,因此我们必须将双精度设计转换为定点设计。这可以使用Simulink轻松完成。我们使用上一节中开发的双精度模型直接开发定点模型,而不引入任何新块。Simulink允许我们确定数据和数学运算的位数和比例,并为分析系统的定点操作提供了良好的环境。金宝app

在这个定点设计中,滤波器的输入是一个有符号的9位整数,滤波器的输出是有符号的11位整数。如果双击每个计算块,如过滤器或求和块,可以看到开发人员可以轻松地调整与该块的内部计算相关的位宽和缩放。这给了设计师巨大的杠杆,以折衷匹配黄金参考的输出,同时使用最少的位数,以节省设备上的面积。

打开定点模型并通过双击计算块(如2D过滤器或添加块)来检查定点是如何实现的,并查看相应的定点面板。

设计阐述

在我们的示例中,边缘检测算法的输入是尺寸为200x100的二维图像。在实时系统中,输入很可能不是一个矩阵,而是一个串行的数据流;例如,这种串行数据流可以由电荷耦合器件(CCD)产生。因此,我们需要修改设计的结构,使边缘检测算法接受并对串行数据流进行二维滤波。

在这种情况下,我们首先序列化输入图像。然后对该串行数据进行二维滤波。稍后,我们将对数据流进行反序列化,以便能够将输出与黄金引用进行比较。要了解这是如何做到的,请参阅边缘检测细化模型。

此操作仅对底部过滤器执行。正如预期的那样,新设计仍能产生与以前相同的精确结果。添加了两个延迟元素以补偿序列化程序块中的缓冲。该设计还展示了Simulink的多速率功能。序列化程序块的输出采样率比该块的输入采样率高20000倍。金宝app

金宝appSimulink®协同模拟

上一节中的模型可以传递给HDL设计人员,后者可以使用上一节中设计的2D过滤器来编写相应的VHDL或Verilog代码。一旦代码编写完成,HDL设计者就可以使用HDL Verifier™在Simulink环境中使用ModelSim或incisii来模拟HDL设计,并将HDL设计的输出与可执行规范的输出进行比较。金宝app注意,在这个过程中,不需要生成一个HDL测试台。Simu金宝applink模型通过HDL Verifier将输入的测试向量提供给ModelSim或Incisive,并从ModelSim或Incisive提取数据返回到Simulink环境中。HDL设计者可以很容易地验证HDL代码是否按照规范运行。

  • ModelSim / QuestaSim

硬件描述语言(VHDL)模型Verilog模型了解如何使用HDL验证器对Simulink和ModelSim进行联合仿真。最后一个图显示了M金宝appodelSim中显示的信号的快照。

  • 深刻的/ Xcelium参考Verilog模型了解如何使用HDL验证软件对Simulink和incisii平台进行协同仿真。金宝app