欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用FPGA实现的Sobel边缘检测算法(第一部分)

最编程 2024-02-06 22:41:46
...

Sobel算子包括x和y方向的差分运算,求取其平方根作为最终取值,一般情况下,在FPGA处理中,考虑到效率和资源占用问题,也可以用绝对值来代替。

将Sobel算子的表达式再次列出如下:

由数学表达式,计算Sobel算子需要首先计算x方向和y方向的微分值gx(x,y)和gy(x,y),之后对两个微分结果分别求平方根或绝对值相加并进行越界处理。在某些场合可能需要用到梯度的方向,因此,需同时计算出梯度方向θ(x,y)。

1.模板计算

由数学表达式可知,这个模板是尺寸固定的3x3模板,我们同事需要连续三行连续三列的9个元素来读模板进行相乘。很明显,我们需要两个行缓存来实现行列对齐。

2.开平方以及反正切计算

在软件中,开方运算和反正切运算均属于浮点运算。而FPGA是不能直接能处理浮点数的,因此如果直接按软件的思路进行浮点计算,首先需要将定点数据转为浮点数,再进行浮点运算,转换完成后再转换成定点。Xilinx和Altera都提供了强大的浮点运算IP核,包括乘法与除法运算、开平方以及正余弦反正切运算等。

Xillinx免费提供Cordic算法核。(使用向量模式将行坐标系转换到极坐标)

推荐阅读