hip-1.1.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

Description

 

Synopsis

Documentation

class (Eq cs, Enum cs, Show cs, Typeable cs) => ColorSpace cs where Source #

This class has all included color spaces installed into it and is also intended for implementing any other possible custom color spaces. Every instance of this class automatically installs an associated Pixel into Num, Fractional, Floating, Functor, Applicative and Foldable, which in turn make it possible to be used by the rest of the library.

Minimal complete definition

fromChannel, toElt, fromElt, getPxCh, chOp, pxOp, chApp, pxFoldMap, csColour

Associated Types

type PixelElt cs e Source #

Representation of a pixel, such that it can be an element of any Array. Which is usally a tuple of channels or a channel itself for single channel color spaces.

data Pixel cs e Source #

A concrete Pixel representation for a particular color space.

Methods

fromChannel :: e -> Pixel cs e Source #

Construt a pixel by replicating a same value among all of the channels.

toElt :: Pixel cs e -> PixelElt cs e Source #

Convert a Pixel to a representation suitable for storage as an unboxed element, usually a tuple of channels.

fromElt :: PixelElt cs e -> Pixel cs e Source #

Convert from an elemnt representation back to a Pixel.

getPxCh :: Pixel cs e -> cs -> e Source #

Retrieve Pixel's channel value

