On 05/11/2013 01:56 PM, dmitry.cherkassov.dcherkas...@gmail.com wrote:
Hi. Can't find convolution kernel dimensions in the docs, neither they can be
specified via arguments.

Any ideas what they are?

A kernel centered at x with standard deviation σ has its minimum at floor(x-3*σ) and its maximum at ceiling(x+3*σ). (Same for y and its standard deviation.) So the width (resp. height) is

  1 + ceiling(3*σ) - floor(-3*σ)

This can be simplified, but I took it directly from the code and didn't want to risk getting it wrong. It's in "images/private/flomap-blur.rkt" if you want to look it up.

If you want more control over convolution, you should use `array-fft' from `math/array'. To get good performance from that, you'll want to use Typed Racket, at least for writing image processing functions. Here's a function that converts arrays to flomaps:

  (: array->flomap ((Array Real) -> flomap))
  (define (array->flomap arr)
    (let ([arr (array->flarray arr)])
      (define ds (array-shape arr))
      (match ds
        [(vector h w)  (flomap (flarray-data arr) 1 w h)]
        [(vector h w c)  (flomap (flarray-data arr) c w h)]
        [_  (error
             'array->flomap
             "expected array with 2 or 3 dimensions; given shape ~e"
             ds)])))

The other direction is similarly simple, because `FlArray' and `flomap' both store data in row-major order.

Neil ⊥

____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to