hip-1.2.0.0: Haskell Image Processing (HIP) Library.

Copyright(c) Alexey Kuleshevich 2016
LicenseBSD3
MaintainerAlexey Kuleshevich <lehins@yandex.ru>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Graphics.Image.Interface.Repa

Contents

Description

 

Synopsis

Construction

makeImage Source #

Arguments

:: Array RD cs Double 
=> (Int, Int)

(m rows, n columns) - dimensions of a new image.

-> ((Int, Int) -> Pixel cs Double)

A function that takes (i-th row, and j-th column) as an argument and returns a pixel for that location.

-> Image RD cs Double 

Create a delayed representation of an image.

fromLists :: Array RD cs e => [[Pixel cs e]] -> Image RD cs e Source #

Construct an image from a nested rectangular shaped list of pixels.

IO

readImageY :: FilePath -> IO (Image RD Y Double) Source #

Read image as luma (brightness).

readImageYA :: FilePath -> IO (Image RD YA Double) Source #

Read image as luma with Alpha channel.

readImageRGB :: FilePath -> IO (Image RD RGB Double) Source #

Read image in RGB colorspace.

readImageRGBA :: FilePath -> IO (Image RD RGBA Double) Source #

Read image in RGB colorspace with Alpha channel.

Computation

computeS :: (Array arr cs e, Array RS cs e, Exchangable arr RS) => Image arr cs e -> Image RS cs e Source #

Computes an image sequentially and ensures that all elements are evaluated.

computeP :: (Array arr cs e, Array RP cs e, Exchangable arr RP) => Image arr cs e -> Image RP cs e Source #

Computes an image in parallel and ensures that all elements are evaluated.

delay :: (ManifestArray arr cs e, Array RD cs e, Exchangable arr RD) => Image arr cs e -> Image RD cs e Source #

Delays an image, so further operations can be fused together.

Representation

data RD Source #

Repa Delayed Array representation, which allows for fusion of computation.

Constructors

RD 

Instances

Show RD Source # 

Methods

showsPrec :: Int -> RD -> ShowS #

show :: RD -> String #

showList :: [RD] -> ShowS #

Exchangable VU RD Source #

O(1) - Changes to Repa representation.

Methods

exchange :: (Array VU cs e, Array RD cs e) => RD -> Image VU cs e -> Image RD cs e Source #

Exchangable RS RD Source #

O(1) - Delays manifest array.

Methods

exchange :: (Array RS cs e, Array RD cs e) => RD -> Image RS cs e -> Image RD cs e Source #

Exchangable RP RD Source #

O(1) - Delays manifest array.

Methods

exchange :: (Array RP cs e, Array RD cs e) => RD -> Image RP cs e -> Image RD cs e Source #

Exchangable RD RS Source #

Computes delayed array sequentially.

Methods

exchange :: (Array RD cs e, Array RS cs e) => RS -> Image RD cs e -> Image RS cs e Source #

Exchangable RD RP Source #

Computes delayed array in parallel.

Methods

exchange :: (Array RD cs e, Array RP cs e) => RP -> Image RD cs e -> Image RP cs e Source #

Elt RD cs e => Array RD cs e Source # 

Associated Types

type Elt RD cs e :: Constraint Source #

data Image RD cs e :: * Source #

Methods

makeImage :: (Int, Int) -> ((Int, Int) -> Pixel cs e) -> Image RD cs e Source #

singleton :: Pixel cs e -> Image RD cs e Source #

dims :: Image RD cs e -> (Int, Int) Source #

map :: Array RD cs' e' => (Pixel cs' e' -> Pixel cs e) -> Image RD cs' e' -> Image RD cs e Source #

imap :: Array RD cs' e' => ((Int, Int) -> Pixel cs' e' -> Pixel cs e) -> Image RD cs' e' -> Image RD cs e Source #

zipWith :: (Array RD cs1 e1, Array RD cs2 e2) => (Pixel cs1 e1 -> Pixel cs2 e2 -> Pixel cs e) -> Image RD cs1 e1 -> Image RD cs2 e2 -> Image RD cs e Source #

izipWith :: (Array RD cs1 e1, Array RD cs2 e2) => ((Int, Int) -> Pixel cs1 e1 -> Pixel cs2 e2 -> Pixel cs e) -> Image RD cs1 e1 -> Image RD cs2 e2 -> Image RD cs e Source #

