我正在尝试为图像超分辨率训练深度学习模型,并且我想将PIQE 分数实现为损失函数。由于我将使用 pytorch 训练模型,因此我试图自己实现该算法的 Python 实现来计算 PIQE 分数。
作为第一步,我查看了piqe 的 MATLAB 实现(链接将您带到主页,但我正在查看源代码)以了解它是如何完成的,然后将其适应 Python。然而,有一件事情困扰着我。
PIQE 分数通过使用以下公式计算平均减去对比度归一化系数开始:
但是该步骤的 matlab 代码如下所示:
mu = imgaussfilt(ipImage,7/6,'FilterSize',7,'Padding','replicate');
sigma = sqrt(abs(imgaussfilt(ipImage.*ipImage,7/6,'FilterSize',7,'Padding','replicate') - mu.*mu));
imnorm = (ipImage-mu)./(sigma+1);
我对方差西格玛的计算感到困惑。在本文的算法中,在每个像素处,计算 7x7 邻域的平均值,然后从所述 7x7 邻域的每个值中减去。然后,将差值平方并乘以其对应的高斯权重 w(k,l)
相反,MATLAB 算法将高斯权重(通过使用imgausssfilt
)与平方像素值相乘,然后从该矩阵中减去平方均值,得到该操作的绝对值。如果我错了,请纠正我,但这不是错误使用 (ab)² = a² - b² 的情况吗?
基本上我的问题是您能否确认我之前所说的是否属实,或者我误解了 MATLAB 代码。提前致谢!