Оптимальная сигма для гауссовой фильтрации изображения? - PullRequest
11 голосов
/ 30 июня 2010

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

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

Ответы [ 2 ]

16 голосов
/ 30 июня 2010

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

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

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

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

0 голосов
/ 30 января 2012

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

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

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

...