///|
pub fn add_salt_pepper(
  src : GrayImage,
  seed~ : UInt,
  amount_per_1000~ : Int,
) -> GrayImage {
  let rng = Rng::new(seed)
  let out = src.copy()
  let amount = clamp(amount_per_1000, low=0, high=1000)
  for y in 0.. GrayImage {
  let rng = Rng::new(seed)
  src.map(fn(v) { v + rng.signed(magnitude) })
}

///|
pub fn box_blur(src : GrayImage, radius : Int) -> GrayImage {
  let r = max_i(0, radius)
  let out = GrayImage::new(width=src.width, height=src.height)
  for y in 0.. GrayImage {
  let r = max_i(0, radius)
  let out = GrayImage::new(width=src.width, height=src.height)
  for y in 0.. GrayImage {
  let out = src.copy()
  out.fill_rect(rect, gray)
  out
}