我正在尝试实现一种向Haskell中的图像添加高斯噪声的算法。这是我到目前为止编写的代码:
gaussianNoise
:: forall arr e cs . (MArray arr Y Double, IP.Array arr Y Double)
=> Image arr Y Double
-> Float -- ^ Mean
-> Float -- ^ Sigma
-> StdGen -- ^ Instance of RandomGen
-> Image arr Y Double
gaussianNoise image mean sigma g = accBin g
where
widthMax, heightMax :: Int
widthMax = ((rows image) - 1)
heightMax = ((cols image) - 1)
samples = normals' (mean, sigma) g
-- need samples to be resized to widthMax x heightMax
accBin :: [] -> Image arr Y Double -- This needs to be corrected
accBin samples = runST $
do arr <- I.thaw image
forM_ [0 .. widthMax] $ \x -> do
forM_ [0 .. heightMax] $ \y -> do
let px = ( (I.index image (x, y)) + (PixelX (fromIntegral (samples ! (x, y) ) )) )
I.write arr (x, y) px
freeze arr
我想使用以下软件包https://github.com/lehins/hip。
我很困惑如何将samples
调整为2d格式,然后在accBin中使用相同的格式。一些解释/实现此目的的正确代码将对我很有帮助。
谢谢!