Оптимальная сигма для гауссовой фильтрации изображения?

При применении размытия Gaussian к изображению обычно сигма является параметром (примеры включают Matlab и ImageJ).

Как узнать, что такое сигма? Существует ли математический способ определения оптимальной сигмы? В моем случае у меня есть некоторые объекты на ярких изображениях по сравнению с фоном, и мне нужно их вычислить. Я собираюсь применить фильтр Гаусса, чтобы сделать центр этих объектов еще ярче, что, надеюсь, облегчает их поиск. Как определить оптимальную сигму для этого?

Ответ 1

Там нет формулы для ее определения; оптимальная сигма будет зависеть от факторов изображения - прежде всего разрешения изображения и размера ваших объектов в нем (в пикселях).

Кроме того, обратите внимание, что фильтры Гаусса фактически не предназначены для яркого освещения; вам может понадобиться изучить методы максимизации контраста - звучит как нечто простое, как растяжение гистограммы, может хорошо работать для вас.

изменить: Больше объяснений - сигма в основном контролирует, как будет "жир" вашей функции ядра; более высокие значения сигмы размываются в более широком радиусе. Поскольку вы работаете с изображениями, большая сигма также заставляет вас использовать большую матрицу ядра для захвата достаточной энергии функции. Для вашего конкретного случая вы хотите, чтобы ваше ядро ​​было достаточно большим, чтобы покрыть большую часть объекта (чтобы оно было размытым), но не настолько велико, что оно начинает перекрывать несколько соседних объектов за раз - так что на самом деле разделение объектов также является фактор вместе с размером.

Поскольку вы упомянули MATLAB - вы можете взглянуть на различные гауссовские ядра с разными параметрами, используя функцию fspecial('gaussian', hsize, sigma), где hsize - размер ядра, а sigma - это, ну, сигма. Попробуйте изменить параметры, чтобы увидеть, как они меняются.

Ответ 2

Вы должны найти min/max функции G такой, что G (X, sigma), где X - это набор ваших наблюдений (в вашем случае, ваши значения оттенков серого изображения). Эта функция может быть тем, что поддерживает "порядок" интенсивностей ямге, например, это можно сделать с помощью 1-й производной изображения (как G),

fil = fspecial('sobel');
im = imfilter(I,fil);
imagesc(im);
colormap = gray;

это дает вам результат первой производной изображения, теперь вы хотите найти max sigma by максимизация G (X, сигма), это означает, что вы пытаетесь несколько сигм (пусть, в порядке возрастания), пока не достигнете сигмы, которая делает G максимальным. Это также можно сделать со второй производной.