Divides a volume into softly overlapping gaussian windows.


function [masks,keepLocs] = maskGaussians( siz, M, width, offset, show )


 Divides a volume into softly overlapping gaussian windows.

 Return M^nd masks each of size siz.  Each mask represents a symmetric
 gaussian window, the locations are evenly spaced throughout the array of
 size siz.  For example, if M=2, then along each dimension d the location
 of each mask is either 1/4 or 3/4 of siz(d) and likewise if M=3 that mask
 is at 1/6,3/6, or 5/6 of siz(d). For higher M the locations are:
 1/2M,3/2M,...,M-1/2M. See examples below to visualize the masks.

 The std of each gaussian is set to be equal to the spacing between two
 adjacent masks multiplied by width.  Reducing the widths of the gaussians
 causes there to be less overlap between masks, but if the width is
 reduced too far certain pixels in between masks receive very little
 weight.  A desired property of the masks is that their coverage (the
 total weight placed on the pixel by all the masks) is approximately
 constant.  Typically, we settle for having the coverage be monotonically
 decreasing as we move away from the center.  (In reality the coverage
 oscilates as we move past peaks, it's just that the oscillations tend to
 be small).  The default value of the width is .6, which minimizes overlap
 while still providing good overall coverage. Values lower tend to produce
 noticeable oscillations in coverage.  offset in (-.5,1) controls the
 spacing of the locations.  Essentially, a positive offset moves the
 locations away from the center of the array and a negative offset moves
 the windows away from the center.  Using a positive offset gives better
 coverage to areas near the borders.

  [masks,keepLocs] = maskGaussians( siz, M, [width], [offset], [show] )
  siz         - dimensions of each mask
  M           - # mask locations along each dim [either scalar or vector]
  width       - [.6] widths of the gaussians
  offset      - [.1] spacing of mask centers; in (-.5,1)
  [show]      - [0] figure to use for display (no display if==0) (nd<=3)

  masks       - [see above] array of size [siz x M^nd]
  keepLocs    - logical array of all locs where masks is nonzero

  masks = maskGaussians( 100, 10, .6, -.1, 1 );  %1D
  masks = maskGaussians( [35 35], 3, .6, .1, 1 );  %2D
  masks = maskGaussians( [35 35 35], [2 2 4], .6, .1, 1 ); %3D


 Piotr's Computer Vision Matlab Toolbox      Version 2.0
 Copyright 2014 Piotr Dollar.  []
 Licensed under the Simplified BSD License [see external/bsd.txt]

Generated by m2html © 2003