图像边缘检测matlab
时间: 2023-11-02 13:00:07 浏览: 91
在MATLAB中进行图像边缘检测有很多种方法,其中常用的有基于梯度算子的方法和基于边缘增强的方法。
基于梯度算子的方法:
1. Sobel算子
Sobel算子是一种常用的基于梯度算子的边缘检测方法。它分别计算水平和垂直方向的梯度,然后将两个方向的梯度合并起来。
示例代码:
```
img = imread('lena.jpg');
gray_img = rgb2gray(img);
sobel_h = [-1,-2,-1;0,0,0;1,2,1];
sobel_v = [-1,0,1;-2,0,2;-1,0,1];
img_h = imfilter(double(gray_img), sobel_h);
img_v = imfilter(double(gray_img), sobel_v);
img_sobel = sqrt(img_h.^2 + img_v.^2);
imshow(img_sobel, []);
```
2. Prewitt算子
Prewitt算子与Sobel算子类似,也是一种基于梯度算子的边缘检测方法。它同样分别计算水平和垂直方向的梯度,然后将两个方向的梯度合并起来。
示例代码:
```
img = imread('lena.jpg');
gray_img = rgb2gray(img);
prewitt_h = [-1,-1,-1;0,0,0;1,1,1];
prewitt_v = [-1,0,1;-1,0,1;-1,0,1];
img_h = imfilter(double(gray_img), prewitt_h);
img_v = imfilter(double(gray_img), prewitt_v);
img_prewitt = sqrt(img_h.^2 + img_v.^2);
imshow(img_prewitt, []);
```
3. Roberts算子
Roberts算子是一种简单的基于梯度算子的边缘检测方法。它只计算两个对角方向的梯度,并将其合并起来。
示例代码:
```
img = imread('lena.jpg');
gray_img = rgb2gray(img);
roberts_h = [1,0;0,-1];
roberts_v = [0,1;-1,0];
img_h = imfilter(double(gray_img), roberts_h);
img_v = imfilter(double(gray_img), roberts_v);
img_roberts = sqrt(img_h.^2 + img_v.^2);
imshow(img_roberts, []);
```
基于边缘增强的方法:
1. Canny算子
Canny算子是一种基于边缘增强的边缘检测方法。它包括以下几个步骤:
(1)高斯滤波:用高斯滤波器平滑图像,以减少噪声的影响。
(2)梯度计算:计算图像的梯度幅值和方向。
(3)非极大值抑制:对梯度幅值进行非极大值抑制,以保留梯度方向上的局部极大值。
(4)双阈值处理:将梯度幅值进行双阈值处理,以得到二值图像,并将强边缘和弱边缘分开处理。
(5)边缘连接:对弱边缘进行边缘连接,以连接成为强边缘的一部分。
示例代码:
```
img = imread('lena.jpg');
gray_img = rgb2gray(img);
img_gauss = imgaussfilt(gray_img, 1);
img_canny = edge(img_gauss, 'canny');
imshow(img_canny, []);
```
阅读全文