在matlab的edge函数当中包含的method有7种
'Sobel'
(default) | 'Prewitt'
| 'Roberts'
| 'log'
| 'zerocross'
| 'Canny'
| 'approxcanny'
下面将对每种方法进行简单的介绍以及对比
来源:https://blog.csdn.net/tianhai110/article/details/5663756
1、Sobel算子
这两者对灰度渐变低噪声的图像有较好的检测效果,但是对于混合多复杂噪声的图像,处理效果就不理想了。
2、Prewitt算子
这两者对灰度渐变低噪声的图像有较好的检测效果,但是对于混合多复杂噪声的图像,处理效果就不理想了。
3、Roberts算子
Robert算子定位比较精确,但由于不包括平滑,所以对于噪声比较敏感。
4、Canny算法
5、log边缘检测
LOG滤波器中的a正比于低通滤波器的宽度,a越大,平滑作用越显著,去除噪声越好,但图像的细节也损失越大,边缘精度也就越低。所以在边缘定位精度和消除噪声级间存在着矛盾,应该根据具体问题对噪声水平和边缘点定位精度要求适当选取。
抗噪声能力较强,但会造成一些尖锐的边缘无法检测到。
6、zeroCross边界检测算法
这个算子的作用就是从图像中提取出零交叉点。代表了二阶导数从正到负的转变
7、approxcanny
8、代码
I=imread(['./idcard/',num2str(i),'.jpg']);
I=rgb2gray(I,'method'); %method使用7中具体方法名称代替
tic;
BW = edge(I);
figure;
imshow(BW);
9、结果
19、时间
0.348237223780375 0.0850947502601536
0.150463896427930 0.185086594503322
0.213030633928855 0.227787267655326