Как правильно нормализовать сверточный фильтр? - PullRequest
0 голосов
/ 26 ноября 2018

Я следую этим инструкциям.Но мои результаты не выходят правильно.Я использую это ядро:

-1 -1 -1
-1  8 -1
-1 -1 -1

Так что это означает, что сумма для данной свертки будет между -8 и 8, при условии, что я уже нормализовал свой ввод (0-255 -> 0-1),Тогда я делаю свертку.Затем я обнаружил, что мой показатель в процентах находится между минимальным и максимальным значениями.Например, в этом ядре мой минимум равен -8, а максимум равен 8. Так что, если значение равно 0, это 50%, что составляет 255 * .5 = 127,5.Но это явно не правильно, и это дает в основном серое изображение.Части, которые не серые, по-прежнему монохромные, хотя я запускаю ядро ​​для каждого канала отдельно.

enter image description here

    static int EvaluateKernelAtPoint(Bitmap bitmap, Matrix<double> kernel, int x, int y, Func<int, int, int> onGetIntensity)
    {
        double sum = 0;
        for (int a = 0; a < kernel.ColumnCount; a++)
        {
            for (int b = 0; b < kernel.RowCount; b++)
            {
                var xn = x + a - 1;
                var yn = y + b - 1;

                var intensity = (double)onGetIntensity(xn, yn); // returns R,G, or B color channel at that pixel
                intensity /= 255; // intensity is 0-1
                sum += intensity * kernel.At(a, b);
            }
        }

        var result = (sum - (-8d)) / (8d - (-8d)); // find the % between the min and max of -8 and 8
        result *= 255; // bring it back to 0-255
    }

1 Ответ

0 голосов
/ 26 ноября 2018

Нет правильного способа нормализации, потому что диапазон зависит от содержимого.

В хороших RGB-изображениях диапазон значений обычно составляет [0, 255], при условии, что динамический диапазон хорошо отрегулирован.

Но выходной сигнал этого фильтра Лапласа, который можно рассматривать как разницу между исходным изображением и его сглаженным вариантом, обычно имеет гораздо меньшую амплитуду.Но это зависит от локальных вариаций: уже гладкое изображение не даст отклика, а шум (особенно соль и перец) может дать огромные значения.

Вам также нужно решить, что делать с отрицательными значениями: shift такэтот ноль отображается как средне-серый, зажимается в ноль или принимает абсолютное значение.

Выбор минимального и максимального диапазона и отображение его на 0-255 является опцией, но приводит к «плавающему» нулю и неконтролируемомуусиление.Я бы предпочел установить постоянное усиление для набора изображений одного и того же происхождения.

И последнее, но не менее важное, выравнивание гистограммы - это еще один вариант.

...