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

У меня есть 8-битное изображение, и я хочу отфильтровать его с помощью матрицы для обнаружения краев.Моя матрица ядра -

0  1  0
1 -4  1
0  1  0

Для некоторых индексов это дает мне отрицательное значение.Что мне с ними делать?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Ваше ядро ​​- это фильтр Лапласа.Применение его к изображению дает конечно-разностное приближение к оператору Лапласа. Оператор Лапласа сам по себе не является детектором кромок .

Но вы можете использовать его как строительный блок для детектора кромок: вам нужно обнаружить пересечение нуля, чтобы найти ребра (это детектор края Марра-Хилдрета ).Чтобы найти пересечение нуля, вам нужно иметь отрицательные значения.

Вы также можете использовать отфильтрованное изображение Лапласа для повышения резкости вашего изображения.Если вы вычтете его из исходного изображения, результатом будет изображение с более четкими краями и более четким ощущением.Для этого также важны отрицательные значения.

Для обоих этих применений ограничение результата операции, как предлагается в принятом ответе, является неправильным.Этот зажим устанавливает все отрицательные значения на 0. Это означает, что больше нет нулевых пересечений для поиска, поэтому вы не можете найти ребра, а для повышения резкости это означает, что одна сторона каждого ребра не будет заострена.

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

С другой стороны, если вы хотите отобразить результатОтфильтровав фильтр Лапласа на экране, вам придется сделать что-то чувственное со значениями пикселей.Общим в этом случае является добавление 128 к каждому пикселю.Это смещает ноль к средне-серому значению, показывает отрицательные значения как более темные, а положительные значения как более светлые.После добавления 128 значения выше 255 и ниже 0 могут быть обрезаны.Вы также можете дополнительно растянуть значения, если хотите избежать обрезки, например laplace / 2 + 128.

0 голосов
/ 28 октября 2018

Значения вне диапазона чрезвычайно распространены в JPEG.Обращается с ними, зажимая.

If X < 0 then X := 0 ;   
If X > 255 then X := 255 ;
...