chOp :: (cs -> e' -> e) -> Pixel cs e' -> Pixel cs e Source #

Map a channel aware function over all Pixel's channels.

pxOp :: (e' -> e) -> Pixel cs e' -> Pixel cs e Source #

Map a function over all Pixel's channels.

chApp :: Pixel cs (e' -> e) -> Pixel cs e' -> Pixel cs e Source #

Function application to a Pixel.

pxFoldMap :: Monoid m => (e -> m) -> Pixel cs e -> m Source #

A pixel eqiuvalent of foldMap.

csColour :: cs -> AlphaColour Double Source #

Get a pure colour representation of a channel.

Instances

ColorSpace YCbCrA Source # 

Associated Types

type PixelElt YCbCrA e :: * Source #

data Pixel YCbCrA e :: * Source #

ColorSpace YCbCr Source # 

Associated Types

type PixelElt YCbCr e :: * Source #

data Pixel YCbCr e :: * Source #

Methods

fromChannel :: e -> Pixel YCbCr e Source #

toElt :: Pixel YCbCr e -> PixelElt YCbCr e Source #

fromElt :: PixelElt YCbCr e -> Pixel YCbCr e Source #

getPxCh :: Pixel YCbCr e -> YCbCr -> e Source #

chOp :: (YCbCr -> e' -> e) -> Pixel YCbCr e' -> Pixel YCbCr e Source #

pxOp :: (e' -> e) -> Pixel YCbCr e' -> Pixel YCbCr e Source #

chApp :: Pixel YCbCr (e' -> e) -> Pixel YCbCr e' -> Pixel YCbCr e Source #

pxFoldMap :: Monoid m => (e -> m) -> Pixel YCbCr e -> m Source #

csColour :: YCbCr -> AlphaColour Double Source #

ColorSpace RGBA Source # 

Associated Types

type PixelElt RGBA e :: * Source #

data Pixel RGBA e :: * Source #

Methods

fromChannel :: e -> Pixel RGBA e Source #

toElt :: Pixel RGBA e -> PixelElt RGBA e Source #

fromElt :: PixelElt RGBA e -> Pixel RGBA e Source #

getPxCh :: Pixel RGBA e -> RGBA -> e Source #

chOp :: (RGBA -> e' -> e) -> Pixel RGBA e' -> Pixel RGBA e Source #

pxOp :: (e' -> e) -> Pixel RGBA e' -> Pixel RGBA e Source #

chApp :: Pixel RGBA (e' -> e) -> Pixel RGBA e' -> Pixel RGBA e Source #

pxFoldMap :: Monoid m => (e -> m) -> Pixel RGBA e -> m Source #

csColour :: RGBA -> AlphaColour Double Source #

ColorSpace RGB Source # 

Associated Types

type PixelElt RGB e :: * Source #

data Pixel RGB e :: * Source #

Methods

fromChannel :: e -> Pixel RGB e Source #

toElt :: Pixel RGB e -> PixelElt RGB e Source #

fromElt :: PixelElt RGB e -> Pixel RGB e Source #

getPxCh :: Pixel RGB e -> RGB -> e Source #

chOp :: (RGB -> e' -> e) -> Pixel RGB e' -> Pixel RGB e Source #

pxOp :: (e' -> e) -> Pixel RGB e' -> Pixel RGB e Source #

chApp :: Pixel RGB (e' -> e) -> Pixel RGB e' -> Pixel RGB e Source #

pxFoldMap :: Monoid m => (e -> m) -> Pixel RGB e -> m Source #

csColour :: RGB -> AlphaColour Double Source #

ColorSpace YA Source # 

Associated Types

type PixelElt YA e :: * Source #

data Pixel YA e :: * Source #

Methods

fromChannel :: e -> Pixel YA e Source #

toElt :: Pixel YA e -> PixelElt YA e Source #

fromElt :: PixelElt YA e -> Pixel YA e Source #

getPxCh :: Pixel YA e -> YA -> e Source #

chOp :: (YA -> e' -> e) -> Pixel YA e' -> Pixel YA e Source #

pxOp :: (e' -> e) -> Pixel YA e' -> Pixel YA e Source #

chApp :: Pixel YA (e' -> e) -> Pixel YA e' -> Pixel YA e Source #

pxFoldMap :: Monoid m => (e -> m) -> Pixel YA e -> m Source #

csColour :: YA -> AlphaColour Double Source #

ColorSpace Y Source # 

Associated Types

type PixelElt Y e :: * Source #

data Pixel Y e :: * Source #

Methods

fromChannel :: e -> Pixel Y e Source #

toElt :: Pixel Y e -> PixelElt Y e Source #

fromElt :: PixelElt Y e -> Pixel Y e Source #

getPxCh :: Pixel Y e -> Y -> e Source #

chOp :: (Y -> e' -> e) -> Pixel Y e' -> Pixel Y e Source #

pxOp :: (e' -> e) -> Pixel Y e' -> Pixel Y e Source #

chApp :: Pixel Y (e' -> e) -> Pixel Y e' -> Pixel Y e Source #

pxFoldMap :: Monoid m => (e -> m) -> Pixel Y e -> m Source #

csColour :: Y -> AlphaColour Double Source #

ColorSpace HSIA Source # 

Associated Types

type PixelElt HSIA e :: * Source #

data Pixel HSIA e :: * Source #

Methods

fromChannel :: e -> Pixel HSIA e Source #

toElt :: Pixel HSIA e -> PixelElt HSIA e Source #

fromElt :: PixelElt HSIA e -> Pixel HSIA e Source #

getPxCh :: Pixel HSIA e -> HSIA -> e Source #

chOp :: (HSIA -> e' -> e) -> Pixel HSIA e' -> Pixel HSIA e Source #

pxOp :: (e' -> e) -> Pixel HSIA e' -> Pixel HSIA e Source #

chApp :: Pixel HSIA (e' -> e) -> Pixel HSIA e' -> Pixel HSIA e Source #

pxFoldMap :: Monoid m => (e -> m) -> Pixel HSIA e -> m Source #

csColour :: HSIA -> AlphaColour Double Source #

ColorSpace HSI Source # 

Associated Types

type PixelElt HSI e :: * Source #

data Pixel HSI e :: * Source #

Methods

fromChannel :: e -> Pixel HSI e Source #

toElt :: Pixel HSI e -> PixelElt HSI e Source #

fromElt :: PixelElt HSI e -> Pixel HSI e Source #

getPxCh :: Pixel HSI e -> HSI -> e Source #

chOp :: (HSI -> e' -> e) -> Pixel HSI e' -> Pixel HSI e Source #

pxOp :: (e' -> e) -> Pixel HSI e' -> Pixel HSI e Source #

chApp :: Pixel HSI (e' -> e) -> Pixel HSI e' -> Pixel HSI e Source #

pxFoldMap :: Monoid m => (e -> m) -> Pixel HSI e -> m Source #

csColour :: HSI -> AlphaColour Double Source #

ColorSpace Gray Source # 

Associated Types

type PixelElt Gray e :: * Source #

data Pixel Gray e :: * Source #

Methods

fromChannel :: e -> Pixel Gray e Source #

toElt :: Pixel Gray e -> PixelElt Gray e Source #

fromElt :: PixelElt Gray e -> Pixel Gray e Source #

getPxCh :: Pixel Gray e -> Gray -> e Source #

chOp :: (Gray -> e' -> e) -> Pixel Gray e' -> Pixel Gray e Source #

pxOp :: (e' -> e) -> Pixel Gray e' -> Pixel Gray e Source #

chApp :: Pixel Gray (e' -> e) -> Pixel Gray e' -> Pixel Gray e Source #

pxFoldMap :: Monoid m => (e -> m) -> Pixel Gray e -> m Source #

csColour :: Gray -> AlphaColour Double Source #

ColorSpace CMYKA Source # 

Associated Types

type PixelElt CMYKA e :: * Source #

data Pixel CMYKA e :: * Source #

Methods

fromChannel :: e -> Pixel CMYKA e Source #

toElt :: Pixel CMYKA e -> PixelElt CMYKA e Source #

fromElt :: PixelElt CMYKA e -> Pixel CMYKA e Source #

getPxCh :: Pixel CMYKA e -> CMYKA -> e Source #

chOp :: (CMYKA -> e' -> e) -> Pixel CMYKA e' -> Pixel CMYKA e Source #

pxOp :: (e' -> e) -> Pixel CMYKA e' -> Pixel CMYKA e Source #

chApp :: Pixel CMYKA (e' -> e) -> Pixel CMYKA e' -> Pixel CMYKA e Source #

pxFoldMap :: Monoid m => (e -> m) -> Pixel CMYKA e -> m Source #

csColour :: CMYKA -> AlphaColour Double Source #

ColorSpace CMYK Source # 

Associated Types

type PixelElt CMYK e :: * Source #

data Pixel CMYK e :: * Source #

Methods

fromChannel :: e -> Pixel CMYK e Source #

toElt :: Pixel CMYK e -> PixelElt CMYK e Source #

fromElt :: PixelElt CMYK e -> Pixel CMYK e Source #

getPxCh :: Pixel CMYK e -> CMYK -> e Source #

chOp :: (CMYK -> e' -> e) -> Pixel CMYK e' -> Pixel CMYK e Source #

pxOp :: (e' -> e) -> Pixel CMYK e' -> Pixel CMYK e Source #

chApp :: Pixel CMYK (e' -> e) -> Pixel CMYK e' -> Pixel CMYK e Source #

pxFoldMap :: Monoid m => (e -> m) -> Pixel CMYK e -> m Source #

csColour :: CMYK -> AlphaColour Double Source #

ColorSpace Binary Source # 

Associated Types

type PixelElt Binary e :: * Source #

data Pixel Binary e :: * Source #

class (ColorSpace (Opaque cs), ColorSpace cs) => Alpha cs where Source #

A color space that supports transparency.

Minimal complete definition

getAlpha, addAlpha, dropAlpha, opaque

Associated Types

type Opaque cs Source #

An corresponding opaque version of this color space.

Methods

getAlpha :: Pixel cs e -> e Source #

Get an alpha channel of a transparant pixel.

addAlpha :: e -> Pixel (Opaque cs) e -> Pixel cs e Source #

Add an alpha channel of an opaque pixel.

 addAlpha 0 (PixelHSI 1 2 3) == PixelHSIA 1 2 3 0

dropAlpha :: Pixel cs e -> Pixel (Opaque cs) e Source #

Convert a transparent pixel to an opaque one by dropping the alpha channel.

 dropAlpha (PixelRGBA 1 2 3 4) == PixelRGB 1 2 3

opaque :: cs -> Opaque cs Source #

Get a corresponding opaque channel type.

Instances

class Elevator e where Source #

A class with a set of convenient functions that allow for changing precision of channels within pixels, while scaling the values to keep them in an appropriate range.

>>> let rgb = PixelRGB 0.0 0.5 1.0 :: Pixel RGB Double
>>> toWord8 rgb
<RGB:(0|128|255)>

Minimal complete definition

toWord8, toWord16, toWord32, toWord64, toFloat, toDouble, fromDouble

class (Show arr, ColorSpace cs, Num (Pixel cs e), Functor (Pixel cs), Applicative (Pixel cs), Foldable (Pixel cs), Num e, Typeable e, Elt arr cs e) => Array arr cs e where Source #

Base array like representation for an image.

Associated Types

type Elt arr cs e :: Constraint Source #

Required array specific constraints for an array element.

data Image arr cs e Source #

Underlying image representation.

Methods

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

Create an Image by supplying it's dimensions and a pixel generating function.

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

Create a singleton image, required for various operations on images with a scalar.

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

Get dimensions of an image.

>>> frog <- readImageRGB "images/frog.jpg"
>>> frog
<Image VectorUnboxed RGB (Double): 200x320>
>>> dims frog
(200,320)

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

Map a function over a an image.

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

Map an index aware function over each pixel in an image.

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

Zip two images with a function

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

Zip two images with an index aware function

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

Traverse an image

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

Traverse two images.

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

Transpose an image

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

Backwards permutation of an image.

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

Construct an image from a nested rectangular shaped list of pixels. Length of an outer list will constitute m rows, while the length of inner lists - n columns. All of the inner lists must be the same length and greater than 0.

Instances

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

Associated Types

type Elt VU cs e :: Constraint Source #

data Image VU cs e :: * Source #

Methods

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

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

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

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

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

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

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

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

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

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

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

fromLists :: [[Pixel cs e]] -> Image VU cs e 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 #

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 #

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 #

class Array arr cs e => ManifestArray arr cs e where Source #

Array representation that is actually has real data stored in memory, hence allowing for image indexing, forcing pixels into computed state etc.

Minimal complete definition

index, deepSeqImage, (|*|), fold, eq

Methods

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

Get a pixel at i-th and j-th location.

>>> let grad_gray = makeImage (200, 200) (\(i, j) -> PixelY $ fromIntegral (i*j)) / (200*200)
>>> index grad_gray (20, 30) == PixelY ((20*30) / (200*200))
True

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

Make sure that an image is fully evaluated.

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

Perform matrix multiplication on two images. Inner dimensions must agree.

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

Undirected reduction of an image.

eq :: Eq (Pixel cs e) => Image arr cs e -> Image arr cs e -> Bool Source #

Pixelwise equality function of two images. Images are considered distinct if either images' dimensions or at least one pair of corresponding pixels are not the same. Used in defining an in instance for the Eq typeclass.

Instances

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

Methods

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

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

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

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

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

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

Methods

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 #

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

Methods

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 #

class ManifestArray arr cs e => SequentialArray arr cs e where Source #

Array representation that allows computation, which depends on some specific order, consequently making it possible to be computed only sequentially.

Minimal complete definition

foldl, foldr, mapM, mapM_, foldM, foldM_

Methods

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

Fold an image from the left in a row major order.

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

Fold an image from the right in a row major order.

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

Monading mapping over an image.

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

Monading mapping over an image. Result is discarded.

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

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

Instances

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

Methods

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

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

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

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

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

foldM_ :: (Functor m, Monad m) => (a -> Pixel cs e -> m a) -> a -> Image VU cs e -> 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 #

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 #

class ManifestArray arr cs e => MutableArray arr cs e where Source #

Array representation that supports mutation.

Minimal complete definition

mdims, thaw, freeze, new, read, write, swap

Associated Types

data MImage st arr cs e Source #

Methods

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

Get dimensions of a mutable image.

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

Yield a mutable copy of an image.

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

Yield an immutable copy of an image.

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

Create a mutable image with given dimensions. Pixels are likely uninitialized.

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

Yield the pixel at a given location.

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

Set a pixel at a given location.

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

Swap pixels at given locations.

Instances

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

Associated Types

data MImage st VU cs e :: * Source #

Methods

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

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

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

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

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

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

swap :: (Functor m, PrimMonad m) => MImage (PrimState m) VU cs e -> (Int, Int) -> (Int, Int) -> m () 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 #

class Exchangable arr' arr where Source #

Allows for changing an underlying image representation.

Minimal complete definition

exchange

Methods

exchange :: (Array arr' cs e, Array arr cs e) => arr -> Image arr' cs e -> Image arr cs e Source #

Exchange the underlying array representation of an image.

Instances

Exchangable arr arr Source #

Changing to the same array representation as before is disabled and exchange will behave simply as an identitity function.

Methods

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

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 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 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 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 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 #

defaultIndex :: ManifestArray arr cs e => Pixel cs e -> Image arr cs e -> (Int, Int) -> Pixel cs e Source #

Image indexing function that returns a default pixel if index is out of bounds.

borderIndex :: ManifestArray arr cs e => Border (Pixel cs e) -> Image arr cs e -> (Int, Int) -> Pixel cs e Source #

Image indexing function that uses a special border resolutions strategy for out of bounds pixels.

maybeIndex :: ManifestArray arr cs e => Image arr cs e -> (Int, Int) -> Maybe (Pixel cs e) Source #

Image indexing function that returns Nothing if index is out of bounds, Just px otherwise.

data Border px Source #

Approach to be used near the borders during various transformations. Whenever a function needs information not only about a pixel of interest, but also about it's neighbours, it will go out of bounds around the image edges, hence is this set of approaches that can be used in such situtation.

Constructors

Fill !px

Fill in a constant pixel.

           outside |  Image  | outside
(Fill 0) : 0 0 0 0 | 1 2 3 4 | 0 0 0 0
Wrap

Wrap around from the opposite border of the image.

           outside |  Image  | outside
Wrap :     1 2 3 4 | 1 2 3 4 | 1 2 3 4
Edge

Replicate the pixel at the edge.

           outside |  Image  | outside
Edge :     1 1 1 1 | 1 2 3 4 | 4 4 4 4
Reflect

Mirror like reflection.

           outside |  Image  | outside
Reflect :  4 3 2 1 | 1 2 3 4 | 4 3 2 1
Continue

Also mirror like reflection, but without repeating the edge pixel.

           outside |  Image  | outside
Continue : 1 4 3 2 | 1 2 3 4 | 3 2 1 4

handleBorderIndex Source #

Arguments

:: Border (Pixel cs e)

Border handling strategy.

-> (Int, Int)

Image dimensions

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

Image's indexing function.

-> (Int, Int)

(i, j) location of a pixel lookup.

-> Pixel cs e 

Border handling function. If (i, j) location is within bounds, then supplied lookup function will be used, otherwise it will be handled according to a supplied border strategy.