Я пытаюсь использовать очень простой 2d БИХ-фильтр нижних частот (a может варьироваться от нуля до единицы), аналогичный
y' = -a*y + x
Как будто решено с помощью метода прямого Эйлера.
for(uint32_t row = 1; row < img.height(); ++row)
{
for(uint32_t col = 1; col < img.width(); ++col)
{
auto output_x = img_in(col, row) + img(col - 1, row) * (1.0f - a);
auto output_y = img_in(col, row) + img(col, row - 1) * (1.0f - a);
auto sum = 0.5f*(output_x + output_y);
img(col, row) = sum;
}
}
img_in - это исходное изображение, а img - это изображение, в которое выполняется запись.
Нормальный вывод для a = 0 с белым шумом на входе выглядит следующим образом:
Как можно видеть, сумма x-фильтра и y-фильтра является диагональным результатом. Есть ли уловка для решения этой проблемы? Я предполагаю, что проблема возникает из-за того, что аппроксимация производных - это не центральные различия, а обратные различия.
Я попытался заполнить img(col - 1, row)
также для компенсации, но затем линии вместо этого становятся вертикальными .