修改填充处理图像程序

This commit is contained in:
张梦南 2025-05-07 10:11:23 +08:00
parent dc7b8a5bc1
commit 87aa7ed50d
9 changed files with 13 additions and 32 deletions

View File

@ -1,5 +1,4 @@
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['simHei']
plt.rcParams['axes.unicode_minus'] = False
@ -7,42 +6,24 @@ 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))
# 设置填充区域大小
top, bottom, left, right = 50, 50, 50, 50
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))
# 不填充
image_no_padded = image_zeropad.copy()
# 零填充
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))
image_zero_padded = cv2.copyMakeBorder(
image_zeropad, top, bottom, left, right,
borderType=cv2.BORDER_CONSTANT,
value=[0, 0, 0]
)
# 原图填充
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))
image_copy_padded = cv2.copyMakeBorder(
image_zeropad, top, bottom, left, right,
borderType=cv2.BORDER_REPLICATE
)
# 进行平滑滤波(均值滤波)
kernel_size = (5, 5)

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB