选择一幅灰度图像分别利用 Roberts、Prewitt、Sobel 和拉普拉斯高斯算子对图像进 行边缘检测的matlab代码
时间: 2023-06-03 20:03:26 浏览: 177
灰度图像边缘检测算法的matlab实现_matlab_图像_灰度
以下是可以回答的 Matlab 代码:
```
% 读入灰度图像
img = imread('image.jpg');
gray_img = rgb2gray(img);
% Roberts 算子
roberts_h = [1 0; 0 -1];
roberts_v = [0 1; -1 0];
roberts_h_img = imfilter(double(gray_img), roberts_h);
roberts_v_img = imfilter(double(gray_img), roberts_v);
roberts_img = sqrt(roberts_h_img.^2 + roberts_v_img.^2);
% Prewitt 算子
prewitt_h = [-1 0 1; -1 0 1; -1 0 1];
prewitt_v = [-1 -1 -1; 0 0 0; 1 1 1];
prewitt_h_img = imfilter(double(gray_img), prewitt_h);
prewitt_v_img = imfilter(double(gray_img), prewitt_v);
prewitt_img = sqrt(prewitt_h_img.^2 + prewitt_v_img.^2);
% Sobel 算子
sobel_h = [-1 0 1; -2 0 2; -1 0 1];
sobel_v = [-1 -2 -1; 0 0 0; 1 2 1];
sobel_h_img = imfilter(double(gray_img), sobel_h);
sobel_v_img = imfilter(double(gray_img), sobel_v);
sobel_img = sqrt(sobel_h_img.^2 + sobel_v_img.^2);
% 拉普拉斯高斯算子
log_filter = fspecial('log');
log_img = imfilter(double(gray_img), log_filter);
% 显示结果
figure;
subplot(2, 3, 1);
imshow(gray_img);
title('原图');
subplot(2, 3, 2);
imshow(roberts_img, []);
title('Roberts 算子');
subplot(2, 3, 3);
imshow(prewitt_img, []);
title('Prewitt 算子');
subplot(2, 3, 4);
imshow(sobel_img, []);
title('Sobel 算子');
subplot(2, 3, 5);
imshow(log_img, []);
title('拉普拉斯高斯算子');
```
注意,上述代码没有对输入的图像进行错误检查和处理,实际应用时需要添加相应的代码。另外,不同算子的边缘检测结果有时会不同,可以选择最适合具体应用的方法。
阅读全文