多语言展示
当前在线:1386今日阅读:2今日分享:38

图像边缘检测算子

工程应用中,对于图像分析和处理的基础首先对图像进行边缘检测,边缘检测是研究比较多的一种图像检测方法,通过检测不同的边缘来达到分割图像的目的。Matlab中提供了很多边缘检测算子,利用这些算子来实现边缘检测,本节主要介绍边缘检测算子:
工具/原料
1

边缘检测

2

matlab

方法/步骤
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领域的处理,从而获得更好的边缘检测效果示例:利用不同标准差的LOG算子来检测图像边缘编写对应的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算子进行边缘检测');程序运行结果如下:

推荐信息