Лапласовы ядра высшего порядка в обработке изображений - PullRequest
0 голосов
/ 11 июня 2018

В литературе по цифровой обработке изображений вы найдете примеры ядер Лапласа относительно низкого порядка, обычно 3 или 5. Интересно, есть ли какой-нибудь общий способ построения ядер Лапласа или произвольный порядок?Ссылки и / или ссылки будут оценены.

1 Ответ

0 голосов
/ 11 июня 2018

Оператор Лапласа определяется как сумма вторых производных по каждой из осей изображения.(То есть это след матрицы Гессена):

  • I = (∂ 2 / ∂ x 2 + ∂ 2 / ∂ y 2 ) I

ТамЕсть два распространенных способа дискретизации:

  1. Используйте конечные различия.Производный оператор - это свертка с [1,-1] или [0.5,0,-0.5], второй производный оператор, применяющий свертку [1,-1] дважды, что приводит к свертке с [1,-2,1].

  2. Свернуть спроизводная ядра регуляризации.Оптимальным ядром регуляризации является гауссово, приводящее к лапласу оператора Гаусса.В результате получается точный Лаплас изображения, сглаженного ядром Гаусса.


Альтернативой является замена ядра регуляризации интерполяционным ядром.Мой бывший коллега опубликовал статью об этом методе:

A.Хаст, «Простая конструкция фильтра для производных первого и второго порядка с помощью подхода двойной фильтрации», Буквы распознавания образов 42 (1): 65-71, 2014 .

Он использовал«двойной фильтр», но с линейными фильтрами, которые всегда можно упростить до одной свертки.

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

В крайнем случае,возьмите идеальный интерполятор, функция sinc :

  • sinc ( x ) = sin (π x ) / π x

Его второе производное :

  • d 2 / d x 2 (sinc (π x )) = [(2 - π 2 x 2 ) sin(π x ) - 2π x cos (π x )] / (π x 3 )

То, что выбрано в 11 целочисленных местах, приводит к:

[ 0.08 -0.125 0.222 -0.5 2 -3 2 -0.5 0.222 -0.125 0.08 ]

Но обратите внимание, что нормализация здесь не верна, так как мы отсекаем бесконечно длинное ядро.Таким образом, лучше выбрать более короткое ядро, такое как ядро ​​кубического сплайна .


Второй альтернативой является вычисление оператора Лапласа через область Фурье.Это просто требует умножения на -π u 2 v 2 , с u и v частоты.

Это некоторый код MATLAB, который применяет этот фильтр к единичному импульсному изображению, приводя к изображению ядра размером 256x256:

[u,v] = meshgrid((-128:127)/256,(-128:127)/256);
Dxx = -4*(pi*u).^2;
Dyy = -4*(pi*v).^2;
L = Dxx + Dyy;
l = fftshift(ifft2(ifftshift(L)));
l = real(l);        % discard insignificant imaginary component (probably not necessary in MATLAB, but Octave leaves these values there)
l(abs(l)<1e-6) = 0; % set near-zero values to zero

l здесь то же самое, что приведенный выше результат для идеального интерполятора, сложения вертикального и горизонтального вместе и нормализации для длины 256.


Наконец, я хотел бы отметить, что Лапласоператор очень чувствителен к шуму (высокие частоты значительно улучшены).Методы, обсуждаемые здесь, имеют смысл только для данных без носа (предположительно синтетических данных?).Для любых реальных данных я настоятельно рекомендую использовать Лапласа Гаусса.Это даст вам точный Лаплас сглаженного изображения.Сглаживание необходимо для предотвращения воздействия шума.С небольшим шумом вы можете использовать небольшую гауссовскую сигму (например, σ = 0,8).Это даст вам гораздо больше полезных результатов, чем любой другой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...