对图像进行快速傅里叶变换,然后计算两张图像在频域空间的L1loss
import numpy as np
import torch.nn as nn
import torch
import cv2
def kuaisufuliyebianhuan(src_path):
img = cv2.imread(src_path, 0)
dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
mag, angle = cv2.cartToPolar(dft_shift[:, :, 0], dft_shift[:, :, 1], angleInDegrees=True)
mag = 20 * np.log(mag)
return mag
def main_loss(src_path01, src_path02):
mag01 = kuaisufuliyebianhuan(src_path01)
mag02 = kuaisufuliyebianhuan(src_path02)
loss = nn.L1Loss()
mag01 = torch.tensor(mag01, requires_grad=True)
mag02 = torch.tensor(mag02)
loss_value = loss(mag01, mag02)
return loss_value