Какая связь между сигмой и радиусом? Я читал, что сигма эквивалентна радиусу, я не вижу, как сигма выражается в пикселях. Или «радиус» - это просто название сигмы, не связанное с пикселями?
Здесь есть три вещи. Дисперсия, ( σ2 ), радиус и количество пикселей. Поскольку это двумерная гауссовская функция, имеет смысл говорить о ковариационной матрице . Как бы то ни было, эти три понятия слабо связаны.Σ
Прежде всего, двумерный гауссиан задается уравнением:
грамм( z ) = 1( 2 π)2| Σ |-------√е- 12( z - μ )TΣ- 1 (z - μ )
Где - вектор-столбец, содержащий координаты и на вашем изображении. Итак, и вектор - столбца кодифицирующего средних вашей гауссовой функции, в и направлениях . x y z = [ x y ] μ x y μ = [ μ x μ y ]ZИксYz = [ xY]μИксYμ = [ μИксμY]
Пример:
Теперь допустим, что мы установили ковариационную матрицу и . Я также установлю количество пикселей х . Кроме того, моя «сетка», в которой я оцениваю этот PDF, будет иметь значение от до как по и по . Это означает, что у меня разрешение сетки . Но это совершенно произвольно. С этими настройками я получу изображение функции плотности вероятности слева. Теперь, если я изменю «дисперсию» (на самом деле ковариацию), такую, чтоΣ = [ 1001]μ = [ 00]100100- 1010ИксY10 - ( - 10 )100= 0,2Σ = [ 9009] и оставьте все остальное таким же, я получаю изображение справа.
Количество пикселей остается одинаковым для обоих, х , но мы изменили дисперсию. Предположим, что вместо этого мы проводим тот же эксперимент, но вместо этого используем х пикселей, но я все еще бегал от до . Тогда моя сетка имеет разрешение . Если я использую те же ковариации, что и раньше, я получаю это:1001002020- 101010 - ( - 10 )20= 1
Вот как вы должны понимать взаимодействие между этими переменными. Если вам нужен код, я также могу опубликовать его здесь.
Как выбрать сигму?
Выбор дисперсионной / ковариационной матрицы вашего фильтра Гаусса чрезвычайно зависит от приложения. Нет правильного ответа. Это все равно что спросить, какую полосу пропускания выбрать для фильтра. Опять же, это зависит от вашего приложения. Как правило, вы хотите выбрать гауссов фильтр, чтобы обнулить значительное количество высокочастотных компонентов в вашем изображении. Одна вещь, которую вы можете сделать, чтобы получить хорошую меру, это вычислить 2D DFT вашего изображения и наложить его коэффициенты на ваше 2D гауссовое изображение. Это скажет вам, какие коэффициенты в значительной степени наказываются.
Например, если ваше гауссовское изображение имеет настолько широкую ковариацию, что оно охватывает много высокочастотных коэффициентов вашего изображения, то вам нужно уменьшить его ковариационные элементы.
Параметра сигма достаточно, чтобы определить размытие по Гауссу с непрерывной точки зрения. Однако на практике изображения и ядра свертки являются дискретными. Как выбрать оптимальное дискретное приближение непрерывного гауссова ядра?
Дискретное приближение будет ближе к непрерывному ядру Гаусса при использовании большего радиуса. Но это может происходить за счет дополнительной продолжительности вычислений.
В идеале, можно выбрать значение для сигмы, а затем вычислить радиус, который позволяет точно представить соответствующее непрерывное ядро Гаусса. Для данной ошибки аппроксимации, чем больше сигма, тем больше должен быть радиус.
Интересно, что это может стать очень сложным, чтобы понять это правильно. При построении гауссовой матрицы лучшее решение для выборки непрерывного ядра или есть лучшие приближения? Как нормализовать вычисленное дискретное ядро для учета усечения? и т.п.
В качестве ссылки, в Mathematica функция GaussianMatrix предлагает несколько способов вычисления гауссовой дискретной матрицы, например, с использованием дискретного приближения Бесселя. По умолчанию радиус = 2 * сигма, что означает, что при сигме = 1 матрица будет 5x5.
источник
Оказывается, что строки треугольника Паскаля очень хорошо аппроксимируют гауссиану и имеют практическое преимущество, заключающееся в том, что они имеют целочисленные значения, сумма которых равна степени 2 (мы можем хранить эти значения в точности как целые числа, значения с фиксированной запятой или числа с плавающей запятой). Например, скажем, мы хотим построить гауссово ядро 7x7, которое мы можем сделать, используя 7-ю строку треугольника Паскаля следующим образом:
Обратите внимание, что этот фильтр оказывает минимальное влияние на углы, оставаясь целочисленным. Вы можете использовать среднее значение 20/64, чтобы определить соответствующую сигму стандартного отклонения, которая в этом случае равна 64 / (20 * sqrt (2 * pi)) = 1,276 для приближенного гауссиана. Вы можете построить график Гаусса, чтобы увидеть, что это отлично подходит.
Таким образом, хорошей отправной точкой для определения разумного стандартного отклонения для ядра Гаусса является треугольник Паскаля ( биномиальные коэффициенты ) - для фильтра (N + 1) x (N + 1), соответствующего описанному выше использованию конструкции
GaussianMatrix [3] Wolfram Alpha просто использует r / 2 = 1,5. Как ни странно, GaussianMatrix [{3,1.276}] не дает того же 2D-фильтра, что и мой, и не является следующим для x, y между -3 и 3:
Я не уверен, почему нет? Мой 2D-фильтр отлично подходит.
источник