traverse :: Array RD cs' e' => Image RD cs' e' -> ((Int, Int) -> (Int, Int)) -> (((Int, Int) -> Pixel cs' e') -> (Int, Int) -> Pixel cs e) -> Image RD cs e Source #

traverse2 :: (Array RD cs1 e1, Array RD cs2 e2) => Image RD cs1 e1 -> Image RD cs2 e2 -> ((Int, Int) -> (Int, Int) -> (Int, Int)) -> (((Int, Int) -> Pixel cs1 e1) -> ((Int, Int) -> Pixel cs2 e2) -> (Int, Int) -> Pixel cs e) -> Image RD cs e Source #

transpose :: Image RD cs e -> Image RD cs e Source #

backpermute :: (Int, Int) -> ((Int, Int) -> (Int, Int)) -> Image RD cs e -> Image RD cs e Source #

fromLists :: [[Pixel cs e]] -> Image RD cs e Source #

data Image RD Source # 
data Image RD
type Elt RD cs e Source # 
type Elt RD cs e = (ColorSpace cs, Num e, Typeable * e, Elt e, Unbox e, Elt (PixelElt cs e), Unbox (PixelElt cs e), Elt (Pixel cs e), Unbox (Pixel cs e))

data RS Source #

Repa Unboxed Array representation, which is computed sequentially.

Constructors

RS 

Instances

Show RS Source # 

Methods

showsPrec :: Int -> RS -> ShowS #

show :: RS -> String #

showList :: [RS] -> ShowS #

Exchangable VU RS Source #

O(1) - Changes to Repa representation.

Methods

exchange :: (Array VU cs e, Array RS cs e) => RS -> Image VU cs e -> Image RS cs e Source #

Exchangable RS VU Source #

O(1) - Changes to Vector representation.

Methods

exchange :: (Array RS cs e, Array VU cs e) => VU -> Image RS cs e -> Image VU cs e Source #

Exchangable RS RP Source #

O(1) - Changes computation strategy.

Methods

exchange :: (Array RS cs e, Array RP cs e) => RP -> Image RS cs e -> Image RP cs e Source #

Exchangable RS RD Source #

O(1) - Delays manifest array.

Methods

exchange :: (Array RS cs e, Array RD cs e) => RD -> Image RS cs e -> Image RD cs e Source #

Exchangable RP RS Source #

O(1) - Changes computation strategy.

Methods

exchange :: (Array RP cs e, Array RS cs e) => RS -> Image RP cs e -> Image RS cs e Source #

Exchangable RD RS Source #

Computes delayed array sequentially.

Methods

exchange :: (Array RD cs e, Array RS cs e) => RS -> Image RD cs e -> Image RS cs e Source #

ManifestArray RS cs e => MutableArray RS cs e Source # 

Associated Types

data MImage st RS cs e :: * Source #

Methods

mdims :: MImage st RS cs e -> (Int, Int) Source #

thaw :: (Functor m, PrimMonad m) => Image RS cs e -> m (MImage (PrimState m) RS cs e) Source #

freeze :: (Functor m, PrimMonad m) => MImage (PrimState m) RS cs e -> m (Image RS cs e) Source #

new :: (Functor m, PrimMonad m) => (Int, Int) -> m (MImage (PrimState m) RS cs e) Source #

read :: (Functor m, PrimMonad m) => MImage (PrimState m) RS cs e -> (Int, Int) -> m (Pixel cs e) Source #

write :: (Functor m, PrimMonad m) => MImage (PrimState m) RS cs e -> (Int, Int) -> Pixel cs e -> m () Source #

swap :: (Functor m, PrimMonad m) => MImage (PrimState m) RS cs e -> (Int, Int) -> (Int, Int) -> m () Source #

ManifestArray RS cs e => SequentialArray RS cs e Source # 

Methods

foldl :: (a -> Pixel cs e -> a) -> a -> Image RS cs e -> a Source #

foldr :: (Pixel cs e -> a -> a) -> a -> Image RS cs e -> a Source #

makeImageM :: (Functor m, Monad m) => (Int, Int) -> ((Int, Int) -> m (Pixel cs e)) -> m (Image RS cs e) Source #

mapM :: (SequentialArray RS cs' e', Functor m, Monad m) => (Pixel cs' e' -> m (Pixel cs e)) -> Image RS cs' e' -> m (Image RS cs e) Source #

