{VERSION 3 0 "APPLE_PPC_MAC" "3.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 }{PSTYLE " Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 1" 0 3 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 0 0 0 0 0 0 0 }1 0 0 0 8 4 0 0 0 0 0 0 -1 0 } {PSTYLE "Heading 2" 3 4 1 {CSTYLE "" -1 -1 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 8 2 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 3" 4 5 1 {CSTYLE "" -1 -1 "" 1 12 0 0 0 0 1 0 0 0 0 0 0 0 0 }0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Map le Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {SECT 0 {PARA 3 "" 0 "" {TEXT -1 12 "Introduction" }}{PARA 0 " " 0 "" {TEXT -1 312 "This worksheet demonstrates some of the key conce pts associated with recognizing images based upon nearest neighbor com parisons in the Eigenspace associated with a set of training images. \+ This has been prepared to go with CS510 and the text \"Introductory Te chniques for 3-D Computer Vision\" by Trucco and Verri." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 126 "A series of these w orksheets have been made available showing slightly different test cas es. This is the third in the series. " }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{PARA 0 "" 0 "" {TEXT -1 43 "Ross Beveridge April 23 , 1999" }}}{SECT 0 {PARA 3 "" 0 "" {TEXT -1 15 "Initializations" }} {PARA 0 "" 0 "" {TEXT -1 20 "Libraires used here." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "with(linalg):\nwith(stats):\nwith(plots):" } {TEXT -1 1 "\n" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 240 "Here are some \+ global variables used to adjust how this worksheet behaves. It is thu s possible to change the size of the test images, the low and high val ues in these images, the number of instances of each class in the trai ning data, etc. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 269 "imageS ize := 8; # The row and column dimension of the images\nimageLo w := 2.0; # The low value in the test imagery\nimageHigh := 7 .0; # The high value in the test imagery\ntrainingSize := 99; # T he number of training images. Should be a multiple of 3." }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%*imageSizeG\"\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)imageLowG$\"#?!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*ima geHighG$\"#q!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%-trainingSizeG \"#**" }}}}{SECT 0 {PARA 3 "" 0 "" {TEXT -1 23 "Some Library Procedure s" }}{PARA 0 "" 0 "" {TEXT -1 238 "The followling procedures are helpf ul for working viewing images and vectors in this worksheet. They are \+ not by themselves interesting. At the end is commented out expression \+ which will display all the images together, one row per class. " }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 400 "displayMatrixAsImage := pro c(A,maxVal)\n local rs, cs, i, j, Poly, val:\n Poly := [];\n for i from 1 to rowdim(A) do\n for j from 1 to coldim(A) do\n \+ val := convert(A[i,j] / maxVal,float):\n Poly := [op(Poly), \n POLYGONS([[i, j, A[i,j]], [i, j+1, A[i,j]], [i+1, j+1, A[i ,j]], [i+1, j, A[i,j]]],\n COLOR(RGB,val,val,val))]: \n od:\n od:\n Poly:\nend: " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 503 "displayMatrixAsImageAppend := proc(Lst, A, maxVal, o ffr, offc)\n local rs, cs, i, j, ri, ci, val, Poly:\n Poly := Lst: \n for i from 1 to rowdim(A) do\n for j from 1 to coldim(A) do \n val := convert(A[i,j] / maxVal,float):\n ri := i + offr:\n ci := j + offc:\n Poly := [op(Poly), \n \+ POLYGONS([[ri, ci, A[i,j]], [ri, ci+1, A[i,j]], [ri+1, ci+1, A[i,j]], [ri+1, ci, A[i,j]]],\n COLOR(RGB,val, val,val))]:\n od:\n od:\n Poly:\nend:" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 753 "displayImages := proc(imageList,maxVal)\n l ocal i, samples, ims, offr, offc:\n ims := []:\n samples := fl oor(trainingSize/3):\n offr := 0:\n offc := 0:\n for i fro m 1 to samples do\n ims := displayMatrixAsImageAppend(ims,imageLi st[i],maxVal,offr, offc):\n offc := offc + imageSize + 2:\n od: \n offr := offr + imageSize+2:\n offc := 0:\n for i from sa mples + 1 to 2*samples do\n ims := displayMatrixAsImageAppend(ims ,imageList[i],maxVal,offr, offc):\n offc := offc + imageSize + 2: \n od:\n offr := offr + imageSize+2:\n offc := 0:\n for i from 2*samples+1 to 3*samples do\n ims := displayMatrixAsImageAp pend(ims,imageList[i],maxVal,offr, offc):\n offc := offc + imageS ize + 2:\n od:\n ims:\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 83 "#display(displayImages(trainImages,10),orientation=[0.0,0.0],s caling=CONSTRAINED);\n" }}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 23 "Fix Pr ecision of Floats" }}{PARA 0 "" 0 "" {TEXT -1 281 " Maple is awkward \+ in its display of floats. Unless one actually changes the precision, i t appears impossible to change the way the pretty printer does display . The following routine is used to reduce the precision of elements in arrays so they print in a relatively compact form. " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 192 "roundSigDigits := proc(x,d)\n local va l, saveDigits:\n saveDigits := Digits:\n Digits := d:\n val \+ := convert(round(x*10^d)/10^d,float):\n Digits := saveDig its:\n val:\nend:" }}}}}{SECT 0 {PARA 3 "" 0 "" {TEXT -1 24 "Generat e Training Images" }}{PARA 0 "" 0 "" {TEXT -1 426 "Let us create a vec tor of training images based upon three random image generators. Each of these will generate an image based upon a particular pattern plus \+ noise. The noise is Gaussian with zero mean and sigma 1.0. The images \+ are four pixels on a side. The first class has a bright square in the \+ center, the second class is alternating bright and dark vertical bars, class 3 is alternating bright and dark horizontal bars. " }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 21 "Add Noise to an Image" }}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 175 "addNoise := proc(A,n)\n local noise, i, j :\n for i from 1 to n do\n for j from 1 to n do\n A[i,j ] := A[i,j] + random[normald]():\n od:\n od:\n eval(A):\nend: " }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 13 "Image Class 1" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 191 "imageClass1 := proc(n,low,high)\n \+ local A, i, j:\n A := matrix(n, n, low):\n for i from 2 to n-1 do \+ \n for j from 2 to n-1 do\n A[i,j] := high:\n od:\n od :\n addNoise(A,n):\n end:" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 13 " Image Class 2" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 192 "imageClass 2 := proc(n,low,high)\n local A, i, j:\n A := matrix(n, n, low):\n \+ for i from 1 to n do \n for j from 1 to n by 2 do\n A[i,j] \+ := high:\n od:\n od:\n addNoise(A,n):\n end:" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 13 "Image Class 3" }}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 192 "imageClass3 := proc(n,low,high)\n local A, i, j: \n A := matrix(n, n, low):\n for j from 1 to n do \n for i from \+ 1 to n by 2 do\n A[i,j] := high:\n od:\n od:\n addNoise(A ,n):\n end:" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 35 "Procedure to cr eate Training Images" }}{PARA 0 "" 0 "" {TEXT -1 124 "As currently set up, this procedcure produces 9 training images, 3 from each class. The are ordered from class 1 to class 3. " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 459 "trainingImages := proc(size,n,low,high)\n local sa mples, data, k, s:\n samples := floor(size/3):\n data := vector (3*samples):\n k := 1:\n for s from 1 to samples do\n d ata[k] := imageClass1(n,low,high):\n k := k + 1:\n od:\n for \+ s from 1 to samples do\n data[k] := imageClass2(n,low,high):\n \+ k := k + 1:\n od:\n for s from 1 to samples do\n data[k] : = imageClass3(n,low,high):\n k := k + 1:\n od:\n eval(data): \nend:" }}}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 37 "Global call to create Training Images" }}{PARA 0 "" 0 "" {TEXT -1 197 "Here we bind T to th e vector of training images. Note that the precision is alterred so th at there are only 2 digits right of the decimal. Also note that the de fault setting is saved and restored. " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 169 "saveDigits := Digits:\nDigits := 3:\ntrain Images := trainingImages(trainingSize,imageSize,imageLow,imageHigh): \nDigits := saveDigits:\n#eval(trainImages);" }}}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 17 "Images to Vectors" }}{PARA 0 "" 0 "" {TEXT -1 73 "Go down the list of training images and convert these to \+ column vectors. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 503 "This procedure takes advantage of some nice features of \+ Maple. First, if you convert an nxn matrix to a vector, it automatical ly unrolls the elements in exactly the manner we want. The result is a true Maple vector. Next, you can normalize the vector to be of unit l ength with one comand. Next, when you convert that vector to a matrix , it assumes you want a column vector, which in this case works out we ll for display purposes. At this step, we will also subtract off the m ean from each image vector." }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 36 "Pr ocedure to Compute the Mean Vector" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 95 "meanXcv := proc(size,X)\n local i:\n scalarmul(ev alm(sum(eval(X)[i],i=1..size)),1/size):\nend:" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 45 "Procedure to Map images to normalized vectors" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 300 "mapImagesToVectors := proc( size,n,Images)\n local s, X, Xmu:\n X := vector(size):\n for s f rom 1 to size do\n X[s] := convert(normalize(convert(Images[s],ve ctor)),matrix):\n od:\n Xmu := meanXcv(size,X):\n for s from 1 t o size do\n X[s] := evalm(X[s] - Xmu):\n od:\n eval(X):\nend: \n " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 35 "Actually Perform Mapping to Vectors" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 64 "Xcvs := mapImagesToVectors(t rainingSize,imageSize,trainImages):\n" }}}{SECT 1 {PARA 5 "" 0 "" {TEXT -1 43 "Make a version which is better for printing" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 130 "Xcvsr := vector(trainingSize):\nfo r i from 1 to trainingSize do\n Xcvsr[i] := map(roundSigDigits,Xcvs[ i],3):\nod:\n#X = eval(Xcvsr);" }}}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 32 "Brute Force , Look at Correlation" }}{PARA 0 "" 0 "" {TEXT -1 163 "Let us compute \+ the cross correlation between all pairs of images. Note that we will g o back to original images, do the normalization, but do NOT remove the mean. " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 363 "imageCrossCorre lations := proc(size,n,Images)\n local s1, s2, X, CC:\n CC := matr ix(size,size):\n for s1 from 1 to size do\n for s2 from 1 to si ze do\n CC[s1,s2] := roundSigDigits(dotprod(normalize(convert( Images[s1],vector)),\n nor malize(convert(Images[s2],vector))),3):\n od:\n od:\n eval(CC ):\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 81 "CC := imageCros sCorrelations(trainingSize,imageSize,trainImages):\n#CC = eval(CC);" } }}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 30 "Covariance for Training Images " }}{PARA 0 "" 0 "" {TEXT -1 148 "Now we are ready to compute the actu al numeric covariance matrix for our training images. To start, we wan t to create the X matrix defined in trucco" }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 29 "Procedure to create X matrix." }}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 230 "mapVectorsToX := proc(size,n,Xcvs)\n local X, V, col, i:\n X := matrix((n*n),size):\n for col from 1 to size do\n \+ V := Xcvs[col]:\n for i from 1 to (n*n) do\n X[i,col ] := V[i,1]:\n od:\n od:\n eval(X):\nend:" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 37 "Actually create the Covariance Matrix" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 246 "saveDigits := Digits:\nDigi ts := 10:\nXm := mapVectorsToX(trainingSize,imageSize,Xcvs ):\ncoVar := evalm(Xm &* transpose(Xm)):\nDigits := saveDigit s:\n#X = map(roundSigDigits,eval(Xm),3);\n#Omega = map(roundSigDigits, eval(coVar),3);" }}}}}{SECT 0 {PARA 3 "" 0 "" {TEXT -1 33 "Eigen Vecto rs for Training Images" }}{PARA 0 "" 0 "" {TEXT -1 101 "Using Single V alue Decomposition, compute the Eigen Vectors and Eigen Values for the training images." }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 53 "Use SVD to g enerate rotation matrix and eigen values" }}{PARA 0 "" 0 "" {TEXT -1 184 "The call to Svd will perform singular value decomposition on the \+ covariance matrix. The result are the elements of the diagonal matrix, as well as the pre- and post-multiply matrices: " }{XPPEDIT 18 0 "Um; " "6#%#UmG" }{TEXT -1 5 " and " }{XPPEDIT 18 0 "Vm;" "6#%#VmG" }{TEXT -1 3 ". " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 109 "Um := matrix(i mageSize*imageSize,imageSize*imageSize):\nVm := matrix(imageSize*image Size,imageSize*imageSize):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 176 "Lambda := evalf(Svd(coVar,Um,Vm)):\nDm := matrix(imageSize*imageS ize,imageSize*imageSize,0.0):\nfor i from 1 to imageSize*imageSize do \+ Dm[i,i] := roundSigDigits(Lambda[i],3): od:" }}}{SECT 1 {PARA 5 "" 0 " " {TEXT -1 25 " Show the diagonalization" }}{PARA 0 "" 0 "" {TEXT -1 51 "Show the diagonalization as well as the check that " }{XPPEDIT 18 0 "Omega = U*D*U^T;" "6#/%&OmegaG*(%\"UG\"\"\"%\"DGF')F&%\"TGF'" } {TEXT -1 1 "." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 244 "coVar3 := \+ map(roundSigDigits,eval(coVar),2):\nUm3 := map(roundSigDigits,eval( Um),2):\nDm3 := map(roundSigDigits,eval(Dm),2):\n#eval(Um3) * eval( Dm3) * transpose(Um3);\n#eval(coVar3) = map(roundSigDigits,evalm(Um3 & * Dm3 &* transpose(Um3)),3);" }}}}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 44 "Do projection by using first 3 eigenvectgors" }}{PARA 0 "" 0 "" {TEXT -1 315 " Here we consider what the distribution of images looks like when projecting into a 3-dimensional subspace associated with th e first three (largest three) eigenvectors. This will culminate in a 3 D point plot where the class 1 images are shown in red, the class two \+ images in greeen and the class 3 images in blue. " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 120 "projMat := submatrix(Um,1..(imageSize*image Size),1..3):\nprojMat3 := map(roundSigDigits,projMat,3):\n#S = eval(pr ojMat3);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 142 "pts := evalm(t ranspose(projMat) &* Xm):\nXm3 := map(roundSigDigits,Xm,3):\n#P = tran spose(Xm3) * eval(projMat3);\n#P = map(roundSigDigits,pts,3);" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 560 "subspacePts := proc(pts)\n \+ local i, samples, dpts:\n dpts := []:\n samples := floor(cold im(pts)/3):\n for i from 1 to samples do\n dpts := [op(dpts),PO INTS([pts[1,i], pts[2,i], pts[3,i]],SYMBOL(BOX),COLOR(RGB,1.0,0.0,0.0) )]:\n od:\n for i from samples + 1 to 2*samples do\n dpts := \+ [op(dpts),POINTS([pts[1,i], pts[2,i], pts[3,i]],SYMBOL(BOX),COLOR(RGB, 0.0,1.0,0.0))]:\n od:\n for i from 2*samples+1 to 3*samples do\n \+ dpts := [op(dpts),POINTS([pts[1,i], pts[2,i], pts[3,i]],SYMBOL(BOX ),COLOR(RGB,0.0,0.0,1.0))]:\n od:\n eval(dpts):\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 114 "display(subspacePts(pts),axes=BOXE D,labels=[\"PC 1\", \"PC 2\", \"PC 3\"],scaling=CONSTRAINED,font=[HELV ETICA,BOLD,14]);" }}{PARA 13 "" 1 "" {GLPLOT3D 400 300 300 {PLOTDATA 3 "6cq-%'POINTSG6%7%$!$$G!\"%$\"$z$!\"$$!$_#F)-%'SYMBOLG6#%$BOXG-%&COL ORG6&%$RGBG$\"#5!\"\"\"\"!F:-F$6%7%$\"$F%F)$\"$r$F,$\"$T#F)F/F3-F$6%7% $!$t(!\"&$\"$!RF,$\"$>#F)F/F3-F$6%7%$!$y$F)$\"$+%F,$\"$s$F)F/F3-F$6%7% $!$r)FI$\"$&QF,$!$8'FIF/F3-F$6%7%$\"$1#F)$\"$G%F,$!$M#FIF/F3-F$6%7%$!$ '>F)$\"$n$F,$\"$#pF)F/F3-F$6%7%$!$f\"F)$\"$6%F,$!$C%F)F/F3-F$6%7%$!$> \"F)$\"$(QF,$!$u$FIF/F3-F$6%7%$!$V\"F)Ffn$!$\"RF)F/F3-F$6%7%$\"$)HF)$ \"$h$F,$!$w%F)F/F3-F$6%7%$!$v\"F)$\"$*QF,$\"$D\"F,F/F3-F$6%7%$\"$%QFI$ \"$\"RF,$\"$V$F)F/F3-F$6%7%$\"$W#F)$\"$'QF,$!$a%F)F/F3-F$6%7%$\"$`\"F) $\"$)QF,$!$G&F)F/F3-F$6%7%$\"$H&F)$\"$$QF,$!$3$F)F/F3-F$6%7%$!$\"pFI$ \"$p$F,$\"$6$F)F/F3-F$6%7%$\"$X\"F)$\"$>%F,$\"$e)FIF/F3-F$6%7%$!$i\"F) $\"$o$F,$!$/\"FIF/F3-F$6%7%$\"$b$F)Fjq$\"$f#FIF/F3-F$6%7%$!$X#F)$\"$#Q F,$\"$p\"F)F/F3-F$6%7%$!$\\\"F)$\"$-%F,$!$&QF)F/F3-F$6%7%$!$*eFIFjq$!$ G$F)F/F3-F$6%7%$\"$n&FIFho$!$A$F)F/F3-F$6%7%$\"$i$!\"'$\"$y$F,$!$T#F)F /F3-F$6%7%$!$&yFI$\"$]$F,$\"#uF)F/F3-F$6%7%$!$y%F)F@$\"$E%F)F/F3-F$6%7 %$!$&GF)Fes$\"#kFIF/F3-F$6%7%$\"$M\"F)$\"$(RF,$!$-\"F)F/F3-F$6%7%$!$:% FI$\"$`$F,$\"\"(FIF/F3-F$6%7%$F[rFIF\\\\l$!$O#F)F/F3-F$6%7%$\"$5)FI$\" $g$F,$!$V#F)F/F3-F$6%7%$!$0$F)$FVF,$!$H$F)F/F3-F$6%7%$\"$H$F,$!$u\"F,$ \"$(\\F)F/-F46&F6F:F7F:-F$6%7%F@$!$s\"F,$\"$x\"F)F/F`^l-F$6%7%$\"$t$F, $!$&>F,$\"$3(F)F/F`^l-F$6%7%$\"$2$F,$!$*>F,$!$@*FIF/F`^l-F$6%7%$\"$T$F ,$!$#>F,$!$t\"F)F/F`^l-F$6%7%$\"$C$F,Fe^l$\"$e$F)F/F`^l-F$6%7%F^`l$!$, #F,Fi_lF/F`^l-F$6%7%$FjvF,$!$r\"F,$\"$_$F)F/F`^l-F$6%7%$\"$L$F,$!$8#F, $\"$[\"FIF/F`^l-F$6%7%F\\\\l$!$@\"F,$\"$F\"F)F/F`^l-F$6%7%F[bl$!$)>F,$ !$z)F)F/F`^l-F$6%7%$\"$I$F,$!$4#F,$!$K\"F)F/F`^l-F$6%7%$\"$R$F,$!$+#F, $!$j$FIF/F`^l-F$6%7%$\"$a$F,$FbrF,$!$_%F)F/F`^l-F$6%7%$\"$x$F,$!$'=F,$ !$<(F)F/F`^l-F$6%7%$FayF,$!$3#F,$!$W#F)F/F`^l-F$6%7%$\"$m$F,$!$X\"F,$! $`\"F)F/F`^l-F$6%7%$\"$[$F,Ffel$\"$l(F)F/F`^l-F$6%7%$\"$4$F,Fdal$\"$8% FIF/F`^l-F$6%7%F^tFg_l$!$y(F)F/F`^l-F$6%7%Fddl$!$e#F,$!$%[F)F/F`^l-F$6 %7%$\"$B$F,$!$j\"F,$\"$s&F)F/F`^l-F$6%7%$\"$S$F,Fdal$\"$-'F)F/F`^l-F$6 %7%$\"$Z$F,$!$n\"F,$\"$M$F)F/F`^l-F$6%7%$\"$/%F,$!$A\"F,$!$V'F)F/F`^l- F$6%7%$\"$\\$F,F``l$!$L\"F)F/F`^l-F$6%7%F`il$!$(=F,$!$&fF)F/F`^l-F$6%7 %F`hl$!$6#F,$!$x#F)F/F`^l-F$6%7%$\"$f$F,$!$R#F,$\"$4\"F,F/F`^l-F$6%7%F [bl$!$!>F,$\"$-\"F)F/F`^l-F$6%7%F[blF^al$!$G\"FIF/F`^l-F$6%7%F`ilFe^l$ \"$+$FIF/F`^l-F$6%7%$\"$(HF,$Fe\\lF,$!$4%F)F/F`^l-F$6%7%$FRF,Fg_l$!$I% F)F/-F46&F6F:F:F7-F$6%7%$!$C$F,Fdal$\"$j(FIF/F\\^m-F$6%7%$!$M$F,$!$\"= F,Fb`lF/F\\^m-F$6%7%$!$?$F,Fdcl$\"$P$F)F/F\\^m-F$6%7%$!$$RF,Fijl$!$w\" F)F/F\\^m-F$6%7%$!$)HF,F]bl$\"$a\"FIF/F\\^m-F$6%7%$!$o$F,$!$C#F,$\"$U$ F)F/F\\^m-F$6%7%$!$5$F,$!$c\"F,$\"$r\"F)F/F\\^m-F$6%7%$!$E$F,$!$&=F,$ \"$,\"F,F/F\\^m-F$6%7%$!$N$F,F^al$\"$u\"F)F/F\\^m-F$6%7%Fh^m$!$n#F,$!$ Z$F)F/F\\^m-F$6%7%$!$n$F,$!$;#F,$!$1#F)F/F\\^m-F$6%7%F]`m$!$$>F,$!$&[F )F/F\\^m-F$6%7%$!$K$F,$!$(>F,$!$l&F)F/F\\^m-F$6%7%$!$v$F,F`\\m$\"$+\"F )F/F\\^m-F$6%7%$!$:$F,$!$*=F,$\"$N$FIF/F\\^m-F$6%7%F]emF`\\m$!$R'FIF/F \\^m-F$6%7%$!$P$F,Fbhl$\"$#=F)F/F\\^m-F$6%7%Fh^m$!$o\"F,$\"$/\"F)F/F\\ ^m-F$6%7%$!$s$F,Fc]m$!$l$F)F/F\\^m-F$6%7%Fd`mFbfm$!$6%F)F/F\\^m-F$6%7% $!$a$F,Fj^m$\"$x(F)F/F\\^m-F$6%7%$!$_$F,$!$?#F,$!$p#F)F/F\\^m-F$6%7%Fa ^mFj^m$!$X&F)F/F\\^m-F$6%7%F]dm$!$K#F,F]]lF/F\\^m-F$6%7%F]dm$Fi_mF,$\" $%=FIF/F\\^m-F$6%7%$!$e$F,F`[m$\"$!>FIF/F\\^m-F$6%7%$!$[$F,$FavF,$!$2 \"F)F/F\\^m-F$6%7%$FexF,$!$!=F,$!$\"zF)F/F\\^m-F$6%7%FfamFejm$\"$Z#F)F /F\\^m-F$6%7%$!$]$F,$FgoF,$\"$x%F)F/F\\^m-F$6%7%$!$U$F,$FbflF,$!$Y#F)F /F\\^m-F$6%7%$!$Y$F,$!$0#F,$\"$O$F)F/F\\^m-%%FONTG6%%*HELVETICAG%%BOLD G\"#9-%+AXESLABELSG6%Q%PC~16\"Q%PC~2Fa]nQ%PC~3Fa]n-%*AXESSTYLEGF1-%(SC ALINGG6#%,CONSTRAINEDG" 1 2 0 1 0 2 1 1 2 1 1.000000 45.000000 45.000000 0 }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}}} {MARK "7 3 5 1" 0 }{VIEWOPTS 1 1 0 2 1 1805 }