MATLAB编程实现图像的理想低通和高通滤波;巴特沃斯低通和高通滤波;高斯低通和高通滤波;同态滤波的代码要求显示滤波前后的图像和频谱
时间: 2023-06-05 12:08:09 浏览: 271
好的,关于MATLAB实现图像的各种滤波,我可以给您提供一些代码并显示滤波前后的图像和频谱。以下是实现代码:
1. 理想低通滤波:
```matlab
% 读取图像
im = imread('image.jpg');
imshow(im);
% 生成理想低通滤波器
H = fspecial('disk',15);
% 应用滤波器并显示滤波后的图像和频谱
im_filtered = imfilter(im, H, 'replicate');
imshow(im_filtered);
freqz2(H);
```
2. 理想高通滤波:
```matlab
% 读取图像
im = imread('image.jpg');
imshow(im);
% 生成理想高通滤波器
H = fspecial('disk',15);
H = 1-H;
% 应用滤波器并显示滤波后的图像和频谱
im_filtered = imfilter(im, H, 'replicate');
imshow(im_filtered);
freqz2(H);
```
3. 巴特沃斯低通滤波:
```matlab
% 读取图像
im = imread('image.jpg');
imshow(im);
% 生成巴特沃斯低通滤波器
D0 = 50;
N = 5;
H = fspecial('gaussian',size(im),D0);
H = 1.0./(1.0+(H./D0).^(2*N));
% 应用滤波器并显示滤波后的图像和频谱
im_filtered = imfilter(im, H, 'replicate');
imshow(im_filtered);
freqz2(H);
```
4. 巴特沃斯高通滤波:
```matlab
% 读取图像
im = imread('image.jpg');
imshow(im);
% 生成巴特沃斯高通滤波器
D0 = 50;
N = 5;
H = fspecial('gaussian',size(im),D0);
H = 1.0-(1.0./(1.0+(H./D0).^(2*N)));
% 应用滤波器并显示滤波后的图像和频谱
im_filtered = imfilter(im, H, 'replicate');
imshow(im_filtered);
freqz2(H);
```
5. 高斯低通滤波:
```matlab
% 读取图像
im = imread('image.jpg');
imshow(im);
% 生成高斯低通滤波器
D0 = 50;
H = fspecial('gaussian',size(im),D0);
% 应用滤波器并显示滤波后的图像和频谱
im_filtered = imfilter(im, H, 'replicate');
imshow(im_filtered);
freqz2(H);
```
6. 高斯高通滤波:
```matlab
% 读取图像
im = imread('image.jpg');
imshow(im);
% 生成高斯高通滤波器
D0 = 50;
H = fspecial('gaussian',size(im),D0);
H = 1 - H;
% 应用滤波器并显示滤波后的图像和频谱
im_filtered = imfilter(im, H, 'replicate');
imshow(im_filtered);
freqz2(H);
```
7. 同态滤波:
```matlab
% 读取图像
im = imread('image.jpg');
imshow(im);
% 对图像取对数
im_log = log(double(im)+1);
% 对图像进行高斯滤波
H = fspecial('gaussian',size(im),50);
im_log_filtered = imfilter(im_log,H,'replicate');
% 恢复图像
im_filtered = exp(im_log_filtered)-1;
% 显示滤波前后的图像和频谱
imshow(im_filtered);
freqz2(H);
```
希望这些代码对您有所帮助。