patch-image-cuda

Safe HaskellNone
LanguageHaskell98

Main

Synopsis

Documentation

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

type Channel ix a = Array ((ix :. Int) :. Int) a Source

type ExpDIM2 ix = (Exp ix :. Exp Int) :. Exp Int Source

type ExpDIM3 ix = ((Exp ix :. Exp Int) :. Exp Int) :. Exp Int Source

unliftDim2 :: Slice ix => Exp ((ix :. Int) :. Int) -> ExpDIM2 ix Source

indexLimit :: (Slice ix, Shape ix, Elt a) => Acc (Channel ix a) -> ExpDIM2 ix -> 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

inBox :: (Elt a, IsNum a, IsScalar a) => (Exp a, Exp a) -> (Exp a, Exp a) -> Exp Bool 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

magnitudeSqr :: (Elt a, IsNum a) => Exp (Complex a) -> Exp a Source

pad :: Elt a => Exp a -> Exp DIM2 -> Acc (Channel Z a) -> Acc (Channel Z a) Source

mulConj :: (Elt a, IsFloating a) => Exp (Complex a) -> Exp (Complex a) -> Exp (Complex a) Source

fft2DGen :: (Elt e, Real e) => Mode DIM2 e a b -> DIM2 -> Transform DIM2 a b 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

lowpass :: (Elt a, IsFloating a) => Exp Int -> Acc (Channel Z a) -> Acc (Channel Z a) Source

highpass :: (Elt a, IsFloating a) => Exp Int -> 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.

shrink :: (Slice ix, Shape ix, Elt a, IsFloating a) => GenDIM2 (Exp Int) -> Acc (Channel ix a) -> Acc (Channel ix a) Source

type GenDIM2 a = (Z :. a) :. a 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

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

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

maybePlus :: Elt a => (Exp a -> Exp a -> Exp a) -> Exp (Bool, a) -> Exp (Bool, a) -> Exp (Bool, a) Source

maskedMinimum :: (Shape ix, Elt a, IsScalar a) => Vector ix (Bool, a) -> Scalar ix (Bool, a) Source

maskedMaximum :: (Shape ix, Elt a, IsScalar a) => Vector ix (Bool, a) -> Scalar ix (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

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.

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.

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

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

main :: IO () Source