Sobel边缘检测算法与计算机视觉工具箱

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

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

  • 如何阐述该设计,使之在硬件上得以实现。

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

这个方法就是一个例子基于模型的设计。要了解更多关于基于模型的设计,请参考//www.tatmou.com/model-based-design

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

  • MATLAB®

  • 金宝app

  • 定点设计师™

  • 高密度脂蛋白校验™

  • 计算机视觉工具箱™

  • DSP系统工具箱™

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

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

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

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

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

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

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

设计并验证了算法的实现

在设计可执行模型时,系统工程师通常不会考虑实现细节,而是实现符合行为需求的算法。一旦系统工程师向开发团队提交了可执行规范,开发团队可能需要对可执行规范进行修改,以使设计适合于实时系统,而实时系统可能具有有限的资源,如内存或处理能力。

在本例中,开发人员可能决定消除square操作,并将其替换为绝对值操作,以实现更高效的硬件实现。这将导致cosimulation结果与golden reference之间的差异,但是对于本例,我们假设这种差异是可以接受的。打开边缘检测设计模型。您可以看到与前一个模型相同的测试向量仍然被使用。这个结果可以很容易地在黄金参考文献中得到验证。数值显示显示金参考和新设计之间的平均差异。

定点设计

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

在这种定点设计中,过滤器的输入是带符号的9位整数,过滤器的输出是带符号的11位整数。如果双击每个计算块,例如过滤器或sum块,可以看到开发人员可以轻松地调整与该块的内部计算相关的位宽和比例。这给了设计者一个巨大的优势,在匹配黄金参考的输出的同时,使用最少的必要位来保存设备上的区域。

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

设计详解

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

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

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

金宝app仿真软件®Cosimulation

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

  • ModelSim / QuestaSim

硬件描述语言(VHDL)模型Verilog模型了解如何使用HDL验证器来同时模拟Simulink和ModelSim。金宝app最后一个图显示了ModelSim中显示的信号的快照。

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