Adding scripts to generate rd-curves.
This commit is contained in:
15
rd_average.sh
Executable file
15
rd_average.sh
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ $# == 0 ]; then
|
||||||
|
echo "usage: OUTPUT=<label> $0 *.out"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
TOTAL=total.out
|
||||||
|
|
||||||
|
if [ -n "$OUTPUT" ]; then
|
||||||
|
TOTAL="$OUTPUT.out"
|
||||||
|
fi
|
||||||
|
|
||||||
|
awk '{size[FNR]+=$2;bytes[FNR]+=$3;psnr[FNR]+=$2*$4;psnrhvs[FNR]+=$2*$5;ssim[FNR]+=$2*$6;fastssim[FNR]+=$2*$7;}END{for(i=1;i<=FNR;i++)print i-1,size[i],bytes[i],psnr[i]/size[i],psnrhvs[i]/size[i],ssim[i]/size[i],fastssim[i]/size[i];}' $@ > $TOTAL
|
||||||
106
rd_collect.sh
Executable file
106
rd_collect.sh
Executable file
@@ -0,0 +1,106 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ $# == 0 ]; then
|
||||||
|
echo "usage: DAALA_ROOT=<daala_root> MOZJPEG_ROOT=<mozjpeg_root> $0 *.y4m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $MOZJPEG_ROOT ]; then
|
||||||
|
MOZJPEG_ROOT=.
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $DAALA_ROOT ]; then
|
||||||
|
echo "DAALA_ROOT not set."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$PLANE" ]; then
|
||||||
|
export PLANE=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $PLANE != 0 ] && [ $PLANE != 1 ] && [ $PLANE != 2 ]; then
|
||||||
|
echo "Invalid plane $PLANE. Must be 0, 1 or 2."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$YUVJPEG" ]; then
|
||||||
|
export YUVJPEG=$MOZJPEG_ROOT/yuvjpeg
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$JPEGYUV" ]; then
|
||||||
|
export JPEGYUV=$MOZJPEG_ROOT/jpegyuv
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x "$YUVJPEG" ]; then
|
||||||
|
echo "Executable not found YUVJPEG=$YUVJPEG"
|
||||||
|
echo "Do you have the right MOZJPEG_ROOT=$MOZJPEG_ROOT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x "$JPEGYUV" ]; then
|
||||||
|
echo "Executable not found JPEGYUV=$JPEGYUV"
|
||||||
|
echo "Do you have the right MOZJPEG_ROOT=$MOZJPEG_ROOT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TODO refactor these out of the daala project into a metrics project
|
||||||
|
|
||||||
|
if [ -z "$YUV2YUV4MPEG" ]; then
|
||||||
|
export YUV2YUV4MPEG=$DAALA_ROOT/tools/yuv2yuv4mpeg
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$DUMP_PSNR" ]; then
|
||||||
|
export DUMP_PSNR=$DAALA_ROOT/tools/dump_psnr
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$DUMP_PSNRHVS" ]; then
|
||||||
|
export DUMP_PSNRHVS=$DAALA_ROOT/tools/dump_psnrhvs
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$DUMP_SSIM" ]; then
|
||||||
|
export DUMP_SSIM=$DAALA_ROOT/tools/dump_ssim
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$DUMP_FASTSSIM" ]; then
|
||||||
|
export DUMP_FASTSSIM=$DAALA_ROOT/tools/dump_fastssim
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x "$YUV2YUV4MPEG" ]; then
|
||||||
|
echo "Executable not found YUV2YUV4MPEG=$YUV2YUV4MPEG"
|
||||||
|
echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x "$DUMP_PSNR" ]; then
|
||||||
|
echo "Executable not found DUMP_PSNR=$DUMP_PSNR"
|
||||||
|
echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x "$DUMP_PSNRHVS" ]; then
|
||||||
|
echo "Executable not found DUMP_PSNRHVS=$DUMP_PSNRHVS"
|
||||||
|
echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x "$DUMP_SSIM" ]; then
|
||||||
|
echo "Executable not found DUMP_SSIM=$DUMP_SSIM"
|
||||||
|
echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x "$DUMP_FASTSSIM" ]; then
|
||||||
|
echo "Executable not found DUMP_FASTSSIM=$DUMP_FASTSSIM"
|
||||||
|
echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
RD_COLLECT_SUB=$(dirname "$0")/rd_collect_sub.sh
|
||||||
|
|
||||||
|
if [ -z "$CORES" ]; then
|
||||||
|
CORES=`grep -i processor /proc/cpuinfo | wc -l`
|
||||||
|
#echo "CORES not set, using $CORES"
|
||||||
|
fi
|
||||||
|
|
||||||
|
find $@ -type f -name "*.y4m" -print0 | xargs -0 -n1 -P$CORES $RD_COLLECT_SUB
|
||||||
28
rd_collect_sub.sh
Executable file
28
rd_collect_sub.sh
Executable file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
FILE=$1
|
||||||
|
|
||||||
|
BASENAME=$(basename $FILE)
|
||||||
|
rm $BASENAME.out 2> /dev/null || true
|
||||||
|
echo $BASENAME
|
||||||
|
tail -n+3 $FILE > $BASENAME-in.yuv
|
||||||
|
WIDTH=$(head -1 $FILE | cut -d\ -f 2 | tr -d 'W')
|
||||||
|
HEIGHT=$(head -1 $FILE | cut -d\ -f 3 | tr -d 'H')
|
||||||
|
|
||||||
|
for x in {0..100}; do
|
||||||
|
$YUVJPEG $x "$WIDTH"x$HEIGHT $BASENAME-in.yuv $BASENAME.jpeg
|
||||||
|
$JPEGYUV $BASENAME.jpeg $BASENAME.yuv
|
||||||
|
$YUV2YUV4MPEG $BASENAME -w$WIDTH -h$HEIGHT -an0 -ad0 -c420mpeg2
|
||||||
|
PIXELS=$(($WIDTH*$HEIGHT))
|
||||||
|
SIZE=$(wc -c $BASENAME.jpeg | awk '{ print $1 }')
|
||||||
|
PSNR=$($DUMP_PSNR $FILE $BASENAME.y4m 2> /dev/null | grep Total | tr -s ' ' | cut -d\ -f $((4+$PLANE*2)))
|
||||||
|
PSNRHVS=$($DUMP_PSNRHVS $FILE $BASENAME.y4m 2> /dev/null | grep Total | tr -s ' ' | cut -d\ -f $((4+$PLANE*2)))
|
||||||
|
SSIM=$($DUMP_SSIM $FILE $BASENAME.y4m 2> /dev/null | grep Total | tr -s ' ' | cut -d\ -f $((4+$PLANE*2)))
|
||||||
|
FASTSSIM=$($DUMP_FASTSSIM -c $FILE $BASENAME.y4m 2> /dev/null | grep Total | tr -s ' ' | cut -d\ -f $((4+$PLANE*2)))
|
||||||
|
rm $BASENAME.jpeg $BASENAME.yuv $BASENAME.y4m
|
||||||
|
echo $x $PIXELS $SIZE $PSNR $PSNRHVS $SSIM $FASTSSIM >> $BASENAME.out
|
||||||
|
#tail -1 $BASENAME.out
|
||||||
|
done
|
||||||
|
|
||||||
|
rm $BASENAME-in.yuv
|
||||||
47
rd_plot.sh
Executable file
47
rd_plot.sh
Executable file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Use this to average data from multiple runs
|
||||||
|
#awk '{size[FNR]+=$2;bytes[FNR]+=$3;psnr[FNR]+=$2*$4;psnrhvs[FNR]+=$2*$5;ssim[FNR]+=$2*$6;fastssim[FNR]+=$2*$7;}END{for(i=1;i<=FNR;i++)print i+1,size[i],bytes[i],psnr[i]/size[i],psnrhvs[i]/size[i],ssim[i]/size[i],fastssim[i]/size[i];}' *.out > total.out
|
||||||
|
|
||||||
|
if [ -n "$IMAGE" ]; then
|
||||||
|
IMAGE="$IMAGE-"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $# == 0 ]; then
|
||||||
|
echo "usage: IMAGE=<prefix> $0 *.out"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$GNUPLOT" -a -n "`type -p gnuplot`" ]; then
|
||||||
|
GNUPLOT=`type -p gnuplot`
|
||||||
|
fi
|
||||||
|
if [ ! -x "$GNUPLOT" ]; then
|
||||||
|
echo "Executable not found GNUPLOT=$GNUPLOT"
|
||||||
|
echo "Please install it or set GNUPLOT to point to an installed copy"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
CMDS="$CMDS set term pngcairo dashed size 1024,768;"
|
||||||
|
CMDS="$CMDS set log x;"
|
||||||
|
CMDS="$CMDS set xlabel 'Bits/Pixel';"
|
||||||
|
CMDS="$CMDS set ylabel 'dB';"
|
||||||
|
CMDS="$CMDS set key bot right;"
|
||||||
|
|
||||||
|
for FILE in "$@"; do
|
||||||
|
BASENAME=$(basename $FILE)
|
||||||
|
PSNR="$PSNR $PREFIX '$FILE' using (\$3*8/\$2):4 with lines title '${BASENAME%.*} (PSNR)'"
|
||||||
|
PSNRHVS="$PSNRHVS $PREFIX '$FILE' using (\$3*8/\$2):5 with lines title '${BASENAME%.*} (PSNR-HVS)'"
|
||||||
|
SSIM="$SSIM $PREFIX '$FILE' using (\$3*8/\$2):6 with lines title '${BASENAME%.*} (SSIM)'"
|
||||||
|
FASTSSIM="$FASTSSIM $PREFIX '$FILE' using (\$3*8/\$2):7 with lines title '${BASENAME%.*} (FAST SSIM)'"
|
||||||
|
PREFIX=","
|
||||||
|
done
|
||||||
|
|
||||||
|
SUFFIX="psnr.png"
|
||||||
|
$GNUPLOT -e "$CMDS set output \"$IMAGE$SUFFIX\"; plot $PSNR;" 2> /dev/null
|
||||||
|
SUFFIX="psnrhvs.png"
|
||||||
|
$GNUPLOT -e "$CMDS set output \"$IMAGE$SUFFIX\"; plot $PSNRHVS;" 2> /dev/null
|
||||||
|
SUFFIX="ssim.png"
|
||||||
|
$GNUPLOT -e "$CMDS set output \"$IMAGE$SUFFIX\"; plot $SSIM;" 2> /dev/null
|
||||||
|
SUFFIX="fastssim.png"
|
||||||
|
$GNUPLOT -e "$CMDS set output \"$IMAGE$SUFFIX\"; plot $FASTSSIM;" 2> /dev/null
|
||||||
Reference in New Issue
Block a user