MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: 2D Convolution


In article <f2emb3$2qn$1 at smc.vnet.net>, CKWong <CKWong.P at gmail.com> 
wrote:

> You need to re-define your Convolve like this:
> 
> Convolve[f_, g_, x_?NumberQ, y_?NumberQ] := NIntegrate[f[
>     xPrime, yPrime] *g[x - xPrime,
>   y - yPrime], {xPrime, -=A1=DB, =A1=DB}, {yPrime, -=A1=DB, =A1=DB}]
> 
> When calling Convolve, remember to place the kernel as the first
> function, e.g.,
> 
> Convolve[Gaussian2D, SHole, 0, 0]
> 
> You can plot the convolution like this:
> 
> Plot3D[Convolve[Gaussian2D, SHole, x, y] // Evaluate, {x, -HoleSize,
>       HoleSize}, {y, -HoleSize, HoleSize}]
> 
> However, this scheme is too slow for the round hole, for which case,
> it's better to switch to polar coordinates so that the angular part
> can be integrated by hand.

An alternative is to implement convolution using 2D Fourier and 
InverseFourier.  This may be faster, at least for large kernels and/or 
strange hole shapes.

Joe Gwinn


  • Prev by Date: how save newly created palette?
  • Next by Date: Re: Re: Re: Where is the Mathematica
  • Previous by thread: Re: 2D Convolution
  • Next by thread: Re: 2D Convolution