haskellrepa

Haskell Repa meaning of BoundFixed?


In the Repa package, there is a Boundary datatype:

data Boundary a
        = BoundFixed !a
        | BoundConst !a
        | BoundClamp
        deriving (Show)

I understand what is meant by BoundConst (cells outside of the array are treated as single value), and I understand what is meant by BoundClamp (cells outside of the array are the same values as the closest array cell).

What is meant by BoundFixed? The description is Use a fixed value for border regions. What is the "border region"? Are these all the edge cells?


Solution

  • Reading through the source code for mapStencil2 and partitionForStencil, it looks like the border region is any cell whose value would be computed using cells outside the input array. BoundConst uses a constant value outside the array as the input to the convolution when sampling cells outside the array. BoundFixed uses a constant value as the result any time the convolution would depend on a value outside the array.

    You could easily test this with a 3x3 identity convolution on a small image. BoundConst and BoundClamp shouldn't change the image at all. BoundFixed a would draw one cell a border on the image. BoundFixed with a 2x2 identity convolution should draw the border on only two sides of the image. I can't recommend using BoundFixed for anything other than drawing borders, since the same convolution would produce different results just because of the stencil size.