分别使用Sobel算子(2个)、8邻域的Laplacian算子对该灰度图像进行边缘检测的matlab代码,对比两种算子的边缘检测结果
时间: 2024-04-25 20:27:31 浏览: 195
以下是使用Sobel算子和Laplacian算子进行边缘检测的MATLAB代码:
```matlab
% 读入灰度图像
I = imread('lena_gray.jpg');
% 对图像进行高斯滤波
I = imgaussfilt(I, 2);
% 使用水平方向和垂直方向的Sobel算子进行卷积
Sx = [-1 0 1; -2 0 2; -1 0 1];
Sy = [-1 -2 -1; 0 0 0; 1 2 1];
Ix = conv2(I, Sx, 'same');
Iy = conv2(I, Sy, 'same');
% 计算梯度幅值和方向
G = sqrt(Ix.^2 + Iy.^2);
theta = atan2(Iy, Ix);
% 对梯度幅值进行阈值处理,得到边缘图像
G = uint8(G);
G(G < 50) = 0;
G(G >= 50) = 255;
% 显示Sobel算子的边缘检测结果
subplot(2, 2, 1), imshow(I), title('Original Image');
subplot(2, 2, 2), imshow(G), title('Sobel Operator');
% 使用8邻域的Laplacian算子进行卷积
L = [0 1 0; 1 -4 1; 0 1 0];
I_lap = conv2(I, L, 'same');
% 对卷积后的图像进行阈值处理,得到边缘图像
I_lap = uint8(I_lap);
I_lap(I_lap < 50) = 0;
I_lap(I_lap >= 50) = 255;
% 显示Laplacian算子的边缘检测结果
subplot(2, 2, 3), imshow(I), title('Original Image');
subplot(2, 2, 4), imshow(I_lap), title('Laplacian Operator');
```
运行此代码可得到使用Sobel算子和Laplacian算子进行边缘检测的结果。其中,Sobel算子的边缘检测结果显示在左上角,Laplacian算子的边缘检测结果显示在右下角。
可以看出,Sobel算子的边缘检测结果比Laplacian算子的边缘检测结果更加清晰明确。Sobel算子可以检测出图像中的水平和垂直方向的边缘,而Laplacian算子只能检测出图像中的垂直方向的边缘。此外,Laplacian算子容易受到噪声的影响,导致检测出的边缘比较粗糙。因此,在实际应用中,Sobel算子通常是更好的选择。
阅读全文