packages feed

CV-0.3.5.1: examples/dftPattern.hs

{-#LANGUAGE ScopedTypeVariables#-}
module Main where

import CV.ColourUtils
import CV.DFT
import CV.Drawing
import CV.Edges
import CV.Filters
import CV.Image
import CV.ImageOp
import CV.Pixelwise
import Control.Applicative hiding ((<**>),empty)
import qualified CV.ImageMath as IM
import qualified CV.Transforms as T
import Data.Complex
import CV.ImageMathOp
import CV.Thresholding

fi = fromIntegral

main = do
    Just x <- loadImage "d2.png"
    let  d  = dft x
         c (x,y) = circleOp (0:+0) (x,y)  23 Filled
         d2 = d <# c (155,215)
                <# c (400,205)
                <# c (180,365)
                <# c (425,370)
                <# c (40,370)
                <# c (540,215)
                <# c (200,150)
                <# c (375,432)
                <# c (260,130)
                <# c (315,450)
                <# c (262,520)
                <# c (315,66)
                <# c (375,44)
                <# c (202,540)
         mag = fst $ dftSplit $  d
         pat = gaussian (3,3) $ unsafeImageTo32F $ nibbly 0.01 0.001 $ gaussian (31,31) mag #- gaussian (9,9) mag
    saveImage "target.png"   $ logarithmicCompression $ fst $ dftSplit $ d2
    saveImage "dftmanip.png" $ montage (3,1) 0
        [
        x
        ,logarithmicCompression $ fst $ dftSplit $ (d #* dftMerge (pat,empty (getSize pat)))
        ,idft (d #* dftMerge (pat,empty (getSize pat)))
        ]