(*********************************************************************** Mathematica-Compatible Notebook This notebook can be used on any computer system with Mathematica 4.0, MathReader 4.0, or any compatible application. The data for the notebook starts with the line containing stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. ***********************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 18558, 408]*) (*NotebookOutlinePosition[ 19735, 445]*) (* CellTagsIndexPosition[ 19691, 441]*) (*WindowFrame->Normal*) Notebook[{ Cell["\<\ ReadImage/: ReadImage[filename_, n_] := ReadList[filename, Table[Number, {n}]] DispIt/: DispIt[t_] := ListPlot3D[t, Lighting -> False, Mesh -> False, AspectRatio -> 3, ViewPoint -> {0, 0, -1000}, Axes -> False] DispIt/: DispIt[t_, a_] := ListPlot3D[t, Lighting -> False, Mesh -> False, AspectRatio -> a, ViewPoint -> {0, 0, -1000}, Axes -> False] EpsOut/: EpsOut[which_] := Display[\"!psfix -epsf > out.ps\", which] SetOptions[ListPlot, PlotJoined -> True]; \ \>", "Text", Evaluatable->True, ImageRegion->{{0, 1}, {0, 1}}], Cell[BoxData[{ \(\(nptsx = 64;\)\), "\n", \(\(tmp = ReadImage["\", nptsx];\)\), "\n", \(\(nptsy = Length[tmp];\)\), "\n", \(\(imr = tmp;\)\), "\n", \(\(For[i = 1, i \[LessEqual] nptsy, \(i++\), imr\[LeftDoubleBracket]nptsy + 1 - i\[RightDoubleBracket] = tmp\[LeftDoubleBracket]i\[RightDoubleBracket]];\)\)}], "Input", ImageRegion->{{0, 1}, {0, 1}}], Cell[BoxData[{ \( (*\ synthesise\ a\ simple\ image\ *) \[IndentingNewLine]\(nptsy\ = \ nptsx;\)\), "\[IndentingNewLine]", \(\(ims = Table[Table[80\ Random[], {nptsx}], {nptsy}];\)\), "\n", \(\(ystart = Floor[nptsy\/4];\)\), "\n", \(\(xstart = Floor[nptsx\/4];\)\), "\n", \(\(yw = Floor[nptsy\/4];\)\), "\n", \(\(xw = Floor[nptsx\/4];\)\), "\n", \(\(ycen = Floor[\(3\ nptsy\)\/4] - 2;\)\), "\n", \(\(xcen = Floor[\(3\ nptsx\)\/4] - 2;\)\), "\n", \(\(For[m = 1, m \[LessEqual] nptsy, \(m++\), For[n = 1, n \[LessEqual] nptsx, \(n++\), \(ims\[LeftDoubleBracket]m, n\[RightDoubleBracket] += If[\((m - ycen)\)\^2 + \((n - xcen)\)\^2 < 0.8\ xw\^2, 200, 0];\)]];\)\), "\n", \(\(For[m = 1, m \[LessEqual] yw, \(m++\), For[n = 1, n \[LessEqual] xw, \(n++\), ims\[LeftDoubleBracket]ystart + m, xstart + n\[RightDoubleBracket] += 100]];\)\)}], "Input", ImageRegion->{{0, 1}, {0, 1}}], Cell[BoxData[ \(\(\( (*\ Use\ read\ in\ image\ *) \)\(\[IndentingNewLine]\)\(im\ = \ ims;\)\)\)], "Input"], Cell[BoxData[{ \({nptsx, nptsy}\), "\n", \(\(ListDensityPlot[im, Mesh \[Rule] False];\)\)}], "Input", ImageRegion->{{0, 1}, {0, 1}}], Cell[BoxData[{ \( (*\(\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\ \(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\(**\)\ \(**\)\(**\)\)*\[IndentingNewLine]Now\ the\ Fourier\ Versions\ \ \[IndentingNewLine]*******************************************************) \ (*\ this\ function\ rotates\ quadrants\ of\ an\ image\ *) \[IndentingNewLine]\ \(\(RotImage[im_] := Module[{nptsx, nptsy}, nptsy = Length[im]; nptsx = Length[im\[LeftDoubleBracket]1\[RightDoubleBracket]]; RotateLeft[Transpose[RotateLeft[Transpose[im], Floor[nptsx\/2 + 1]]], Floor[nptsy\/2 + 1]]]\)\(\[IndentingNewLine]\)\( (*\ inverse\ of\ the\ above\ *) \)\)\), "\[IndentingNewLine]", \(IRotImage[im_] := Module[{nptsx, nptsy}, nptsy = Length[im]; nptsx = Length[im\[LeftDoubleBracket]1\[RightDoubleBracket]]; RotateRight[ Transpose[RotateRight[Transpose[im], Floor[nptsx\/2 + 1]]], Floor[nptsy\/2 + 1]]]\)}], "Input", ImageRegion->{{0, 1}, {0, 1}}], Cell[BoxData[{ \(\(fim = Fourier[im];\)\), "\n", \(\(fim2 = RotImage[fim];\)\), "\n", \(\(ListDensityPlot[Re[Log[fim2]], Mesh \[Rule] False];\)\), "\n", \(\(ListDensityPlot[Im[Log[fim2]], Mesh \[Rule] False];\)\)}], "Input", ImageRegion->{{0, 1}, {0, 1}}], Cell[BoxData[ \(\(\(\[IndentingNewLine]\)\( (*\ now\ form\ derivative\ of\ Gaussian\ edge\ filters\ *) \)\)\)], "Input"], Cell[BoxData[{ \(G[x_, s_] := \[ExponentialE]\^\(-\(x\^2\/\(2\ s\^2\)\)\)\/\@\(2\ \[Pi]\)\), \ "\n", \(Gx[x_, s_] := \[PartialD]\_xx G[xx, s] /. \[InvisibleSpace]xx \[Rule] x\), "\n", \(Gxx[x_, s_] := \[PartialD]\_{xx, 2}G[xx, s] /. \[InvisibleSpace]xx \[Rule] x\)}], "Input", ImageRegion->{{0, 1}, {0, 1}}], Cell[BoxData[ \(\(\( (*\ function\ to\ do\ zerocrossings\ \ *) \)\(\[IndentingNewLine]\)\(ZeroCross[ im_]\ := \[IndentingNewLine]Module[{zc, nx, ny}, \[IndentingNewLine]ny = Length[im]; \ nx\ = \ Length[im[\([1]\)]]; \[IndentingNewLine]zc\ = \ Table[0, {nx}, {ny}]; \[IndentingNewLine]For[i\ = \ 2, \ i\ \[LessEqual] \ ny - 1, \ \(i++\), \[IndentingNewLine]For[ j = 2, \ j\ \[LessEqual] \ nx - 1, \ \(j++\), \[IndentingNewLine]zc[\([i, j]\)]\ = \ If[\[IndentingNewLine]\((im[\([i, j]\)] im[\([i + 1, j]\)] > 0\ )\) && \((im[\([i, j]\)] im[\([i, j + 1]\)] > 0)\), 0, 100]\[IndentingNewLine]]\[IndentingNewLine]]; \ \[IndentingNewLine]zc]\)\)\)], "Input"], Cell[BoxData[{ \( (*\ set\ up\ some\ variables\ *) \[IndentingNewLine]\n\(ycen\ = \ nptsy/2;\)\), "\n", \(\(xcen\ = \ nptsx/2;\)\), "\[IndentingNewLine]", \(\(epsimage\ = \ Table[0.01, {nptsx}, {nptsy}];\)\)}], "Input"], Cell[BoxData[{ \(\[IndentingNewLine] (*\ Now\ form\ the\ filters\ directly\ in\ the\ Fourier\ Domain\ *) \ \[IndentingNewLine]\(sx\ = \ 0.8;\)\), "\[IndentingNewLine]", \(\(sy\ = \ 0.8;\)\), "\[IndentingNewLine]", \(\(fGh = \ Table[0, {nptsx}];\)\), "\[IndentingNewLine]", \(\(fGv = \ Table[0, {nptsy}];\)\), "\[IndentingNewLine]", \(fGhx = fGh; \ fGhxx\ = \ fGh;\), "\[IndentingNewLine]", \(fGvy = fGv; \ fGvyy\ = \ fGv;\), "\[IndentingNewLine]", \(\(For[n = 1, n <= nptsx, \(n++\), \[IndentingNewLine]fGh[\([n]\)]\ = \ G[\(\((n - xcen)\)\ 2\ \[Pi]\)\/nptsx, 1\/sx]; \[IndentingNewLine]fGhx[\([n]\)]\ = \ \((\[ImaginaryI]\ \ \((n - xcen)\)\ 2\ \[Pi]\ /nptsx\ )\) fGh[\([n]\)]; \[IndentingNewLine]fGhxx[\([n]\)]\ = \ \((\ \[ImaginaryI]\ \((n - xcen)\)\ 2\ \[Pi]\ /nptsx\ )\) fGhx[\([n]\)];\[IndentingNewLine]];\)\), "\[IndentingNewLine]", \(\(For[m = 1, m <= nptsy, \(m++\), \[IndentingNewLine]fGv\[LeftDoubleBracket] m\[RightDoubleBracket] = G[\(\((m - ycen)\)\ 2\ \[Pi]\)\/nptsy, 1\/sy]\ \ ; \[IndentingNewLine]fGvy[\([m]\)]\ = \ \[ImaginaryI]\ \ \((m - ycen)\)\ 2\ \[Pi]\ / nptsy\ fGv[\([m]\)]; \[IndentingNewLine]fGvyy[\([m]\)]\ = \ \ \[ImaginaryI]\ \((m - ycen)\)\ 2\ \[Pi]\ / nptsy\ fGvy[\([m]\)];\[IndentingNewLine]];\)\), "\ \[IndentingNewLine]", \(\(fhmaskim2\ = \ Outer[Times, fGv, fGhx];\)\), "\n", \(\(fhmaskim = IRotImage[fhmaskim2];\)\n (*\(ListDensityPlot[Im[fhmaskim2], Mesh -> False, PlotRange -> All];\)*) \n (*\(ListPlot3D[ Im[fhmaskim2], PlotRange -> All];\)*) \[IndentingNewLine]\), "\[IndentingNewLine]", \(\(fvmaskim2\ = \ Outer[Times, fGvy, fGh];\)\), "\n", \(\(fvmaskim = IRotImage[fvmaskim2];\)\n (*\(ListDensityPlot[Im[fvmaskim2], Mesh -> False, PlotRange -> All];\)*) \n (*\(ListPlot3D[ Im[fvmaskim2], PlotRange -> All];\)*) \[IndentingNewLine]\), "\[IndentingNewLine]", \(\(fhhmaskim2\ = \ Outer[Times, fGv, fGhxx];\)\), "\[IndentingNewLine]", \(\(fhhmaskim = IRotImage[fhhmaskim2];\)\n (*\(ListDensityPlot[Re[fhhmaskim2], Mesh -> False, PlotRange -> All];\)*) \n (*\(ListPlot3D[ Re[fhhmaskim2], PlotRange -> All];\)*) \[IndentingNewLine]\), "\[IndentingNewLine]", \(\(fvvmaskim2\ = \ Outer[Times, fGvyy, fGh];\)\), "\n", \(\(fvvmaskim = IRotImage[fvvmaskim2];\)\n (*\(ListDensityPlot[Re[fvvmaskim2], Mesh -> False, PlotRange -> All];\)*) \n (*\(ListPlot3D[ Re[fvvmaskim2], PlotRange -> All];\)*) \[IndentingNewLine]\), "\[IndentingNewLine]", \(\(fhvmaskim2\ = \ Outer[Times, fGvy, fGhx];\)\), "\[IndentingNewLine]", \(\(fhvmaskim = IRotImage[fhvmaskim2];\)\n (*\(ListDensityPlot[Re[fhvmaskim2], Mesh -> False, PlotRange -> All];\)*) \n (*\(ListPlot3D[ Re[fhvmaskim2], PlotRange -> All];\)*) \[IndentingNewLine]\)}], "Input"], Cell[BoxData[{ \( (*\ check\ rotation\ is\ correct\ *) \[IndentingNewLine]{xcen, \ ycen}\[IndentingNewLine]\), "\[IndentingNewLine]", \(fhmaskim[\([1, 1]\)]\)}], "Input"], Cell[BoxData[{ \(\(fhfiltim = fim\ fhmaskim;\)\), "\n", \(\(hfiltimf = Chop[InverseFourier[N[fhfiltim]]] // Re;\)\), "\n", \(\(hfiltimf2 = RotImage[hfiltimf];\)\), "\n", \(\(ListDensityPlot[hfiltimf, Mesh \[Rule] False, PlotRange \[Rule] All];\)\), "\[IndentingNewLine]", \(\(fvfiltim = fim\ fvmaskim;\)\), "\n", \(\(vfiltimf = Chop[InverseFourier[N[fvfiltim]]] // Re;\)\), "\n", \(\(vfiltimf2 = RotImage[vfiltimf];\)\), "\n", \(\(ListDensityPlot[vfiltimf, Mesh \[Rule] False, PlotRange \[Rule] All];\)\[IndentingNewLine] (*\ 2 nd\ derivative\ filters\ *) \), "\[IndentingNewLine]", \(\(fhhfiltim = fim\ fhhmaskim;\)\), "\n", \(\(hhfiltimf = Chop[InverseFourier[N[fhhfiltim]]] // Re;\)\), "\n", \(\(hhfiltimf2 = RotImage[hhfiltimf];\)\), "\n", \(\(ListDensityPlot[hhfiltimf, Mesh \[Rule] False, PlotRange \[Rule] All];\)\), "\[IndentingNewLine]", \(\(fvvfiltim = fim\ fvvmaskim;\)\), "\n", \(\(vvfiltimf = Chop[InverseFourier[N[fvvfiltim]]] // Re;\)\), "\n", \(\(vvfiltimf2 = RotImage[vvfiltimf];\)\), "\n", \(\(ListDensityPlot[vvfiltimf, Mesh \[Rule] False, PlotRange \[Rule] All];\)\), "\[IndentingNewLine]", \(\(fhvfiltim = fim\ fhvmaskim;\)\), "\n", \(\(hvfiltimf = Chop[InverseFourier[N[fhvfiltim]]] // Re;\)\), "\n", \(\(hvfiltimf2 = RotImage[hvfiltimf];\)\), "\n", \(\(ListDensityPlot[hvfiltimf, Mesh \[Rule] False, PlotRange \[Rule] All];\)\)}], "Input", ImageRegion->{{0, 1}, {0, 1}}], Cell[BoxData[{ \( (*\ a\ little\ test\ of\ virtual\ functions\ *) \ \ \[IndentingNewLine]\(maxgrad\ = 10;\)\), "\[IndentingNewLine]", \(\(\((maxgrad\ = If[# > \ maxgrad, #, maxgrad])\) &\) /@ Flatten[{{1, 12, 2}, {0, 12, 3}, {4, 25, 13}}]\), "\[IndentingNewLine]", \(maxgrad\[IndentingNewLine]\)}], "Input"], Cell[BoxData[ \( (*\[IndentingNewLine]maxgrad\ = 10^\((\(-6\))\); \[IndentingNewLine]\(\((maxgrad\ = If[# > \ maxgrad, #, maxgrad])\) &\) /@ Flatten[gradim]; \[IndentingNewLine]maxgrad\[IndentingNewLine]*) \)], \ "Input"], Cell[BoxData[{ \(\[IndentingNewLine] (*\ Form\ the\ curvature\ image\ *) \[IndentingNewLine]\(gradim = \ \ \((hfiltimf^2\ + \ vfiltimf^2)\);\)\), "\[IndentingNewLine]", \(\(maxgrad\ = \ 10^\((\(-6\))\);\)\), "\[IndentingNewLine]", \(\(\(\((maxgrad\ = If[# > \ maxgrad, #, maxgrad])\) &\) /@ Flatten[gradim];\)\), "\[IndentingNewLine]", \(\(Print[maxgrad];\)\), "\[IndentingNewLine]", \(\(eps\ = \ 0.2;\)\[IndentingNewLine] (*\(denom\ = \ gradim^\((3/2)\);\)*) \), "\[IndentingNewLine]", \(\(denom\ = \ Partition[\(\((If[# > eps\ maxgrad, #^\((3/2)\), \((eps\ maxgrad)\)^\((3/ 2)\)])\) &\) /@ Flatten[gradim], nptsx];\)\), "\[IndentingNewLine]", \(\(maxdenom\ = \ 10^\((\(-6\))\);\)\), "\[IndentingNewLine]", \(\(\(\((maxdenom\ = If[# > \ maxdenom, #, maxdenom])\) &\) /@ Flatten[denom];\)\), "\[IndentingNewLine]", \(\(Print[maxdenom];\)\), "\[IndentingNewLine]", \(\(kappaim\ = \ \(-\((vfiltimf^2\ hhfiltimf\ - \ 2\ hfiltimf\ vfiltimf\ \ hvfiltimf\ + \ \ hfiltimf^2\ \ vvfiltimf\ )\)\)/\((denom)\) // Chop;\)\), "\[IndentingNewLine]", \(\(ListDensityPlot[gradim, Mesh \[Rule] False, PlotRange \[Rule] All, PlotLabel \[Rule] "\"];\)\), "\ \[IndentingNewLine]", \(\(ListDensityPlot[denom, Mesh \[Rule] False, PlotRange \[Rule] All, PlotLabel \[Rule] "\"];\)\), "\ \[IndentingNewLine]", \(\(ListDensityPlot[kappaim\ denom, Mesh \[Rule] False, PlotRange \[Rule] All, PlotLabel \[Rule] "\"];\)\), "\ \[IndentingNewLine]", \(\(ListDensityPlot[kappaim, Mesh \[Rule] False, PlotRange \[Rule] All, PlotLabel \[Rule] "\"];\)\)}], "Input"], Cell[CellGroupData[{ Cell[BoxData[{ \(\[IndentingNewLine] (*\ Repeat\ at\ larger\ scale\ *) \[IndentingNewLine]\(sx\ = \ 2.5;\)\), "\[IndentingNewLine]", \(\(sy\ = \ 2.5;\)\), "\[IndentingNewLine]", \(\(fGh = \ Table[0, {nptsx}];\)\), "\[IndentingNewLine]", \(\(fGv = \ Table[0, {nptsy}];\)\), "\[IndentingNewLine]", \(fGhx = fGh; \ fGhxx\ = \ fGh;\), "\[IndentingNewLine]", \(fGvy = fGv; \ fGvyy\ = \ fGv;\), "\[IndentingNewLine]", \(\(For[n = 1, n <= nptsx, \(n++\), \[IndentingNewLine]fGh[\([n]\)]\ = \ G[\(\((n - xcen)\)\ 2\ \[Pi]\)\/nptsx, 1\/sx]; \[IndentingNewLine]fGhx[\([n]\)]\ = \ \((\[ImaginaryI]\ \ \((n - xcen)\)\ 2\ \[Pi]\ /nptsx\ )\) fGh[\([n]\)]; \[IndentingNewLine]fGhxx[\([n]\)]\ = \ \((\ \[ImaginaryI]\ \((n - xcen)\)\ 2\ \[Pi]\ /nptsx\ )\) fGhx[\([n]\)];\[IndentingNewLine]];\)\), "\[IndentingNewLine]", \(\(For[m = 1, m <= nptsy, \(m++\), \[IndentingNewLine]fGv\[LeftDoubleBracket] m\[RightDoubleBracket] = G[\(\((m - ycen)\)\ 2\ \[Pi]\)\/nptsy, 1\/sy]\ \ ; \[IndentingNewLine]fGvy[\([m]\)]\ = \ \[ImaginaryI]\ \ \((m - ycen)\)\ 2\ \[Pi]\ / nptsy\ fGv[\([m]\)]; \[IndentingNewLine]fGvyy[\([m]\)]\ = \ \ \[ImaginaryI]\ \((m - ycen)\)\ 2\ \[Pi]\ / nptsy\ fGvy[\([m]\)];\[IndentingNewLine]];\)\[IndentingNewLine]\ \), "\n", \(\(fhmaskim = IRotImage[Outer[Times, fGv, fGhx]];\)\), "\n", \(\(fvmaskim = IRotImage[Outer[Times, fGvy, fGh]];\)\), "\[IndentingNewLine]", \(\(fhhmaskim = IRotImage[Outer[Times, fGv, fGhxx]];\)\), "\n", \(\(fvvmaskim = IRotImage[Outer[Times, fGvyy, fGh]];\)\), "\[IndentingNewLine]", \(\(fhvmaskim = IRotImage[Outer[Times, fGvy, fGhx]];\)\n\), "\n", \(\(hfiltimf2 = Chop[InverseFourier[N[fim\ fhmaskim]]];\)\), "\n", \(\(vfiltimf2 = Chop[InverseFourier[N[fim\ fvmaskim]]];\)\), "\[IndentingNewLine]", \(\(hhfiltimf2 = Chop[InverseFourier[N[fim\ fhhmaskim]]];\)\), "\n", \(\(vvfiltimf2 = Chop[InverseFourier[N[fim\ fvvmaskim]]];\)\), "\[IndentingNewLine]", \(\(hvfiltimf2 = Chop[InverseFourier[ N[fim\ fhvmaskim]]];\)\[IndentingNewLine]\)}], "Input"], Cell[BoxData[{ \( (*\ Form\ the\ curvature\ image\ *) \[IndentingNewLine]\(gradim2 = \ \ \((hfiltimf2^2\ + \ vfiltimf2^2)\);\)\), "\[IndentingNewLine]", \(\(maxgrad\ = \ 10^\((\(-6\))\);\)\), "\[IndentingNewLine]", \(\(\(\((maxgrad\ = If[# > \ maxgrad, #, maxgrad])\) &\) /@ Flatten[gradim2];\)\), "\[IndentingNewLine]", \(\(Print[ maxgrad];\)\[IndentingNewLine] (*\(denom\ = \ gradim^\((3/2)\);\)*) \), "\[IndentingNewLine]", \(\(eps\ = \ 0.2;\)\), "\[IndentingNewLine]", \(\(denom2\ = \ Partition[\(\((If[# > eps\ maxgrad, #^\((3/2)\), \((eps\ maxgrad)\)^\((3/ 2)\)])\) &\) /@ Flatten[gradim2], nptsx];\)\), "\[IndentingNewLine]", \(\(maxdenom\ = \ 10^\((\(-6\))\);\)\), "\[IndentingNewLine]", \(\(\(\((maxdenom\ = If[# > \ maxdenom, #, maxdenom])\) &\) /@ Flatten[denom2];\)\), "\[IndentingNewLine]", \(\(Print[maxdenom];\)\), "\[IndentingNewLine]", \(\(kappaim2\ = \ \(-\((vfiltimf2^2\ hhfiltimf2\ - \ 2\ hfiltimf2\ vfiltimf2\ \ hvfiltimf2\ + \ \ hfiltimf2^2\ \ vvfiltimf2\ )\)\)/denom2 // Chop;\)\), "\[IndentingNewLine]", \(\(ListDensityPlot[gradim2, Mesh \[Rule] False, PlotRange \[Rule] All, PlotLabel \[Rule] "\"];\)\), \ "\[IndentingNewLine]", \(\(ListDensityPlot[denom2, Mesh \[Rule] False, PlotRange \[Rule] All, PlotLabel \[Rule] "\"];\)\), "\ \[IndentingNewLine]", \(\(ListDensityPlot[kappaim2\ denom2, Mesh \[Rule] False, PlotRange \[Rule] All, PlotLabel \[Rule] "\"];\)\), "\ \[IndentingNewLine]", \(\(ListDensityPlot[kappaim2, Mesh \[Rule] False, PlotRange \[Rule] All, PlotLabel \[Rule] "\"];\)\)}], "Input"] }, Open ]] }, FrontEndVersion->"4.0 for X", ScreenRectangle->{{0, 1152}, {0, 900}}, WindowToolbars->{}, CellGrouping->Manual, WindowSize->{1012, 668}, WindowMargins->{{0, Automatic}, {Automatic, 0}}, PrintingPageRange->{Automatic, Automatic}, PrintingOptions->{"PaperSize"->{612, 792}, "PaperOrientation"->"Portrait", "PostScriptOutputFile":>FrontEnd`FileName[{"cs", "research", "medim", \ "images3", "starship", "ucacarr", "teaching", "3c72", "math"}, "edge2.nb.ps", \ CharacterEncoding -> "ISO8859-1"], "Magnification"->1}, PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}}, ShowCellLabel->True, ShowCellTags->False, RenderingOptions->{"ObjectDithering"->True, "RasterDithering"->False} ] (*********************************************************************** Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. ***********************************************************************) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[1717, 49, 565, 14, 212, "Text", Evaluatable->True], Cell[2285, 65, 456, 10, 91, "Input"], Cell[2744, 77, 1048, 21, 309, "Input"], Cell[3795, 100, 127, 3, 50, "Input"], Cell[3925, 105, 143, 3, 50, "Input"], Cell[4071, 110, 1065, 18, 183, "Input"], Cell[5139, 130, 276, 5, 75, "Input"], Cell[5418, 137, 131, 2, 43, "Input"], Cell[5552, 141, 372, 10, 101, "Input"], Cell[5927, 153, 803, 14, 203, "Input"], Cell[6733, 169, 245, 4, 91, "Input"], Cell[6981, 175, 3171, 62, 906, "Input"], Cell[10155, 239, 186, 3, 90, "Input"], Cell[10344, 244, 1547, 27, 347, "Input"], Cell[11894, 273, 350, 7, 91, "Input"], Cell[12247, 282, 260, 5, 91, "Input"], Cell[12510, 289, 1868, 34, 283, "Input"], Cell[CellGroupData[{ Cell[14403, 327, 2275, 42, 666, "Input"], Cell[16681, 371, 1861, 34, 267, "Input"] }, Open ]] } ] *) (*********************************************************************** End of Mathematica Notebook file. ***********************************************************************)