#!/bin/sh ## \section{segment (shell script)} ## ## \subsection*{Purpose} ## Perform a complete filtering, neural network training and classification ## in order to test and evaluate classification by a specific method on a ## specific textured image. ## ## \subsection*{Description} ## For large images, run:" ## \begin{verbatim} ## setenv TMPDIR " ## \end{verbatim} ## first, where {\tt } is a directory with plenty of free space." ## ## \subsection*{Usage} ## \begin{verbatim} ## segment [-dec] ## [-sn structure number ] ## [-f filter name ] [-symm] ## [-ref reference image ] ## [-class classifier ] ## [-classes number of classes ] ## [-cut border width ] ## [-oimg output image ] ## [-ostat output statistics ] ## \end{verbatim} ## \begin{description} ## \item[-U] ## Print usage information ## \item[-sn] ## filter structure number ## \item[-f] ## filter name (default i_2_1_09). Options: ## Farro: Farrokhnia's (90) method, Gabor: Gabor filter with structure ## given by -sn, f..: FIR QMF PR filters, i..: IIR QMF PR filters ## and w..: Wavelet QMF PR filters ## \item[-dec] ## decimate the filter output? ## \item[-symm] ## symmetrically extend prior to filtering? ## \item[-ref] ## reference (tag) image ## \item[-mask] ## mask file (mask out non-training regions) (HIPS image) ## \item[-class] ## classifier (lvq/som/k-means) (def. lvq) ## \item[-classes] ## number of classes (default 2) ## \item[-cut] ## cut away a border to avoid edge effects (default 0) ## \item[-oimg] ## output classified image (default segment.hips) ## \item[-ostat] ## output statistics file (default segment.stats) ## \end{description} ## ## \subsection*{Date created} ## March 1994 . ${HOME}/set_vars # Default parameters: SYMM=FALSE # don't use symmetric extension DEC=FALSE # don't use decimation of QMF filter CLASSIFIER=lvq # classification algorithm CUT=0 # no edge cu away STRUCT=8 OUT_STAT=segment.stats OUT_IMG=segment.hips FILTER=i_2_1_09 CLASSES=2 MASK_FILE="" # Temporary files: FEATURE=`tempnam` FILT_STAT=`tempnam` CLASS_STAT=`tempnam` IMAGE=`tempnam` print_usage () { # Print usage echo "\nsegment [options] texture" echo "\tOptions:" echo "\t -U -- print usage" echo "\t -sn .. -- filter structure number" echo "\t -f @@@ -- filter name (default ${FILTER})" echo "\t Farro: Farrokhnia's (90) method" echo "\t Gabor: Gabor filter with structure given by -sn " echo "\t f..: FIR QMF PR filters" echo "\t i..: IIR QMF PR filters" echo "\t w..: Wavelet QMF PR filters" echo "\t -dec -- decimate the filter output?" echo "\t -symm -- symmetrically extend prior to filtering?" echo "\t -ref @@@ -- reference (tag) image" echo "\t -mask @@@ -- mask file (mask out non-training regions)" echo "\t -class @@@ -- classifier (lvq/som/k-means) (def. ${CLASSIFIER})" echo "\t -classes ## -- number of classes (default ${CLASSES})" echo "\t -cut ## -- cut away a border to avoid edge effects" \ "(default ${CUT})" echo "\t -oimg @@@ -- output classified image (default ${OUT_IMG})" echo "\t -ostat @@@ -- output statistics file (default ${OUT_STAT})" echo "" exit 1 } clean () { rm -f $FEATURE $FILT_STAT $CLASS_STAT $IMAGE } summary () { echo "+-----------------------------------------------------------------+" echo "| Create the summary file and present the results |" echo "+-----------------------------------------------------------------+" echo "Segmentation results" > ${OUT_STAT} echo " ${IMAGE}" >> ${OUT_STAT} cat $FILT_STAT >> ${OUT_STAT} cat $CLASS_STAT >> ${OUT_STAT} if [ "${REFERENCE}" != "" ]; then ACCURACY=`diffseq ${REFERENCE} ${OUT_IMG} | abspix | blackpst` echo " Accuracy: ${ACCURACY}" >> ${OUT_STAT} fi cat ${OUT_STAT} } # M A I N P R O G R A M until [ $# -eq 0 ]; do case "${1}" in -U ) shift; print_usage ;; -ref ) shift; REFERENCE="${1}"; shift;; -mask ) shift; MASK_FILE="${1}"; shift;; -sn ) shift; STRUCT="${1}"; shift;; -f ) shift; FILTER="${1}"; shift;; -class ) shift; CLASSIFIER="${1}"; shift;; -classes ) shift; CLASSES=${1}; shift;; -symm ) shift; if [ "${1}" = "TRUE" -o "${1}" = "FALSE" ] ; then SYMM=${1}; shift ; else SYMM=TRUE fi;; -dec ) shift; if [ "${1}" = "TRUE" -o "${1}" = "FALSE" ] ; then DEC=${1}; shift ; else DEC=TRUE fi;; -cut ) shift; CUT="${1}"; shift;; -oimg ) shift; OUT_IMG="${1}"; shift;; -ostat ) shift; OUT_STAT="${1}"; shift;; -* ) shift; print_usage ;; * ) INPUT_IMAGE=${1}; shift;; esac done tohips $INPUT_IMAGE $IMAGE filter -symm $SYMM -dec $DEC -sn $STRUCT -f $FILTER \ -if $IMAGE -ff $FEATURE -sf $FILT_STAT # cut_border if [ ${CLASSIFIER} = lvq ] ; then if [ "${MASK_FILE}" = "" ] ; then lvq_classify -dec $DEC -sn $STRUCT -ff $FEATURE -tf $REFERENCE \ -cf $OUT_IMG -sf $CLASS_STAT else lvq_classify -dec $DEC -sn $STRUCT -ff $FEATURE -tf $REFERENCE \ -cf $OUT_IMG -sf $CLASS_STAT -mf $MASK_FILE -perc 100 fi elif [ ${CLASSIFIER} = som ] ; then som_classify -dec $DEC -sn $STRUCT -ff $FEATURE \ -cf $OUT_IMG -sf $CLASS_STAT -classes $CLASSES elif [ ${CLASSIFIER} = k-means ] ; then kmeans_classify -dec $DEC -sn $STRUCT -ff $FEATURE \ -cf $OUT_IMG -sf $CLASS_STAT -classes $CLASSES fi summary clean