1、edge函数用于实现图线的边缘检测,其调用格式如下: BW=edge(I);默认sobel算子 BW=egde(I,’Sobel’,thresh); BW=edge(I,’Roberts’); BW=edge(I,’Prewitt’); BW=edge(I,’Log’,thresh,sigma); BW=edge(I,’Canny’);其中thresh表示阀值,sigma表示Sobel,Roberts,Prewitt,LOG(Laplacian-Gauss),Canny表示边缘检测相关的算子,sigma表示标准差。
2、Sobel算子Sobel算子从不同的方向进行边缘检测,sobel算子并不是简单求平均然后在差分,而是提高了中心像素上下左右4个方向像素的权重。通常用于处理灰度渐变和噪声较多的图像。示例:利用Sobel算子不同阀值进行图像边缘检测编写对应的m文件如下: I=imread('coins.png'); I1=edge(I,'Sobel',0.03); I2=edge(I,'Sobel',0.05); I3=edge(I,'Sobel',0.08); subplot(2,2,1) imshow(I); title('原始图像'); subplot(2,2,2) imshow(I1); title('利用阀值0.03,Sobel算子进行图像边缘检测'); subplot(2,2,3) imshow(I2); title('利用阀值0.05,Sobel算子进行图像边缘检测'); subplot(2,2,4) imshow(I3); title('利用阀值0.08,Sobel算子进行图像边缘检测');程序运行结果如下图:
3、Roberts算子Roberts算子是一种斜向偏差分的梯度计算方法,,梯度的大小代表边缘的强度,梯度的方向和边缘走向垂直的示例:利用Roberts算子不同阀值进行图像边缘检测编写对应的m文件如下: I=imread('rice.png'); BW1=edge(I,'Roberts',0.02); BW2=edge(I,'Roberts',0.05); BW3=edge(I,'Roberts',0.07); subplot(2,2,1) imshow(I); title('原始图像'); subplot(2,2,2) imshow(BW1); title('利用阀值0.02,Roberts算子进行边缘检测'); subplot(2,2,3) imshow(BW2); title('利用阀值0.05,Roberts算子进行边缘检测'); subplot(2,2,4) imshow(BW3); title('利用阀值0.08,Roberts算子进行边缘检测');程序运行结果如下图:
4、Prewitt算子Prewitt算子是一种边缘样板算子,利用像素点上下左右邻点灰度差,在边缘处达到边缘检测的目的。示例:利用Prewitt算子不同阀值进行图像边缘检测编写对应的m文件如下: I=imread('cameraman.tif'); BW1=edge(I,'Prewitt',0.02); BW2=edge(I,'Prewitt',0.05); BW3=edge(I,'Prewitt',0.07); subplot(2,2,1) imshow(I); title('原始图像'); subplot(2,2,2) imshow(BW1); title('利用阀值0.02,Canny算子进行边缘检测'); subplot(2,2,3) imshow(BW2); title('利用阀值0.05,Canny算子进行边缘检测'); subplot(2,2,4) imshow(BW3); title('利用阀值0.08,Canny算子进行边缘检测');程序运行结果如下图:
5、Laplacian-Gauss算子 Laplacian颍骈城茇-Gauss算子是对Laplacian算子的一种改进,需要考虑5×5领域的处理,从而获得更好的边缘检测效果示例:利用不同标准差的L晦倘佳鳎OG算子来检测图像边缘编写对应的m文件如下: I=imread('pout.tif'); BW1=edge(I,'LOG',0.002,1); BW2=edge(I,'LOG',0.002,2); BW3=edge(I,'LOG',0.002,2.5); subplot(2,2,1) imshow(I); title('原始图片'); subplot(2,2,2); imshow(BW1); title('标准差为1,阀值0.002的LOG算子边缘检测'); subplot(2,2,3); imshow(BW2); title('标准差为2,阀值0.002的LOG算子边缘检测'); subplot(2,2,4); imshow(BW3); title('标准差为2.5,阀值0.002的LOG算子边缘检测');程序运行结果如下:
6、Canny算子 Canny提出了边缘检测的三个准则(1)信噪比准则(2)定位精确度准则(3)单边缘响应准则示例:利用Canny算子来对图像进行边缘检测编写对应的m文件如下: I=imread('eight.tif'); BW1=edge(I,'Canny',0.02); BW2=edge(I,'Canny',0.05); BW3=edge(I,'Canny',0.07); subplot(2,2,1) imshow(I); title('原始图像'); subplot(2,2,2) imshow(BW1); title('利用阀值0.02,Canny算子进行边缘检测'); subplot(2,2,3) imshow(BW2); title('利用阀值0.05,Canny算子进行边缘检测'); subplot(2,2,4) imshow(BW3); title('利用阀值0.08,Canny算子进行边缘检测');程序运行结果如下图:
7、总结,分别利用上述几种算子对图像进行边缘检测,查看每一种边缘检测效果示例:利用不同边缘检测算子对图咤胸剖玳像进行边缘检测编写对应m文件如下: I=imread('cameraman.tif'); BW1=edge(I,'Sobel',0.03); BW2=edge(I,'Roberts',0.03); BW3=edge(I,'Prewitt',0.03); BW4=edge(I,'LOG',0.03); BW5=edge(I,'Canny',0.03); subplot(2,3,1) imshow(I); title('原始图像'); subplot(2,3,2) imshow(BW1); title('利用阀值0.03,Sobel算子进行边缘检测'); subplot(2,3,3) imshow(BW2); title('利用阀值0.03,Roberts算子进行边缘检测'); subplot(2,3,4) imshow(BW3); title('利用阀值0.03,Prewitt算子进行边缘检测'); subplot(2,3,5) imshow(BW4); title('利用阀值0.03,LOG算子进行边缘检测'); subplot(2,3,6) imshow(BW5); title('利用阀值0.03,Canny算子进行边缘检测');程序运行结果如下: