2013-06-29 5 views
0

У меня есть небольшая проблема. Я хочу реализовать гауссову свертку в C#, но она имеет (для некоторых целей) тот же результат, что и гауссовское размытие EmguCV (что также означает то же, что и OpenCV). Вычисление значения ядра всегда должно быть одинаковым при гауссовой свертке, единственное, что мне нужно знать, - это то, как реализация OpenCV вычисляет размер ядра. Я более подробно рассмотрел исходный код OpenCV, но у меня мало опыта в C++, поэтому я этого не нашел. Возможно, кто-нибудь еще может мне помочь. И есть ли другие изменения в реализации OpenCV для «оригинала»?Gaussian blur C# реализация (аналогично OpenCV)

+0

вопрос. вы спрашиваете 1. как стандартное отклонение выводится из параметра функции размытия (я предполагаю, что это то же самое) или 2. учитывая стандартное отклонение, какой размер ядра выбран? (я предполагаю наименьшее, что не повлияет на результат) –

ответ

1

Гауссовское размытие представляет собой свертку с гауссовым ядром определенного размера (это параметр).

Так шаги для свертки являются:

make Gaussian kernel 
convolve image 

Как я знаю, что OpenCV использует некоторые оптимизации, если размер ядра больше, чем заданное пороговое значение (я думаю, 7). Тогда свертка не выполняется в пространственной области, а в частотной области.

Шагов:

calculate result image size (needs to be power of 2 -> look at FFT) 
transform image to frequency domain (e.g. FFT) 
transform kernel to frequency domain (e.g. FFT) 
multiply those matrices (element by element) 
transform result matrix in spatial domain (e.g. inverse FFT) 
clip matrix (convolution in frequency domain is cyclic convolution) 

Если вы хотите просто базовую версию взглянуть на: классе GaussianBlur.cs в AForge.NET библиотеки (первый попытаться использовать класс, чтобы увидеть, что соответствует вашим потребностям) документ: следует уточнить

http://www.aforgenet.com/framework/docs/html/f074e0dd-865c-fd5f-ba0a-80e336a0eaea.htm