mapM_ :: (Functor m, Monad m) => (Pixel cs e -> m b) -> Image RS cs e -> m () Source #

foldM :: (Functor m, Monad m) => (a -> Pixel cs e -> m a) -> a -> Image RS cs e -> m a Source #

foldM_ :: (Functor m, Monad m) => (a -> Pixel cs e -> m a) -> a -> Image RS cs e -> m () Source #

Array RS cs e => ManifestArray RS cs e Source # 

Methods

unsafeIndex :: Image RS cs e -> (Int, Int) -> Pixel cs e Source #

index :: Image RS cs e -> (Int, Int) -> Pixel cs e Source #

deepSeqImage :: Image RS cs e -> a -> a Source #

(|*|) :: Image RS cs e -> Image RS cs e -> Image RS cs e Source #

fold :: (Pixel cs e -> Pixel cs e -> Pixel cs e) -> Pixel cs e -> Image RS cs e -> Pixel cs e Source #

eq :: Image RS cs e -> Image RS cs e -> Bool Source #

Elt RS cs e => Array RS cs e Source # 

Associated Types

type Elt RS cs e :: Constraint Source #

data Image RS cs e :: * Source #

Methods

makeImage :: (Int, Int) -> ((Int, Int) -> Pixel cs e) -> Image RS cs e Source #

singleton :: Pixel cs e -> Image RS cs e Source #

dims :: Image RS cs e -> (Int, Int) Source #

map :: Array RS cs' e' => (Pixel cs' e' -> Pixel cs e) -> Image RS cs' e' -> Image RS cs e Source #

imap :: Array RS cs' e' => ((Int, Int) -> Pixel cs' e' -> Pixel cs e) -> Image RS cs' e' -> Image RS cs e Source #

zipWith :: (Array RS cs1 e1, Array RS cs2 e2) => (Pixel cs1 e1 -> Pixel cs2 e2 -> Pixel cs e) -> Image RS cs1 e1 -> Image RS cs2 e2 -> Image RS cs e Source #

izipWith :: (Array RS cs1 e1, Array RS cs2 e2) => ((Int, Int) -> Pixel cs1 e1 -> Pixel cs2 e2 -> Pixel cs e) -> Image RS cs1 e1 -> Image RS cs2 e2 -> Image RS cs e Source #

traverse :: Array RS cs' e' => Image RS cs' e' -> ((Int, Int) -> (Int, Int)) -> (((Int, Int) -> Pixel cs' e') -> (Int, Int) -> Pixel cs e) -> Image RS cs e Source #

traverse2 :: (Array RS cs1 e1, Array RS cs2 e2) => Image RS cs1 e1 -> Image RS cs2 e2 -> ((Int, Int) -> (Int, Int) -> (Int, Int)) -> (((Int, Int) -> Pixel cs1 e1) -> ((Int, Int) -> Pixel cs2 e2) -> (Int, Int) -> Pixel cs e) -> Image RS cs e Source #

transpose :: Image RS cs e -> Image RS cs e Source #

backpermute :: (Int, Int) -> ((Int, Int) -> (Int, Int)) -> Image RS cs e -> Image RS cs e Source #

fromLists :: [[Pixel cs e]] -> Image RS cs e Source #

data Image RS Source # 
data Image RS = RSImage !(Image RD cs e)
data MImage st RS Source # 
data MImage st RS = MRSImage !(MImage st VU cs e)
type Elt RS cs e Source # 
type Elt RS cs e = (ColorSpace cs, Elt e, Unbox e, Num e, Typeable * e, Elt (PixelElt cs e), Unbox (PixelElt cs e), Elt (Pixel cs e), Unbox (Pixel cs e))

data RP Source #

Repa Unboxed Array representation, which is computed in parallel.

Constructors

RP 

Instances

Show RP Source # 

Methods

showsPrec :: Int -> RP -> ShowS #

show :: RP -> String #

showList :: [RP] -> ShowS #

Exchangable VU RP Source #

O(1) - Changes to Repa representation.

Methods

exchange :: (Array VU cs e, Array RP cs e) => RP -> Image VU cs e -> Image RP cs e Source #

Exchangable RS RP Source #

O(1) - Changes computation strategy.

Methods

exchange :: (Array RS cs e, Array RP cs e) => RP -> Image RS cs e -> Image RP cs e Source #

