2011-05-04 14 views

cevap

17

iki 1D helezonlar yapmak için nelerdi söylemek mümkün olacaktır. Bunu örn. Matlab veya Octave:

octave-3.2.3:1>  sobel = [-1 0 1 ; -2 0 2 ; -1 0 1]; 
octave-3.2.3:2>  rank(sobel) 
ans = 1 
octave-3.2.3:3> 

Ayrıca bakınız: http://blogs.mathworks.com/steve/2006/11/28/separable-convolution-part-2/ - Bu ayrılabilir 2B çekirdeğinden iki 1D tanelerini ayıklamak için SVD (tekil değer ayrışımı) kullanılarak kapsar.

DSP.stackexchange.com Ayrıca bu sorunun bakınız: Fast/efficient way to decompose separable integer 2D filter coefficients

+1

SVD buradan gitmek için bir yoldur. Ayrılabilir (yani sıra 1) çekirdekler çok spesifiktir ve SVD, çekirdeğinizi (küçük) ayrılabilir olanların toplamına yaklaşmanızı sağlar. –

4

da daha büyük bir 2d konvolüsyonlar etkili olabilir simetrik ve eğri parça ve ayrı her bir kısım içine matris split.

+0

Netleştirmek için örnek verebilir misiniz? – mrgloom

+1

2d matrisinizi xy '+ u.v'' vektör ürünü olarak düzenleyebiliyorsanız, 2d konvolüsyonunun yerine 1d dizileri ve sütunlar dizisi yapabilir, sadece 4N çarpma/ekleme gereksinimi vardır N-^2. Eğer 'u.v' daha küçük bir boyuta sahipse, azalma daha büyüktür. Bu genellikle, ayırmayı kolaylaştırmak için matrisin yapısını önceden bildiğinizi varsayar. Ayrıca, hesaplama motorunuza da bağlı olacaktır - bir GPU başka bir yapıyı tercih edebilir. –