0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于CORDIC的高速Sobel算法实现

SwM2_ChinaAET 来源:网络整理 作者:工程师陈翠 2018-10-05 09:54 次阅读

图像边缘检测是数字图像处理领域中的一项关键技术[1-3],广泛运用在军事、农业、工业、医学、航天等领域[4-6]。随着电子信息技术的快速发展,各大相关领域对图像边缘检测技术提出更高的要求,即:在保证精度的前提下,即时处理大规模数据。

文献[6]、[7]使用硬件并行技术和流水线技术,大幅增加了数据的吞吐量,但在计算Sobel的梯度值时速度较慢,限制了系统的整体处理速度[6-7]。文献[8]在文献[6]、[7]的基础上,解决了Sobel梯度值计算速度较慢的问题,使系统的整体处理速度提升[6-8],但该方法牺牲了精度,导致边缘检测的效果较差。

针对上述问题,本文采用优化的CORDIC算法,将Sobel梯度计算公式转换成数据的移位和相加的流水线操作,在保证运算精确度的前提下,大幅提高整体运算速度。

1 Sobel边缘检测算法

Sobel算子是一阶导数的边缘检测算子,具有2组3×3的矩阵。图像中的像素点分别和这两个矩阵做卷积后,即可得到图像的水平、垂直梯度。根据式(1)和式(2)得到图像梯度值后,将该值和预设的阈值进行比较,即可判断该点是不是图像的边缘部分。

图1(a)为待处理的图像数据,图1(b)、图1(c)为用于计算x和y方向梯度值的卷积表。

基于CORDIC的高速Sobel算法实现

水平梯度Px、垂直梯度Py的计算公式如式(1)所示:

基于CORDIC的高速Sobel算法实现

式(1)可以利用两个行缓冲器(Line_buffer)和流水线型的乘加器完成。如图2所示,当预存满两个行缓冲器后,再等2个时钟,系统即可实时地得到待处理的图像数据。

基于CORDIC的高速Sobel算法实现

如图3所示,得到待处理的图像数据后,P02和P22直接进行加法运算,P12通过移位操作实现乘2效果。为降低D触发器(Reg)之间的逻辑时延,增加系统的工作频率,本文将P02和P22相加的结果、P12移位的结果寄存了一拍后,再进行加法运算。依据上述原理,对P02、P20和P10进行了类似操作。最后将两组数据做减法,再取一个绝对值即可得到x方向的Sobel计算结果。y方向的Sobel计算方法如图4所示,与图3的原理类似。

基于CORDIC的高速Sobel算法实现

基于CORDIC的高速Sobel算法实现

最终梯度值可以根据梯度计算公式算出:

基于CORDIC的高速Sobel算法实现

依据式(2),即可得到最终梯度的模值|G|,将梯度的模值和阈值进行比较,就可以判断出该点是否为边缘点。关于梯度模值计算公式,文献[6]和文献[7]选择调用IP核实现平方根运算,该方法在一定程度上保证了计算精度,但是运算速度受限。文献[8]为解决这个问题,选择将式(2)等效为|G|=|Px|+|Py|,较好地提高了运算速度,但是运算精度大幅度降低。

为解决上述问题,本文选择用优化的流水线型的CORDIC算法,实现式(2)的运算。该方法既保证了精度,又提高了运算速度。

2 CORDIC算法原理

2.1 圆周系统下的CORDIC算法

为在保证运算精度的前提下,提高Sobel 算法的即时处理速度和数据吞吐量,本文选择使用CORDIC算法对其进行优化。CORDIC是将复杂的计算转换成移位和加法的迭代操作。CORDIC算法有旋转模式和向量模式。在不同的坐标系下使用,可以实现不同的功能。因需要实现式(2),本文选用圆周坐标系下的向量模式。

2.2 向量模式

向量模式下通过一系列的角度逼近,可以进行反正切和平方根的计算。旋转模式的完整迭代公式如式(3)所示。其中xi为当前的横坐标值,yi为当前的纵坐标值,zi为当前的角度累加值。其中yi控制着判决算子δi的值,yi的值为正时,δi为负;yi的值为负时,δi为正。

