matalab代码实现1、导入一幅灰度图像,分别用Roberts、Prewitt、Sobel算子实现图像水平边界和垂直边界的检测,以二值图像形式在同一个窗口内分成6个子窗口来分别显示,并注上文字标题。
时间: 2024-06-09 21:09:25 浏览: 82
Matalb图像分割边缘检测算子比较(适合新手)
以下是使用Matlab实现图像边缘检测的代码:
```matlab
%% 导入图像
img = imread('test.jpg');
img_gray = rgb2gray(img);
%% 使用Roberts算子进行边缘检测
roberts_h = [1 0; 0 -1];
roberts_v = [0 1; -1 0];
img_roberts_h = imfilter(img_gray, roberts_h);
img_roberts_v = imfilter(img_gray, roberts_v);
img_roberts = sqrt(img_roberts_h.^2 + img_roberts_v.^2);
%% 使用Prewitt算子进行边缘检测
prewitt_h = [-1 0 1; -1 0 1; -1 0 1];
prewitt_v = [-1 -1 -1; 0 0 0; 1 1 1];
img_prewitt_h = imfilter(img_gray, prewitt_h);
img_prewitt_v = imfilter(img_gray, prewitt_v);
img_prewitt = sqrt(img_prewitt_h.^2 + img_prewitt_v.^2);
%% 使用Sobel算子进行边缘检测
sobel_h = [-1 0 1; -2 0 2; -1 0 1];
sobel_v = [-1 -2 -1; 0 0 0; 1 2 1];
img_sobel_h = imfilter(img_gray, sobel_h);
img_sobel_v = imfilter(img_gray, sobel_v);
img_sobel = sqrt(img_sobel_h.^2 + img_sobel_v.^2);
%% 将结果显示在同一个窗口中
subplot(2,3,1), imshow(img_gray), title('原始图像');
subplot(2,3,2), imshow(img_roberts_h), title('Roberts水平边界检测');
subplot(2,3,3), imshow(img_roberts_v), title('Roberts垂直边界检测');
subplot(2,3,4), imshow(img_prewitt_h), title('Prewitt水平边界检测');
subplot(2,3,5), imshow(img_prewitt_v), title('Prewitt垂直边界检测');
subplot(2,3,6), imshow(img_sobel), title('Sobel边界检测');
```
以上代码将原始图像和三种边缘检测算子的结果分别显示在六个子窗口内,方便比较不同算子的效果。
阅读全文