| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
Main
- readImage :: Verbosity -> FilePath -> IO (Array DIM3 Word8)
- writeImage :: Int -> FilePath -> Array DIM3 Word8 -> IO ()
- writeGrey :: Int -> FilePath -> Array DIM2 Word8 -> IO ()
- colorImageExtent :: Array DIM3 Word8 -> (Int, Int)
- imageFloatFromByte :: (Shape sh, Elt a, IsFloating a) => Acc (Array sh Word8) -> Acc (Array sh a)
- imageByteFromFloat :: (Shape sh, Elt a, IsFloating a) => Acc (Array sh a) -> Acc (Array sh Word8)
- cycleLeftDim3 :: Exp DIM3 -> Exp DIM3
- cycleRightDim3 :: Exp DIM3 -> Exp DIM3
- separateChannels :: Elt a => Acc (Array DIM3 a) -> Acc (Array DIM3 a)
- interleaveChannels :: Elt a => Acc (Array DIM3 a) -> Acc (Array DIM3 a)
- fastRound :: (Elt i, IsIntegral i, Elt a, IsFloating a) => Exp a -> Exp i
- floatArray :: Acc (Array sh Float) -> Acc (Array sh Float)
- splitFraction :: (Elt a, IsFloating a) => Exp a -> (Exp Int, Exp a)
- type Channel ix a = Array ((ix :. Int) :. Int) a
- type ExpDIM2 ix = (Exp ix :. Exp Int) :. Exp Int
- type ExpDIM3 ix = ((Exp ix :. Exp Int) :. Exp Int) :. Exp Int
- unliftDim2 :: Slice ix => Exp ((ix :. Int) :. Int) -> ExpDIM2 ix
- indexLimit :: (Slice ix, Shape ix, Elt a) => Acc (Channel ix a) -> ExpDIM2 ix -> Exp a
- indexFrac :: (Slice ix, Shape ix, Elt a, IsFloating a) => Acc (Channel ix a) -> ((Exp ix :. Exp a) :. Exp a) -> Exp a
- rotateStretchMoveCoords :: (Elt a, IsFloating a) => (Exp a, Exp a) -> (Exp a, Exp a) -> (Exp Int, Exp Int) -> Acc (Channel Z (a, a))
- inBox :: (Elt a, IsNum a, IsScalar a) => (Exp a, Exp a) -> (Exp a, Exp a) -> Exp Bool
- validCoords :: (Elt a, IsFloating a) => (Exp Int, Exp Int) -> Acc (Channel Z (a, a)) -> Acc (Channel Z Bool)
- replicateChannel :: (Slice ix, Shape ix, Elt a) => Exp ((ix :. Int) :. Int) -> Acc (Channel Z a) -> Acc (Channel ix a)
- rotateStretchMove :: (Slice ix, Shape ix, Elt a, IsFloating a) => (Exp a, Exp a) -> (Exp a, Exp a) -> ExpDIM2 ix -> Acc (Channel ix a) -> (Acc (Channel Z Bool), Acc (Channel ix a))
- rotateLeftTop :: (Slice ix, Shape ix, Elt a, IsFloating a) => (Exp a, Exp a) -> Acc (Channel ix a) -> ((Acc (Scalar a), Acc (Scalar a)), Acc (Channel ix a))
- rotate :: (Slice ix, Shape ix, Elt a, IsFloating a) => (Exp a, Exp a) -> Acc (Channel ix a) -> Acc (Channel ix a)
- brightnessPlane :: (Slice ix, Shape ix) => Acc (Channel (ix :. Int) Float) -> Acc (Channel ix Float)
- rowHistogram :: Acc (Channel DIM1 Float) -> Acc (Array DIM1 Float)
- rotateHistogram :: Float -> Array DIM3 Word8 -> (Array DIM3 Word8, Array DIM1 Float)
- analyseRotations :: [Float] -> Array DIM3 Word8 -> IO ()
- differentiate :: (Elt a, IsNum a) => Acc (Array DIM1 a) -> Acc (Array DIM1 a)
- scoreRotation :: Float -> Array DIM3 Word8 -> Float
- findOptimalRotation :: [Float] -> Array DIM3 Word8 -> Float
- magnitudeSqr :: (Elt a, IsNum a) => Exp (Complex a) -> Exp a
- fourierTransformationRun :: Array DIM3 Word8 -> IO (Array DIM2 Word8)
- fourierTransformation :: Option -> FilePath -> Array DIM3 Word8 -> IO ()
- scoreSlopes :: (Elt a, IsFloating a) => (Exp Int, Exp Int) -> Acc (Channel Z (Complex a)) -> Acc (Array DIM1 a)
- radonAngle :: (Float, Float) -> Array DIM3 Word8 -> IO Float
- rotateManifest :: Float -> Array DIM3 Word8 -> Array DIM3 Float
- prepareOverlapMatching :: Int -> (Float, Array DIM3 Word8) -> ((Float, Float), Channel Z Float)
- ceilingPow2 :: Exp Int -> Exp Int
- pad :: Elt a => Exp a -> Exp DIM2 -> Acc (Channel Z a) -> Acc (Channel Z a)
- mulConj :: (Elt a, IsFloating a) => Exp (Complex a) -> Exp (Complex a) -> Exp (Complex a)
- fft2DGen :: (Elt e, Real e) => Mode DIM2 e a b -> DIM2 -> Transform DIM2 a b
- fft2DPlain :: (Elt e, Real e, Elt a, Elt b) => Mode DIM2 e a b -> Channel Z a -> Acc (Channel Z b)
- fft2D :: (Elt e, Real e, Elt a, Elt b) => Mode DIM2 e a b -> Int -> Int -> Acc (Channel Z a) -> Acc (Channel Z b)
- correlateImpossible :: (Elt a, Real a) => Acc (Channel Z a) -> Acc (Channel Z a) -> Acc (Channel Z a)
- removeDCOffset :: (Elt a, IsFloating a) => Acc (Channel Z a) -> Acc (Channel Z a)
- clearDCCoefficient :: (Elt a, IsFloating a) => Acc (Array DIM2 (Complex a)) -> Acc (Array DIM2 (Complex a))
- lowpass :: (Elt a, IsFloating a) => Exp Int -> Acc (Channel Z a) -> Acc (Channel Z a)
- highpass :: (Elt a, IsFloating a) => Exp Int -> Acc (Channel Z a) -> Acc (Channel Z a)
- correlatePaddedSimple :: (Elt a, Real a) => DIM2 -> Acc (Channel Z a) -> Acc (Channel Z a) -> Acc (Channel Z a)
- correlatePadded :: (Elt a, Real a) => DIM2 -> Acc (Channel Z a) -> Acc (Channel Z a) -> Acc (Channel Z a)
- wrap :: Exp Int -> Exp Int -> Exp Int -> Exp Int
- displacementMap :: Exp Int -> Exp Int -> Exp DIM2 -> Acc (Channel Z (Int, Int))
- attachDisplacements :: (Elt a, IsScalar a) => Exp Int -> Exp Int -> Acc (Channel Z a) -> Acc (Channel Z (a, (Int, Int)))
- minimumOverlapScores :: (Elt a, IsFloating a, IsScalar a) => ((Exp Int, Exp Int) -> Exp a -> Exp a) -> Exp Int -> (Exp Int, Exp Int) -> (Exp Int, Exp Int) -> Acc (Channel Z (a, (Int, Int))) -> Acc (Channel Z (a, (Int, Int)))
- allOverlaps :: DIM2 -> Exp Float -> Acc (Channel Z Float) -> Acc (Channel Z Float) -> Acc (Channel Z (Float, (Int, Int)))
- allOverlapsRun :: DIM2 -> Float -> Channel Z Float -> Channel Z Float -> Channel Z Word8
- optimalOverlap :: DIM2 -> Float -> Channel Z Float -> Channel Z Float -> (Float, (Int, Int))
- shrink :: (Slice ix, Shape ix, Elt a, IsFloating a) => GenDIM2 (Exp Int) -> Acc (Channel ix a) -> Acc (Channel ix a)
- type GenDIM2 a = (Z :. a) :. a
- shrinkFactors :: Integral a => DIM2 -> GenDIM2 a -> GenDIM2 a -> GenDIM2 a
- optimalOverlapBig :: DIM2 -> Float -> Channel Z Float -> Channel Z Float -> (Float, (Int, Int))
- clip :: (Slice ix, Shape ix, Elt a) => (Exp Int, Exp Int) -> (Exp Int, Exp Int) -> Acc (Channel ix a) -> Acc (Channel ix a)
- overlappingArea :: (Ord a, Num a) => GenDIM2 a -> GenDIM2 a -> (a, a) -> ((a, a), (a, a), (a, a))
- optimalOverlapBigFine :: DIM2 -> Float -> Channel Z Float -> Channel Z Float -> (Float, (Int, Int))
- optimalOverlapBigMulti :: DIM2 -> DIM2 -> Int -> Float -> Float -> Channel Z Float -> Channel Z Float -> [(Float, (Int, Int), (Int, Int))]
- overlapDifference :: (Slice ix, Shape ix, Elt a, IsFloating a) => (Exp Int, Exp Int) -> Acc (Channel ix a) -> Acc (Channel ix a) -> Acc (Scalar a)
- overlapDifferenceRun :: (Int, Int) -> Channel Z Float -> Channel Z Float -> Float
- overlap2 :: (Slice ix, Shape ix) => (Exp Int, Exp Int) -> (Acc (Channel ix Float), Acc (Channel ix Float)) -> Acc (Channel ix Float)
- composeOverlap :: (Int, Int) -> ((Float, Array DIM3 Word8), (Float, Array DIM3 Word8)) -> Array DIM3 Word8
- emptyCountCanvas :: (Slice ix, Shape ix) => ((ix :. Int) :. Int) -> (Channel Z Int, Channel ix Float)
- addToCountCanvas :: (Slice ix, Shape ix, Elt a, IsNum a) => (Acc (Channel Z Bool), Acc (Channel ix a)) -> (Acc (Channel Z Int), Acc (Channel ix a)) -> (Acc (Channel Z Int), Acc (Channel ix a))
- updateCountCanvas :: ((Float, Float), (Float, Float), Array DIM3 Word8) -> (Channel Z Int, Channel DIM1 Float) -> (Channel Z Int, Channel DIM1 Float)
- finalizeCountCanvas :: (Channel Z Int, Channel DIM1 Float) -> Array DIM3 Word8
- maybePlus :: Elt a => (Exp a -> Exp a -> Exp a) -> Exp (Bool, a) -> Exp (Bool, a) -> Exp (Bool, a)
- maskedMinimum :: (Shape ix, Elt a, IsScalar a) => Vector ix (Bool, a) -> Scalar ix (Bool, a)
- maskedMaximum :: (Shape ix, Elt a, IsScalar a) => Vector ix (Bool, a) -> Scalar ix (Bool, a)
- project :: (Elt a, IsFloating a) => Point2 (Exp a) -> (Point2 (Exp a), Point2 (Exp a)) -> (Exp Bool, Point2 (Exp a))
- distanceMapEdges :: (Elt a, IsFloating a) => Exp DIM2 -> Acc (Array DIM1 ((a, a), (a, a))) -> Acc (Channel Z a)
- distanceMapEdgesRun :: DIM2 -> Array DIM1 ((Float, Float), (Float, Float)) -> Channel Z Word8
- type Geometry a = Geometry Int a
- distanceMapBox :: (Elt a, IsFloating a) => Exp DIM2 -> Exp (Geometry a) -> Acc (Channel Z (Bool, (((a, (a, a)), (a, (a, a))), ((a, (a, a)), (a, (a, a))))))
- outerVector :: (Slice ix, Shape ix, Elt a, Elt b, Elt c) => (Exp a -> Exp b -> Exp c) -> Scalar ix a -> Vector Z b -> Vector ix c
- separateDistanceMap :: Elt a => Acc (Channel Z (Bool, ((a, a), (a, a)))) -> Acc (Array DIM3 (Bool, a))
- distanceMapBoxRun :: DIM2 -> ((Float, Float), (Float, Float), (Int, Int)) -> Channel Z Word8
- breakFusion :: Arrays a => Acc a -> Acc a
- array1FromList :: Elt a => [a] -> Array DIM1 a
- containedAnywhere :: (Elt a, IsFloating a) => Acc (Array DIM1 (Geometry a)) -> Acc (Array DIM3 (a, a)) -> Acc (Array DIM3 Bool)
- distanceMapContained :: (IsFloating a, Elt a) => Exp DIM2 -> Exp (Geometry a) -> Acc (Array DIM1 (Geometry a)) -> Acc (Channel Z a)
- distanceMapContainedRun :: DIM2 -> Geometry Float -> [Geometry Float] -> Channel Z Word8
- pixelCoordinates :: (Elt a, IsFloating a) => Exp DIM2 -> Acc (Channel Z (a, a))
- distanceMapPoints :: (Slice ix, Shape ix, Elt a, IsFloating a) => Acc (Array ix (a, a)) -> Acc (Array DIM1 (a, a)) -> Acc (Array ix a)
- distanceMapPointsRun :: DIM2 -> [Point2 Float] -> Channel Z Word8
- distanceMap :: (Elt a, IsFloating a) => Exp DIM2 -> Exp (Geometry a) -> Acc (Array DIM1 (Geometry a)) -> Acc (Array DIM1 (a, a)) -> Acc (Channel Z a)
- distanceMapRun :: DIM2 -> Geometry Float -> [Geometry Float] -> [Point2 Float] -> Channel Z Word8
- distanceMapGamma :: (Elt a, IsFloating a) => Exp a -> Exp DIM2 -> Exp (Geometry a) -> Acc (Array DIM1 (Geometry a)) -> Acc (Array DIM1 (a, a)) -> Acc (Channel Z a)
- emptyWeightedCanvas :: (Slice ix, Shape ix) => ((ix :. Int) :. Int) -> (Channel Z Float, Channel ix Float)
- addToWeightedCanvas :: (Slice ix, Shape ix, Elt a, IsNum a) => (Acc (Channel Z a), Acc (Channel ix a)) -> (Acc (Channel Z a), Acc (Channel ix a)) -> (Acc (Channel Z a), Acc (Channel ix a))
- updateWeightedCanvasMerged :: Geometry Float -> [Geometry Float] -> [Point2 Float] -> Array DIM3 Word8 -> (Channel Z Float, Channel DIM1 Float) -> (Channel Z Float, Channel DIM1 Float)
- updateWeightedCanvas :: Float -> Geometry Float -> [Geometry Float] -> [Point2 Float] -> Array DIM3 Word8 -> (Channel Z Float, Channel DIM1 Float) -> (Channel Z Float, Channel DIM1 Float)
- updateWeightedCanvasSplit :: Geometry Float -> [Geometry Float] -> [Point2 Float] -> Array DIM3 Word8 -> (Channel Z Float, Channel DIM1 Float) -> (Channel Z Float, Channel DIM1 Float)
- finalizeWeightedCanvas :: (Channel Z Float, Channel DIM1 Float) -> Array DIM3 Word8
- processOverlap :: Args -> [(Float, Array DIM3 Word8)] -> [((Int, (FilePath, ((Float, Float), Channel Z Float))), (Int, (FilePath, ((Float, Float), Channel Z Float))))] -> IO ([(Float, Float)], [((Float, Float), Array DIM3 Word8)])
- processOverlapRotate :: Args -> [(Float, Array DIM3 Word8)] -> [((Int, (FilePath, ((Float, Float), Channel Z Float))), (Int, (FilePath, ((Float, Float), Channel Z Float))))] -> IO ([(Float, Float)], [((Float, Float), Array DIM3 Word8)])
- process :: Args -> IO ()
- main :: IO ()
Documentation
imageFloatFromByte :: (Shape sh, Elt a, IsFloating a) => Acc (Array sh Word8) -> Acc (Array sh a) Source
imageByteFromFloat :: (Shape sh, Elt a, IsFloating a) => Acc (Array sh a) -> Acc (Array sh Word8) Source
fastRound :: (Elt i, IsIntegral i, Elt a, IsFloating a) => Exp a -> Exp i Source
splitFraction :: (Elt a, IsFloating a) => Exp a -> (Exp Int, Exp a) Source
indexFrac :: (Slice ix, Shape ix, Elt a, IsFloating a) => Acc (Channel ix a) -> ((Exp ix :. Exp a) :. Exp a) -> Exp a Source
rotateStretchMoveCoords :: (Elt a, IsFloating a) => (Exp a, Exp a) -> (Exp a, Exp a) -> (Exp Int, Exp Int) -> Acc (Channel Z (a, a)) Source
validCoords :: (Elt a, IsFloating a) => (Exp Int, Exp Int) -> Acc (Channel Z (a, a)) -> Acc (Channel Z Bool) Source
replicateChannel :: (Slice ix, Shape ix, Elt a) => Exp ((ix :. Int) :. Int) -> Acc (Channel Z a) -> Acc (Channel ix a) Source
rotateStretchMove :: (Slice ix, Shape ix, Elt a, IsFloating a) => (Exp a, Exp a) -> (Exp a, Exp a) -> ExpDIM2 ix -> Acc (Channel ix a) -> (Acc (Channel Z Bool), Acc (Channel ix a)) Source
rotateStretchMove rot mov
first rotate and stretches the image according to rot
and then moves the picture.
rotateLeftTop :: (Slice ix, Shape ix, Elt a, IsFloating a) => (Exp a, Exp a) -> Acc (Channel ix a) -> ((Acc (Scalar a), Acc (Scalar a)), Acc (Channel ix a)) Source
rotate :: (Slice ix, Shape ix, Elt a, IsFloating a) => (Exp a, Exp a) -> Acc (Channel ix a) -> Acc (Channel ix a) Source
brightnessPlane :: (Slice ix, Shape ix) => Acc (Channel (ix :. Int) Float) -> Acc (Channel ix Float) Source
scoreSlopes :: (Elt a, IsFloating a) => (Exp Int, Exp Int) -> Acc (Channel Z (Complex a)) -> Acc (Array DIM1 a) Source
prepareOverlapMatching :: Int -> (Float, Array DIM3 Word8) -> ((Float, Float), Channel Z Float) Source
fft2DPlain :: (Elt e, Real e, Elt a, Elt b) => Mode DIM2 e a b -> Channel Z a -> Acc (Channel Z b) Source
fft2D :: (Elt e, Real e, Elt a, Elt b) => Mode DIM2 e a b -> Int -> Int -> Acc (Channel Z a) -> Acc (Channel Z b) Source
correlateImpossible :: (Elt a, Real a) => Acc (Channel Z a) -> Acc (Channel Z a) -> Acc (Channel Z a) Source
removeDCOffset :: (Elt a, IsFloating a) => Acc (Channel Z a) -> Acc (Channel Z a) Source
clearDCCoefficient :: (Elt a, IsFloating a) => Acc (Array DIM2 (Complex a)) -> Acc (Array DIM2 (Complex a)) Source
correlatePaddedSimple :: (Elt a, Real a) => DIM2 -> Acc (Channel Z a) -> Acc (Channel Z a) -> Acc (Channel Z a) Source
correlatePadded :: (Elt a, Real a) => DIM2 -> Acc (Channel Z a) -> Acc (Channel Z a) -> Acc (Channel Z a) Source
attachDisplacements :: (Elt a, IsScalar a) => Exp Int -> Exp Int -> Acc (Channel Z a) -> Acc (Channel Z (a, (Int, Int))) Source
minimumOverlapScores :: (Elt a, IsFloating a, IsScalar a) => ((Exp Int, Exp Int) -> Exp a -> Exp a) -> Exp Int -> (Exp Int, Exp Int) -> (Exp Int, Exp Int) -> Acc (Channel Z (a, (Int, Int))) -> Acc (Channel Z (a, (Int, Int))) Source
Set all scores to zero within a certain border. Otherwise the matching algorithm will try to match strong bars at the borders that are actually digitalization artifacts.
allOverlaps :: DIM2 -> Exp Float -> Acc (Channel Z Float) -> Acc (Channel Z Float) -> Acc (Channel Z (Float, (Int, Int))) Source
shrink :: (Slice ix, Shape ix, Elt a, IsFloating a) => GenDIM2 (Exp Int) -> Acc (Channel ix a) -> Acc (Channel ix a) Source
optimalOverlapBig :: DIM2 -> Float -> Channel Z Float -> Channel Z Float -> (Float, (Int, Int)) Source
clip :: (Slice ix, Shape ix, Elt a) => (Exp Int, Exp Int) -> (Exp Int, Exp Int) -> Acc (Channel ix a) -> Acc (Channel ix a) Source
overlappingArea :: (Ord a, Num a) => GenDIM2 a -> GenDIM2 a -> (a, a) -> ((a, a), (a, a), (a, a)) Source
optimalOverlapBigFine :: DIM2 -> Float -> Channel Z Float -> Channel Z Float -> (Float, (Int, Int)) Source
optimalOverlapBigMulti :: DIM2 -> DIM2 -> Int -> Float -> Float -> Channel Z Float -> Channel Z Float -> [(Float, (Int, Int), (Int, Int))] Source
overlapDifference :: (Slice ix, Shape ix, Elt a, IsFloating a) => (Exp Int, Exp Int) -> Acc (Channel ix a) -> Acc (Channel ix a) -> Acc (Scalar a) Source
overlap2 :: (Slice ix, Shape ix) => (Exp Int, Exp Int) -> (Acc (Channel ix Float), Acc (Channel ix Float)) -> Acc (Channel ix Float) Source
composeOverlap :: (Int, Int) -> ((Float, Array DIM3 Word8), (Float, Array DIM3 Word8)) -> Array DIM3 Word8 Source
emptyCountCanvas :: (Slice ix, Shape ix) => ((ix :. Int) :. Int) -> (Channel Z Int, Channel ix Float) Source
addToCountCanvas :: (Slice ix, Shape ix, Elt a, IsNum a) => (Acc (Channel Z Bool), Acc (Channel ix a)) -> (Acc (Channel Z Int), Acc (Channel ix a)) -> (Acc (Channel Z Int), Acc (Channel ix a)) Source
updateCountCanvas :: ((Float, Float), (Float, Float), Array DIM3 Word8) -> (Channel Z Int, Channel DIM1 Float) -> (Channel Z Int, Channel DIM1 Float) Source
maybePlus :: Elt a => (Exp a -> Exp a -> Exp a) -> Exp (Bool, a) -> Exp (Bool, a) -> Exp (Bool, a) Source
project :: (Elt a, IsFloating a) => Point2 (Exp a) -> (Point2 (Exp a), Point2 (Exp a)) -> (Exp Bool, Point2 (Exp a)) Source
distanceMapEdges :: (Elt a, IsFloating a) => Exp DIM2 -> Acc (Array DIM1 ((a, a), (a, a))) -> Acc (Channel Z a) Source
distanceMapEdgesRun :: DIM2 -> Array DIM1 ((Float, Float), (Float, Float)) -> Channel Z Word8 Source
distanceMapBox :: (Elt a, IsFloating a) => Exp DIM2 -> Exp (Geometry a) -> Acc (Channel Z (Bool, (((a, (a, a)), (a, (a, a))), ((a, (a, a)), (a, (a, a)))))) Source
outerVector :: (Slice ix, Shape ix, Elt a, Elt b, Elt c) => (Exp a -> Exp b -> Exp c) -> Scalar ix a -> Vector Z b -> Vector ix c Source
separateDistanceMap :: Elt a => Acc (Channel Z (Bool, ((a, a), (a, a)))) -> Acc (Array DIM3 (Bool, a)) Source
breakFusion :: Arrays a => Acc a -> Acc a Source
We use it as a work-around.
Fusion of fold1 and replicate would be very welcome
but it seems to fail with current accelerate version.
array1FromList :: Elt a => [a] -> Array DIM1 a Source
containedAnywhere :: (Elt a, IsFloating a) => Acc (Array DIM1 (Geometry a)) -> Acc (Array DIM3 (a, a)) -> Acc (Array DIM3 Bool) Source
distanceMapContained :: (IsFloating a, Elt a) => Exp DIM2 -> Exp (Geometry a) -> Acc (Array DIM1 (Geometry a)) -> Acc (Channel Z a) Source
pixelCoordinates :: (Elt a, IsFloating a) => Exp DIM2 -> Acc (Channel Z (a, a)) Source
distanceMapPoints :: (Slice ix, Shape ix, Elt a, IsFloating a) => Acc (Array ix (a, a)) -> Acc (Array DIM1 (a, a)) -> Acc (Array ix a) Source
distanceMap :: (Elt a, IsFloating a) => Exp DIM2 -> Exp (Geometry a) -> Acc (Array DIM1 (Geometry a)) -> Acc (Array DIM1 (a, a)) -> Acc (Channel Z a) Source
For every pixel
it computes the distance to the closest point on the image part boundary
which lies in any other image.
The rationale is that we want to fade an image out,
wherever is another image that can take over.
Such a closest point can either be a perpendicular point
at one of the image edges,
or it can be an image corner
or an intersection between this image border and another image border.
The first kind of points is computed by distanceMapContained
and the second kind by distanceMapPoints.
We simply compute the distances to all special points
and chose the minimal distance.
distanceMapRun :: DIM2 -> Geometry Float -> [Geometry Float] -> [Point2 Float] -> Channel Z Word8 Source
distanceMapGamma :: (Elt a, IsFloating a) => Exp a -> Exp DIM2 -> Exp (Geometry a) -> Acc (Array DIM1 (Geometry a)) -> Acc (Array DIM1 (a, a)) -> Acc (Channel Z a) Source
emptyWeightedCanvas :: (Slice ix, Shape ix) => ((ix :. Int) :. Int) -> (Channel Z Float, Channel ix Float) Source
addToWeightedCanvas :: (Slice ix, Shape ix, Elt a, IsNum a) => (Acc (Channel Z a), Acc (Channel ix a)) -> (Acc (Channel Z a), Acc (Channel ix a)) -> (Acc (Channel Z a), Acc (Channel ix a)) Source
updateWeightedCanvasMerged :: Geometry Float -> [Geometry Float] -> [Point2 Float] -> Array DIM3 Word8 -> (Channel Z Float, Channel DIM1 Float) -> (Channel Z Float, Channel DIM1 Float) Source
updateWeightedCanvas :: Float -> Geometry Float -> [Geometry Float] -> [Point2 Float] -> Array DIM3 Word8 -> (Channel Z Float, Channel DIM1 Float) -> (Channel Z Float, Channel DIM1 Float) Source
updateWeightedCanvasSplit :: Geometry Float -> [Geometry Float] -> [Point2 Float] -> Array DIM3 Word8 -> (Channel Z Float, Channel DIM1 Float) -> (Channel Z Float, Channel DIM1 Float) Source
processOverlap :: Args -> [(Float, Array DIM3 Word8)] -> [((Int, (FilePath, ((Float, Float), Channel Z Float))), (Int, (FilePath, ((Float, Float), Channel Z Float))))] -> IO ([(Float, Float)], [((Float, Float), Array DIM3 Word8)]) Source