MATLAB的PIQE函数是否错误?

2024-06-16 10:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为图像超分辨率训练一个深度学习模型,我想把PIQE score作为一个损失函数来实现。因为我将使用pytorch来训练模型,所以我尝试用自己的Python实现算法来计算PIQE分数

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

PIQE分数首先通过以下公式计算平均减影对比度归一化系数:

Formula to calculate MSCN coefficients

但该步骤的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);

我对方差sigma的计算感到困惑。在本文的算法中,在每个像素处,计算7x7邻域的平均值,然后从所述7x7邻域的每个值中减去。然后,将差值平方并乘以其相应的高斯权重w(k,l)

相反,MATLAB算法将高斯加权(通过使用imgausssfilt)与平方像素值相乘,然后从该矩阵中减去平方平均值,取该运算的绝对值。如果我错了,请纠正我,但这不是一个错误使用(a-b)²=a²-b²的案例吗?

基本上,我的问题是,你能否确认我之前说的是真的,还是我误解了MATLAB代码。提前谢谢


Tags: 代码模型算法像素sigma分数邻域padding
1条回答
网友
1楼 · 发布于 2024-06-16 10:30:48

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

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

只需将你的(I-mu)^2相乘,并将结果与mu的定义进行比较,你就会看到它们被取消

相关问题 更多 >