对二维图像进行理想低通滤波,给出代码
时间: 2023-12-04 09:05:15 浏览: 75
以下是对二维图像进行理想低通滤波的MATLAB代码:
```
% 读入图像
img = imread('image.jpg');
% 转为灰度图像
img = rgb2gray(img);
% 获取图像尺寸
[M,N] = size(img);
% 定义理想低通滤波器参数
D0 = 30;
% 中心点坐标
u = floor(M/2)+1;
v = floor(N/2)+1;
% 创建滤波器
H = zeros(M,N);
for i = 1:M
for j = 1:N
D = sqrt((i-u)^2+(j-v)^2);
if D<=D0
H(i,j) = 1;
end
end
end
% 傅里叶变换
F = fft2(double(img));
% 将低频部分移动到中心位置
F = fftshift(F);
% 点乘滤波器
G = F.*H;
% 逆傅里叶变换
output_img = ifft2(ifftshift(G));
% 显示结果
imshow(uint8(output_img));
```
注意:此代码仅供参考,具体实现可能因不同语言和环境而有所不同。更多细节请参考相关资料。
相关问题
对二维图像进行理想低通滤波的python代码
以下是用Python实现理想低通滤波的代码:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图片
img = cv2.imread('test.jpg', 0)
# 把图片转换为频域
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
# 低通滤波器
(w, h) = f.shape
center = (w // 2, h // 2)
r = 30
mask = np.zeros((w, h), np.uint8)
cv2.circle(mask, center, r, 1, -1)
# 进行频域滤波
fshift = fshift * mask
ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)
# 显示处理前后的图像
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122)
plt.imshow(iimg, cmap='gray')
plt.title('Low Pass Filtered Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
解释如下:
1. 首先读取了一张灰度图像 `test.jpg`,并把它转换为频域(`f` 表示变换后的频域,`fshift` 表示中心化后的频域)。
2. 接着定义了一个圆形低通滤波器,并将其作用于 `fshift`,相当于在频域中去除了高频部分。
3. 然后通过逆变换把处理后的频域图像 `ishift` 转换回空间域,并计算绝对值(虚部是噪声)得到最终的低通滤波后的图像 `iimg`。
4. 最后使用 `matplotlib` 库在窗口中同时显示处理前后的图像。
需要注意的是,此代码只是基于理想滤波器实现的低通滤波,因为理想滤波器在现实应用中有其局限性,对一些图像处理问题并不适用。为了在实际应用中取得更好的性能,需要根据实际情况选择合适的滤波器。
用Python对二维图像进行理想低通滤波,给出代码
以下是Python实现的二维图像理想低通滤波代码:
```
import numpy as np cv2
# 取图像
img = cv2.imread('.jpg')
# 转换为灰度图像
= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算图像的傅里叶变换fft = np.fft.fft2(gray)
# 将傅里叶变换中心移动到图像中心位置
fft_shift = np.fft.fftshift(fft)
# 设置理想低通滤波器阈值
D0 = 50
# 计算滤波器
h, w = gray.shape
mask = np.zeros((h, w), np.float32)
for i in range(h):
for j in range(w):
dist = np.sqrt((i - h/2)**2 + (j - w/2)**2)
if dist <= D0:
mask[i, j] = 1.0
# 滤波器与频谱相乘
fft_filter = fft_shift * mask
# 计算滤波器输出
filtered = np.fft.ifftshift(fft_filter)
filtered = np.fft.ifft2(filtered)
filtered = np.abs(filtered)
# 显示原图和滤波后图像
cv2.imshow('Original', gray)
cv2.imshow('Ideal Low Pass Filtered', filtered)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在使用该代码时,请注意将图片路径改为你自己的图片路径。
阅读全文