2

我正在尝试为图像超分辨率训练深度学习模型,并且我想将PIQE 分数实现为损失函数。由于我将使用 pytorch 训练模型,因此我试图自己实现该算法的 Python 实现来计算 PIQE 分数。

作为第一步,我查看了piqe 的 MATLAB 实现(链接将您带到主页,但我正在查看源代码)以了解它是如何完成的,然后将其适应 Python。然而,有一件事情困扰着我。

PIQE 分数通过使用以下公式计算平均减去对比度归一化系数开始:

计算 MSCN 系数的公式

但是该步骤的 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 代码。提前致谢!

4

1 回答 1

2

我理解你为什么感到困惑,但两者都是对的。它使用经典身份

Var(X) = E [(XE(X))^2]= E(X^2) - E(X)^2

只需将您的 (I-mu)^2 相乘并将结果与​​ mu 的定义进行比较,然后您会看到它们取消了。

于 2020-12-07T20:02:09.247 回答