Является ли функция PIQE MATLAB неправильной?

Я пытаюсь обучить модель глубокого обучения сверхвысокому разрешению изображения и хочу реализовать оценку 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) на квадраты значений пикселей, а затем вычитает квадраты средних из этой матрицы, принимая абсолютные значения этой операции. Поправьте меня, если я ошибаюсь, но разве это не случай ошибочного использования (a-b)² = a² - b² ?

В основном мой вопрос заключается в том, не могли бы вы подтвердить, верно ли то, что я сказал ранее, или я неправильно истолковал код MATLAB. Заранее спасибо!


person Álvaro    schedule 07.12.2020    source источник
comment
Реальный вопрос: почему звонок abs?   -  person Cris Luengo    schedule 07.12.2020
comment
@CrisLuengo Вызов abs «необходим» для небольших отклонений, когда ошибки округления могут сделать E (X ^ 2) - E (X) ^ 2 отрицательным, поэтому я всегда предпочитаю использовать определение непосредственно при взятии квадрата в конце.   -  person Nicky Mattsson    schedule 08.12.2020
comment
@Ники: Это имеет смысл. Действительно, в этом случае не имеет значения, какое определение использовать, так что можно было бы также использовать (X-E(X))^2.   -  person Cris Luengo    schedule 08.12.2020


Ответы (1)


Я понимаю, почему вы смущены, но оба правы. Он использует классическое тождество

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

Просто умножьте ваше (I-mu)^2 и сравните результат с определением mu, тогда вы увидите, что они отменяются.

person Nicky Mattsson    schedule 07.12.2020
comment
Кажется, мне не помешало бы подвести итоги статистики :) Спасибо! - person Álvaro; 08.12.2020