山乙建设公司网站,跨境电商怎么做无货源模式,写作网站最大,网站建设实验小结图像融合评估指标Python版 这篇博客利用Python把大部分图像融合指标基于图像融合评估指标复现了#xff0c;从而方便大家更好的使用Python进行指标计算#xff0c;以及一些I/O 操作。除了几个特征互信息的指标没有成功复现之外#xff0c;其他指标均可以通过这篇博客提到的P…图像融合评估指标Python版 这篇博客利用Python把大部分图像融合指标基于图像融合评估指标复现了从而方便大家更好的使用Python进行指标计算以及一些I/O 操作。除了几个特征互信息的指标没有成功复现之外其他指标均可以通过这篇博客提到的Python程序计算得到其中SSIM和MS_SSIM是基于PyTorch实现的可能无法与原来的程序保持一致同时使用了一些矩阵运算加速了Nabf和Qabf的计算。但不幸的是在计算VIF时设计大量的卷积运算而博主在Python中采用cipy.signal.convolve2d来替换MATLAB中的filter函数,导致时间消耗较大如果你不需要计算VIF可以直接注释掉相关语句 并设置VIF1即可。 在原来的MATLAB程序中由于没有充分考虑数据类型的影响在计算SD是会由于uint8数据类型的限制但是部分数据被截断在Python中已经解决了这个Bug同时也在原来的MATLAB版本中修正了这个问题。 在Python版的程序中只有计算EN和MI是使用的是int型数据其他指标均使用float型数据。此外除了计算MSE和PSNR时将数据归一化到[0,1]之外计算其他指标时数据范围均为[0,255]。 评估指标缩写信息熵EN空间频率SF标准差SD峰值信噪比PSNR均方误差MSE互信息MI视觉保真度VIF平均梯度AG相关系数CC差异相关和SCD基于梯度的融合性能Qabf结构相似度测量SSIM多尺度结构相似度测量MS-SSIM基于噪声评估的融合性能Nabf性能评估指标主要分为四类分别是基于信息论的评估指标主要包括** EN、MI、PSNR**、基于结构相似性的评估指标主要包括SSIM、MS_SSIM、MSE、基于图像特征的评估指标 主要包括SF、SD、AG基于人类视觉感知的评估指标主要包括VIF、以及基于源图像与生成图像的评估指标主要包括CC、SCD、Qabf、Nabf。 接下来是部分程序 单张图像测试程序: eval_one_image.py from PIL import Image
from Metric import *
from time import time
import warnings
warnings.filterwarnings(ignore)def evaluation_one(ir_name, vi_name, f_name):f_img Image.open(f_name).convert(L)ir_img Image.open(ir_name).convert(L)vi_img Image.open(vi_name).convert(L)f_img_int np.array(f_img).astype(np.int32)f_img_double np.array(f_img).astype(np.float32)ir_img_int np.array(ir_img).astype(np.int32)ir_img_double np.array(ir_img).astype(np.float32)vi_img_int np.array(vi_img).astype(np.int32)vi_img_double np.array(vi_img).astype(np.float32)EN EN_function(f_img_int)MI MI_function(ir_img_int, vi_img_int, f_img_int, gray_level256)SF SF_function(f_img_double)SD SD_function(f_img_double)AG AG_function(f_img_double)PSNR PSNR_function(ir_img_double, vi_img_double, f_img_double)MSE MSE_function(ir_img_double, vi_img_double, f_img_double)VIF VIF_function(ir_img_double, vi_img_double, f_img_double)CC CC_function(ir_img_double, vi_img_double, f_img_double)SCD SCD_function(ir_img_double, vi_img_double, f_img_double)Qabf Qabf_function(ir_img_double, vi_img_double, f_img_double)Nabf Nabf_function(ir_img_double, vi_img_double, f_img_double)SSIM SSIM_function(ir_img_double, vi_img_double, f_img_double)MS_SSIM MS_SSIM_function(ir_img_double, vi_img_double, f_img_double)return EN, MI, SF, AG, SD, CC, SCD, VIF, MSE, PSNR, Qabf, Nabf, SSIM, MS_SSIMif __name__ __main__:f_name rE:\Desktop\metric\Test\Results\TNO\GTF\01.pngir_name rE:\Desktop\metric\Test\datasets\TNO\ir\01.pngvi_name rE:\Desktop\metric\Test\datasets\TNO\vi\01.pngEN, MI, SF, AG, SD, CC, SCD, VIF, MSE, PSNR, Qabf, Nabf, SSIM, MS_SSIM evaluation_one(ir_name, vi_name, f_name)print(EN:, round(EN, 4))print(MI:, round(MI, 4))print(SF:, round(SF, 4))print(AG:, round(AG, 4))print(SD:, round(SD, 4))print(CC:, round(CC, 4))print(SCD:, round(SCD, 4))print(VIF:, round(VIF, 4))print(MSE:, round(MSE, 4))print(PSNR:, round(PSNR, 4))print(Qabf:, round(Qabf, 4))print(Nabf:, round(Nabf, 4))print(SSIM:, round(SSIM, 4))print(MS_SSIM:, round(MS_SSIM, 4))测试一个方法中所有图像指标的程序: eval_one_method.py import numpy as np
from PIL import Image
from Metric import *
from natsort import natsorted
from tqdm import tqdm
import os
import statistics
import warnings
from openpyxl import Workbook, load_workbook
from openpyxl.utils import get_column_letter
warnings.filterwarnings(ignore)def write_excel(excel_namemetric.xlsx, worksheet_nameVIF, column_index0, dataNone):try:workbook load_workbook(excel_name)except FileNotFoundError:# 文件不存在创建新的 Workbookworkbook Workbook()# 获取或创建一个工作表if worksheet_name in workbook.sheetnames:worksheet workbook[worksheet_name]else:worksheet workbook.create_sheet(titleworksheet_name)# 在指定列中插入数据column get_column_letter(column_index 1)for i, value in enumerate(data):cell worksheet[column str(i1)]cell.value value# 保存文件workbook.save(excel_name)def evaluation_one(ir_name, vi_name, f_name):f_img Image.open(f_name).convert(L)ir_img Image.open(ir_name).convert(L)vi_img Image.open(vi_name).convert(L)f_img_int np.array(f_img).astype(np.int32)f_img_double np.array(f_img).astype(np.float32)ir_img_int np.array(ir_img).astype(np.int32)ir_img_double np.array(ir_img).astype(np.float32)vi_img_int np.array(vi_img).astype(np.int32)vi_img_double np.array(vi_img).astype(np.float32)EN EN_function(f_img_int)MI MI_function(ir_img_int, vi_img_int, f_img_int, gray_level256)SF SF_function(f_img_double)SD SD_function(f_img_double)AG AG_function(f_img_double)PSNR PSNR_function(ir_img_double, vi_img_double, f_img_double)MSE MSE_function(ir_img_double, vi_img_double, f_img_double)VIF VIF_function(ir_img_double, vi_img_double, f_img_double)CC CC_function(ir_img_double, vi_img_double, f_img_double)SCD SCD_function(ir_img_double, vi_img_double, f_img_double)Qabf Qabf_function(ir_img_double, vi_img_double, f_img_double)Nabf Nabf_function(ir_img_double, vi_img_double, f_img_double)SSIM SSIM_function(ir_img_double, vi_img_double, f_img_double)MS_SSIM MS_SSIM_function(ir_img_double, vi_img_double, f_img_double)return EN, MI, SF, AG, SD, CC, SCD, VIF, MSE, PSNR, Qabf, Nabf, SSIM, MS_SSIMif __name__ __main__:with_mean TrueEN_list []MI_list []SF_list []AG_list []SD_list []CC_list []SCD_list []VIF_list []MSE_list []PSNR_list []Qabf_list []Nabf_list []SSIM_list []MS_SSIM_list []filename_list []dataset_name test_imgsir_dir os.path.join(..\datasets, dataset_name, ir)vi_dir os.path.join(..\datasets, dataset_name, vi)Method SeAFusionf_dir os.path.join(..\Results, dataset_name, Method)save_dir ..\Metricos.makedirs(save_dir, exist_okTrue)metric_save_name os.path.join(save_dir, metric_{}_{}.xlsx.format(dataset_name, Method))filelist natsorted(os.listdir(ir_dir))eval_bar tqdm(filelist)for _, item in enumerate(eval_bar):ir_name os.path.join(ir_dir, item)vi_name os.path.join(vi_dir, item)f_name os.path.join(f_dir, item)EN, MI, SF, AG, SD, CC, SCD, VIF, MSE, PSNR, Qabf, Nabf, SSIM, MS_SSIM evaluation_one(ir_name, vi_name, f_name)EN_list.append(EN)MI_list.append(MI)SF_list.append(SF)AG_list.append(AG)SD_list.append(SD)CC_list.append(CC)SCD_list.append(SCD)VIF_list.append(VIF)MSE_list.append(MSE)PSNR_list.append(PSNR)Qabf_list.append(Qabf)Nabf_list.append(Nabf)SSIM_list.append(SSIM)MS_SSIM_list.append(MS_SSIM)filename_list.append(item)eval_bar.set_description({} | {}.format(Method, item))if with_mean:# 添加均值EN_list.append(np.mean(EN_list))MI_list.append(np.mean(MI_list))SF_list.append(np.mean(SF_list))AG_list.append(np.mean(AG_list))SD_list.append(np.mean(SD_list))CC_list.append(np.mean(CC_list))SCD_list.append(np.mean(SCD_list))VIF_list.append(np.mean(VIF_list))MSE_list.append(np.mean(MSE_list))PSNR_list.append(np.mean(PSNR_list))Qabf_list.append(np.mean(Qabf_list))Nabf_list.append(np.mean(Nabf_list))SSIM_list.append(np.mean(SSIM_list))MS_SSIM_list.append(np.mean(MS_SSIM_list))filename_list.append(mean)## 添加标准差EN_list.append(np.std(EN_list))MI_list.append(np.std(MI_list))SF_list.append(np.std(SF_list))AG_list.append(np.std(AG_list))SD_list.append(np.std(SD_list))CC_list.append(np.std(CC_list[:-1]))SCD_list.append(np.std(SCD_list))VIF_list.append(np.std(VIF_list))MSE_list.append(np.std(MSE_list))PSNR_list.append(np.std(PSNR_list))Qabf_list.append(np.std(Qabf_list))Nabf_list.append(np.std(Nabf_list))SSIM_list.append(np.std(SSIM_list))MS_SSIM_list.append(np.std(MS_SSIM_list))filename_list.append(std)## 保留三位小数EN_list [round(x, 3) for x in EN_list]MI_list [round(x, 3) for x in MI_list]SF_list [round(x, 3) for x in SF_list]AG_list [round(x, 3) for x in AG_list]SD_list [round(x, 3) for x in SD_list]CC_list [round(x, 3) for x in CC_list]SCD_list [round(x, 3) for x in SCD_list]VIF_list [round(x, 3) for x in VIF_list]MSE_list [round(x, 3) for x in MSE_list]PSNR_list [round(x, 3) for x in PSNR_list]Qabf_list [round(x, 3) for x in Qabf_list]Nabf_list [round(x, 3) for x in Nabf_list]SSIM_list [round(x, 3) for x in SSIM_list]MS_SSIM_list [round(x, 3) for x in MS_SSIM_list]EN_list.insert(0, {}.format(Method))MI_list.insert(0, {}.format(Method))SF_list.insert(0, {}.format(Method))AG_list.insert(0, {}.format(Method))SD_list.insert(0, {}.format(Method))CC_list.insert(0, {}.format(Method))SCD_list.insert(0, {}.format(Method))VIF_list.insert(0, {}.format(Method))MSE_list.insert(0, {}.format(Method))PSNR_list.insert(0, {}.format(Method))Qabf_list.insert(0, {}.format(Method))Nabf_list.insert(0, {}.format(Method))SSIM_list.insert(0, {}.format(Method))MS_SSIM_list.insert(0, {}.format(Method))write_excel(metric_save_name, EN, 0, filename_list)write_excel(metric_save_name, MI, 0, filename_list)write_excel(metric_save_name, SF, 0, filename_list)write_excel(metric_save_name, AG, 0, filename_list)write_excel(metric_save_name, SD, 0, filename_list)write_excel(metric_save_name, CC, 0, filename_list)write_excel(metric_save_name, SCD, 0, filename_list)write_excel(metric_save_name, VIF, 0, filename_list)write_excel(metric_save_name, MSE, 0, filename_list)write_excel(metric_save_name, PSNR, 0, filename_list)write_excel(metric_save_name, Qabf, 0, filename_list)write_excel(metric_save_name, Nabf, 0, filename_list)write_excel(metric_save_name, SSIM, 0, filename_list)write_excel(metric_save_name, MS_SSIM, 0, filename_list)write_excel(metric_save_name, EN, 1, EN_list)write_excel(metric_save_name, MI, 1, MI_list)write_excel(metric_save_name, SF, 1, SF_list)write_excel(metric_save_name, AG, 1, AG_list)write_excel(metric_save_name, SD, 1, SD_list)write_excel(metric_save_name, CC, 1, CC_list)write_excel(metric_save_name, SCD, 1, SCD_list)write_excel(metric_save_name, VIF, 1, VIF_list)write_excel(metric_save_name, MSE, 1, MSE_list)write_excel(metric_save_name, PSNR, 1, PSNR_list)write_excel(metric_save_name, Qabf, 1, Qabf_list)write_excel(metric_save_name, Nabf, 1, Nabf_list)write_excel(metric_save_name, SSIM, 1, SSIM_list)write_excel(metric_save_name, MS_SSIM, 1, MS_SSIM_list)测试一个数据集上所有对比算法的指标的程序eval_multi_method.py import numpy as np
from PIL import Image
from Metric import *
from natsort import natsorted
from tqdm import tqdm
import os
import statistics
import warnings
from openpyxl import Workbook, load_workbook
from openpyxl.utils import get_column_letter
warnings.filterwarnings(ignore)def write_excel(excel_namemetric.xlsx, worksheet_nameVIF, column_index0, dataNone):try:workbook load_workbook(excel_name)except FileNotFoundError:# 文件不存在创建新的 Workbookworkbook Workbook()# 获取或创建一个工作表if worksheet_name in workbook.sheetnames:worksheet workbook[worksheet_name]else:worksheet workbook.create_sheet(titleworksheet_name)# 在指定列中插入数据column get_column_letter(column_index 1)for i, value in enumerate(data):cell worksheet[column str(i1)]cell.value value# 保存文件workbook.save(excel_name)def evaluation_one(ir_name, vi_name, f_name):f_img Image.open(f_name).convert(L)ir_img Image.open(ir_name).convert(L)vi_img Image.open(vi_name).convert(L)f_img_int np.array(f_img).astype(np.int32)f_img_double np.array(f_img).astype(np.float32)ir_img_int np.array(ir_img).astype(np.int32)ir_img_double np.array(ir_img).astype(np.float32)vi_img_int np.array(vi_img).astype(np.int32)vi_img_double np.array(vi_img).astype(np.float32)EN EN_function(f_img_int)MI MI_function(ir_img_int, vi_img_int, f_img_int, gray_level256)SF SF_function(f_img_double)SD SD_function(f_img_double)AG AG_function(f_img_double)PSNR PSNR_function(ir_img_double, vi_img_double, f_img_double)MSE MSE_function(ir_img_double, vi_img_double, f_img_double)VIF VIF_function(ir_img_double, vi_img_double, f_img_double)CC CC_function(ir_img_double, vi_img_double, f_img_double)SCD SCD_function(ir_img_double, vi_img_double, f_img_double)Qabf Qabf_function(ir_img_double, vi_img_double, f_img_double)Nabf Nabf_function(ir_img_double, vi_img_double, f_img_double)SSIM SSIM_function(ir_img_double, vi_img_double, f_img_double)MS_SSIM MS_SSIM_function(ir_img_double, vi_img_double, f_img_double)return EN, MI, SF, AG, SD, CC, SCD, VIF, MSE, PSNR, Qabf, Nabf, SSIM, MS_SSIMif __name__ __main__:with_mean Truedataroot r../datasetsresults_root ../Resultsdataset TNOir_dir os.path.join(dataroot, dataset, ir)vi_dir os.path.join(dataroot, dataset, vi)f_dir os.path.join(results_root, dataset)save_dir ../Metricos.makedirs(save_dir, exist_okTrue)metric_save_name os.path.join(save_dir, metric_{}.xlsx.format(dataset))filelist natsorted(os.listdir(ir_dir))Method_list [GTF, DIDFuse, RFN-Nest, FusionGAN, TarDAL, UMF-CMGR, SeAFusion, SwinFusion, U2Fusion, PSF]for i, Method in enumerate(Method_list):EN_list []MI_list []SF_list []AG_list []SD_list []CC_list []SCD_list []VIF_list []MSE_list []PSNR_list []Qabf_list []Nabf_list []SSIM_list []MS_SSIM_list []filename_list []sub_f_dir os.path.join(f_dir, Method)eval_bar tqdm(filelist)for _, item in enumerate(eval_bar):ir_name os.path.join(ir_dir, item)vi_name os.path.join(vi_dir, item)f_name os.path.join(sub_f_dir, item)print(ir_name, vi_name, f_name)EN, MI, SF, AG, SD, CC, SCD, VIF, MSE, PSNR, Qabf, Nabf, SSIM, MS_SSIM evaluation_one(ir_name, vi_name, f_name)EN_list.append(EN)MI_list.append(MI)SF_list.append(SF)AG_list.append(AG)SD_list.append(SD)CC_list.append(CC)SCD_list.append(SCD)VIF_list.append(VIF)MSE_list.append(MSE)PSNR_list.append(PSNR)Qabf_list.append(Qabf)Nabf_list.append(Nabf)SSIM_list.append(SSIM)MS_SSIM_list.append(MS_SSIM)filename_list.append(item)eval_bar.set_description({} | {}.format(Method, item))if with_mean:# 添加均值EN_list.append(np.mean(EN_list))MI_list.append(np.mean(MI_list))SF_list.append(np.mean(SF_list))AG_list.append(np.mean(AG_list))SD_list.append(np.mean(SD_list))CC_list.append(np.mean(CC_list))SCD_list.append(np.mean(SCD_list))VIF_list.append(np.mean(VIF_list))MSE_list.append(np.mean(MSE_list))PSNR_list.append(np.mean(PSNR_list))Qabf_list.append(np.mean(Qabf_list))Nabf_list.append(np.mean(Nabf_list))SSIM_list.append(np.mean(SSIM_list))MS_SSIM_list.append(np.mean(MS_SSIM_list))filename_list.append(mean)## 添加标准差EN_list.append(np.std(EN_list))MI_list.append(np.std(MI_list))SF_list.append(np.std(SF_list))AG_list.append(np.std(AG_list))SD_list.append(np.std(SD_list))CC_list.append(np.std(CC_list[:-1]))SCD_list.append(np.std(SCD_list))VIF_list.append(np.std(VIF_list))MSE_list.append(np.std(MSE_list))PSNR_list.append(np.std(PSNR_list))Qabf_list.append(np.std(Qabf_list))Nabf_list.append(np.std(Nabf_list))SSIM_list.append(np.std(SSIM_list))MS_SSIM_list.append(np.std(MS_SSIM_list))filename_list.append(std)## 保留三位小数EN_list [round(x, 3) for x in EN_list]MI_list [round(x, 3) for x in MI_list]SF_list [round(x, 3) for x in SF_list]AG_list [round(x, 3) for x in AG_list]SD_list [round(x, 3) for x in SD_list]CC_list [round(x, 3) for x in CC_list]SCD_list [round(x, 3) for x in SCD_list]VIF_list [round(x, 3) for x in VIF_list]MSE_list [round(x, 3) for x in MSE_list]PSNR_list [round(x, 3) for x in PSNR_list]Qabf_list [round(x, 3) for x in Qabf_list]Nabf_list [round(x, 3) for x in Nabf_list]SSIM_list [round(x, 3) for x in SSIM_list]MS_SSIM_list [round(x, 3) for x in MS_SSIM_list]EN_list.insert(0, {}.format(Method))MI_list.insert(0, {}.format(Method))SF_list.insert(0, {}.format(Method))AG_list.insert(0, {}.format(Method))SD_list.insert(0, {}.format(Method))CC_list.insert(0, {}.format(Method))SCD_list.insert(0, {}.format(Method))VIF_list.insert(0, {}.format(Method))MSE_list.insert(0, {}.format(Method))PSNR_list.insert(0, {}.format(Method))Qabf_list.insert(0, {}.format(Method))Nabf_list.insert(0, {}.format(Method))SSIM_list.insert(0, {}.format(Method))MS_SSIM_list.insert(0, {}.format(Method))if i 0:write_excel(metric_save_name, EN, 0, filename_list)write_excel(metric_save_name, MI, 0, filename_list)write_excel(metric_save_name, SF, 0, filename_list)write_excel(metric_save_name, AG, 0, filename_list)write_excel(metric_save_name, SD, 0, filename_list)write_excel(metric_save_name, CC, 0, filename_list)write_excel(metric_save_name, SCD, 0, filename_list)write_excel(metric_save_name, VIF, 0, filename_list)write_excel(metric_save_name, MSE, 0, filename_list)write_excel(metric_save_name, PSNR, 0, filename_list)write_excel(metric_save_name, Qabf, 0, filename_list)write_excel(metric_save_name, Nabf, 0, filename_list)write_excel(metric_save_name, SSIM, 0, filename_list)write_excel(metric_save_name, MS_SSIM, 0, filename_list)write_excel(metric_save_name, EN, i 1, EN_list)write_excel(metric_save_name, MI, i 1, MI_list)write_excel(metric_save_name, SF, i 1, SF_list)write_excel(metric_save_name, AG, i 1, AG_list)write_excel(metric_save_name, SD, i 1, SD_list)write_excel(metric_save_name, CC, i 1, CC_list)write_excel(metric_save_name, SCD, i 1, SCD_list)write_excel(metric_save_name, VIF, i 1, VIF_list)write_excel(metric_save_name, MSE, i 1, MSE_list)write_excel(metric_save_name, PSNR, i 1, PSNR_list)write_excel(metric_save_name, Qabf, i 1, Qabf_list)write_excel(metric_save_name, Nabf, i 1, Nabf_list)write_excel(metric_save_name, SSIM, i 1, SSIM_list)write_excel(metric_save_name, MS_SSIM, i 1, MS_SSIM_list)在上述三个程序中均需调用 Metric.py函数 import numpy as np
from scipy.signal import convolve2d
from Qabf import get_Qabf
from Nabf import get_Nabf
import math
from ssim import ssim, ms_ssimdef EN_function(image_array):# 计算图像的直方图histogram, bins np.histogram(image_array, bins256, range(0, 255))# 将直方图归一化histogram histogram / float(np.sum(histogram))# 计算熵entropy -np.sum(histogram * np.log2(histogram 1e-7))return entropydef SF_function(image):image_array np.array(image)RF np.diff(image_array, axis0)RF1 np.sqrt(np.mean(np.mean(RF ** 2)))CF np.diff(image_array, axis1)CF1 np.sqrt(np.mean(np.mean(CF ** 2)))SF np.sqrt(RF1 ** 2 CF1 ** 2)return SFdef SD_function(image_array):m, n image_array.shapeu np.mean(image_array)SD np.sqrt(np.sum(np.sum((image_array - u) ** 2)) / (m * n))return SDdef PSNR_function(A, B, F):A A / 255.0B B / 255.0F F / 255.0m, n F.shapeMSE_AF np.sum(np.sum((F - A)**2))/(m*n)MSE_BF np.sum(np.sum((F - B)**2))/(m*n)MSE 0.5 * MSE_AF 0.5 * MSE_BFPSNR 20 * np.log10(255/np.sqrt(MSE))return PSNRdef MSE_function(A, B, F):A A / 255.0B B / 255.0F F / 255.0m, n F.shapeMSE_AF np.sum(np.sum((F - A)**2))/(m*n)MSE_BF np.sum(np.sum((F - B)**2))/(m*n)MSE 0.5 * MSE_AF 0.5 * MSE_BFreturn MSEdef fspecial_gaussian(shape, sigma):2D gaussian mask - should give the same result as MATLABs fspecial(gaussian,...)m, n [(ss-1.)/2. for ss in shape]y, x np.ogrid[-m:m1, -n:n1]h np.exp(-(x*x y*y) / (2.*sigma*sigma))h[h np.finfo(h.dtype).eps*h.max()] 0sumh h.sum()if sumh ! 0:h / sumhreturn hdef vifp_mscale(ref, dist):sigma_nsq 2num 0den 0for scale in range(1, 5):N 2**(4-scale1)1win fspecial_gaussian((N, N), N/5)if scale 1:ref convolve2d(ref, win, modevalid)dist convolve2d(dist, win, modevalid)ref ref[::2, ::2]dist dist[::2, ::2]mu1 convolve2d(ref, win, modevalid)mu2 convolve2d(dist, win, modevalid)mu1_sq mu1*mu1mu2_sq mu2*mu2mu1_mu2 mu1*mu2sigma1_sq convolve2d(ref*ref, win, modevalid) - mu1_sqsigma2_sq convolve2d(dist*dist, win, modevalid) - mu2_sqsigma12 convolve2d(ref*dist, win, modevalid) - mu1_mu2sigma1_sq[sigma1_sq0] 0sigma2_sq[sigma2_sq0] 0g sigma12 / (sigma1_sq 1e-10)sv_sq sigma2_sq - g*sigma12g[sigma1_sq1e-10] 0sv_sq[sigma1_sq1e-10] sigma2_sq[sigma1_sq1e-10]sigma1_sq[sigma1_sq1e-10] 0g[sigma2_sq1e-10] 0sv_sq[sigma2_sq1e-10] 0sv_sq[g0] sigma2_sq[g0]g[g0] 0sv_sq[sv_sq1e-10] 1e-10num np.sum(np.log10(1g**2 * sigma1_sq/(sv_sqsigma_nsq)))den np.sum(np.log10(1sigma1_sq/sigma_nsq))vifp num/denreturn vifpdef VIF_function(A, B, F):VIF vifp_mscale(A, F) vifp_mscale(B, F)return VIFdef CC_function(A,B,F):rAF np.sum((A - np.mean(A)) * (F - np.mean(F))) / np.sqrt(np.sum((A - np.mean(A)) ** 2) * np.sum((F - np.mean(F)) ** 2))rBF np.sum((B - np.mean(B)) * (F - np.mean(F))) / np.sqrt(np.sum((B - np.mean(B)) ** 2) * np.sum((F - np.mean(F)) ** 2))CC np.mean([rAF, rBF])return CCdef corr2(a, b):a a - np.mean(a)b b - np.mean(b)r np.sum(a * b) / np.sqrt(np.sum(a * a) * np.sum(b * b))return rdef SCD_function(A, B, F):r corr2(F - B, A) corr2(F - A, B)return rdef Qabf_function(A, B, F):return get_Qabf(A, B, F)def Nabf_function(A, B, F):return Nabf_function(A, B, F)def Hab(im1, im2, gray_level):hang, lie im1.shapecount hang * lieN gray_levelh np.zeros((N, N))for i in range(hang):for j in range(lie):h[im1[i, j], im2[i, j]] h[im1[i, j], im2[i, j]] 1h h / np.sum(h)im1_marg np.sum(h, axis0)im2_marg np.sum(h, axis1)H_x 0H_y 0for i in range(N):if (im1_marg[i] ! 0):H_x H_x im1_marg[i] * math.log2(im1_marg[i])for i in range(N):if (im2_marg[i] ! 0):H_x H_x im2_marg[i] * math.log2(im2_marg[i])H_xy 0for i in range(N):for j in range(N):if (h[i, j] ! 0):H_xy H_xy h[i, j] * math.log2(h[i, j])MI H_xy - H_x - H_yreturn MIdef MI_function(A, B, F, gray_level256):MIA Hab(A, F, gray_level)MIB Hab(B, F, gray_level)MI_results MIA MIBreturn MI_resultsdef AG_function(image):width image.shape[1]width width - 1height image.shape[0]height height - 1tmp 0.0[grady, gradx] np.gradient(image)s np.sqrt((np.square(gradx) np.square(grady)) / 2)AG np.sum(np.sum(s)) / (width * height)return AGdef SSIM_function(A, B, F):ssim_A ssim(A, F)ssim_B ssim(B, F)SSIM 1 * ssim_A 1 * ssim_Breturn SSIM.item()def MS_SSIM_function(A, B, F):ssim_A ms_ssim(A, F)ssim_B ms_ssim(B, F)MS_SSIM 1 * ssim_A 1 * ssim_Breturn MS_SSIM.item()def Nabf_function(A, B, F):Nabf get_Nabf(A, B, F)return Nabf完整demo下载地址https://download.csdn.net/download/fovever_/87530213
指标复现不易如果您使用了我们的程序请点赞收藏关注三连哦。
如果您觉得我们的程序对您的科研有用请移步Github:https://github.com/Linfeng-Tang 引用博主的相关文献整理不易您的支持是我们持续开源相关程序的动力。
如有疑问可添加博主QQ2458707789qq.com 请备注 学校姓名 否则不予通过好友申请。