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

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

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


person Tony Stark    schedule 30.06.2010    source источник


Ответы (3)


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

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

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

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

person tzaman    schedule 30.06.2010
comment
@tzaman: не могли бы вы рассказать, как оптимальная сигма зависит от разрешения изображения и размера моих объектов в пикселях? или укажите мне направление чтения, если вы можете. это именно то, что я ищу. также я оговорился насчет осветления; Я хотел сказать, что хочу, чтобы центр моих объектов был относительно ярким по сравнению со всем остальным. - person Tony Stark; 30.06.2010
comment
@hatorade: я расширил свой ответ; надеюсь, это прояснит ситуацию. - person tzaman; 30.06.2010
comment
@tzaman: на веб-сайте (imaging.mrc-cbu.cam.ac.uk /imaging/PrinciplesSmoothing) Я читал, что для измерения полной ширины на половине максимума (FWHM) есть уравнение. Справедлива ли эта концепция для ядра? Как и в ImageJ или Matlab, FWHM ядра относится к сигме таким же образом? Причина, по которой я спрашиваю, заключается в том, что обычно параметрами являются размеры ядра и сигма, но я продолжаю читать, что сигма влияет на размер ядра... - person Tony Stark; 30.06.2010
comment
@hatorade: Да - по сути, FWHM - это один из способов измерения распространения самой функции; так что это будет больше для более высокой сигмы. Вы могли бы, например, использовать его, чтобы определить, насколько большим должен быть размер матрицы для данного ядра должен. Хотя в некотором смысле вы можете выбрать размер и сигму отдельно, на самом деле размер должен быть привязан к сигме, чтобы он имел смысл - он должен быть достаточно большим, чтобы сохранить форму кривой; если вы обрежете его слишком сильно, он перестанет быть размытием по Гауссу и более или менее превратится в простой усредняющий фильтр. - person tzaman; 30.06.2010
comment
@tzaman: правильно. вы не знаете, есть ли уравнение для ширины основания нормальной кривой, а не на половине максимума? по сути, я знаю, насколько большим я хочу, чтобы было ядро, но я не знаю, как вычислить сигму из этого (поэтому идем от размера ядра -> сигма вместо сигма -> размер ядра) - person Tony Stark; 30.06.2010
comment
@hatorade: гауссианы по существу бесконечны, хотя они падают до незначительных значений по мере того, как вы продвигаетесь дальше, поэтому ширина основания не ограничена. Двойной FWHM или что-то в этом роде звучит разумно. Кроме того, даже при определенном размере ядра вы можете значительно варьировать сигму (для любого заданного ядра не существует лучшей сигмы) — подумайте об этом как о перемножении вашего гауссовского фильтра с блочным фильтром этих размеров. - person tzaman; 01.07.2010

Я использую это соглашение как эмпирическое правило. Если k - это размер ядра, чем sigma=(k-1)/6 . Это связано с тем, что длина 99-го процентиля гауссовой функции PDF составляет 6 сигма.

person Operator77    schedule 25.05.2020
comment
Это правильно, но я бы предложил противоположный подход: сначала определить наилучшую сигму, а затем найти такой размер ядра, чтобы оно содержало 6 сигм. Это связано с тем, что размер ядра является дискретной величиной (увеличивается с шагом 2, тогда как сигма является непрерывной переменной и, следовательно, может быть отрегулирована гораздо более точно. k=2*ceil(3*sigma)+1. - person Cris Luengo; 25.05.2020
comment
@CrisLuengo имеет смысл - person Operator77; 29.05.2020

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

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

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

person matlabit    schedule 30.01.2012