微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Canny算法的改进及FPGA实现

Canny算法的改进及FPGA实现

时间:06-05 来源:互联网 点击:

梯度方向计算:根据8连通区域,量化边缘方向。首先将梯度角度的变化范围减小到圆周的1/8扇区。如图4所示,以0°、45°、90°、135°等为中心角度:每个方向包含±22.5°,根据Px Py的比值及正负确定其所在方向的区域范围,其方向定义为中心角度的方向。对于整个坐标系而言,梯度向量共分为8类,但是对于非局部最大值抑制的实现,利用中心对称原理,只需要4个方向,如图5所示。

当|Py/Px|>tg22.5°,即梯度方向在0和180两个扇区内,则将其方向用0表示;

当tg22.5°|Py/Px|>tg67.5°且Px/Py>0,即梯度方向在45°和225°两个扇区内,则将其方向用1表示;

当|Py/Px|>tg67.5°即梯度方向在90°和270°两个扇区内,则将其方向用2表示;

当tg22.5°|Py/Px|>tg67.5°且Px/Py>0,即梯度135°和315°两个扇区内,则将其方向用3表示。

0,即梯度135°和315°两个扇区内,则将其方向用3表示。 P>  进行方向计算时,需要计算tg22.5°和tg67.5°。在硬件设计中采用简化和近似的方法来实现。

tg22.5°≈0.4375=1/2-1/16

tg67.5°≈2.5=2+1/2

这样就可以用简单的移位和加减运算代替复杂的小数乘法运算,而在实际的数字图像处理中,近似引入的误差是允许的[3]。再利用比较器和编码器就可以完成方向判断。

3.3 阈值计算

阈值选取基于梯度直方图,所以先统计梯度直方图[4]。以256×256×8bit的图为例,基于双端口RAM(hist_buffer)及其控制器完成。经计算存储器宽度为16bit,深度为1 024。当有梯度值输入时,RAM中相应地址的内容被读出来,加1后再存入该地址。如此进行下去,直到整幅图像扫描完毕,得到梯度的直方图。按照地址从小到大的顺序依次累加RAM中的值,当累加和不小于图像总像素的80%时,输出对应的地址,即为Th, 而Tl则由Th右移一位得到,如图6所示。


3.4 非最大值抑制值抑制及边缘检测

本文采取将强弱边缘检测同时进行,并且在边缘检测之前形成窗口,这样就避免了后续考虑同步的问题,节省了存储单元。图7为原理图,其中粗线表示同时输出9个值。


4 实验结果

图8依次是原图、软件处理结果图和硬件处理结果图。实验结果表明本算法可以得到较准确的边缘。

本文通过对传统Canny算子的分析,结合硬件实现的特点对算法进行了改进,并在FPGA上实现,结果表明该算法可以得到预期的边缘。但仍存在一些问题,如阈值的选取虽然可以通过直方图统计自动获得,但该阈值仍缺乏自适应性;边缘连接未采用递归跟踪,因此连续性有待改进。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top