其实是为了学期的大作业,就选了这题目,供大家参考。特别说明一下,附上几张效果图,并把报告贴上来了,只不过全是法文的,实在没空再去写一个中文的,如果有兴趣哪里看不懂,可以发邮件来问。
『计算机类』TER 'Creation de mosaique de photo' 【原创】
sujet de TER(学期末大作业):Creation de mosaique de photo' 马赛克重现图像
专业:Ingenieur Mathematique(university lyon1)
年级:Master 1
作者地址:conanbos@yahoo.com.cn
系统:linux version 2.4
开发环境:shell bash
系统支持库:ImageMagic6
说明:对原图像进行分析并切割,切割后的小像素图与图库中的图片进行色度分析,取得最优匹配,重新填补原图,形成最后马赛克效果。
效果图的逼近成度取决于图库信息量。
作业要求
源码:
#!/bin/bash
#check image size/if input image is not 1024x768 then exit programme
imagesize="$( identify -format "%wx%h" $1)"
if [ $imagesize != "1024x768" ]; then
echo "please format image to 1024x768"
#info="$(identify $1)"
#echo $info#|sed -e "/^[1-9]../p"
#format image to 1024x768
convert -crop 1024x768+0+0 $1 $1
exit
fi
#fonc compare two images ,return similar filename /compare sw sh path filename
function compare()
{
image1="$1/$2"
returnfile=image1
returnvalue=1000
#echo "compare"
for image2 in `ls images`
do
Mean=$(convert $image1 images/$image2 -compose difference -composite -fx '(r+g+b)/3' miff:-|identify -verbose -|sed -n '/^.*Mean: */{s//scale=2;/;s/(.*)//;s/$/*100\/32768*10/;p;q;}'|bc)
Mean=$(echo $Mean|sed -e 's/\..*//g')
if [ $Mean -lt $returnvalue ]; then
returnfile=$image2
returnvalue=$Mean
fi
done
echo $returnfile
return
}
#creater a directory
testdir="$(ls -d "Repertoire_$1")"
if [ -n $testdir ]; then
rm -fr "Repertoire_$1"
#rmdir "Repertoire_$1"
echo "Repertoire suprimer"
fi
md="$(mkdir "Repertoire_$1")"
if [ -z $md ]; then
echo "cree un repertoire : Repertoire_$1"
else
echo "error"
fi
#split a image
sw=0
sh=0
paths=""
while [ $sw -le 992 ]
do
while [ $sh -le 736 ]
do
paths="Repertoire_$1/$sw#$sh"
convert -crop 32x32+$sw+$sh $1 $paths
#identify -verbose "Repertoire_$1/$1_$sw#$sh">"Repertoire_$1/$sw#$sh.ide"
sh=`expr $sh + 32`
echo -n "."
done
sh=0
sw=`expr $sw + 32`
progresse="$(echo "($sw/1024)*100"|bc -l|sed -e 's/\^*0000*//g'|cut -c1-6)"
echo $progresse"%"
done
echo "....................100% decoupe image success"
echo "en train analyse base de donne de image........"
echo "recompose l'image mosaique....................."
#convert -size 1024x768 xc:white mosaic_$1
touch script_mosaic
echo "convert -size 1024x768 xc:white ">script_mosaic
echo "create success"
sw=0
sh=0
paths=""
while [ $sw -le 992 ]
do
while [ $sh -le 736 ]
do
paths="Repertoire_$1"
#echo "$sw#$sh"
#compare $sw $sh $paths "$sw#$sh"
getfile="$(compare $paths "$sw#$sh")"
#echo "filenameget : $getfile"
echo "images/$getfile -geometry 32x32+$sw+$sh -composite ">>script_mosaic
#convert mosaic_$1 $getfile -geometry 32x32+$sw+$sh -composite mosaic_$1
#identify -verbose "Repertoire_$1/$1_$sw#$sh">"Repertoire_$1/$sw#$sh.ide"
sh=`expr $sh + 32`
echo -n "."
done
sh=0
sw=`expr $sw + 32`
progresse="$(echo "($sw/1024)*100"|bc -l|sed -e 's/\^*0000*//g'|cut -c1-6)"
echo $progresse"%"
done
echo "mosaic_test.jpg">>script_mosaic
echo "compose images to new file"
scripts=$(cat script_mosaic)
`$scripts`
echo "finish"
利用imagemagic做出图形的马赛克效果
-
- 帖子: 54
- 注册时间: 2008-01-20 22:27
利用imagemagic做出图形的马赛克效果
- 附件
-
- mosaic.tar.gz
- 打包的文件,里面有 list.txt 说明文件。
- (1.2 MiB) 已下载 110 次
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系: