完成填充+平滑滤波

This commit is contained in:
张梦南 2025-05-06 21:06:26 +08:00
parent ee59f5b227
commit 28c31c9aa2
5 changed files with 85 additions and 0 deletions

85
Filtering_Padding.py Normal file
View File

@ -0,0 +1,85 @@
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['simHei']
plt.rcParams['axes.unicode_minus'] = False
# 读取照片
image_zeropad = cv2.imread("file/zeropad.jpg", cv2.IMREAD_GRAYSCALE)
# 不填充
dft_no_padded = np.fft.fft2(image_zeropad)
shift_no_padded = np.fft.fftshift(dft_no_padded)
sm_no_padded = np.abs(shift_no_padded)
pa_no_padded = np.angle(shift_no_padded)
mag_no_padded = np.log(1 + np.abs(sm_no_padded))
image_no_padded_dft = np.multiply(mag_no_padded, np.exp(1j*pa_no_padded))
image_no_padded = np.abs(np.fft.ifft2(image_no_padded_dft))
# 零填充
rows, cols = image_zeropad.shape
pad_rows, pad_cols = rows * 2, cols * 2
padded_zero = np.zeros((pad_rows, pad_cols), dtype=image_zeropad.dtype)
padded_zero[:rows, :cols] = image_zeropad
dft_zero_padded = np.fft.fft2(padded_zero)
shift_zero_padded = np.fft.fftshift(dft_zero_padded)
sm_zero_padded = np.abs(shift_zero_padded)
pa_zero_padded = np.angle(shift_zero_padded)
mag_zero_padded = np.log(1 + np.abs(sm_zero_padded))
image_zero_padded_dft = np.multiply(mag_zero_padded, np.exp(1j*pa_zero_padded))
image_zero_padded = np.abs(np.fft.ifft2(image_zero_padded_dft))
# 原图填充
padded_copy = cv2.copyMakeBorder(image_zeropad, 0, rows, 0, cols, borderType=cv2.BORDER_REPLICATE)
dft_copy_padded = np.fft.fft2(padded_copy)
shift_copy_padded = np.fft.fftshift(dft_copy_padded)
sm_copy_padded = np.abs(shift_copy_padded)
pa_copy_padded = np.angle(shift_copy_padded)
mag_copy_padded = np.log(1 + np.abs(sm_copy_padded))
image_copy_padded_dft = np.multiply(mag_copy_padded, np.exp(1j*pa_copy_padded))
image_copy_padded = np.abs(np.fft.ifft2(image_copy_padded_dft))
# 进行平滑滤波(均值滤波)
kernel_size = (5, 5)
image_no_padded_blur = cv2.blur(image_no_padded, kernel_size)
image_zero_padded_blur = cv2.blur(image_zero_padded, kernel_size)
image_copy_padded_blur = cv2.blur(image_copy_padded, kernel_size)
# 展示图像
plt.subplot(2,3,1)
plt.imshow(image_no_padded, cmap='gray')
plt.title('不填充')
plt.axis('off')
plt.subplot(2,3,2)
plt.imshow(image_zero_padded, cmap='gray')
plt.title('零填充')
plt.axis('off')
plt.subplot(2,3,3)
plt.imshow(image_copy_padded, cmap='gray')
plt.title('原图填充')
plt.axis('off')
plt.subplot(2,3,4)
plt.imshow(image_no_padded_blur, cmap='gray')
plt.title('不填充+均值滤波')
plt.axis('off')
plt.subplot(2,3,5)
plt.imshow(image_zero_padded_blur, cmap='gray')
plt.title('零填充+均值滤波')
plt.axis('off')
plt.subplot(2,3,6)
plt.imshow(image_copy_padded_blur, cmap='gray')
plt.title('原图填充+均值滤波')
plt.axis('off')
plt.tight_layout()
plt.show()

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB