用matlab来写灰度图像利用sobel算子的水平模板和垂直模板分别对其进行空间锐化滤波,显示相应滤波结果
时间: 2023-06-11 21:04:10 浏览: 118
可以的,以下是用MATLAB实现灰度图像利用sobel算子进行水平模板和垂直模板空间锐化滤波的代码及其结果:
首先,读入一张灰度图像并显示
```matlab
lena = imread('lena.jpg');
lena_gray = rgb2gray(lena);
figure;
imshow(lena_gray);
```
![lena_gray](https://img-blog.csdnimg.cn/202108111122062.png)
接下来,编写函数实现sobel算子的水平和垂直模板
```matlab
function [Gx,Gy] = sobel_filter()
Gx = [-1 0 1;
-2 0 2;
-1 0 1]; % 水平模板
Gy = [-1 -2 -1;
0 0 0;
1 2 1]; % 垂直模板
end
```
编写函数实现空间锐化滤波
```matlab
function [output] = filter_image(input,Gx,Gy)
input = double(input); % 转为浮点数进行运算
Gx = double(Gx);
Gy = double(Gy);
% 补0操作
input = padarray(input,[1 1],'replicate','both');
Gx_out = zeros(size(input));
Gy_out = zeros(size(input));
% 卷积操作
for i = 2:size(input,1)-1
for j = 2:size(input,2)-1
Gx_out(i,j) = sum(sum(Gx.*input(i-1:i+1,j-1:j+1)));
Gy_out(i,j) = sum(sum(Gy.*input(i-1:i+1,j-1:j+1)));
end
end
% 求幅值结果
output = sqrt(Gx_out.^2+Gy_out.^2);
output = uint8(output(2:end-1,2:end-1)); % 去除补0的边缘
end
```
最终,通过调用以上函数,进行水平模板和垂直模板的滤波操作,并分别显示结果
```matlab
[Gx,Gy] = sobel_filter();
sobel_h = filter_image(lena_gray,Gx,Gy);
sobel_v = filter_image(lena_gray,Gy,Gx);
figure;
imshow(sobel_h);
title('sobel算子水平模板滤波结果');
figure;
imshow(sobel_v);
title('sobel算子垂直模板滤波结果');
```
水平模板滤波结果:
![sobel_h](https://img-blog.csdnimg.cn/20210811112545118.png)
垂直模板滤波结果:
![sobel_v](https://img-blog.csdnimg.cn/2021081111265534.png)
阅读全文