Ядра лапласиана высшего порядка в обработке изображений

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

Что значит «заказ»? Порядок аппроксимации конечных разностей?

Ander Biguri 11.06.2018 12:37

Или ты про размер ядра? Если это так, ищите Лапласа Гауссова.

Cris Luengo 11.06.2018 15:44

@AnderBiguri Да, это то, что я имею в виду

Francesca Y 11.06.2018 16:31

@Cris Luengo Я полагаю, что размер ядра и порядок приближения - это одно и то же число. Во всяком случае, я имею в виду не LoG, а чистое ядро ​​Лапласа.

Francesca Y 11.06.2018 16:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
1 645
1

Ответы 1

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

  • Δ я = (∂2 / ∂Икс2 + ∂2 / ∂у2) я

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

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

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


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

A. Hast, "Simple filter design for first and second order derivatives by a double filtering approach", Pattern Recognition Letters 42(1):65-71, 2014.

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

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

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

  • sinc (Икс) = sin (πИкс) / πИкс

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

  • d2 / dИкс2 (sinc (πИкс)) = [(2 - π2Икс2) sin (πИкс) - 2πИкс cos (πRR_32_RπR)] /

Выборка из 11 целочисленных местоположений приводит к:

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

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


Вторая альтернатива - вычислить оператор Лапласа через область Фурье. Это просто требует умножения на -πты3v2, с ты и 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.


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

Крис, спасибо большое! Это действительно исчерпывающее объяснение! Да, в моем случае я имею дело с синтетическими изображениями, и мне нужно протестировать их с различными видами чистых лапласианов.

Francesca Y 11.06.2018 21:39

Другие вопросы по теме