Для удаления шума imagemagick предлагает оператор -noise <радиус>. Этот оператор такой же примитивный, как и все остальные операторы и в одиночку не представляет реальной ценности для обработки изображений. Предлагаю более эффективный рецепт (скрипт) для денойса:
$ cat imgblurdenoise.sh
#!/bin/bash
# Image denoise
function usage() {
cat << EOF
Usage: $0 {input image}
Sample: $0 example.jpg [Q]
EOF
}
if [ $# -eq 0 ] ; then
usage
exit 1
fi
src="$1"
if [ -z "$2" ]
then
tq="2"
else
tq="$2"
fi
if [ $tq -gt 48 ]
then
ted="48"
fi
trd=$(((1+2*$tq)))
ted=$(((2+$tq)))
tmpb="/tmp/temp-$$-b.ppm"
tmpd="/tmp/temp-$$-d.ppm"
tmpl="/tmp/temp-$$-l.ppm"
tmpn="/tmp/temp-$$-n.ppm"
tmps="/tmp/temp-$$-s.ppm"
tedb=$(((50-$ted)))
tedw=$(((50+$ted)))
tedbn=$(((50-(2500/$ted))))
tedwn=$(((50+(2500/$ted))))
convert -blur "$trd" "$src" "$tmpb"
echo "R=$trd"
echo "dL=$ted"
convert "$src" "$tmpb" -fx 'u[0]-u[1]+0.5' "$tmpd"
rm -f "$tmpb"
echo "LEVEL=($tedb,$tedw)"
convert "$tmpd" -level $tedb%,$tedw% "$tmpl"
rm -f "$tmpd"
echo "LEVEL=($tedbn,$tedwn)"
convert "$tmpl" -level $tedbn%,$tedwn% "$tmpn"
rm -f "$tmpl"
convert "$src" "$tmpn" -fx 'u[0]-u[1]+0.5' "$tmps"
rm -f "$tmpn"
convert -sharpen "$trd" "$tmps" "$src.dq$tq.png"
echo "R=$trd"
rm -f "$tmps"