基于CORDIC的高速Sobel算法实现

3 向量模式下CORDIC算法的优化

为提高系统的总体性能,本文对CORDIC算法进行了一定优化,最终提高了CORDIC算法的精度和速度。

3.1 覆盖角度的扩展

如式(6)所示,CORDIC算法的旋转角度有固定的规律,角度为2-i的反正切。当迭代次数趋于无穷时,所有角度值之和约等于99.827°。由此可知,覆盖角的度数为[-99.827°,99.827°],不能覆盖圆周上的所有角度。

基于CORDIC的高速Sobel算法实现

考虑到只需求解式(2),输入数据的符号变化不影响最终计算结果。因此在式(1)处,直接求取了|Px|、|Py|,通过该操作将所有数据计算限制在了第一象限。为减少迭代次数,还可将输入数据进行进一步的处理。将|Px|和|Py|进行比较,如果|Py|大于|Px|,则将|Py|和|Px|的值互换;如果|Px|的值大于|Py|,则|Py|和|Px|的值保持不变。预处理后,数据的象限限制在[0°,45°]。因此可以减少一级迭代,收敛域也因此变为[-57.827°,54.827°]。经过上述处理后,式(5)变化成式(7)。

基于CORDIC的高速Sobel算法实现

3.2 数据位扩展

CORDIC算法的迭代次数和运算数据的位宽对运算结果的精度有很大的影响。YU Y H在文献[9]中提出了解决量化误差(OQE)的方法。

YU Y H指出OQE由近似误差和舍入误差组成。近似误差是由有限个确定旋转角度量化CORDIC旋转角度带来的量化误差,由最大向量模值和迭代次数决定。舍入误差是因为计算时数据位不够带来的误差,由数据的位宽决定。

增加数据位宽和迭代的次数都可以提高运算结果的精度。但是,当迭代次数达到一定值后,迭代次数的增加对运算精度的影响变得很小。而增加运算数据的位宽将带来较好的效果,大幅度降低舍入误差。每增加一位数据位宽,舍入误差将变小1/2[9]。本文在用CORDIC算法实现式(2)时,在保证较大的迭代次数的前提下,将运算数据位扩展3位,大幅度降低了舍入误差。

在进行数据迭代运算时,考虑到采用浮点数可以降低工作频率,因此采用了定点数。如图5所示,定点数由符号位(S)、整数位(I)、小数位(D)构成。

基于CORDIC的高速Sobel算法实现

3.3 优化后CORDIC算法的实现

圆周模式下的向量模式可以根据输入的|Px|和|Py|,直接求解出最终梯度的模值。梯度模值运算模块的硬件结构图如图6所示,由预处理、CORDIC迭代流水线、后级处理3部分组成。预处理部分中,将判断|Px|和|Py|的值是否需要互换。因为迭代次数已经提前确定,缩放因子已知,在预处理阶段的数值修正部分可以提前对最终结果进行补偿。补偿后,将数据位数从24位扩展成27位。扩展后,舍入误差将降低为之前的1/8,提高了运算的精确度。

基于CORDIC的高速Sobel算法实现

预处理后进入CORDIC迭代部分,迭代部分采用15级的流水线模式。根据式(3)可知,在求解式(2)时只需要知道|Px|和|Py|的值,因此可舍弃zi的计算,以此节约一些资源。如图7所示,迭代部分的每行存在两个移位寄存器和两个加/减法器。符号控制信号为Sign,由yi决定。通过式(3)可知,当yi为正时,xi处选用加法器,yi处选用减法器;当yi为负时,xi处选用减法器,yi处选用加法器。

基于CORDIC的高速Sobel算法实现

数据通过迭代部分后,进入后级处理部分。后级处理部分将信号缓存一拍后,进行截位处理,然后就可得到x15[26:3]的值,即最终梯度的模值。此外,该设计采用了流水线结构,提高了吞吐量和最大工作频率。

4 系统仿真及性能分析

本设计在ISE14.7软件下,用Verilog HDL语言进行了实现。此外,使用MATLAB、Modelsim SE 10.1c进行了本设计的测试。

本文在Xilinx ISE编译器中编译好代码后,通过Modelsim进行了软件仿真。图8为本设计关键路径的仿真:CORDIC迭代运算的仿真。修正后的|Px|和|Py|采用定点数的方法进行表示,总计24位,0~12位为小数位,13~22位为整数位,23位为符号位。|Px[26:0]|和|Py[26:0]|为|Px|、|Py|扩展3位后的值,分别用x、y进行表示。Kn为最终梯度模值的计算结果。为了更直观地表示,输入值、中间值和输出结果均用有符号十进制数进行表示。根据仿真结果可知,采用优化后的CORDIC进行式(2)的运算,精确度约为10-4,远大于文献[8]的精确度。

仿真后,将文献[8]的算法和本文的算法进行了对比测试,结果如图9所示。通过图9(b)可以观察到,使用文献[8]的加速算法后,因为精确度较低的缘故,不能较好地检测到边缘,人像左下方、右上方处的头发边缘和背景混杂在了一起,人像面部左下方、右上方的边缘检测效果较差。使用本文的改进算法后,如图9(c)所示,在保证运算速度的前提下,较好地识别出了图像的边缘,较好地检测出了头发和面部的边缘,与图9(d)使用MATLAB实现Sobel算法的效果近似。

本文也尝试使用Xilinx ISE自带的平方根IP核实现关键路径的计算。选用Spartan6 XC6SLX16 2CSG324C芯片在Xilinx ISE14.7软件平台下,对平方根IP核进行编译综合。编译综合后,得到ISE计算出的最高工作频率信息。为测试本文使用算法的性能,在同样的条件下,对本文的算法也进行了编译,得到了最高工作频率信息。最终结果如表1所示。采用IP核进行关键路径的计算,最高工作频率为114.745 MHz。采用优化后的CORDIC算法进行关键路径的计算,最高频率为187.652 MHz。相比使用IP核的方法,采用优化后的CORDIC算法实现关键路径的计算可以提速63.53%。

基于CORDIC的高速Sobel算法实现

5 结论

本文在传统Sobel加速算法的基础上,在FPGA平台上使用优化的CORDIC算法实现了Sobel算法加速。通过图9可知,该方法的边缘检测效果良好,较好地检测出了图像的边缘。通过表1可知,该方法与调用IP核相比提高了百分之63.53%的工作频率。实验结果表明,本设计进一步提高了系统的运算速度,适合在对速度有较高要求的系统中使用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CORDIC
    +关注

    关注

    0

    文章

    35

    浏览量

    19837
  • sobel
    +关注

    关注

    0

    文章

    12

    浏览量

    7825

原文标题:【学术论文】基于CORDIC的高速Sobel算法实现

文章出处:【微信号:ChinaAET,微信公众号:电子技术应用ChinaAET】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于改进的CORDIC算法的FFT复乘及其FPGA实现

    耗费了FFT运算中大量的乘法器资源。CORDIC算法只需简单的移位与加减运算就能实现向量旋转,具有使用资源少、硬件规模小等优势。因此在FFT蝶形运算中用其代替传统FFT运算中的复数乘法器,可以获得更好
    发表于 07-11 21:32

    CORDIC算法求助

    请问CORDIC算法用verilog算法实现时,角度累加器中的45度,26.56度,14.04度怎么跟verilog语言相对应?
    发表于 07-11 20:18

    基于FPGA的边缘检测和Sobel算法

    转帖摘要: 针对嵌入式软件无法满足数字图像实时处理速度问题,提出用硬件加速器的思想,通过FPGA实现Sobel边缘检测算法。通过乒乓操作、并行处理数据和流水线设计,大大提高算法的处理速
    发表于 11-29 08:57

    FPGA设计中必须掌握的Cordic算法

    大多数工程师在碰到需要在 FPGA 中实现诸如正弦、余弦或开平方这样的数学函数时,首先会想到的是用查找表,可能再结合线性内插或者幂级数(如果有乘法器可用)。不过对这种工作来说,CORDIC 算法
    发表于 09-19 09:07

    怎么利用CORDIC算法在FPGA上实现高速自然对数变换器?

    本文利用CORDIC算法在FPGA上实现高速自然对数变换器。
    发表于 04-30 06:05

    利用CORDIC 算法在FPGA 中实现可参数化的FFT

    针对在工业中越来越多的使用到的FFT,本文设计出了一种利用CORDIC 算法在FPGA 上实现快速FFT 的方法。CORDIC 实现复数乘法
    发表于 08-24 09:31 9次下载

    高性能HPOR CORDIC算法实现

    CORDIC 算法在通信和图像处理等各个领域有着广泛的应用,但是浮点CORDIC 由于迭代延时大且实现复杂没有得到很好的应用,本文提出了一种修正浮点
    发表于 12-15 14:27 14次下载

    基于CORDIC算法的NCO实现

    基于CORDIC 算法的NCO 实现田力, 冯琦(西安电子科技大学 电路设计研究所,陕西 西安 710071)摘要:NCO 在信号处理方面有着广泛的应用。而函数发生器是NCO 中的关键部分,
    发表于 12-15 14:30 23次下载

    利用CORDIC算法在FPGA中实现可参数化的FFT

    针对在工业中越来越多的使用到的FFT,本文设计出了一种利用CORDIC算法在FPGA上实现快速FFT的方法。CORDIC实现复数乘法比普通的
    发表于 08-09 15:39 55次下载

    基于CORDIC算法的载波同步锁相环设计

    研究了一种利用CORDIC算法的矢量及旋转模式对载波同步中相位偏移进行估计并校正的方法。设计并实现了基于CORDIC算法的数字锁相环。通过仿
    发表于 12-15 14:49 0次下载
    基于<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>的载波同步锁相环设计

    基于CORDIC算法高速ODDFS电路设计

    为了满足现代高速通信中频率快速转换的需求,基于坐标旋转数字计算(CORDIC,Coordinate Rotation Digital Computer)算法完成正交直接数字频率合成(ODDFS,Orthogonal Direct
    发表于 02-22 16:26 34次下载
    基于<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>的<b class='flag-5'>高速</b>ODDFS电路设计

    cordic算法verilog实现(简单版)

    cordic算法verilog实现(简单版)(转载)module cordic(clk, phi, cos, sin); parameter W = 13, W_Z = 14; in
    发表于 02-11 03:06 3070次阅读
    <b class='flag-5'>cordic</b><b class='flag-5'>算法</b>verilog<b class='flag-5'>实现</b>(简单版)

    高速低功耗CORDIC算法的研究与实现

    针对传统CORDIC算法流水线结构的迭代次数过多,运算速度不够快,消耗硬件资源较多的缺点,改进了一种基于旋转模式并行运算的CORDIC算法。该算法
    发表于 11-16 10:46 14次下载
    <b class='flag-5'>高速</b>低功耗<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>的研究与<b class='flag-5'>实现</b>

    基于FPGA的Cordic算法实现的设计与验证

    本文是基于FPGA实现Cordic算法的设计与验证,使用Verilog HDL设计,初步可实现正弦、余弦、反正切函数的实现。将复杂的运算转化
    发表于 07-03 10:18 2382次阅读
    基于FPGA的<b class='flag-5'>Cordic</b><b class='flag-5'>算法</b><b class='flag-5'>实现</b>的设计与验证

    如何使用FPGA实现CORDIC算法在跟踪环中的应用

    主要介绍了坐标旋转数字计算(CORDIC算法在US,g,鉴别器中的应用,包括码跟踪环、锁频环和锁相环鉴别器,并进行了FPGA实现。在设计中,采用统一cORDIc
    发表于 01-22 16:12 8次下载
    如何使用FPGA<b class='flag-5'>实现</b><b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>在跟踪环中的应用