Sobel算子的指令集加速例子

发布时间 2023-04-26 10:24:20作者: 兜尼完

Sobel算子的卷积核如下。这里以x轴向右为正;y轴向下为正:

$${dx=\bigl(\begin{smallmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{smallmatrix}\bigr), dy=\bigl(\begin{smallmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{smallmatrix}\bigr),dz=\sqrt{dx^{2}+dy^{2}}}$$

下面直接给出我做的指令集加速的代码,计算的是dz的图像,类型是CV_16UC1,图片边缘是按照REFLECT101方式处理的。基于VS2017、OpenCV430和Qt5.9。CPU型号是Intel Core i5-7400。经过对比在Release版程序中该方法比同功能的OpenCV代码快。当然不同的CPU对指令集的支持效率不同,而且在某些情况下OpenCV会使用多线程加速,所以这里的比较结果仅供参考。代码如下:

下面是文本输出:

这里是输出结果图片,可以看出我的结果跟OpenCV相同: