Safe Haskell | None |
---|
Decoding of chain codes embedded in images.
- type Colour = PixelRGB8
- type PixelPos = (Int, Int, Int)
- type Position = (Int, Int)
- readRGB8 :: FilePath -> IO (Either String (Image PixelRGB8))
- onImage :: (forall a. Image a -> b) -> DynamicImage -> b
- findSpot :: Image PixelRGB8 -> Colour -> Maybe Position
- chainCode :: Image PixelRGB8 -> Colour -> Maybe [Position]
Documentation
type PixelPos = (Int, Int, Int)Source
Position of a pixel along with the clock
direction used by chainCode
.
onImage :: (forall a. Image a -> b) -> DynamicImage -> bSource
Generic application over DynamicImage
.
findSpot :: Image PixelRGB8 -> Colour -> Maybe PositionSource
Given an Image
parametrised by PixelRGB8
and given a
Colour
, we try to find the first pixel that matches the Colour
.
We start checking at the top left corner of the image, checking each row
fully before progressing a column: we check (width, height + 1)
then
(width, height + 1)
and so on where top left corner of the image is (0, 0)
and positive height is towards the bottom.
chainCode :: Image PixelRGB8 -> Colour -> Maybe [Position]Source
Given an Image
parametrised by PixelRGB8
and given a
Colour
, we try to find the chain code in the binary image which has
the passed in colour.
Note that only a single shape is accepted inside of the image. The
starting positing is determined using findSpot
.
The output list contains unique positions only: the beginning and
end position are not treated the same. If findSpot
fails, we return
Nothing
.