Exchangable RP VU Source #

O(1) - Changes to Vector representation.

Methods

exchange :: (Array RP cs e, Array VU cs e) => VU -> Image RP cs e -> Image VU cs e Source #

Exchangable RP RS Source #

O(1) - Changes computation strategy.

Methods

exchange :: (Array RP cs e, Array RS cs e) => RS -> Image RP cs e -> Image RS cs e Source #

Exchangable RP RD Source #

O(1) - Delays manifest array.

Methods

exchange :: (Array RP cs e, Array RD cs e) => RD -> Image RP cs e -> Image RD cs e Source #

Exchangable RD RP Source #

Computes delayed array in parallel.

Methods

exchange :: (Array RD cs e, Array RP cs e) => RP -> Image RD cs e -> Image RP cs e Source #

Array RP cs e => ManifestArray RP cs e Source # 

Methods

unsafeIndex :: Image RP cs e -> (Int, Int) -> Pixel cs e Source #

index :: Image RP cs e -> (Int, Int) -> Pixel cs e Source #

deepSeqImage :: Image RP cs e -> a -> a Source #

(|*|) :: Image RP cs e -> Image RP cs e -> Image RP cs e Source #

fold :: (Pixel cs e -> Pixel cs e -> Pixel cs e) -> Pixel cs e -> Image RP cs e -> Pixel cs e Source #

eq :: Image RP cs e -> Image RP cs e -> Bool Source #

Elt RP cs e => Array RP cs e Source # 

Associated Types

type Elt RP cs e :: Constraint Source #

data Image RP cs e :: * Source #

Methods

makeImage :: (Int, Int) -> ((Int, Int) -> Pixel cs e) -> Image RP cs e Source #

singleton :: Pixel cs e -> Image RP cs e Source #

dims :: Image RP cs e -> (Int, Int) Source #

map :: Array RP cs' e' => (Pixel cs' e' -> Pixel cs e) -> Image RP cs' e' -> Image RP cs e Source #

imap :: Array RP cs' e' => ((Int, Int) -> Pixel cs' e' -> Pixel cs e) -> Image RP cs' e' -> Image RP cs e Source #

zipWith :: (Array RP cs1 e1, Array RP cs2 e2) => (Pixel cs1 e1 -> Pixel cs2 e2 -> Pixel cs e) -> Image RP cs1 e1 -> Image RP cs2 e2 -> Image RP cs e Source #

izipWith :: (Array RP cs1 e1, Array RP cs2 e2) => ((Int, Int) -> Pixel cs1 e1 -> Pixel cs2 e2 -> Pixel cs e) -> Image RP cs1 e1 -> Image RP cs2 e2 -> Image RP cs e Source #

traverse :: Array RP cs' e' => Image RP cs' e' -> ((Int, Int) -> (Int, Int)) -> (((Int, Int) -> Pixel cs' e') -> (Int, Int) -> Pixel cs e) -> Image RP cs e Source #

traverse2 :: (Array RP cs1 e1, Array RP cs2 e2) => Image RP cs1 e1 -> Image RP cs2 e2 -> ((Int, Int) -> (Int, Int) -> (Int, Int)) -> (((Int, Int) -> Pixel cs1 e1) -> ((Int, Int) -> Pixel cs2 e2) -> (Int, Int) -> Pixel cs e) -> Image RP cs e Source #

transpose :: Image RP cs e -> Image RP cs e Source #

backpermute :: (Int, Int) -> ((Int, Int) -> (Int, Int)) -> Image RP cs e -> Image RP cs e Source #

fromLists :: [[Pixel cs e]] -> Image RP cs e Source #

data Image RP Source # 
data Image RP = RPImage !(Image RD cs e)
type Elt RP cs e Source # 
type Elt RP cs e = (ColorSpace cs, Elt e, Unbox e, Num e, Typeable * e, Elt (PixelElt cs e), Unbox (PixelElt cs e), Elt (Pixel cs e), Unbox (Pixel cs e))

Conversion

fromRepaArray :: Array D DIM2 (Pixel cs e) -> Image RD cs e Source #

Create an image from a 2D Repa delayed array.

toRepaArray :: (ColorSpace cs, Unbox (PixelElt cs e)) => Image RD cs e -> Array D DIM2 (Pixel cs e) Source #

Retrieve an underlying Repa array from RD image type.