【AI PC端算法优化】四,一步步将Sobel边缘检测加速22倍

1. 前言

继续优化技术的探索,今天以一个3×33\times 33×3的Sobel算子进行边缘检测的算法为例来看看如何使用SSE指令集对其进行优化。

2. 原理介绍

众所周知,在传统的图像边缘检测算法中,最常用的一种算法是利用Sobel算子完成的。Sobel算子一共有222个,一个是检测水平边缘的算子,另一个是检测垂直边缘的算子。

Sobel算子的优点是可以利用快速卷积函数,简单有效,且对领域像素位置的影响做了加权,可以降低边缘模糊程度,有较好效果。然而Sobel算子并没有基于图像的灰度信息进行处理,所以在提取图像边缘信息的时候可能不会让人视觉满意。

我们来看一下怎么构造Sobel算子?

Sobel算子是在一个坐标轴的方向进行非归一化的高斯平滑,在另外一个坐标轴方向做一个差分,kszie×ksizekszie\times ksizekszie×ksize大小的Sobel算子是由平滑算子差分算子全卷积得到,其中ksizeksizeksize代表Sobel算子的半径,必须为奇数。

对于窗口大小为ksizeksizeksize非归一化Sobel平滑算子等于ksize−1ksize-1ksize1阶的二项式展开式的系数,而Sobel平滑算子等于ksize−2ksize-2ksize2阶的二项式展开式的系数两侧补000,然后向前差分。

在这个例子中:我们要构造一个333阶的Sobel非归一化的Sobel平滑算子和Sobel差分算子

Sobel平滑算子: 取二项式的阶数为n=2n=2n=2,然后计算展开式系数为,[C20,C21,C22][C_2^0, C_2^1, C_2^2][C20,C21,C22] 也即是[1,2,1][1, 2, 1][1,2,1],这就是333阶的非归一化的Sobel平滑算子。

Sobel差分算子:取二项式的阶数为n=3−2=1n=3-2=1n=32=1,然后计算二项展开式的系数,即为:[C10,C11][C_1^0, C_1^1][C10,C11],两侧补000 并且前向差分得到[1,0,−1][1, 0,-1][1,0,1],第444项差分后可以直接删除。

Sobel算子333阶的Sobel平滑算子和Sobel差分算子进行全卷积,即可得到3×33\times 33×3的Sobel算子。

其中xxx方向的Sobel算子为:

soblex=[121]∗[10−1]=[10−120−210−1]soble_x=\begin{bmatrix} 1 \\2\\1 \end{bmatrix} * \begin{bmatrix} 1 & 0 &-1\end{bmatrix}=\begin{bmatrix} 1 &0&-1\\2&0&-2\\1&0&-1 \end{bmatrix}soblex=121[101]=121000121

yyy方向的Sobel算子为:

sobely=[10−1]∗[121]=[121000−1−2−1]sobel_y=\begin{bmatrix} 1 &0&-1 \end{bmatrix}*\begin{bmatrix} 1 \\2\\1 \end{bmatrix}=\begin{bmatrix} 1&2&1\\0&0&0\\-1&-2&-1 \end{bmatrix}sobely=[101</

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值