修改填充处理图像程序
@ -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)
|
||||
|
BIN
Result_Photo_Filtering/1.All_Filtering.png
Normal file
After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 13 KiB |
BIN
Result_Photo_Filtering/1.Copy_Padded_Filtering.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 10 KiB |
BIN
Result_Photo_Filtering/1.No_Padded_Filtering.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 23 KiB |
BIN
Result_Photo_Filtering/1.Zero_Padded_Filtering.png
Normal file
After Width: | Height: | Size: 7.4 KiB |