combineImage :: (Word8 -> Word8 -> Word8 -> Word8) -> RGBDW -> GreyDW
combineImage f arr = let sh@(Z :. y :. x :. _) = extent arr in fromFunction (Z :. y :. x) g
     where
        g (Z :. i :. j) = f r g b
            where
                r = arr ! (Z :. i :. j :. 0)
                g = arr ! (Z :. i :. j :. 1)
                b = arr ! (Z :. i :. j :. 2)

combineImage :: (Word8 -> Word8 -> Word8 -> Word8) -> RGBDW -> GreyDW
combineImage f arr = let sh@(Z :. y :. x :. _) = extent arr in fromFunction (Z :. y :. x) g
     where
        g (Z :. i :. j) = f r g b
            where
                r = arr ! (Z :. i :. j :. 0)
                g = arr ! (Z :. i :. j :. 1)
                b = arr ! (Z :. i :. j :. 2)

combineImage f arr = let sh@(Z :. y :. x :. _) = extent arr in fromFunction (Z :. y :. x) g
     where
        g (Z :. i :. j) = f r g b
            where
                r = arr ! (Z :. i :. j :. 0)
                g = arr ! (Z :. i :. j :. 1)
                b = arr ! (Z :. i :. j :. 2)
