用matlab实现:1.用sobel算子、prewitt算子、log算子对图像进行非线性锐化滤波,观察滤波效果。2.对图eight.tif实现Butterworth高通滤波。
时间: 2023-12-29 12:04:23 浏览: 206
1. 使用Sobel算子、Prewitt算子、LoG算子对图像进行非线性锐化滤波,观察滤波效果:
```
% 读入图像
img = imread('lena.png');
% 转化为灰度图像
img_gray = rgb2gray(img);
% 利用Sobel算子进行锐化
sobel_result = edge(img_gray, 'sobel');
% 利用Prewitt算子进行锐化
prewitt_result = edge(img_gray, 'prewitt');
% 利用LoG算子进行锐化
img_log = imgaussfilt(img_gray, 2);
log_result = edge(img_log, 'log');
% 显示结果
subplot(2,2,1);imshow(img_gray);title('原图');
subplot(2,2,2);imshow(sobel_result);title('Sobel算子锐化');
subplot(2,2,3);imshow(prewitt_result);title('Prewitt算子锐化');
subplot(2,2,4);imshow(log_result);title('LoG算子锐化');
```
2. 对图eight.tif实现Butterworth高通滤波:
```
% 读入图像
img = imread('eight.tif');
% 转化为灰度图像
img_gray = rgb2gray(img);
% 进行傅立叶变换
f = fft2(img_gray);
% 将零频分量移到中心
f = fftshift(f);
% 构造Butterworth高通滤波器
D0 = 50;
n = 2;
[M, N] = size(img_gray);
u = 0:(M-1);
v = 0:(N-1);
idx = find(u > M/2);
u(idx) = u(idx) - M;
idy = find(v > N/2);
v(idy) = v(idy) - N;
[V, U] = meshgrid(v, u);
D = sqrt(U.^2 + V.^2);
H = 1./(1 + (D./D0).^(2*n));
% 进行滤波
g = f .* H;
% 将零频分量移回左上角
g = ifftshift(g);
% 进行反傅立叶变换
img_filtered = ifft2(g);
% 显示结果
subplot(1,2,1);imshow(img_gray);title('原图');
subplot(1,2,2);imshow(abs(img_filtered), []);title('Butterworth高通滤波结果');
```
请注意,以上代码仅供参考,具体实现过程可能因您的具体需求而异。
阅读全文