在图像超分辨率任务中,要计算test result与原图的psnr等,需要result和原图按按顺序一一对应,即在原图文件夹中与在RESULT文件夹中,两幅图的名称相同。但经过神经网络得到的test resullt的图片顺序比较随机,因此需要对其重新排序命名。
该程序效果是把source_path中的图重命名为与result_path中的相同,并将其转移到trans_path中。使用的图像匹配算法为欧式距离。
# -*- coding: UTF-8 -*-
import numpy as np
import cv2
import os
from PIL import Image
source_path=r'./urban'#被改名
result_path=r'/res'#参照
trans_path=r'./diff'
source_files = os.listdir(source_path)
source_files.sort(key=lambda x: int(x.split('.')[0]))
result_files = os.listdir(result_path)
result_files.sort(key=lambda y: int(y.split('.')[0]))
for source_file in source_files:
MinDis = float('inf')
source_img = Image.open((os.path.join(source_path,source_file)))
x = np.asarray(source_img)
for result_file in result_files:
result_img = Image.open((os.path.join(result_path,result_file)))
y = np.asarray(result_img)
if (x.shape[0]!=y.shape[0] or x.shape[1]!=y.shape[1]):
continue
EuDis = np.sqrt(np.sum(x - y)*(x - y))
EuDist = sum(EuDis)
EuDista = sum(EuDist)
EuDistan = sum(EuDista)
# print('EuDistan: '+ str(EuDistan))
# print("shape: ")
# print(EuDis.shape[0],EuDis.shape[1],EuDis.shape[2])
if (EuDistan < MinDis):
MinDis = EuDistan
number = int(result_file.split('.')[0])
# print('最小欧拉距离: '+ str(MinDis))
os.rename(os.path.join(source_path,source_file),os.path.join(trans_path,"%d.png" %number))
需要注意的是,该程序准确率并非100% 。