#! /bin/bash
### Watermark Competition Tools ver. 1.0
### Thu Feb  5 22:02:59 JST 2015
### http://www.ieice.org/iss/emm/ihc/en/
### (C) Masaki Kawamura (2015) Yamaguchi Univ. Japan
### kawamura@sci.yamaguchi-u.ac.jp

### Program Name 
Embedder=./embedder

### http://www.imagemagick.org/
CONVERT=/usr/bin/convert

if [ $# -lt 1 ]; then
    echo "$0 original(YUV)"
    exit
fi

ORIG=$1
STEGO_NON_COMP=stego.bmp
STEGO_COMPRESD1=stego_cmp1.jpg
STEGO_COMPRESD2=stego_cmp2.jpg
STEGO_RESCALE=stego_resize_
STEGO_ROTATE=stego_rotate_

COMP_RATE1=15   ## size: 1/COMP_RATE1
COMP_RATE2=25   ## size: 1/COMP_RATE2
###############################################

function JPEG_compression() {
    ## $1: source image
    ## $2: JPEG image
    ## $3: target file size
    local Qmax=100
    local Qmin=1
    local PreQF=$Qmax
    local QF

    while [ 1 ]
    do
	QF=$(( ($Qmax + $Qmin)/2 ))
	if [ $PreQF -eq $QF ]; then
	    break
	fi
	$CONVERT $1 -compress jpeg -quality $QF $2
	sz=`stat -c "%s" $2`
	echo "Qf=$QF stego size= $sz"
	
	PreQF=$QF
	if [ $sz -gt $3 ]; then
	    Qmax=$QF
	else
	    Qmin=$QF
    fi
    done
    return $QF
}


###############################################
## Embedder (output: lossless compression)
$Embedder $ORIG $STEGO_NON_COMP

#orig_size=`stat -c "%s" $STEGO_NON_COMP`
orig_size=`stat -c "%s" $ORIG`
echo "original size     = $orig_size"

## first lossy compression
target_r=$(( $orig_size / $COMP_RATE1 ))
echo "target size: 1/$COMP_RATE1 = $target_r"
JPEG_compression $STEGO_NON_COMP $STEGO_COMPRESD1 $target_r 
QF=$?
echo "Generated: $STEGO_COMPRESD1 Q=$QF (fisrt)"

## second lossy compression
target_r=$(( $orig_size / $COMP_RATE2 ))
echo "target size: 1/$COMP_RATE2 = $target_r"
JPEG_compression $STEGO_NON_COMP $STEGO_COMPRESD2 $target_r 
QF2=$?
echo "Generated: $STEGO_COMPRESD2 Q=$QF2 (second)"


###############################################
##### Rescale attack
Rescale_Rate="70 90 110 130"

for s in $Rescale_Rate
do
    fn="${STEGO_RESCALE}s${s}"
    $CONVERT $STEGO_COMPRESD1 -resize ${s}% -quality $QF2 ${fn}.jpg
    echo "Generated: ${fn}.jpg using Q=$QF2"
done

###############################################
##### Rotation attack 
Rotate_Degree="3 6 9 12"

for r in $Rotate_Degree
do
    fn="${STEGO_ROTATE}r${r}"
    $CONVERT $STEGO_COMPRESD1 -rotate ${r} -quality $QF2 ${fn}.jpg
    echo "Generated: ${fn}.jpg using Q=$QF2"
done
