From fe926756145c5e5cf5f315af0acdbfd85ba27543 Mon Sep 17 00:00:00 2001 From: cathook Date: Thu, 19 Jun 2014 07:25:48 +0800 Subject: x --- meowpp.test/GNUmakefile | 2 +- meowpp.test/GNUmakefile.targets | 7 + meowpp.test/inc/autostitch.h | 10 +- meowpp.test/output.jpg | Bin 0 -> 69525 bytes meowpp.test/output.txt | 361 +++++++++++++++++++ meowpp.test/output2.jpg | Bin 0 -> 36025 bytes meowpp.test/output3.jpg | Bin 0 -> 36191 bytes meowpp.test/points.txt | 361 +++++++++++++++++++ meowpp.test/src/autostitch.cpp | 384 ++++++--------------- .../autostitch_FeaturePointsDetector_Harris.cpp | 28 +- meowpp.test/src/autostitch_K_Match.cpp | 4 +- meowpp.test/src/autostitch_RansacCheck.cpp | 103 ++++-- meowpp.test/src/dsa.cpp | 15 +- meowpp.test/src/oo.cpp | 32 +- meowpp.test/src/rot_bundle.cpp | 319 +++++++++++++++++ 15 files changed, 1268 insertions(+), 358 deletions(-) create mode 100644 meowpp.test/output.jpg create mode 100644 meowpp.test/output.txt create mode 100644 meowpp.test/output2.jpg create mode 100644 meowpp.test/output3.jpg create mode 100644 meowpp.test/points.txt create mode 100644 meowpp.test/src/rot_bundle.cpp (limited to 'meowpp.test') diff --git a/meowpp.test/GNUmakefile b/meowpp.test/GNUmakefile index 2e503b8..839be8e 100644 --- a/meowpp.test/GNUmakefile +++ b/meowpp.test/GNUmakefile @@ -6,7 +6,7 @@ DEP := dep LIB_INCS := CXX := g++ -CXXFLAGS := -Wall -I$(INC) $(LIB_INCS) -g -pedantic -lstdc++ -lm +CXXFLAGS := -Wall -O2 -I$(INC) $(LIB_INCS) -g -pedantic -lstdc++ -lm CXX_OBJ := $(CXX) -c CXX_DEP := $(CXX) -MM diff --git a/meowpp.test/GNUmakefile.targets b/meowpp.test/GNUmakefile.targets index 6c1cd66..35486b6 100644 --- a/meowpp.test/GNUmakefile.targets +++ b/meowpp.test/GNUmakefile.targets @@ -20,3 +20,10 @@ $(BIN)/oo: $(OBJ)/oo.o $(oo_OBJS) @echo Target: $@... @$(CXX) $^ $(CXXFLAGS) `pkg-config --cflags --libs $(oo_LIBS) 2>/dev/null` -o $@ +TARGETS := $(TARGETS) $(BIN)/rot_bundle +rot_bundle_OBJS := +rot_bundle_LIBS := opencv +$(BIN)/rot_bundle: $(OBJ)/rot_bundle.o $(rot_bundle_OBJS) + @echo Target: $@... + @$(CXX) $^ $(CXXFLAGS) `pkg-config --cflags --libs $(rot_bundle_LIBS) 2>/dev/null` -o $@ + diff --git a/meowpp.test/inc/autostitch.h b/meowpp.test/inc/autostitch.h index 38e809f..469889f 100644 --- a/meowpp.test/inc/autostitch.h +++ b/meowpp.test/inc/autostitch.h @@ -45,13 +45,12 @@ public: std::vector > >const& fp); }; -class MyRansacCheck{ +class MyRansacCheck { private: static double threshold; std::vector > const* _from; std::vector > const* _to ; - meow::Vector3D _vX; - meow::Vector3D _vY; + double a_, b_, c_, d_, e_, f_, A_, B_; public: static meow::Usage usage(); static bool usage(meow::Usage const& usg); @@ -60,13 +59,12 @@ public: MyRansacCheck(std::vector > const* __from, std::vector > const* __to); ~MyRansacCheck(); - std::pair, meow::Vector3D > vCalc( - std::vector const& __sample - ) const; + meow::Vector vCalc(std::vector const& __sample) const; void rememberVCalc(std::vector const& __sample); bool ok(meow::FeaturePointIndexPair const& __m) const; double operator()(std::vector const& __sample, std::vector const& __data) const; + bool check(double, double); meow::Vector2D to(meow::Vector2D const& __v) const; }; diff --git a/meowpp.test/output.jpg b/meowpp.test/output.jpg new file mode 100644 index 0000000..8ef882d Binary files /dev/null and b/meowpp.test/output.jpg differ diff --git a/meowpp.test/output.txt b/meowpp.test/output.txt new file mode 100644 index 0000000..2e29d05 --- /dev/null +++ b/meowpp.test/output.txt @@ -0,0 +1,361 @@ +18 +input/parrington/prtn16.jpg +86 10.0000000000 13.0000000000 230.0000000000 14.0000000000 87.0000000000 16.0000000000 73.0000000000 25.0000000000 88.0000000000 39.0000000000 111.0000000000 43.0000000000 122.0000000000 43.0000000000 10.0000000000 47.0000000000 95.0000000000 49.0000000000 169.0000000000 56.0000000000 96.0000000000 58.0000000000 266.0000000000 62.0000000000 11.0000000000 63.0000000000 293.0000000000 67.0000000000 59.0000000000 70.0000000000 249.0000000000 78.0000000000 123.0000000000 80.0000000000 338.0000000000 80.0000000000 128.0000000000 92.0000000000 373.0000000000 92.0000000000 189.0000000000 100.0000000000 357.0000000000 103.0000000000 97.0000000000 113.0000000000 62.0000000000 114.0000000000 303.0000000000 118.0000000000 47.0000000000 121.0000000000 121.0000000000 123.0000000000 68.0000000000 129.0000000000 334.0000000000 136.0000000000 175.0000000000 144.0000000000 316.0000000000 145.0000000000 166.0000000000 155.0000000000 199.0000000000 155.0000000000 213.0000000000 166.0000000000 132.0000000000 168.0000000000 306.0000000000 168.0000000000 145.0000000000 174.0000000000 221.0000000000 185.0000000000 133.0000000000 189.0000000000 67.0000000000 192.0000000000 236.0000000000 192.0000000000 363.0000000000 194.0000000000 294.0000000000 197.0000000000 318.0000000000 198.0000000000 372.0000000000 200.0000000000 149.0000000000 204.0000000000 303.0000000000 205.0000000000 312.0000000000 206.0000000000 15.0000000000 211.0000000000 311.0000000000 212.0000000000 162.0000000000 217.0000000000 366.0000000000 217.0000000000 221.0000000000 220.0000000000 123.0000000000 222.0000000000 286.0000000000 223.0000000000 292.0000000000 232.0000000000 260.0000000000 234.0000000000 301.0000000000 236.0000000000 329.0000000000 241.0000000000 60.0000000000 243.0000000000 223.0000000000 246.0000000000 168.0000000000 247.0000000000 211.0000000000 248.0000000000 62.0000000000 252.0000000000 198.0000000000 252.0000000000 360.0000000000 253.0000000000 146.0000000000 256.0000000000 235.0000000000 256.0000000000 47.0000000000 259.0000000000 157.0000000000 261.0000000000 365.0000000000 281.0000000000 147.0000000000 284.0000000000 158.0000000000 296.0000000000 147.0000000000 297.0000000000 115.0000000000 299.0000000000 366.0000000000 301.0000000000 15.0000000000 303.0000000000 31.0000000000 305.0000000000 314.0000000000 305.0000000000 132.0000000000 307.0000000000 158.0000000000 309.0000000000 173.0000000000 309.0000000000 319.0000000000 309.0000000000 334.0000000000 318.0000000000 149.0000000000 320.0000000000 307.0000000000 325.0000000000 +0 +15 0 17 1 22 0 51 1 65 0 56 1 74 0 11 1 13 0 13 1 15 0 21 1 27 0 24 1 31 0 28 1 38 0 46 1 62 0 54 1 69 0 55 1 73 0 57 1 76 0 65 1 85 0 75 1 97 0 83 1 105 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +11 0 77 17 48 0 14 17 23 0 59 17 41 0 5 17 13 0 8 17 17 0 22 17 28 0 23 17 29 0 27 17 32 0 39 17 39 0 68 17 45 0 76 17 47 +input/parrington/prtn15.jpg +109 240.0000000000 11.0000000000 269.0000000000 12.0000000000 225.0000000000 13.0000000000 18.0000000000 14.0000000000 213.0000000000 14.0000000000 254.0000000000 17.0000000000 288.0000000000 20.0000000000 317.0000000000 27.0000000000 245.0000000000 29.0000000000 356.0000000000 35.0000000000 193.0000000000 38.0000000000 249.0000000000 43.0000000000 333.0000000000 49.0000000000 22.0000000000 54.0000000000 140.0000000000 56.0000000000 48.0000000000 62.0000000000 373.0000000000 63.0000000000 318.0000000000 64.0000000000 237.0000000000 69.0000000000 369.0000000000 75.0000000000 14.0000000000 76.0000000000 199.0000000000 76.0000000000 94.0000000000 77.0000000000 138.0000000000 93.0000000000 263.0000000000 94.0000000000 274.0000000000 95.0000000000 248.0000000000 100.0000000000 112.0000000000 102.0000000000 196.0000000000 105.0000000000 163.0000000000 107.0000000000 176.0000000000 108.0000000000 59.0000000000 114.0000000000 147.0000000000 115.0000000000 212.0000000000 115.0000000000 200.0000000000 123.0000000000 163.0000000000 125.0000000000 195.0000000000 125.0000000000 363.0000000000 129.0000000000 89.0000000000 132.0000000000 152.0000000000 132.0000000000 241.0000000000 134.0000000000 331.0000000000 134.0000000000 74.0000000000 138.0000000000 75.0000000000 148.0000000000 239.0000000000 151.0000000000 204.0000000000 152.0000000000 260.0000000000 153.0000000000 57.0000000000 155.0000000000 233.0000000000 159.0000000000 223.0000000000 170.0000000000 232.0000000000 171.0000000000 184.0000000000 173.0000000000 281.0000000000 176.0000000000 256.0000000000 186.0000000000 318.0000000000 190.0000000000 356.0000000000 191.0000000000 235.0000000000 192.0000000000 182.0000000000 193.0000000000 373.0000000000 194.0000000000 149.0000000000 198.0000000000 159.0000000000 199.0000000000 337.0000000000 200.0000000000 57.0000000000 201.0000000000 175.0000000000 205.0000000000 68.0000000000 208.0000000000 119.0000000000 213.0000000000 293.0000000000 213.0000000000 345.0000000000 215.0000000000 130.0000000000 216.0000000000 40.0000000000 217.0000000000 81.0000000000 221.0000000000 220.0000000000 222.0000000000 239.0000000000 225.0000000000 45.0000000000 227.0000000000 13.0000000000 228.0000000000 211.0000000000 231.0000000000 55.0000000000 232.0000000000 137.0000000000 233.0000000000 214.0000000000 235.0000000000 138.0000000000 239.0000000000 254.0000000000 241.0000000000 302.0000000000 243.0000000000 373.0000000000 243.0000000000 288.0000000000 245.0000000000 168.0000000000 248.0000000000 112.0000000000 249.0000000000 146.0000000000 249.0000000000 160.0000000000 251.0000000000 198.0000000000 254.0000000000 231.0000000000 256.0000000000 288.0000000000 269.0000000000 278.0000000000 272.0000000000 146.0000000000 275.0000000000 118.0000000000 277.0000000000 373.0000000000 277.0000000000 292.0000000000 287.0000000000 313.0000000000 289.0000000000 119.0000000000 296.0000000000 289.0000000000 296.0000000000 249.0000000000 298.0000000000 227.0000000000 299.0000000000 225.0000000000 308.0000000000 311.0000000000 310.0000000000 330.0000000000 310.0000000000 342.0000000000 311.0000000000 87.0000000000 313.0000000000 180.0000000000 317.0000000000 153.0000000000 318.0000000000 60.0000000000 321.0000000000 +15 1 65 0 51 1 13 0 11 1 74 0 56 1 22 0 17 1 15 0 13 1 27 0 21 1 31 0 24 1 38 0 28 1 62 0 46 1 69 0 54 1 73 0 55 1 76 0 57 1 85 0 65 1 93 0 70 1 105 0 83 +0 +16 1 9 2 1 1 6 2 0 1 98 2 108 1 104 2 118 1 12 2 2 1 37 2 27 1 41 2 31 1 46 2 43 1 52 2 57 1 54 2 64 1 55 2 66 1 66 2 79 1 83 2 91 1 90 2 101 1 96 2 105 1 102 2 117 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn14.jpg +122 43.0000000000 13.0000000000 110.0000000000 34.0000000000 88.0000000000 47.0000000000 31.0000000000 48.0000000000 273.0000000000 55.0000000000 218.0000000000 59.0000000000 22.0000000000 66.0000000000 35.0000000000 67.0000000000 129.0000000000 67.0000000000 278.0000000000 69.0000000000 180.0000000000 71.0000000000 121.0000000000 74.0000000000 323.0000000000 75.0000000000 338.0000000000 76.0000000000 136.0000000000 78.0000000000 368.0000000000 80.0000000000 194.0000000000 88.0000000000 285.0000000000 89.0000000000 355.0000000000 96.0000000000 140.0000000000 98.0000000000 151.0000000000 100.0000000000 323.0000000000 103.0000000000 195.0000000000 107.0000000000 277.0000000000 109.0000000000 204.0000000000 111.0000000000 317.0000000000 113.0000000000 150.0000000000 118.0000000000 114.0000000000 126.0000000000 158.0000000000 126.0000000000 235.0000000000 126.0000000000 316.0000000000 128.0000000000 84.0000000000 131.0000000000 249.0000000000 134.0000000000 320.0000000000 135.0000000000 371.0000000000 135.0000000000 188.0000000000 136.0000000000 238.0000000000 136.0000000000 255.0000000000 137.0000000000 190.0000000000 139.0000000000 212.0000000000 139.0000000000 202.0000000000 141.0000000000 154.0000000000 144.0000000000 345.0000000000 144.0000000000 11.0000000000 146.0000000000 162.0000000000 148.0000000000 372.0000000000 148.0000000000 266.0000000000 149.0000000000 322.0000000000 150.0000000000 202.0000000000 152.0000000000 48.0000000000 154.0000000000 308.0000000000 154.0000000000 319.0000000000 155.0000000000 207.0000000000 163.0000000000 164.0000000000 164.0000000000 214.0000000000 167.0000000000 181.0000000000 170.0000000000 285.0000000000 170.0000000000 33.0000000000 171.0000000000 313.0000000000 172.0000000000 155.0000000000 176.0000000000 264.0000000000 180.0000000000 192.0000000000 182.0000000000 157.0000000000 183.0000000000 267.0000000000 185.0000000000 69.0000000000 186.0000000000 10.0000000000 188.0000000000 107.0000000000 188.0000000000 137.0000000000 188.0000000000 168.0000000000 188.0000000000 213.0000000000 190.0000000000 87.0000000000 191.0000000000 127.0000000000 191.0000000000 224.0000000000 192.0000000000 58.0000000000 196.0000000000 150.0000000000 197.0000000000 203.0000000000 197.0000000000 169.0000000000 203.0000000000 218.0000000000 207.0000000000 54.0000000000 208.0000000000 44.0000000000 209.0000000000 287.0000000000 209.0000000000 288.0000000000 223.0000000000 200.0000000000 224.0000000000 158.0000000000 225.0000000000 181.0000000000 229.0000000000 249.0000000000 229.0000000000 17.0000000000 236.0000000000 204.0000000000 237.0000000000 124.0000000000 240.0000000000 359.0000000000 240.0000000000 373.0000000000 240.0000000000 39.0000000000 241.0000000000 158.0000000000 241.0000000000 28.0000000000 244.0000000000 48.0000000000 244.0000000000 129.0000000000 254.0000000000 142.0000000000 257.0000000000 317.0000000000 257.0000000000 154.0000000000 258.0000000000 292.0000000000 261.0000000000 361.0000000000 262.0000000000 39.0000000000 265.0000000000 207.0000000000 276.0000000000 146.0000000000 278.0000000000 41.0000000000 284.0000000000 64.0000000000 284.0000000000 197.0000000000 288.0000000000 345.0000000000 290.0000000000 39.0000000000 292.0000000000 233.0000000000 293.0000000000 330.0000000000 293.0000000000 356.0000000000 294.0000000000 355.0000000000 295.0000000000 224.0000000000 296.0000000000 219.0000000000 300.0000000000 201.0000000000 302.0000000000 164.0000000000 304.0000000000 62.0000000000 306.0000000000 92.0000000000 306.0000000000 134.0000000000 307.0000000000 154.0000000000 307.0000000000 172.0000000000 307.0000000000 +0 +14 2 27 1 37 2 118 1 104 2 0 1 6 2 91 1 83 2 1 1 9 2 2 1 12 2 43 1 46 2 57 1 52 2 66 1 55 2 79 1 66 2 101 1 90 2 105 1 96 2 108 1 98 2 117 1 102 +0 +22 2 81 3 58 2 4 3 8 2 89 3 61 2 21 3 22 2 9 3 12 2 13 3 14 2 17 3 17 2 18 3 21 2 23 3 23 2 25 3 24 2 30 3 28 2 42 3 35 2 47 3 38 2 50 3 39 2 56 3 42 2 58 3 44 2 60 3 46 2 63 3 49 2 80 3 54 2 99 3 69 2 107 3 76 2 110 3 79 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn13.jpg +85 265.0000000000 10.0000000000 336.0000000000 19.0000000000 274.0000000000 27.0000000000 336.0000000000 34.0000000000 75.0000000000 35.0000000000 349.0000000000 45.0000000000 298.0000000000 46.0000000000 337.0000000000 47.0000000000 21.0000000000 48.0000000000 320.0000000000 50.0000000000 368.0000000000 55.0000000000 337.0000000000 60.0000000000 27.0000000000 63.0000000000 368.0000000000 70.0000000000 87.0000000000 73.0000000000 292.0000000000 76.0000000000 317.0000000000 78.0000000000 33.0000000000 82.0000000000 353.0000000000 83.0000000000 67.0000000000 84.0000000000 336.0000000000 92.0000000000 102.0000000000 94.0000000000 71.0000000000 99.0000000000 24.0000000000 102.0000000000 64.0000000000 108.0000000000 10.0000000000 110.0000000000 270.0000000000 110.0000000000 350.0000000000 119.0000000000 63.0000000000 123.0000000000 122.0000000000 126.0000000000 337.0000000000 129.0000000000 324.0000000000 130.0000000000 118.0000000000 133.0000000000 127.0000000000 135.0000000000 49.0000000000 139.0000000000 92.0000000000 141.0000000000 118.0000000000 145.0000000000 232.0000000000 145.0000000000 69.0000000000 146.0000000000 55.0000000000 149.0000000000 16.0000000000 157.0000000000 293.0000000000 163.0000000000 33.0000000000 164.0000000000 66.0000000000 165.0000000000 60.0000000000 168.0000000000 270.0000000000 168.0000000000 10.0000000000 173.0000000000 268.0000000000 173.0000000000 175.0000000000 175.0000000000 13.0000000000 179.0000000000 185.0000000000 184.0000000000 350.0000000000 193.0000000000 334.0000000000 201.0000000000 219.0000000000 203.0000000000 32.0000000000 205.0000000000 177.0000000000 205.0000000000 273.0000000000 209.0000000000 261.0000000000 216.0000000000 34.0000000000 218.0000000000 184.0000000000 227.0000000000 210.0000000000 231.0000000000 105.0000000000 236.0000000000 118.0000000000 236.0000000000 198.0000000000 239.0000000000 334.0000000000 243.0000000000 257.0000000000 246.0000000000 62.0000000000 252.0000000000 351.0000000000 252.0000000000 368.0000000000 254.0000000000 37.0000000000 256.0000000000 202.0000000000 261.0000000000 214.0000000000 262.0000000000 75.0000000000 263.0000000000 35.0000000000 265.0000000000 226.0000000000 267.0000000000 305.0000000000 280.0000000000 91.0000000000 285.0000000000 293.0000000000 286.0000000000 120.0000000000 288.0000000000 76.0000000000 290.0000000000 190.0000000000 290.0000000000 338.0000000000 321.0000000000 332.0000000000 330.0000000000 351.0000000000 362.0000000000 336.0000000000 363.0000000000 +0 +0 +21 3 17 2 17 3 22 2 21 3 46 2 60 3 79 2 110 3 8 2 4 3 12 2 9 3 14 2 13 3 21 2 18 3 23 2 23 3 24 2 25 3 28 2 30 3 35 2 42 3 38 2 47 3 39 2 50 3 42 2 56 3 54 2 80 3 58 2 81 3 61 2 89 3 66 2 97 3 69 2 99 3 76 2 107 +0 +23 3 81 4 75 3 3 4 10 3 6 4 13 3 82 4 76 3 1 4 4 3 5 4 15 3 7 4 16 3 9 4 18 3 15 4 23 3 16 4 25 3 20 4 33 3 26 4 36 3 27 4 40 3 31 4 44 3 41 4 53 3 47 4 56 3 52 4 59 3 57 4 62 3 65 4 67 3 67 4 69 3 77 4 74 3 83 4 77 3 84 4 78 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn12.jpg +79 119.0000000000 10.0000000000 168.0000000000 10.0000000000 340.0000000000 10.0000000000 373.0000000000 11.0000000000 96.0000000000 17.0000000000 257.0000000000 18.0000000000 33.0000000000 22.0000000000 156.0000000000 23.0000000000 365.0000000000 23.0000000000 188.0000000000 27.0000000000 95.0000000000 31.0000000000 373.0000000000 31.0000000000 243.0000000000 33.0000000000 57.0000000000 40.0000000000 24.0000000000 43.0000000000 107.0000000000 44.0000000000 95.0000000000 46.0000000000 349.0000000000 46.0000000000 79.0000000000 47.0000000000 249.0000000000 47.0000000000 126.0000000000 54.0000000000 219.0000000000 61.0000000000 96.0000000000 63.0000000000 49.0000000000 69.0000000000 303.0000000000 71.0000000000 75.0000000000 74.0000000000 227.0000000000 74.0000000000 237.0000000000 76.0000000000 356.0000000000 77.0000000000 38.0000000000 80.0000000000 110.0000000000 82.0000000000 240.0000000000 87.0000000000 373.0000000000 88.0000000000 93.0000000000 89.0000000000 139.0000000000 90.0000000000 167.0000000000 99.0000000000 26.0000000000 103.0000000000 308.0000000000 103.0000000000 180.0000000000 108.0000000000 349.0000000000 112.0000000000 107.0000000000 116.0000000000 162.0000000000 117.0000000000 184.0000000000 123.0000000000 326.0000000000 123.0000000000 81.0000000000 126.0000000000 93.0000000000 126.0000000000 57.0000000000 130.0000000000 164.0000000000 138.0000000000 153.0000000000 139.0000000000 178.0000000000 139.0000000000 28.0000000000 141.0000000000 182.0000000000 150.0000000000 361.0000000000 152.0000000000 49.0000000000 158.0000000000 318.0000000000 159.0000000000 131.0000000000 165.0000000000 24.0000000000 168.0000000000 188.0000000000 180.0000000000 342.0000000000 181.0000000000 89.0000000000 198.0000000000 184.0000000000 199.0000000000 163.0000000000 209.0000000000 15.0000000000 211.0000000000 354.0000000000 220.0000000000 338.0000000000 226.0000000000 83.0000000000 233.0000000000 132.0000000000 233.0000000000 11.0000000000 242.0000000000 124.0000000000 243.0000000000 106.0000000000 248.0000000000 152.0000000000 259.0000000000 216.0000000000 272.0000000000 154.0000000000 276.0000000000 231.0000000000 277.0000000000 48.0000000000 282.0000000000 93.0000000000 316.0000000000 87.0000000000 325.0000000000 107.0000000000 356.0000000000 92.0000000000 358.0000000000 +0 +0 +0 +22 4 75 3 81 4 74 3 77 4 23 3 15 4 15 3 5 4 4 3 1 4 10 3 3 4 13 3 6 4 16 3 7 4 18 3 9 4 25 3 16 4 33 3 20 4 36 3 26 4 44 3 31 4 53 3 41 4 56 3 47 4 59 3 52 4 62 3 57 4 67 3 65 4 69 3 67 4 76 3 82 4 77 3 83 4 78 3 84 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn11.jpg +88 325.0000000000 10.0000000000 352.0000000000 11.0000000000 268.0000000000 13.0000000000 301.0000000000 13.0000000000 313.0000000000 13.0000000000 10.0000000000 14.0000000000 373.0000000000 17.0000000000 188.0000000000 20.0000000000 217.0000000000 21.0000000000 120.0000000000 23.0000000000 283.0000000000 28.0000000000 346.0000000000 28.0000000000 159.0000000000 30.0000000000 301.0000000000 30.0000000000 316.0000000000 33.0000000000 357.0000000000 34.0000000000 138.0000000000 36.0000000000 366.0000000000 36.0000000000 188.0000000000 40.0000000000 343.0000000000 44.0000000000 283.0000000000 45.0000000000 373.0000000000 49.0000000000 165.0000000000 56.0000000000 213.0000000000 56.0000000000 245.0000000000 62.0000000000 364.0000000000 63.0000000000 55.0000000000 65.0000000000 289.0000000000 67.0000000000 302.0000000000 67.0000000000 371.0000000000 67.0000000000 320.0000000000 70.0000000000 107.0000000000 75.0000000000 209.0000000000 75.0000000000 346.0000000000 76.0000000000 278.0000000000 80.0000000000 307.0000000000 82.0000000000 326.0000000000 84.0000000000 362.0000000000 84.0000000000 173.0000000000 85.0000000000 214.0000000000 85.0000000000 338.0000000000 88.0000000000 256.0000000000 90.0000000000 277.0000000000 93.0000000000 60.0000000000 98.0000000000 244.0000000000 101.0000000000 362.0000000000 101.0000000000 347.0000000000 106.0000000000 99.0000000000 109.0000000000 174.0000000000 113.0000000000 293.0000000000 114.0000000000 78.0000000000 119.0000000000 234.0000000000 120.0000000000 299.0000000000 121.0000000000 311.0000000000 122.0000000000 183.0000000000 131.0000000000 310.0000000000 136.0000000000 371.0000000000 137.0000000000 373.0000000000 139.0000000000 279.0000000000 140.0000000000 127.0000000000 145.0000000000 111.0000000000 149.0000000000 313.0000000000 149.0000000000 367.0000000000 149.0000000000 166.0000000000 151.0000000000 365.0000000000 152.0000000000 229.0000000000 153.0000000000 69.0000000000 155.0000000000 216.0000000000 156.0000000000 169.0000000000 158.0000000000 197.0000000000 159.0000000000 242.0000000000 160.0000000000 262.0000000000 161.0000000000 132.0000000000 164.0000000000 299.0000000000 167.0000000000 216.0000000000 168.0000000000 337.0000000000 168.0000000000 182.0000000000 171.0000000000 252.0000000000 171.0000000000 91.0000000000 177.0000000000 159.0000000000 181.0000000000 209.0000000000 185.0000000000 131.0000000000 187.0000000000 263.0000000000 187.0000000000 360.0000000000 193.0000000000 158.0000000000 196.0000000000 160.0000000000 203.0000000000 87.0000000000 222.0000000000 128.0000000000 262.0000000000 +0 +0 +0 +0 +9 5 86 4 64 5 60 4 52 5 31 4 28 5 26 4 24 5 43 4 37 5 47 4 39 5 50 4 43 5 66 4 54 5 78 4 58 +0 +24 5 10 6 8 5 37 6 46 5 58 6 73 5 61 6 76 5 13 6 9 5 14 6 11 5 15 6 12 5 19 6 20 5 28 6 36 5 30 6 39 5 33 6 43 5 34 6 42 5 35 6 44 5 36 6 45 5 40 6 48 5 45 6 56 5 46 6 59 5 52 6 66 5 53 6 65 5 57 6 75 5 62 6 79 5 75 6 88 5 82 6 94 5 83 6 99 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn10.jpg +100 47.0000000000 10.0000000000 111.0000000000 10.0000000000 120.0000000000 10.0000000000 139.0000000000 10.0000000000 220.0000000000 10.0000000000 273.0000000000 10.0000000000 246.0000000000 12.0000000000 206.0000000000 13.0000000000 32.0000000000 20.0000000000 51.0000000000 24.0000000000 111.0000000000 28.0000000000 66.0000000000 29.0000000000 106.0000000000 33.0000000000 169.0000000000 35.0000000000 362.0000000000 35.0000000000 315.0000000000 36.0000000000 157.0000000000 37.0000000000 161.0000000000 37.0000000000 213.0000000000 37.0000000000 268.0000000000 40.0000000000 92.0000000000 42.0000000000 135.0000000000 42.0000000000 276.0000000000 42.0000000000 281.0000000000 43.0000000000 327.0000000000 44.0000000000 10.0000000000 48.0000000000 328.0000000000 49.0000000000 123.0000000000 50.0000000000 348.0000000000 51.0000000000 145.0000000000 56.0000000000 96.0000000000 58.0000000000 259.0000000000 59.0000000000 268.0000000000 59.0000000000 11.0000000000 60.0000000000 37.0000000000 60.0000000000 45.0000000000 62.0000000000 51.0000000000 62.0000000000 216.0000000000 62.0000000000 188.0000000000 65.0000000000 68.0000000000 67.0000000000 100.0000000000 67.0000000000 281.0000000000 70.0000000000 25.0000000000 72.0000000000 95.0000000000 73.0000000000 55.0000000000 76.0000000000 74.0000000000 80.0000000000 110.0000000000 82.0000000000 315.0000000000 84.0000000000 86.0000000000 85.0000000000 164.0000000000 88.0000000000 266.0000000000 89.0000000000 242.0000000000 91.0000000000 183.0000000000 93.0000000000 372.0000000000 94.0000000000 47.0000000000 95.0000000000 341.0000000000 97.0000000000 109.0000000000 100.0000000000 354.0000000000 101.0000000000 364.0000000000 102.0000000000 94.0000000000 104.0000000000 260.0000000000 105.0000000000 11.0000000000 109.0000000000 211.0000000000 110.0000000000 206.0000000000 111.0000000000 280.0000000000 112.0000000000 58.0000000000 115.0000000000 46.0000000000 116.0000000000 178.0000000000 118.0000000000 133.0000000000 121.0000000000 205.0000000000 123.0000000000 307.0000000000 123.0000000000 358.0000000000 125.0000000000 196.0000000000 130.0000000000 26.0000000000 133.0000000000 130.0000000000 133.0000000000 120.0000000000 138.0000000000 60.0000000000 144.0000000000 125.0000000000 145.0000000000 222.0000000000 145.0000000000 113.0000000000 147.0000000000 368.0000000000 150.0000000000 332.0000000000 153.0000000000 364.0000000000 153.0000000000 268.0000000000 156.0000000000 351.0000000000 157.0000000000 174.0000000000 160.0000000000 282.0000000000 160.0000000000 189.0000000000 162.0000000000 84.0000000000 165.0000000000 198.0000000000 165.0000000000 131.0000000000 168.0000000000 147.0000000000 171.0000000000 254.0000000000 173.0000000000 243.0000000000 175.0000000000 10.0000000000 180.0000000000 138.0000000000 182.0000000000 240.0000000000 183.0000000000 324.0000000000 185.0000000000 341.0000000000 189.0000000000 105.0000000000 190.0000000000 +0 +0 +0 +0 +0 +24 6 11 5 14 6 73 5 58 6 99 5 83 6 12 5 15 6 8 5 10 6 9 5 13 6 20 5 19 6 34 5 27 6 36 5 28 6 39 5 30 6 42 5 34 6 43 5 33 6 44 5 35 6 45 5 36 6 46 5 37 6 48 5 40 6 56 5 45 6 59 5 46 6 65 5 53 6 66 5 52 6 75 5 57 6 76 5 61 6 79 5 62 6 88 5 75 +0 +18 6 84 7 45 6 60 7 25 6 32 7 13 6 71 7 36 6 15 7 6 6 19 7 5 6 23 7 8 6 24 7 9 6 26 7 10 6 31 7 12 6 47 7 21 6 55 7 24 6 58 7 27 6 64 7 29 6 70 7 32 6 82 7 44 6 83 7 43 6 98 7 48 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn09.jpg +52 169.0000000000 10.0000000000 131.0000000000 11.0000000000 300.0000000000 11.0000000000 277.0000000000 12.0000000000 84.0000000000 15.0000000000 26.0000000000 32.0000000000 74.0000000000 32.0000000000 166.0000000000 35.0000000000 39.0000000000 36.0000000000 86.0000000000 40.0000000000 87.0000000000 46.0000000000 10.0000000000 49.0000000000 17.0000000000 51.0000000000 26.0000000000 52.0000000000 97.0000000000 55.0000000000 10.0000000000 56.0000000000 154.0000000000 58.0000000000 158.0000000000 59.0000000000 281.0000000000 61.0000000000 38.0000000000 64.0000000000 247.0000000000 73.0000000000 72.0000000000 79.0000000000 254.0000000000 85.0000000000 24.0000000000 87.0000000000 98.0000000000 94.0000000000 17.0000000000 98.0000000000 213.0000000000 98.0000000000 121.0000000000 100.0000000000 280.0000000000 100.0000000000 36.0000000000 106.0000000000 263.0000000000 108.0000000000 275.0000000000 109.0000000000 63.0000000000 118.0000000000 284.0000000000 119.0000000000 317.0000000000 119.0000000000 268.0000000000 122.0000000000 114.0000000000 123.0000000000 296.0000000000 123.0000000000 264.0000000000 133.0000000000 17.0000000000 134.0000000000 327.0000000000 135.0000000000 89.0000000000 143.0000000000 123.0000000000 148.0000000000 23.0000000000 149.0000000000 120.0000000000 151.0000000000 107.0000000000 154.0000000000 76.0000000000 163.0000000000 10.0000000000 167.0000000000 97.0000000000 185.0000000000 333.0000000000 203.0000000000 368.0000000000 217.0000000000 250.0000000000 218.0000000000 +0 +0 +0 +0 +0 +0 +18 7 8 6 23 7 36 6 71 7 43 6 83 7 6 6 15 7 5 6 19 7 9 6 24 7 10 6 26 7 12 6 31 7 13 6 32 7 19 6 41 7 21 6 47 7 24 6 55 7 25 6 60 7 29 6 64 7 32 6 70 7 44 6 82 7 45 6 84 7 48 6 98 +0 +11 7 35 8 38 7 34 8 37 7 49 8 51 7 38 8 42 7 18 8 15 7 28 8 31 7 30 8 34 7 31 8 35 7 37 8 39 7 40 8 44 7 50 8 54 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn08.jpg +60 204.0000000000 10.0000000000 256.0000000000 10.0000000000 315.0000000000 10.0000000000 360.0000000000 10.0000000000 283.0000000000 15.0000000000 271.0000000000 17.0000000000 299.0000000000 21.0000000000 29.0000000000 24.0000000000 254.0000000000 24.0000000000 210.0000000000 29.0000000000 207.0000000000 33.0000000000 286.0000000000 35.0000000000 147.0000000000 36.0000000000 188.0000000000 46.0000000000 10.0000000000 51.0000000000 34.0000000000 54.0000000000 163.0000000000 57.0000000000 265.0000000000 59.0000000000 247.0000000000 62.0000000000 311.0000000000 63.0000000000 144.0000000000 65.0000000000 175.0000000000 69.0000000000 204.0000000000 71.0000000000 329.0000000000 74.0000000000 352.0000000000 74.0000000000 249.0000000000 75.0000000000 344.0000000000 76.0000000000 10.0000000000 78.0000000000 141.0000000000 89.0000000000 207.0000000000 90.0000000000 337.0000000000 92.0000000000 32.0000000000 94.0000000000 172.0000000000 95.0000000000 185.0000000000 99.0000000000 14.0000000000 101.0000000000 26.0000000000 102.0000000000 203.0000000000 104.0000000000 68.0000000000 115.0000000000 19.0000000000 116.0000000000 48.0000000000 117.0000000000 14.0000000000 119.0000000000 145.0000000000 122.0000000000 15.0000000000 127.0000000000 347.0000000000 130.0000000000 79.0000000000 131.0000000000 299.0000000000 133.0000000000 346.0000000000 144.0000000000 273.0000000000 154.0000000000 351.0000000000 157.0000000000 293.0000000000 166.0000000000 282.0000000000 177.0000000000 83.0000000000 199.0000000000 148.0000000000 208.0000000000 222.0000000000 211.0000000000 118.0000000000 214.0000000000 267.0000000000 218.0000000000 199.0000000000 222.0000000000 253.0000000000 223.0000000000 172.0000000000 226.0000000000 210.0000000000 227.0000000000 +0 +0 +0 +0 +0 +0 +0 +11 8 42 7 38 8 31 7 28 8 54 7 50 8 15 7 18 8 34 7 30 8 35 7 31 8 37 7 34 8 38 7 35 8 39 7 37 8 44 7 40 8 51 7 49 +0 +14 8 6 9 6 8 50 9 65 8 43 9 48 8 17 9 24 8 3 9 3 8 5 9 0 8 23 9 34 8 24 9 35 8 26 9 36 8 30 9 41 8 45 9 49 8 46 9 55 8 47 9 57 8 48 9 60 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn07.jpg +82 23.0000000000 10.0000000000 39.0000000000 10.0000000000 64.0000000000 10.0000000000 112.0000000000 10.0000000000 336.0000000000 10.0000000000 217.0000000000 13.0000000000 51.0000000000 15.0000000000 195.0000000000 16.0000000000 144.0000000000 17.0000000000 183.0000000000 20.0000000000 298.0000000000 20.0000000000 294.0000000000 26.0000000000 304.0000000000 29.0000000000 328.0000000000 29.0000000000 281.0000000000 30.0000000000 307.0000000000 34.0000000000 148.0000000000 38.0000000000 56.0000000000 39.0000000000 175.0000000000 40.0000000000 302.0000000000 40.0000000000 338.0000000000 42.0000000000 185.0000000000 43.0000000000 155.0000000000 46.0000000000 360.0000000000 49.0000000000 15.0000000000 50.0000000000 174.0000000000 54.0000000000 133.0000000000 55.0000000000 221.0000000000 56.0000000000 306.0000000000 58.0000000000 62.0000000000 59.0000000000 321.0000000000 59.0000000000 258.0000000000 62.0000000000 200.0000000000 63.0000000000 297.0000000000 69.0000000000 80.0000000000 70.0000000000 103.0000000000 70.0000000000 94.0000000000 74.0000000000 296.0000000000 77.0000000000 198.0000000000 80.0000000000 261.0000000000 85.0000000000 214.0000000000 87.0000000000 87.0000000000 88.0000000000 220.0000000000 96.0000000000 337.0000000000 96.0000000000 226.0000000000 101.0000000000 153.0000000000 106.0000000000 190.0000000000 122.0000000000 221.0000000000 122.0000000000 97.0000000000 126.0000000000 48.0000000000 128.0000000000 326.0000000000 132.0000000000 355.0000000000 132.0000000000 308.0000000000 133.0000000000 362.0000000000 133.0000000000 362.0000000000 138.0000000000 95.0000000000 141.0000000000 202.0000000000 142.0000000000 23.0000000000 146.0000000000 348.0000000000 146.0000000000 69.0000000000 149.0000000000 99.0000000000 153.0000000000 299.0000000000 153.0000000000 218.0000000000 158.0000000000 59.0000000000 159.0000000000 346.0000000000 164.0000000000 30.0000000000 171.0000000000 223.0000000000 171.0000000000 235.0000000000 173.0000000000 287.0000000000 190.0000000000 299.0000000000 190.0000000000 212.0000000000 195.0000000000 252.0000000000 208.0000000000 297.0000000000 217.0000000000 10.0000000000 220.0000000000 20.0000000000 222.0000000000 225.0000000000 222.0000000000 123.0000000000 225.0000000000 170.0000000000 228.0000000000 135.0000000000 236.0000000000 307.0000000000 241.0000000000 197.0000000000 244.0000000000 133.0000000000 246.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +13 9 6 8 6 9 65 8 50 9 24 8 17 9 48 8 43 9 0 8 5 9 3 8 3 9 34 8 23 9 35 8 24 9 36 8 26 9 41 8 30 9 49 8 45 9 55 8 46 9 57 8 47 +0 +21 9 58 10 56 9 79 10 72 9 39 10 39 9 11 10 7 9 4 10 0 9 13 10 10 9 14 10 9 9 23 10 22 9 28 10 24 9 30 10 26 9 31 10 25 9 33 10 28 9 37 10 36 9 50 10 53 9 51 10 54 9 52 10 52 9 61 10 58 9 64 10 61 9 68 10 67 9 69 10 68 9 72 10 70 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn06.jpg +73 95.0000000000 10.0000000000 148.0000000000 10.0000000000 218.0000000000 10.0000000000 329.0000000000 10.0000000000 81.0000000000 11.0000000000 189.0000000000 13.0000000000 366.0000000000 18.0000000000 52.0000000000 19.0000000000 209.0000000000 20.0000000000 39.0000000000 23.0000000000 86.0000000000 25.0000000000 136.0000000000 26.0000000000 254.0000000000 26.0000000000 268.0000000000 26.0000000000 349.0000000000 26.0000000000 222.0000000000 28.0000000000 154.0000000000 35.0000000000 122.0000000000 36.0000000000 136.0000000000 36.0000000000 180.0000000000 36.0000000000 48.0000000000 37.0000000000 146.0000000000 45.0000000000 116.0000000000 49.0000000000 373.0000000000 52.0000000000 62.0000000000 53.0000000000 14.0000000000 54.0000000000 78.0000000000 55.0000000000 55.0000000000 58.0000000000 53.0000000000 64.0000000000 352.0000000000 64.0000000000 133.0000000000 65.0000000000 229.0000000000 65.0000000000 372.0000000000 65.0000000000 269.0000000000 67.0000000000 320.0000000000 69.0000000000 146.0000000000 70.0000000000 52.0000000000 72.0000000000 212.0000000000 72.0000000000 10.0000000000 74.0000000000 16.0000000000 77.0000000000 352.0000000000 77.0000000000 360.0000000000 77.0000000000 208.0000000000 78.0000000000 263.0000000000 79.0000000000 285.0000000000 81.0000000000 80.0000000000 93.0000000000 146.0000000000 101.0000000000 212.0000000000 103.0000000000 146.0000000000 114.0000000000 49.0000000000 116.0000000000 260.0000000000 120.0000000000 147.0000000000 124.0000000000 63.0000000000 129.0000000000 82.0000000000 129.0000000000 110.0000000000 130.0000000000 348.0000000000 140.0000000000 103.0000000000 143.0000000000 221.0000000000 143.0000000000 54.0000000000 148.0000000000 166.0000000000 152.0000000000 194.0000000000 157.0000000000 101.0000000000 161.0000000000 142.0000000000 161.0000000000 220.0000000000 161.0000000000 163.0000000000 165.0000000000 198.0000000000 165.0000000000 185.0000000000 177.0000000000 41.0000000000 185.0000000000 54.0000000000 186.0000000000 51.0000000000 204.0000000000 52.0000000000 213.0000000000 328.0000000000 223.0000000000 61.0000000000 236.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +20 10 58 9 61 10 39 9 39 10 9 9 14 10 22 9 23 10 0 9 4 10 7 9 11 10 10 9 13 10 24 9 28 10 26 9 30 10 28 9 33 10 36 9 37 10 52 9 52 10 53 9 50 10 54 9 51 10 56 9 58 10 61 9 64 10 67 9 68 10 68 9 69 10 70 9 72 10 72 9 79 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn05.jpg +54 58.0000000000 10.0000000000 79.0000000000 10.0000000000 217.0000000000 10.0000000000 203.0000000000 12.0000000000 112.0000000000 17.0000000000 17.0000000000 19.0000000000 96.0000000000 24.0000000000 347.0000000000 27.0000000000 78.0000000000 28.0000000000 334.0000000000 34.0000000000 34.0000000000 36.0000000000 80.0000000000 41.0000000000 215.0000000000 41.0000000000 221.0000000000 43.0000000000 278.0000000000 43.0000000000 26.0000000000 47.0000000000 150.0000000000 50.0000000000 293.0000000000 52.0000000000 120.0000000000 53.0000000000 273.0000000000 56.0000000000 15.0000000000 58.0000000000 241.0000000000 61.0000000000 66.0000000000 65.0000000000 10.0000000000 71.0000000000 31.0000000000 74.0000000000 106.0000000000 74.0000000000 358.0000000000 84.0000000000 213.0000000000 88.0000000000 134.0000000000 103.0000000000 10.0000000000 114.0000000000 211.0000000000 115.0000000000 294.0000000000 130.0000000000 353.0000000000 136.0000000000 93.0000000000 137.0000000000 166.0000000000 139.0000000000 137.0000000000 142.0000000000 370.0000000000 147.0000000000 218.0000000000 149.0000000000 242.0000000000 161.0000000000 286.0000000000 163.0000000000 302.0000000000 165.0000000000 131.0000000000 170.0000000000 295.0000000000 172.0000000000 286.0000000000 176.0000000000 301.0000000000 181.0000000000 133.0000000000 193.0000000000 324.0000000000 196.0000000000 274.0000000000 199.0000000000 280.0000000000 208.0000000000 72.0000000000 219.0000000000 290.0000000000 226.0000000000 302.0000000000 231.0000000000 373.0000000000 259.0000000000 228.0000000000 275.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +8 11 24 10 44 11 33 10 55 11 6 10 14 11 49 10 71 11 20 10 33 11 22 10 34 11 23 10 43 11 25 10 41 +0 +9 11 51 12 52 11 47 12 40 11 39 12 31 11 46 12 39 11 14 12 7 11 31 12 20 11 32 12 24 11 44 12 35 11 50 12 50 +0 +0 +0 +0 +0 +input/parrington/prtn04.jpg +60 347.0000000000 10.0000000000 354.0000000000 10.0000000000 240.0000000000 11.0000000000 219.0000000000 16.0000000000 274.0000000000 17.0000000000 87.0000000000 24.0000000000 373.0000000000 27.0000000000 35.0000000000 36.0000000000 188.0000000000 42.0000000000 197.0000000000 42.0000000000 51.0000000000 48.0000000000 285.0000000000 64.0000000000 262.0000000000 66.0000000000 284.0000000000 76.0000000000 358.0000000000 76.0000000000 98.0000000000 78.0000000000 136.0000000000 93.0000000000 249.0000000000 111.0000000000 142.0000000000 113.0000000000 231.0000000000 113.0000000000 49.0000000000 125.0000000000 273.0000000000 126.0000000000 199.0000000000 128.0000000000 174.0000000000 130.0000000000 107.0000000000 131.0000000000 187.0000000000 136.0000000000 127.0000000000 140.0000000000 194.0000000000 140.0000000000 219.0000000000 144.0000000000 198.0000000000 149.0000000000 216.0000000000 156.0000000000 41.0000000000 157.0000000000 299.0000000000 157.0000000000 328.0000000000 158.0000000000 203.0000000000 169.0000000000 56.0000000000 175.0000000000 240.0000000000 183.0000000000 35.0000000000 191.0000000000 34.0000000000 192.0000000000 78.0000000000 192.0000000000 29.0000000000 193.0000000000 177.0000000000 193.0000000000 254.0000000000 194.0000000000 246.0000000000 202.0000000000 372.0000000000 202.0000000000 316.0000000000 203.0000000000 296.0000000000 211.0000000000 337.0000000000 213.0000000000 33.0000000000 217.0000000000 264.0000000000 219.0000000000 44.0000000000 221.0000000000 367.0000000000 226.0000000000 56.0000000000 227.0000000000 127.0000000000 255.0000000000 168.0000000000 267.0000000000 314.0000000000 271.0000000000 182.0000000000 276.0000000000 165.0000000000 279.0000000000 336.0000000000 291.0000000000 309.0000000000 292.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +9 12 40 11 47 12 7 11 14 12 50 11 50 12 24 11 32 12 20 11 31 12 31 11 39 12 35 11 44 12 39 11 46 12 52 11 51 +0 +11 12 11 13 11 12 51 13 43 12 49 13 42 12 59 13 50 12 1 13 1 12 32 13 21 12 33 13 23 12 44 13 39 12 45 13 38 12 46 13 41 12 58 13 49 +0 +0 +0 +0 +input/parrington/prtn03.jpg +57 23.0000000000 10.0000000000 103.0000000000 10.0000000000 240.0000000000 10.0000000000 286.0000000000 10.0000000000 329.0000000000 11.0000000000 94.0000000000 13.0000000000 155.0000000000 13.0000000000 59.0000000000 16.0000000000 366.0000000000 23.0000000000 373.0000000000 36.0000000000 10.0000000000 57.0000000000 33.0000000000 57.0000000000 48.0000000000 66.0000000000 202.0000000000 79.0000000000 222.0000000000 79.0000000000 238.0000000000 87.0000000000 214.0000000000 95.0000000000 180.0000000000 100.0000000000 291.0000000000 106.0000000000 158.0000000000 107.0000000000 196.0000000000 148.0000000000 45.0000000000 152.0000000000 220.0000000000 153.0000000000 74.0000000000 154.0000000000 249.0000000000 154.0000000000 243.0000000000 155.0000000000 133.0000000000 158.0000000000 293.0000000000 163.0000000000 318.0000000000 164.0000000000 210.0000000000 168.0000000000 267.0000000000 172.0000000000 330.0000000000 173.0000000000 307.0000000000 176.0000000000 236.0000000000 177.0000000000 249.0000000000 179.0000000000 315.0000000000 179.0000000000 10.0000000000 191.0000000000 237.0000000000 194.0000000000 61.0000000000 199.0000000000 117.0000000000 199.0000000000 208.0000000000 201.0000000000 42.0000000000 206.0000000000 10.0000000000 214.0000000000 112.0000000000 223.0000000000 270.0000000000 227.0000000000 331.0000000000 248.0000000000 230.0000000000 282.0000000000 260.0000000000 284.0000000000 286.0000000000 286.0000000000 81.0000000000 287.0000000000 55.0000000000 288.0000000000 308.0000000000 288.0000000000 136.0000000000 289.0000000000 321.0000000000 293.0000000000 262.0000000000 296.0000000000 287.0000000000 301.0000000000 307.0000000000 304.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +13 13 1 12 1 13 49 12 58 13 41 12 46 13 0 12 4 13 10 12 12 13 11 12 11 13 21 12 32 13 23 12 33 13 38 12 45 13 39 12 44 13 42 12 49 13 43 12 51 13 50 12 59 +0 +11 13 51 14 73 13 30 14 48 13 4 14 0 13 44 14 66 13 28 14 46 13 31 14 50 13 47 14 71 13 48 14 72 13 54 14 75 13 55 14 77 13 56 14 81 +0 +0 +0 +input/parrington/prtn02.jpg +92 88.0000000000 10.0000000000 151.0000000000 10.0000000000 191.0000000000 10.0000000000 247.0000000000 11.0000000000 137.0000000000 17.0000000000 152.0000000000 18.0000000000 123.0000000000 21.0000000000 191.0000000000 21.0000000000 230.0000000000 24.0000000000 158.0000000000 25.0000000000 21.0000000000 27.0000000000 208.0000000000 31.0000000000 184.0000000000 33.0000000000 145.0000000000 43.0000000000 149.0000000000 61.0000000000 155.0000000000 66.0000000000 162.0000000000 71.0000000000 220.0000000000 74.0000000000 160.0000000000 85.0000000000 229.0000000000 85.0000000000 224.0000000000 96.0000000000 250.0000000000 103.0000000000 283.0000000000 107.0000000000 166.0000000000 108.0000000000 154.0000000000 110.0000000000 372.0000000000 114.0000000000 125.0000000000 116.0000000000 318.0000000000 120.0000000000 224.0000000000 124.0000000000 280.0000000000 125.0000000000 287.0000000000 125.0000000000 150.0000000000 127.0000000000 314.0000000000 130.0000000000 363.0000000000 131.0000000000 286.0000000000 136.0000000000 305.0000000000 136.0000000000 130.0000000000 138.0000000000 373.0000000000 141.0000000000 10.0000000000 142.0000000000 314.0000000000 143.0000000000 364.0000000000 144.0000000000 247.0000000000 147.0000000000 219.0000000000 149.0000000000 280.0000000000 151.0000000000 277.0000000000 156.0000000000 368.0000000000 156.0000000000 74.0000000000 160.0000000000 293.0000000000 163.0000000000 22.0000000000 166.0000000000 10.0000000000 169.0000000000 85.0000000000 169.0000000000 59.0000000000 177.0000000000 187.0000000000 177.0000000000 338.0000000000 177.0000000000 373.0000000000 180.0000000000 166.0000000000 185.0000000000 370.0000000000 193.0000000000 88.0000000000 197.0000000000 178.0000000000 199.0000000000 165.0000000000 200.0000000000 261.0000000000 204.0000000000 370.0000000000 204.0000000000 334.0000000000 206.0000000000 276.0000000000 207.0000000000 242.0000000000 213.0000000000 297.0000000000 221.0000000000 24.0000000000 222.0000000000 228.0000000000 227.0000000000 240.0000000000 230.0000000000 251.0000000000 255.0000000000 352.0000000000 269.0000000000 13.0000000000 280.0000000000 40.0000000000 282.0000000000 62.0000000000 284.0000000000 75.0000000000 288.0000000000 16.0000000000 292.0000000000 228.0000000000 295.0000000000 40.0000000000 296.0000000000 215.0000000000 296.0000000000 34.0000000000 297.0000000000 136.0000000000 297.0000000000 61.0000000000 300.0000000000 208.0000000000 300.0000000000 245.0000000000 300.0000000000 315.0000000000 301.0000000000 280.0000000000 302.0000000000 191.0000000000 303.0000000000 299.0000000000 303.0000000000 345.0000000000 304.0000000000 355.0000000000 316.0000000000 367.0000000000 316.0000000000 359.0000000000 326.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +11 14 77 13 55 14 66 13 44 14 0 13 4 14 46 13 28 14 48 13 30 14 50 13 31 14 71 13 47 14 72 13 48 14 73 13 51 14 75 13 54 14 81 13 56 +0 +20 14 40 15 17 14 63 15 42 14 89 15 60 14 85 15 55 14 22 15 0 14 27 15 5 14 30 15 8 14 33 15 9 14 34 15 12 14 35 15 10 14 45 15 19 14 47 15 21 14 53 15 26 14 60 15 38 14 62 15 41 14 65 15 45 14 70 15 53 14 87 15 56 14 88 15 57 14 91 15 62 +0 +0 +input/parrington/prtn01.jpg +64 36.0000000000 101.0000000000 128.0000000000 102.0000000000 44.0000000000 104.0000000000 173.0000000000 111.0000000000 280.0000000000 113.0000000000 71.0000000000 116.0000000000 142.0000000000 118.0000000000 171.0000000000 118.0000000000 40.0000000000 119.0000000000 115.0000000000 129.0000000000 57.0000000000 130.0000000000 139.0000000000 131.0000000000 38.0000000000 133.0000000000 167.0000000000 133.0000000000 290.0000000000 134.0000000000 280.0000000000 138.0000000000 138.0000000000 140.0000000000 116.0000000000 141.0000000000 168.0000000000 149.0000000000 120.0000000000 153.0000000000 262.0000000000 156.0000000000 45.0000000000 158.0000000000 294.0000000000 165.0000000000 230.0000000000 168.0000000000 239.0000000000 169.0000000000 205.0000000000 170.0000000000 90.0000000000 173.0000000000 289.0000000000 175.0000000000 200.0000000000 177.0000000000 131.0000000000 180.0000000000 109.0000000000 181.0000000000 267.0000000000 181.0000000000 168.0000000000 187.0000000000 151.0000000000 188.0000000000 229.0000000000 188.0000000000 278.0000000000 193.0000000000 102.0000000000 195.0000000000 54.0000000000 198.0000000000 11.0000000000 199.0000000000 121.0000000000 201.0000000000 168.0000000000 201.0000000000 86.0000000000 202.0000000000 28.0000000000 203.0000000000 163.0000000000 204.0000000000 223.0000000000 209.0000000000 49.0000000000 217.0000000000 172.0000000000 217.0000000000 217.0000000000 221.0000000000 170.0000000000 231.0000000000 212.0000000000 232.0000000000 183.0000000000 235.0000000000 216.0000000000 240.0000000000 278.0000000000 247.0000000000 104.0000000000 264.0000000000 18.0000000000 293.0000000000 32.0000000000 298.0000000000 51.0000000000 298.0000000000 97.0000000000 299.0000000000 10.0000000000 301.0000000000 129.0000000000 308.0000000000 106.0000000000 310.0000000000 139.0000000000 311.0000000000 110.0000000000 321.0000000000 272.0000000000 322.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +19 15 26 14 53 15 60 14 89 15 45 14 65 15 56 14 87 15 0 14 22 15 5 14 27 15 8 14 30 15 9 14 33 15 10 14 35 15 12 14 34 15 17 14 40 15 19 14 45 15 21 14 47 15 41 14 62 15 42 14 63 15 53 14 70 15 55 14 85 15 57 14 88 15 62 14 91 +0 +0 +0 +input/parrington/prtn00.jpg +40 315.0000000000 18.0000000000 354.0000000000 19.0000000000 340.0000000000 22.0000000000 370.0000000000 32.0000000000 334.0000000000 34.0000000000 298.0000000000 55.0000000000 362.0000000000 57.0000000000 249.0000000000 60.0000000000 354.0000000000 68.0000000000 232.0000000000 72.0000000000 242.0000000000 88.0000000000 244.0000000000 100.0000000000 291.0000000000 102.0000000000 306.0000000000 103.0000000000 264.0000000000 110.0000000000 239.0000000000 119.0000000000 220.0000000000 126.0000000000 42.0000000000 128.0000000000 32.0000000000 131.0000000000 285.0000000000 132.0000000000 303.0000000000 140.0000000000 173.0000000000 142.0000000000 328.0000000000 146.0000000000 170.0000000000 147.0000000000 373.0000000000 148.0000000000 13.0000000000 149.0000000000 29.0000000000 153.0000000000 151.0000000000 155.0000000000 46.0000000000 160.0000000000 171.0000000000 160.0000000000 10.0000000000 161.0000000000 304.0000000000 161.0000000000 18.0000000000 175.0000000000 29.0000000000 188.0000000000 39.0000000000 212.0000000000 44.0000000000 213.0000000000 13.0000000000 238.0000000000 28.0000000000 242.0000000000 22.0000000000 318.0000000000 40.0000000000 320.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +8 16 28 15 22 16 33 15 35 16 17 15 14 16 38 15 63 16 18 15 15 16 25 15 20 16 32 15 31 16 37 15 52 +0 +9 16 20 17 34 16 0 17 6 16 13 17 26 16 7 17 15 16 2 17 7 16 4 17 9 16 6 17 18 16 8 17 21 16 19 17 31 +input/parrington/prtn17.jpg +50 140.0000000000 10.0000000000 152.0000000000 10.0000000000 296.0000000000 10.0000000000 307.0000000000 10.0000000000 344.0000000000 10.0000000000 371.0000000000 12.0000000000 73.0000000000 14.0000000000 100.0000000000 20.0000000000 370.0000000000 27.0000000000 92.0000000000 32.0000000000 371.0000000000 32.0000000000 325.0000000000 41.0000000000 337.0000000000 42.0000000000 366.0000000000 44.0000000000 332.0000000000 47.0000000000 10.0000000000 52.0000000000 25.0000000000 53.0000000000 349.0000000000 53.0000000000 120.0000000000 56.0000000000 285.0000000000 58.0000000000 352.0000000000 59.0000000000 112.0000000000 66.0000000000 132.0000000000 73.0000000000 313.0000000000 75.0000000000 51.0000000000 77.0000000000 28.0000000000 89.0000000000 64.0000000000 99.0000000000 21.0000000000 103.0000000000 352.0000000000 115.0000000000 318.0000000000 118.0000000000 361.0000000000 124.0000000000 42.0000000000 126.0000000000 324.0000000000 133.0000000000 266.0000000000 135.0000000000 61.0000000000 136.0000000000 84.0000000000 142.0000000000 200.0000000000 144.0000000000 129.0000000000 146.0000000000 217.0000000000 148.0000000000 322.0000000000 195.0000000000 283.0000000000 217.0000000000 316.0000000000 248.0000000000 277.0000000000 258.0000000000 297.0000000000 262.0000000000 333.0000000000 263.0000000000 305.0000000000 264.0000000000 373.0000000000 305.0000000000 273.0000000000 306.0000000000 288.0000000000 309.0000000000 202.0000000000 356.0000000000 +12 17 23 0 14 17 28 0 22 17 41 0 59 17 48 0 77 17 13 0 5 17 17 0 8 17 20 0 10 17 29 0 23 17 32 0 27 17 39 0 39 17 45 0 68 17 47 0 76 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +8 17 26 16 13 17 6 16 0 17 15 16 7 17 34 16 20 17 7 16 2 17 9 16 4 17 21 16 8 17 31 16 19 +0 diff --git a/meowpp.test/output2.jpg b/meowpp.test/output2.jpg new file mode 100644 index 0000000..33b3b8e Binary files /dev/null and b/meowpp.test/output2.jpg differ diff --git a/meowpp.test/output3.jpg b/meowpp.test/output3.jpg new file mode 100644 index 0000000..2fdc046 Binary files /dev/null and b/meowpp.test/output3.jpg differ diff --git a/meowpp.test/points.txt b/meowpp.test/points.txt new file mode 100644 index 0000000..a51f6ac --- /dev/null +++ b/meowpp.test/points.txt @@ -0,0 +1,361 @@ +18 +input/parrington/prtn16.jpg +512 384 86 10.0000000000 13.0000000000 230.0000000000 14.0000000000 87.0000000000 16.0000000000 73.0000000000 25.0000000000 88.0000000000 39.0000000000 111.0000000000 43.0000000000 122.0000000000 43.0000000000 10.0000000000 47.0000000000 95.0000000000 49.0000000000 169.0000000000 56.0000000000 96.0000000000 58.0000000000 266.0000000000 62.0000000000 11.0000000000 63.0000000000 293.0000000000 67.0000000000 59.0000000000 70.0000000000 249.0000000000 78.0000000000 123.0000000000 80.0000000000 338.0000000000 80.0000000000 128.0000000000 92.0000000000 373.0000000000 92.0000000000 189.0000000000 100.0000000000 357.0000000000 103.0000000000 97.0000000000 113.0000000000 62.0000000000 114.0000000000 303.0000000000 118.0000000000 47.0000000000 121.0000000000 121.0000000000 123.0000000000 68.0000000000 129.0000000000 334.0000000000 136.0000000000 175.0000000000 144.0000000000 316.0000000000 145.0000000000 166.0000000000 155.0000000000 199.0000000000 155.0000000000 213.0000000000 166.0000000000 132.0000000000 168.0000000000 306.0000000000 168.0000000000 145.0000000000 174.0000000000 221.0000000000 185.0000000000 133.0000000000 189.0000000000 67.0000000000 192.0000000000 236.0000000000 192.0000000000 363.0000000000 194.0000000000 294.0000000000 197.0000000000 318.0000000000 198.0000000000 372.0000000000 200.0000000000 149.0000000000 204.0000000000 303.0000000000 205.0000000000 312.0000000000 206.0000000000 15.0000000000 211.0000000000 311.0000000000 212.0000000000 162.0000000000 217.0000000000 366.0000000000 217.0000000000 221.0000000000 220.0000000000 123.0000000000 222.0000000000 286.0000000000 223.0000000000 292.0000000000 232.0000000000 260.0000000000 234.0000000000 301.0000000000 236.0000000000 329.0000000000 241.0000000000 60.0000000000 243.0000000000 223.0000000000 246.0000000000 168.0000000000 247.0000000000 211.0000000000 248.0000000000 62.0000000000 252.0000000000 198.0000000000 252.0000000000 360.0000000000 253.0000000000 146.0000000000 256.0000000000 235.0000000000 256.0000000000 47.0000000000 259.0000000000 157.0000000000 261.0000000000 365.0000000000 281.0000000000 147.0000000000 284.0000000000 158.0000000000 296.0000000000 147.0000000000 297.0000000000 115.0000000000 299.0000000000 366.0000000000 301.0000000000 15.0000000000 303.0000000000 31.0000000000 305.0000000000 314.0000000000 305.0000000000 132.0000000000 307.0000000000 158.0000000000 309.0000000000 173.0000000000 309.0000000000 319.0000000000 309.0000000000 334.0000000000 318.0000000000 149.0000000000 320.0000000000 307.0000000000 325.0000000000 +0 +15 0 17 1 22 0 51 1 65 0 56 1 74 0 11 1 13 0 13 1 15 0 21 1 27 0 24 1 31 0 28 1 38 0 46 1 62 0 54 1 69 0 55 1 73 0 57 1 76 0 65 1 85 0 75 1 97 0 83 1 105 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +11 0 77 17 48 0 14 17 23 0 59 17 41 0 5 17 13 0 8 17 17 0 22 17 28 0 23 17 29 0 27 17 32 0 39 17 39 0 68 17 45 0 76 17 47 +input/parrington/prtn15.jpg +512 384 109 240.0000000000 11.0000000000 269.0000000000 12.0000000000 225.0000000000 13.0000000000 18.0000000000 14.0000000000 213.0000000000 14.0000000000 254.0000000000 17.0000000000 288.0000000000 20.0000000000 317.0000000000 27.0000000000 245.0000000000 29.0000000000 356.0000000000 35.0000000000 193.0000000000 38.0000000000 249.0000000000 43.0000000000 333.0000000000 49.0000000000 22.0000000000 54.0000000000 140.0000000000 56.0000000000 48.0000000000 62.0000000000 373.0000000000 63.0000000000 318.0000000000 64.0000000000 237.0000000000 69.0000000000 369.0000000000 75.0000000000 14.0000000000 76.0000000000 199.0000000000 76.0000000000 94.0000000000 77.0000000000 138.0000000000 93.0000000000 263.0000000000 94.0000000000 274.0000000000 95.0000000000 248.0000000000 100.0000000000 112.0000000000 102.0000000000 196.0000000000 105.0000000000 163.0000000000 107.0000000000 176.0000000000 108.0000000000 59.0000000000 114.0000000000 147.0000000000 115.0000000000 212.0000000000 115.0000000000 200.0000000000 123.0000000000 163.0000000000 125.0000000000 195.0000000000 125.0000000000 363.0000000000 129.0000000000 89.0000000000 132.0000000000 152.0000000000 132.0000000000 241.0000000000 134.0000000000 331.0000000000 134.0000000000 74.0000000000 138.0000000000 75.0000000000 148.0000000000 239.0000000000 151.0000000000 204.0000000000 152.0000000000 260.0000000000 153.0000000000 57.0000000000 155.0000000000 233.0000000000 159.0000000000 223.0000000000 170.0000000000 232.0000000000 171.0000000000 184.0000000000 173.0000000000 281.0000000000 176.0000000000 256.0000000000 186.0000000000 318.0000000000 190.0000000000 356.0000000000 191.0000000000 235.0000000000 192.0000000000 182.0000000000 193.0000000000 373.0000000000 194.0000000000 149.0000000000 198.0000000000 159.0000000000 199.0000000000 337.0000000000 200.0000000000 57.0000000000 201.0000000000 175.0000000000 205.0000000000 68.0000000000 208.0000000000 119.0000000000 213.0000000000 293.0000000000 213.0000000000 345.0000000000 215.0000000000 130.0000000000 216.0000000000 40.0000000000 217.0000000000 81.0000000000 221.0000000000 220.0000000000 222.0000000000 239.0000000000 225.0000000000 45.0000000000 227.0000000000 13.0000000000 228.0000000000 211.0000000000 231.0000000000 55.0000000000 232.0000000000 137.0000000000 233.0000000000 214.0000000000 235.0000000000 138.0000000000 239.0000000000 254.0000000000 241.0000000000 302.0000000000 243.0000000000 373.0000000000 243.0000000000 288.0000000000 245.0000000000 168.0000000000 248.0000000000 112.0000000000 249.0000000000 146.0000000000 249.0000000000 160.0000000000 251.0000000000 198.0000000000 254.0000000000 231.0000000000 256.0000000000 288.0000000000 269.0000000000 278.0000000000 272.0000000000 146.0000000000 275.0000000000 118.0000000000 277.0000000000 373.0000000000 277.0000000000 292.0000000000 287.0000000000 313.0000000000 289.0000000000 119.0000000000 296.0000000000 289.0000000000 296.0000000000 249.0000000000 298.0000000000 227.0000000000 299.0000000000 225.0000000000 308.0000000000 311.0000000000 310.0000000000 330.0000000000 310.0000000000 342.0000000000 311.0000000000 87.0000000000 313.0000000000 180.0000000000 317.0000000000 153.0000000000 318.0000000000 60.0000000000 321.0000000000 +15 1 65 0 51 1 13 0 11 1 74 0 56 1 22 0 17 1 15 0 13 1 27 0 21 1 31 0 24 1 38 0 28 1 62 0 46 1 69 0 54 1 73 0 55 1 76 0 57 1 85 0 65 1 93 0 70 1 105 0 83 +0 +16 1 9 2 1 1 6 2 0 1 98 2 108 1 104 2 118 1 12 2 2 1 37 2 27 1 41 2 31 1 46 2 43 1 52 2 57 1 54 2 64 1 55 2 66 1 66 2 79 1 83 2 91 1 90 2 101 1 96 2 105 1 102 2 117 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn14.jpg +512 384 122 43.0000000000 13.0000000000 110.0000000000 34.0000000000 88.0000000000 47.0000000000 31.0000000000 48.0000000000 273.0000000000 55.0000000000 218.0000000000 59.0000000000 22.0000000000 66.0000000000 35.0000000000 67.0000000000 129.0000000000 67.0000000000 278.0000000000 69.0000000000 180.0000000000 71.0000000000 121.0000000000 74.0000000000 323.0000000000 75.0000000000 338.0000000000 76.0000000000 136.0000000000 78.0000000000 368.0000000000 80.0000000000 194.0000000000 88.0000000000 285.0000000000 89.0000000000 355.0000000000 96.0000000000 140.0000000000 98.0000000000 151.0000000000 100.0000000000 323.0000000000 103.0000000000 195.0000000000 107.0000000000 277.0000000000 109.0000000000 204.0000000000 111.0000000000 317.0000000000 113.0000000000 150.0000000000 118.0000000000 114.0000000000 126.0000000000 158.0000000000 126.0000000000 235.0000000000 126.0000000000 316.0000000000 128.0000000000 84.0000000000 131.0000000000 249.0000000000 134.0000000000 320.0000000000 135.0000000000 371.0000000000 135.0000000000 188.0000000000 136.0000000000 238.0000000000 136.0000000000 255.0000000000 137.0000000000 190.0000000000 139.0000000000 212.0000000000 139.0000000000 202.0000000000 141.0000000000 154.0000000000 144.0000000000 345.0000000000 144.0000000000 11.0000000000 146.0000000000 162.0000000000 148.0000000000 372.0000000000 148.0000000000 266.0000000000 149.0000000000 322.0000000000 150.0000000000 202.0000000000 152.0000000000 48.0000000000 154.0000000000 308.0000000000 154.0000000000 319.0000000000 155.0000000000 207.0000000000 163.0000000000 164.0000000000 164.0000000000 214.0000000000 167.0000000000 181.0000000000 170.0000000000 285.0000000000 170.0000000000 33.0000000000 171.0000000000 313.0000000000 172.0000000000 155.0000000000 176.0000000000 264.0000000000 180.0000000000 192.0000000000 182.0000000000 157.0000000000 183.0000000000 267.0000000000 185.0000000000 69.0000000000 186.0000000000 10.0000000000 188.0000000000 107.0000000000 188.0000000000 137.0000000000 188.0000000000 168.0000000000 188.0000000000 213.0000000000 190.0000000000 87.0000000000 191.0000000000 127.0000000000 191.0000000000 224.0000000000 192.0000000000 58.0000000000 196.0000000000 150.0000000000 197.0000000000 203.0000000000 197.0000000000 169.0000000000 203.0000000000 218.0000000000 207.0000000000 54.0000000000 208.0000000000 44.0000000000 209.0000000000 287.0000000000 209.0000000000 288.0000000000 223.0000000000 200.0000000000 224.0000000000 158.0000000000 225.0000000000 181.0000000000 229.0000000000 249.0000000000 229.0000000000 17.0000000000 236.0000000000 204.0000000000 237.0000000000 124.0000000000 240.0000000000 359.0000000000 240.0000000000 373.0000000000 240.0000000000 39.0000000000 241.0000000000 158.0000000000 241.0000000000 28.0000000000 244.0000000000 48.0000000000 244.0000000000 129.0000000000 254.0000000000 142.0000000000 257.0000000000 317.0000000000 257.0000000000 154.0000000000 258.0000000000 292.0000000000 261.0000000000 361.0000000000 262.0000000000 39.0000000000 265.0000000000 207.0000000000 276.0000000000 146.0000000000 278.0000000000 41.0000000000 284.0000000000 64.0000000000 284.0000000000 197.0000000000 288.0000000000 345.0000000000 290.0000000000 39.0000000000 292.0000000000 233.0000000000 293.0000000000 330.0000000000 293.0000000000 356.0000000000 294.0000000000 355.0000000000 295.0000000000 224.0000000000 296.0000000000 219.0000000000 300.0000000000 201.0000000000 302.0000000000 164.0000000000 304.0000000000 62.0000000000 306.0000000000 92.0000000000 306.0000000000 134.0000000000 307.0000000000 154.0000000000 307.0000000000 172.0000000000 307.0000000000 +0 +14 2 27 1 37 2 118 1 104 2 0 1 6 2 91 1 83 2 1 1 9 2 2 1 12 2 43 1 46 2 57 1 52 2 66 1 55 2 79 1 66 2 101 1 90 2 105 1 96 2 108 1 98 2 117 1 102 +0 +22 2 81 3 58 2 4 3 8 2 89 3 61 2 21 3 22 2 9 3 12 2 13 3 14 2 17 3 17 2 18 3 21 2 23 3 23 2 25 3 24 2 30 3 28 2 42 3 35 2 47 3 38 2 50 3 39 2 56 3 42 2 58 3 44 2 60 3 46 2 63 3 49 2 80 3 54 2 99 3 69 2 107 3 76 2 110 3 79 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn13.jpg +512 384 85 265.0000000000 10.0000000000 336.0000000000 19.0000000000 274.0000000000 27.0000000000 336.0000000000 34.0000000000 75.0000000000 35.0000000000 349.0000000000 45.0000000000 298.0000000000 46.0000000000 337.0000000000 47.0000000000 21.0000000000 48.0000000000 320.0000000000 50.0000000000 368.0000000000 55.0000000000 337.0000000000 60.0000000000 27.0000000000 63.0000000000 368.0000000000 70.0000000000 87.0000000000 73.0000000000 292.0000000000 76.0000000000 317.0000000000 78.0000000000 33.0000000000 82.0000000000 353.0000000000 83.0000000000 67.0000000000 84.0000000000 336.0000000000 92.0000000000 102.0000000000 94.0000000000 71.0000000000 99.0000000000 24.0000000000 102.0000000000 64.0000000000 108.0000000000 10.0000000000 110.0000000000 270.0000000000 110.0000000000 350.0000000000 119.0000000000 63.0000000000 123.0000000000 122.0000000000 126.0000000000 337.0000000000 129.0000000000 324.0000000000 130.0000000000 118.0000000000 133.0000000000 127.0000000000 135.0000000000 49.0000000000 139.0000000000 92.0000000000 141.0000000000 118.0000000000 145.0000000000 232.0000000000 145.0000000000 69.0000000000 146.0000000000 55.0000000000 149.0000000000 16.0000000000 157.0000000000 293.0000000000 163.0000000000 33.0000000000 164.0000000000 66.0000000000 165.0000000000 60.0000000000 168.0000000000 270.0000000000 168.0000000000 10.0000000000 173.0000000000 268.0000000000 173.0000000000 175.0000000000 175.0000000000 13.0000000000 179.0000000000 185.0000000000 184.0000000000 350.0000000000 193.0000000000 334.0000000000 201.0000000000 219.0000000000 203.0000000000 32.0000000000 205.0000000000 177.0000000000 205.0000000000 273.0000000000 209.0000000000 261.0000000000 216.0000000000 34.0000000000 218.0000000000 184.0000000000 227.0000000000 210.0000000000 231.0000000000 105.0000000000 236.0000000000 118.0000000000 236.0000000000 198.0000000000 239.0000000000 334.0000000000 243.0000000000 257.0000000000 246.0000000000 62.0000000000 252.0000000000 351.0000000000 252.0000000000 368.0000000000 254.0000000000 37.0000000000 256.0000000000 202.0000000000 261.0000000000 214.0000000000 262.0000000000 75.0000000000 263.0000000000 35.0000000000 265.0000000000 226.0000000000 267.0000000000 305.0000000000 280.0000000000 91.0000000000 285.0000000000 293.0000000000 286.0000000000 120.0000000000 288.0000000000 76.0000000000 290.0000000000 190.0000000000 290.0000000000 338.0000000000 321.0000000000 332.0000000000 330.0000000000 351.0000000000 362.0000000000 336.0000000000 363.0000000000 +0 +0 +21 3 17 2 17 3 22 2 21 3 46 2 60 3 79 2 110 3 8 2 4 3 12 2 9 3 14 2 13 3 21 2 18 3 23 2 23 3 24 2 25 3 28 2 30 3 35 2 42 3 38 2 47 3 39 2 50 3 42 2 56 3 54 2 80 3 58 2 81 3 61 2 89 3 66 2 97 3 69 2 99 3 76 2 107 +0 +23 3 81 4 75 3 3 4 10 3 6 4 13 3 82 4 76 3 1 4 4 3 5 4 15 3 7 4 16 3 9 4 18 3 15 4 23 3 16 4 25 3 20 4 33 3 26 4 36 3 27 4 40 3 31 4 44 3 41 4 53 3 47 4 56 3 52 4 59 3 57 4 62 3 65 4 67 3 67 4 69 3 77 4 74 3 83 4 77 3 84 4 78 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn12.jpg +512 384 79 119.0000000000 10.0000000000 168.0000000000 10.0000000000 340.0000000000 10.0000000000 373.0000000000 11.0000000000 96.0000000000 17.0000000000 257.0000000000 18.0000000000 33.0000000000 22.0000000000 156.0000000000 23.0000000000 365.0000000000 23.0000000000 188.0000000000 27.0000000000 95.0000000000 31.0000000000 373.0000000000 31.0000000000 243.0000000000 33.0000000000 57.0000000000 40.0000000000 24.0000000000 43.0000000000 107.0000000000 44.0000000000 95.0000000000 46.0000000000 349.0000000000 46.0000000000 79.0000000000 47.0000000000 249.0000000000 47.0000000000 126.0000000000 54.0000000000 219.0000000000 61.0000000000 96.0000000000 63.0000000000 49.0000000000 69.0000000000 303.0000000000 71.0000000000 75.0000000000 74.0000000000 227.0000000000 74.0000000000 237.0000000000 76.0000000000 356.0000000000 77.0000000000 38.0000000000 80.0000000000 110.0000000000 82.0000000000 240.0000000000 87.0000000000 373.0000000000 88.0000000000 93.0000000000 89.0000000000 139.0000000000 90.0000000000 167.0000000000 99.0000000000 26.0000000000 103.0000000000 308.0000000000 103.0000000000 180.0000000000 108.0000000000 349.0000000000 112.0000000000 107.0000000000 116.0000000000 162.0000000000 117.0000000000 184.0000000000 123.0000000000 326.0000000000 123.0000000000 81.0000000000 126.0000000000 93.0000000000 126.0000000000 57.0000000000 130.0000000000 164.0000000000 138.0000000000 153.0000000000 139.0000000000 178.0000000000 139.0000000000 28.0000000000 141.0000000000 182.0000000000 150.0000000000 361.0000000000 152.0000000000 49.0000000000 158.0000000000 318.0000000000 159.0000000000 131.0000000000 165.0000000000 24.0000000000 168.0000000000 188.0000000000 180.0000000000 342.0000000000 181.0000000000 89.0000000000 198.0000000000 184.0000000000 199.0000000000 163.0000000000 209.0000000000 15.0000000000 211.0000000000 354.0000000000 220.0000000000 338.0000000000 226.0000000000 83.0000000000 233.0000000000 132.0000000000 233.0000000000 11.0000000000 242.0000000000 124.0000000000 243.0000000000 106.0000000000 248.0000000000 152.0000000000 259.0000000000 216.0000000000 272.0000000000 154.0000000000 276.0000000000 231.0000000000 277.0000000000 48.0000000000 282.0000000000 93.0000000000 316.0000000000 87.0000000000 325.0000000000 107.0000000000 356.0000000000 92.0000000000 358.0000000000 +0 +0 +0 +22 4 75 3 81 4 74 3 77 4 23 3 15 4 15 3 5 4 4 3 1 4 10 3 3 4 13 3 6 4 16 3 7 4 18 3 9 4 25 3 16 4 33 3 20 4 36 3 26 4 44 3 31 4 53 3 41 4 56 3 47 4 59 3 52 4 62 3 57 4 67 3 65 4 69 3 67 4 76 3 82 4 77 3 83 4 78 3 84 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn11.jpg +512 384 88 325.0000000000 10.0000000000 352.0000000000 11.0000000000 268.0000000000 13.0000000000 301.0000000000 13.0000000000 313.0000000000 13.0000000000 10.0000000000 14.0000000000 373.0000000000 17.0000000000 188.0000000000 20.0000000000 217.0000000000 21.0000000000 120.0000000000 23.0000000000 283.0000000000 28.0000000000 346.0000000000 28.0000000000 159.0000000000 30.0000000000 301.0000000000 30.0000000000 316.0000000000 33.0000000000 357.0000000000 34.0000000000 138.0000000000 36.0000000000 366.0000000000 36.0000000000 188.0000000000 40.0000000000 343.0000000000 44.0000000000 283.0000000000 45.0000000000 373.0000000000 49.0000000000 165.0000000000 56.0000000000 213.0000000000 56.0000000000 245.0000000000 62.0000000000 364.0000000000 63.0000000000 55.0000000000 65.0000000000 289.0000000000 67.0000000000 302.0000000000 67.0000000000 371.0000000000 67.0000000000 320.0000000000 70.0000000000 107.0000000000 75.0000000000 209.0000000000 75.0000000000 346.0000000000 76.0000000000 278.0000000000 80.0000000000 307.0000000000 82.0000000000 326.0000000000 84.0000000000 362.0000000000 84.0000000000 173.0000000000 85.0000000000 214.0000000000 85.0000000000 338.0000000000 88.0000000000 256.0000000000 90.0000000000 277.0000000000 93.0000000000 60.0000000000 98.0000000000 244.0000000000 101.0000000000 362.0000000000 101.0000000000 347.0000000000 106.0000000000 99.0000000000 109.0000000000 174.0000000000 113.0000000000 293.0000000000 114.0000000000 78.0000000000 119.0000000000 234.0000000000 120.0000000000 299.0000000000 121.0000000000 311.0000000000 122.0000000000 183.0000000000 131.0000000000 310.0000000000 136.0000000000 371.0000000000 137.0000000000 373.0000000000 139.0000000000 279.0000000000 140.0000000000 127.0000000000 145.0000000000 111.0000000000 149.0000000000 313.0000000000 149.0000000000 367.0000000000 149.0000000000 166.0000000000 151.0000000000 365.0000000000 152.0000000000 229.0000000000 153.0000000000 69.0000000000 155.0000000000 216.0000000000 156.0000000000 169.0000000000 158.0000000000 197.0000000000 159.0000000000 242.0000000000 160.0000000000 262.0000000000 161.0000000000 132.0000000000 164.0000000000 299.0000000000 167.0000000000 216.0000000000 168.0000000000 337.0000000000 168.0000000000 182.0000000000 171.0000000000 252.0000000000 171.0000000000 91.0000000000 177.0000000000 159.0000000000 181.0000000000 209.0000000000 185.0000000000 131.0000000000 187.0000000000 263.0000000000 187.0000000000 360.0000000000 193.0000000000 158.0000000000 196.0000000000 160.0000000000 203.0000000000 87.0000000000 222.0000000000 128.0000000000 262.0000000000 +0 +0 +0 +0 +9 5 86 4 64 5 60 4 52 5 31 4 28 5 26 4 24 5 43 4 37 5 47 4 39 5 50 4 43 5 66 4 54 5 78 4 58 +0 +24 5 10 6 8 5 37 6 46 5 58 6 73 5 61 6 76 5 13 6 9 5 14 6 11 5 15 6 12 5 19 6 20 5 28 6 36 5 30 6 39 5 33 6 43 5 34 6 42 5 35 6 44 5 36 6 45 5 40 6 48 5 45 6 56 5 46 6 59 5 52 6 66 5 53 6 65 5 57 6 75 5 62 6 79 5 75 6 88 5 82 6 94 5 83 6 99 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn10.jpg +512 384 100 47.0000000000 10.0000000000 111.0000000000 10.0000000000 120.0000000000 10.0000000000 139.0000000000 10.0000000000 220.0000000000 10.0000000000 273.0000000000 10.0000000000 246.0000000000 12.0000000000 206.0000000000 13.0000000000 32.0000000000 20.0000000000 51.0000000000 24.0000000000 111.0000000000 28.0000000000 66.0000000000 29.0000000000 106.0000000000 33.0000000000 169.0000000000 35.0000000000 362.0000000000 35.0000000000 315.0000000000 36.0000000000 157.0000000000 37.0000000000 161.0000000000 37.0000000000 213.0000000000 37.0000000000 268.0000000000 40.0000000000 92.0000000000 42.0000000000 135.0000000000 42.0000000000 276.0000000000 42.0000000000 281.0000000000 43.0000000000 327.0000000000 44.0000000000 10.0000000000 48.0000000000 328.0000000000 49.0000000000 123.0000000000 50.0000000000 348.0000000000 51.0000000000 145.0000000000 56.0000000000 96.0000000000 58.0000000000 259.0000000000 59.0000000000 268.0000000000 59.0000000000 11.0000000000 60.0000000000 37.0000000000 60.0000000000 45.0000000000 62.0000000000 51.0000000000 62.0000000000 216.0000000000 62.0000000000 188.0000000000 65.0000000000 68.0000000000 67.0000000000 100.0000000000 67.0000000000 281.0000000000 70.0000000000 25.0000000000 72.0000000000 95.0000000000 73.0000000000 55.0000000000 76.0000000000 74.0000000000 80.0000000000 110.0000000000 82.0000000000 315.0000000000 84.0000000000 86.0000000000 85.0000000000 164.0000000000 88.0000000000 266.0000000000 89.0000000000 242.0000000000 91.0000000000 183.0000000000 93.0000000000 372.0000000000 94.0000000000 47.0000000000 95.0000000000 341.0000000000 97.0000000000 109.0000000000 100.0000000000 354.0000000000 101.0000000000 364.0000000000 102.0000000000 94.0000000000 104.0000000000 260.0000000000 105.0000000000 11.0000000000 109.0000000000 211.0000000000 110.0000000000 206.0000000000 111.0000000000 280.0000000000 112.0000000000 58.0000000000 115.0000000000 46.0000000000 116.0000000000 178.0000000000 118.0000000000 133.0000000000 121.0000000000 205.0000000000 123.0000000000 307.0000000000 123.0000000000 358.0000000000 125.0000000000 196.0000000000 130.0000000000 26.0000000000 133.0000000000 130.0000000000 133.0000000000 120.0000000000 138.0000000000 60.0000000000 144.0000000000 125.0000000000 145.0000000000 222.0000000000 145.0000000000 113.0000000000 147.0000000000 368.0000000000 150.0000000000 332.0000000000 153.0000000000 364.0000000000 153.0000000000 268.0000000000 156.0000000000 351.0000000000 157.0000000000 174.0000000000 160.0000000000 282.0000000000 160.0000000000 189.0000000000 162.0000000000 84.0000000000 165.0000000000 198.0000000000 165.0000000000 131.0000000000 168.0000000000 147.0000000000 171.0000000000 254.0000000000 173.0000000000 243.0000000000 175.0000000000 10.0000000000 180.0000000000 138.0000000000 182.0000000000 240.0000000000 183.0000000000 324.0000000000 185.0000000000 341.0000000000 189.0000000000 105.0000000000 190.0000000000 +0 +0 +0 +0 +0 +24 6 11 5 14 6 73 5 58 6 99 5 83 6 12 5 15 6 8 5 10 6 9 5 13 6 20 5 19 6 34 5 27 6 36 5 28 6 39 5 30 6 42 5 34 6 43 5 33 6 44 5 35 6 45 5 36 6 46 5 37 6 48 5 40 6 56 5 45 6 59 5 46 6 65 5 53 6 66 5 52 6 75 5 57 6 76 5 61 6 79 5 62 6 88 5 75 +0 +18 6 84 7 45 6 60 7 25 6 32 7 13 6 71 7 36 6 15 7 6 6 19 7 5 6 23 7 8 6 24 7 9 6 26 7 10 6 31 7 12 6 47 7 21 6 55 7 24 6 58 7 27 6 64 7 29 6 70 7 32 6 82 7 44 6 83 7 43 6 98 7 48 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn09.jpg +512 384 52 169.0000000000 10.0000000000 131.0000000000 11.0000000000 300.0000000000 11.0000000000 277.0000000000 12.0000000000 84.0000000000 15.0000000000 26.0000000000 32.0000000000 74.0000000000 32.0000000000 166.0000000000 35.0000000000 39.0000000000 36.0000000000 86.0000000000 40.0000000000 87.0000000000 46.0000000000 10.0000000000 49.0000000000 17.0000000000 51.0000000000 26.0000000000 52.0000000000 97.0000000000 55.0000000000 10.0000000000 56.0000000000 154.0000000000 58.0000000000 158.0000000000 59.0000000000 281.0000000000 61.0000000000 38.0000000000 64.0000000000 247.0000000000 73.0000000000 72.0000000000 79.0000000000 254.0000000000 85.0000000000 24.0000000000 87.0000000000 98.0000000000 94.0000000000 17.0000000000 98.0000000000 213.0000000000 98.0000000000 121.0000000000 100.0000000000 280.0000000000 100.0000000000 36.0000000000 106.0000000000 263.0000000000 108.0000000000 275.0000000000 109.0000000000 63.0000000000 118.0000000000 284.0000000000 119.0000000000 317.0000000000 119.0000000000 268.0000000000 122.0000000000 114.0000000000 123.0000000000 296.0000000000 123.0000000000 264.0000000000 133.0000000000 17.0000000000 134.0000000000 327.0000000000 135.0000000000 89.0000000000 143.0000000000 123.0000000000 148.0000000000 23.0000000000 149.0000000000 120.0000000000 151.0000000000 107.0000000000 154.0000000000 76.0000000000 163.0000000000 10.0000000000 167.0000000000 97.0000000000 185.0000000000 333.0000000000 203.0000000000 368.0000000000 217.0000000000 250.0000000000 218.0000000000 +0 +0 +0 +0 +0 +0 +18 7 8 6 23 7 36 6 71 7 43 6 83 7 6 6 15 7 5 6 19 7 9 6 24 7 10 6 26 7 12 6 31 7 13 6 32 7 19 6 41 7 21 6 47 7 24 6 55 7 25 6 60 7 29 6 64 7 32 6 70 7 44 6 82 7 45 6 84 7 48 6 98 +0 +11 7 35 8 38 7 34 8 37 7 49 8 51 7 38 8 42 7 18 8 15 7 28 8 31 7 30 8 34 7 31 8 35 7 37 8 39 7 40 8 44 7 50 8 54 +0 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn08.jpg +512 384 60 204.0000000000 10.0000000000 256.0000000000 10.0000000000 315.0000000000 10.0000000000 360.0000000000 10.0000000000 283.0000000000 15.0000000000 271.0000000000 17.0000000000 299.0000000000 21.0000000000 29.0000000000 24.0000000000 254.0000000000 24.0000000000 210.0000000000 29.0000000000 207.0000000000 33.0000000000 286.0000000000 35.0000000000 147.0000000000 36.0000000000 188.0000000000 46.0000000000 10.0000000000 51.0000000000 34.0000000000 54.0000000000 163.0000000000 57.0000000000 265.0000000000 59.0000000000 247.0000000000 62.0000000000 311.0000000000 63.0000000000 144.0000000000 65.0000000000 175.0000000000 69.0000000000 204.0000000000 71.0000000000 329.0000000000 74.0000000000 352.0000000000 74.0000000000 249.0000000000 75.0000000000 344.0000000000 76.0000000000 10.0000000000 78.0000000000 141.0000000000 89.0000000000 207.0000000000 90.0000000000 337.0000000000 92.0000000000 32.0000000000 94.0000000000 172.0000000000 95.0000000000 185.0000000000 99.0000000000 14.0000000000 101.0000000000 26.0000000000 102.0000000000 203.0000000000 104.0000000000 68.0000000000 115.0000000000 19.0000000000 116.0000000000 48.0000000000 117.0000000000 14.0000000000 119.0000000000 145.0000000000 122.0000000000 15.0000000000 127.0000000000 347.0000000000 130.0000000000 79.0000000000 131.0000000000 299.0000000000 133.0000000000 346.0000000000 144.0000000000 273.0000000000 154.0000000000 351.0000000000 157.0000000000 293.0000000000 166.0000000000 282.0000000000 177.0000000000 83.0000000000 199.0000000000 148.0000000000 208.0000000000 222.0000000000 211.0000000000 118.0000000000 214.0000000000 267.0000000000 218.0000000000 199.0000000000 222.0000000000 253.0000000000 223.0000000000 172.0000000000 226.0000000000 210.0000000000 227.0000000000 +0 +0 +0 +0 +0 +0 +0 +11 8 42 7 38 8 31 7 28 8 54 7 50 8 15 7 18 8 34 7 30 8 35 7 31 8 37 7 34 8 38 7 35 8 39 7 37 8 44 7 40 8 51 7 49 +0 +14 8 6 9 6 8 50 9 65 8 43 9 48 8 17 9 24 8 3 9 3 8 5 9 0 8 23 9 34 8 24 9 35 8 26 9 36 8 30 9 41 8 45 9 49 8 46 9 55 8 47 9 57 8 48 9 60 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn07.jpg +512 384 82 23.0000000000 10.0000000000 39.0000000000 10.0000000000 64.0000000000 10.0000000000 112.0000000000 10.0000000000 336.0000000000 10.0000000000 217.0000000000 13.0000000000 51.0000000000 15.0000000000 195.0000000000 16.0000000000 144.0000000000 17.0000000000 183.0000000000 20.0000000000 298.0000000000 20.0000000000 294.0000000000 26.0000000000 304.0000000000 29.0000000000 328.0000000000 29.0000000000 281.0000000000 30.0000000000 307.0000000000 34.0000000000 148.0000000000 38.0000000000 56.0000000000 39.0000000000 175.0000000000 40.0000000000 302.0000000000 40.0000000000 338.0000000000 42.0000000000 185.0000000000 43.0000000000 155.0000000000 46.0000000000 360.0000000000 49.0000000000 15.0000000000 50.0000000000 174.0000000000 54.0000000000 133.0000000000 55.0000000000 221.0000000000 56.0000000000 306.0000000000 58.0000000000 62.0000000000 59.0000000000 321.0000000000 59.0000000000 258.0000000000 62.0000000000 200.0000000000 63.0000000000 297.0000000000 69.0000000000 80.0000000000 70.0000000000 103.0000000000 70.0000000000 94.0000000000 74.0000000000 296.0000000000 77.0000000000 198.0000000000 80.0000000000 261.0000000000 85.0000000000 214.0000000000 87.0000000000 87.0000000000 88.0000000000 220.0000000000 96.0000000000 337.0000000000 96.0000000000 226.0000000000 101.0000000000 153.0000000000 106.0000000000 190.0000000000 122.0000000000 221.0000000000 122.0000000000 97.0000000000 126.0000000000 48.0000000000 128.0000000000 326.0000000000 132.0000000000 355.0000000000 132.0000000000 308.0000000000 133.0000000000 362.0000000000 133.0000000000 362.0000000000 138.0000000000 95.0000000000 141.0000000000 202.0000000000 142.0000000000 23.0000000000 146.0000000000 348.0000000000 146.0000000000 69.0000000000 149.0000000000 99.0000000000 153.0000000000 299.0000000000 153.0000000000 218.0000000000 158.0000000000 59.0000000000 159.0000000000 346.0000000000 164.0000000000 30.0000000000 171.0000000000 223.0000000000 171.0000000000 235.0000000000 173.0000000000 287.0000000000 190.0000000000 299.0000000000 190.0000000000 212.0000000000 195.0000000000 252.0000000000 208.0000000000 297.0000000000 217.0000000000 10.0000000000 220.0000000000 20.0000000000 222.0000000000 225.0000000000 222.0000000000 123.0000000000 225.0000000000 170.0000000000 228.0000000000 135.0000000000 236.0000000000 307.0000000000 241.0000000000 197.0000000000 244.0000000000 133.0000000000 246.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +13 9 6 8 6 9 65 8 50 9 24 8 17 9 48 8 43 9 0 8 5 9 3 8 3 9 34 8 23 9 35 8 24 9 36 8 26 9 41 8 30 9 49 8 45 9 55 8 46 9 57 8 47 +0 +21 9 58 10 56 9 79 10 72 9 39 10 39 9 11 10 7 9 4 10 0 9 13 10 10 9 14 10 9 9 23 10 22 9 28 10 24 9 30 10 26 9 31 10 25 9 33 10 28 9 37 10 36 9 50 10 53 9 51 10 54 9 52 10 52 9 61 10 58 9 64 10 61 9 68 10 67 9 69 10 68 9 72 10 70 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn06.jpg +512 384 73 95.0000000000 10.0000000000 148.0000000000 10.0000000000 218.0000000000 10.0000000000 329.0000000000 10.0000000000 81.0000000000 11.0000000000 189.0000000000 13.0000000000 366.0000000000 18.0000000000 52.0000000000 19.0000000000 209.0000000000 20.0000000000 39.0000000000 23.0000000000 86.0000000000 25.0000000000 136.0000000000 26.0000000000 254.0000000000 26.0000000000 268.0000000000 26.0000000000 349.0000000000 26.0000000000 222.0000000000 28.0000000000 154.0000000000 35.0000000000 122.0000000000 36.0000000000 136.0000000000 36.0000000000 180.0000000000 36.0000000000 48.0000000000 37.0000000000 146.0000000000 45.0000000000 116.0000000000 49.0000000000 373.0000000000 52.0000000000 62.0000000000 53.0000000000 14.0000000000 54.0000000000 78.0000000000 55.0000000000 55.0000000000 58.0000000000 53.0000000000 64.0000000000 352.0000000000 64.0000000000 133.0000000000 65.0000000000 229.0000000000 65.0000000000 372.0000000000 65.0000000000 269.0000000000 67.0000000000 320.0000000000 69.0000000000 146.0000000000 70.0000000000 52.0000000000 72.0000000000 212.0000000000 72.0000000000 10.0000000000 74.0000000000 16.0000000000 77.0000000000 352.0000000000 77.0000000000 360.0000000000 77.0000000000 208.0000000000 78.0000000000 263.0000000000 79.0000000000 285.0000000000 81.0000000000 80.0000000000 93.0000000000 146.0000000000 101.0000000000 212.0000000000 103.0000000000 146.0000000000 114.0000000000 49.0000000000 116.0000000000 260.0000000000 120.0000000000 147.0000000000 124.0000000000 63.0000000000 129.0000000000 82.0000000000 129.0000000000 110.0000000000 130.0000000000 348.0000000000 140.0000000000 103.0000000000 143.0000000000 221.0000000000 143.0000000000 54.0000000000 148.0000000000 166.0000000000 152.0000000000 194.0000000000 157.0000000000 101.0000000000 161.0000000000 142.0000000000 161.0000000000 220.0000000000 161.0000000000 163.0000000000 165.0000000000 198.0000000000 165.0000000000 185.0000000000 177.0000000000 41.0000000000 185.0000000000 54.0000000000 186.0000000000 51.0000000000 204.0000000000 52.0000000000 213.0000000000 328.0000000000 223.0000000000 61.0000000000 236.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +20 10 58 9 61 10 39 9 39 10 9 9 14 10 22 9 23 10 0 9 4 10 7 9 11 10 10 9 13 10 24 9 28 10 26 9 30 10 28 9 33 10 36 9 37 10 52 9 52 10 53 9 50 10 54 9 51 10 56 9 58 10 61 9 64 10 67 9 68 10 68 9 69 10 70 9 72 10 72 9 79 +0 +0 +0 +0 +0 +0 +0 +0 +input/parrington/prtn05.jpg +512 384 54 58.0000000000 10.0000000000 79.0000000000 10.0000000000 217.0000000000 10.0000000000 203.0000000000 12.0000000000 112.0000000000 17.0000000000 17.0000000000 19.0000000000 96.0000000000 24.0000000000 347.0000000000 27.0000000000 78.0000000000 28.0000000000 334.0000000000 34.0000000000 34.0000000000 36.0000000000 80.0000000000 41.0000000000 215.0000000000 41.0000000000 221.0000000000 43.0000000000 278.0000000000 43.0000000000 26.0000000000 47.0000000000 150.0000000000 50.0000000000 293.0000000000 52.0000000000 120.0000000000 53.0000000000 273.0000000000 56.0000000000 15.0000000000 58.0000000000 241.0000000000 61.0000000000 66.0000000000 65.0000000000 10.0000000000 71.0000000000 31.0000000000 74.0000000000 106.0000000000 74.0000000000 358.0000000000 84.0000000000 213.0000000000 88.0000000000 134.0000000000 103.0000000000 10.0000000000 114.0000000000 211.0000000000 115.0000000000 294.0000000000 130.0000000000 353.0000000000 136.0000000000 93.0000000000 137.0000000000 166.0000000000 139.0000000000 137.0000000000 142.0000000000 370.0000000000 147.0000000000 218.0000000000 149.0000000000 242.0000000000 161.0000000000 286.0000000000 163.0000000000 302.0000000000 165.0000000000 131.0000000000 170.0000000000 295.0000000000 172.0000000000 286.0000000000 176.0000000000 301.0000000000 181.0000000000 133.0000000000 193.0000000000 324.0000000000 196.0000000000 274.0000000000 199.0000000000 280.0000000000 208.0000000000 72.0000000000 219.0000000000 290.0000000000 226.0000000000 302.0000000000 231.0000000000 373.0000000000 259.0000000000 228.0000000000 275.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +8 11 24 10 44 11 33 10 55 11 6 10 14 11 49 10 71 11 20 10 33 11 22 10 34 11 23 10 43 11 25 10 41 +0 +9 11 51 12 52 11 47 12 40 11 39 12 31 11 46 12 39 11 14 12 7 11 31 12 20 11 32 12 24 11 44 12 35 11 50 12 50 +0 +0 +0 +0 +0 +input/parrington/prtn04.jpg +512 384 60 347.0000000000 10.0000000000 354.0000000000 10.0000000000 240.0000000000 11.0000000000 219.0000000000 16.0000000000 274.0000000000 17.0000000000 87.0000000000 24.0000000000 373.0000000000 27.0000000000 35.0000000000 36.0000000000 188.0000000000 42.0000000000 197.0000000000 42.0000000000 51.0000000000 48.0000000000 285.0000000000 64.0000000000 262.0000000000 66.0000000000 284.0000000000 76.0000000000 358.0000000000 76.0000000000 98.0000000000 78.0000000000 136.0000000000 93.0000000000 249.0000000000 111.0000000000 142.0000000000 113.0000000000 231.0000000000 113.0000000000 49.0000000000 125.0000000000 273.0000000000 126.0000000000 199.0000000000 128.0000000000 174.0000000000 130.0000000000 107.0000000000 131.0000000000 187.0000000000 136.0000000000 127.0000000000 140.0000000000 194.0000000000 140.0000000000 219.0000000000 144.0000000000 198.0000000000 149.0000000000 216.0000000000 156.0000000000 41.0000000000 157.0000000000 299.0000000000 157.0000000000 328.0000000000 158.0000000000 203.0000000000 169.0000000000 56.0000000000 175.0000000000 240.0000000000 183.0000000000 35.0000000000 191.0000000000 34.0000000000 192.0000000000 78.0000000000 192.0000000000 29.0000000000 193.0000000000 177.0000000000 193.0000000000 254.0000000000 194.0000000000 246.0000000000 202.0000000000 372.0000000000 202.0000000000 316.0000000000 203.0000000000 296.0000000000 211.0000000000 337.0000000000 213.0000000000 33.0000000000 217.0000000000 264.0000000000 219.0000000000 44.0000000000 221.0000000000 367.0000000000 226.0000000000 56.0000000000 227.0000000000 127.0000000000 255.0000000000 168.0000000000 267.0000000000 314.0000000000 271.0000000000 182.0000000000 276.0000000000 165.0000000000 279.0000000000 336.0000000000 291.0000000000 309.0000000000 292.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +9 12 40 11 47 12 7 11 14 12 50 11 50 12 24 11 32 12 20 11 31 12 31 11 39 12 35 11 44 12 39 11 46 12 52 11 51 +0 +11 12 11 13 11 12 51 13 43 12 49 13 42 12 59 13 50 12 1 13 1 12 32 13 21 12 33 13 23 12 44 13 39 12 45 13 38 12 46 13 41 12 58 13 49 +0 +0 +0 +0 +input/parrington/prtn03.jpg +512 384 57 23.0000000000 10.0000000000 103.0000000000 10.0000000000 240.0000000000 10.0000000000 286.0000000000 10.0000000000 329.0000000000 11.0000000000 94.0000000000 13.0000000000 155.0000000000 13.0000000000 59.0000000000 16.0000000000 366.0000000000 23.0000000000 373.0000000000 36.0000000000 10.0000000000 57.0000000000 33.0000000000 57.0000000000 48.0000000000 66.0000000000 202.0000000000 79.0000000000 222.0000000000 79.0000000000 238.0000000000 87.0000000000 214.0000000000 95.0000000000 180.0000000000 100.0000000000 291.0000000000 106.0000000000 158.0000000000 107.0000000000 196.0000000000 148.0000000000 45.0000000000 152.0000000000 220.0000000000 153.0000000000 74.0000000000 154.0000000000 249.0000000000 154.0000000000 243.0000000000 155.0000000000 133.0000000000 158.0000000000 293.0000000000 163.0000000000 318.0000000000 164.0000000000 210.0000000000 168.0000000000 267.0000000000 172.0000000000 330.0000000000 173.0000000000 307.0000000000 176.0000000000 236.0000000000 177.0000000000 249.0000000000 179.0000000000 315.0000000000 179.0000000000 10.0000000000 191.0000000000 237.0000000000 194.0000000000 61.0000000000 199.0000000000 117.0000000000 199.0000000000 208.0000000000 201.0000000000 42.0000000000 206.0000000000 10.0000000000 214.0000000000 112.0000000000 223.0000000000 270.0000000000 227.0000000000 331.0000000000 248.0000000000 230.0000000000 282.0000000000 260.0000000000 284.0000000000 286.0000000000 286.0000000000 81.0000000000 287.0000000000 55.0000000000 288.0000000000 308.0000000000 288.0000000000 136.0000000000 289.0000000000 321.0000000000 293.0000000000 262.0000000000 296.0000000000 287.0000000000 301.0000000000 307.0000000000 304.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +13 13 1 12 1 13 49 12 58 13 41 12 46 13 0 12 4 13 10 12 12 13 11 12 11 13 21 12 32 13 23 12 33 13 38 12 45 13 39 12 44 13 42 12 49 13 43 12 51 13 50 12 59 +0 +11 13 51 14 73 13 30 14 48 13 4 14 0 13 44 14 66 13 28 14 46 13 31 14 50 13 47 14 71 13 48 14 72 13 54 14 75 13 55 14 77 13 56 14 81 +0 +0 +0 +input/parrington/prtn02.jpg +512 384 92 88.0000000000 10.0000000000 151.0000000000 10.0000000000 191.0000000000 10.0000000000 247.0000000000 11.0000000000 137.0000000000 17.0000000000 152.0000000000 18.0000000000 123.0000000000 21.0000000000 191.0000000000 21.0000000000 230.0000000000 24.0000000000 158.0000000000 25.0000000000 21.0000000000 27.0000000000 208.0000000000 31.0000000000 184.0000000000 33.0000000000 145.0000000000 43.0000000000 149.0000000000 61.0000000000 155.0000000000 66.0000000000 162.0000000000 71.0000000000 220.0000000000 74.0000000000 160.0000000000 85.0000000000 229.0000000000 85.0000000000 224.0000000000 96.0000000000 250.0000000000 103.0000000000 283.0000000000 107.0000000000 166.0000000000 108.0000000000 154.0000000000 110.0000000000 372.0000000000 114.0000000000 125.0000000000 116.0000000000 318.0000000000 120.0000000000 224.0000000000 124.0000000000 280.0000000000 125.0000000000 287.0000000000 125.0000000000 150.0000000000 127.0000000000 314.0000000000 130.0000000000 363.0000000000 131.0000000000 286.0000000000 136.0000000000 305.0000000000 136.0000000000 130.0000000000 138.0000000000 373.0000000000 141.0000000000 10.0000000000 142.0000000000 314.0000000000 143.0000000000 364.0000000000 144.0000000000 247.0000000000 147.0000000000 219.0000000000 149.0000000000 280.0000000000 151.0000000000 277.0000000000 156.0000000000 368.0000000000 156.0000000000 74.0000000000 160.0000000000 293.0000000000 163.0000000000 22.0000000000 166.0000000000 10.0000000000 169.0000000000 85.0000000000 169.0000000000 59.0000000000 177.0000000000 187.0000000000 177.0000000000 338.0000000000 177.0000000000 373.0000000000 180.0000000000 166.0000000000 185.0000000000 370.0000000000 193.0000000000 88.0000000000 197.0000000000 178.0000000000 199.0000000000 165.0000000000 200.0000000000 261.0000000000 204.0000000000 370.0000000000 204.0000000000 334.0000000000 206.0000000000 276.0000000000 207.0000000000 242.0000000000 213.0000000000 297.0000000000 221.0000000000 24.0000000000 222.0000000000 228.0000000000 227.0000000000 240.0000000000 230.0000000000 251.0000000000 255.0000000000 352.0000000000 269.0000000000 13.0000000000 280.0000000000 40.0000000000 282.0000000000 62.0000000000 284.0000000000 75.0000000000 288.0000000000 16.0000000000 292.0000000000 228.0000000000 295.0000000000 40.0000000000 296.0000000000 215.0000000000 296.0000000000 34.0000000000 297.0000000000 136.0000000000 297.0000000000 61.0000000000 300.0000000000 208.0000000000 300.0000000000 245.0000000000 300.0000000000 315.0000000000 301.0000000000 280.0000000000 302.0000000000 191.0000000000 303.0000000000 299.0000000000 303.0000000000 345.0000000000 304.0000000000 355.0000000000 316.0000000000 367.0000000000 316.0000000000 359.0000000000 326.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +11 14 77 13 55 14 66 13 44 14 0 13 4 14 46 13 28 14 48 13 30 14 50 13 31 14 71 13 47 14 72 13 48 14 73 13 51 14 75 13 54 14 81 13 56 +0 +20 14 40 15 17 14 63 15 42 14 89 15 60 14 85 15 55 14 22 15 0 14 27 15 5 14 30 15 8 14 33 15 9 14 34 15 12 14 35 15 10 14 45 15 19 14 47 15 21 14 53 15 26 14 60 15 38 14 62 15 41 14 65 15 45 14 70 15 53 14 87 15 56 14 88 15 57 14 91 15 62 +0 +0 +input/parrington/prtn01.jpg +512 384 64 36.0000000000 101.0000000000 128.0000000000 102.0000000000 44.0000000000 104.0000000000 173.0000000000 111.0000000000 280.0000000000 113.0000000000 71.0000000000 116.0000000000 142.0000000000 118.0000000000 171.0000000000 118.0000000000 40.0000000000 119.0000000000 115.0000000000 129.0000000000 57.0000000000 130.0000000000 139.0000000000 131.0000000000 38.0000000000 133.0000000000 167.0000000000 133.0000000000 290.0000000000 134.0000000000 280.0000000000 138.0000000000 138.0000000000 140.0000000000 116.0000000000 141.0000000000 168.0000000000 149.0000000000 120.0000000000 153.0000000000 262.0000000000 156.0000000000 45.0000000000 158.0000000000 294.0000000000 165.0000000000 230.0000000000 168.0000000000 239.0000000000 169.0000000000 205.0000000000 170.0000000000 90.0000000000 173.0000000000 289.0000000000 175.0000000000 200.0000000000 177.0000000000 131.0000000000 180.0000000000 109.0000000000 181.0000000000 267.0000000000 181.0000000000 168.0000000000 187.0000000000 151.0000000000 188.0000000000 229.0000000000 188.0000000000 278.0000000000 193.0000000000 102.0000000000 195.0000000000 54.0000000000 198.0000000000 11.0000000000 199.0000000000 121.0000000000 201.0000000000 168.0000000000 201.0000000000 86.0000000000 202.0000000000 28.0000000000 203.0000000000 163.0000000000 204.0000000000 223.0000000000 209.0000000000 49.0000000000 217.0000000000 172.0000000000 217.0000000000 217.0000000000 221.0000000000 170.0000000000 231.0000000000 212.0000000000 232.0000000000 183.0000000000 235.0000000000 216.0000000000 240.0000000000 278.0000000000 247.0000000000 104.0000000000 264.0000000000 18.0000000000 293.0000000000 32.0000000000 298.0000000000 51.0000000000 298.0000000000 97.0000000000 299.0000000000 10.0000000000 301.0000000000 129.0000000000 308.0000000000 106.0000000000 310.0000000000 139.0000000000 311.0000000000 110.0000000000 321.0000000000 272.0000000000 322.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +19 15 26 14 53 15 60 14 89 15 45 14 65 15 56 14 87 15 0 14 22 15 5 14 27 15 8 14 30 15 9 14 33 15 10 14 35 15 12 14 34 15 17 14 40 15 19 14 45 15 21 14 47 15 41 14 62 15 42 14 63 15 53 14 70 15 55 14 85 15 57 14 88 15 62 14 91 +0 +0 +0 +input/parrington/prtn00.jpg +512 384 40 315.0000000000 18.0000000000 354.0000000000 19.0000000000 340.0000000000 22.0000000000 370.0000000000 32.0000000000 334.0000000000 34.0000000000 298.0000000000 55.0000000000 362.0000000000 57.0000000000 249.0000000000 60.0000000000 354.0000000000 68.0000000000 232.0000000000 72.0000000000 242.0000000000 88.0000000000 244.0000000000 100.0000000000 291.0000000000 102.0000000000 306.0000000000 103.0000000000 264.0000000000 110.0000000000 239.0000000000 119.0000000000 220.0000000000 126.0000000000 42.0000000000 128.0000000000 32.0000000000 131.0000000000 285.0000000000 132.0000000000 303.0000000000 140.0000000000 173.0000000000 142.0000000000 328.0000000000 146.0000000000 170.0000000000 147.0000000000 373.0000000000 148.0000000000 13.0000000000 149.0000000000 29.0000000000 153.0000000000 151.0000000000 155.0000000000 46.0000000000 160.0000000000 171.0000000000 160.0000000000 10.0000000000 161.0000000000 304.0000000000 161.0000000000 18.0000000000 175.0000000000 29.0000000000 188.0000000000 39.0000000000 212.0000000000 44.0000000000 213.0000000000 13.0000000000 238.0000000000 28.0000000000 242.0000000000 22.0000000000 318.0000000000 40.0000000000 320.0000000000 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +8 16 28 15 22 16 33 15 35 16 17 15 14 16 38 15 63 16 18 15 15 16 25 15 20 16 32 15 31 16 37 15 52 +0 +9 16 20 17 34 16 0 17 6 16 13 17 26 16 7 17 15 16 2 17 7 16 4 17 9 16 6 17 18 16 8 17 21 16 19 17 31 +input/parrington/prtn17.jpg +512 384 50 140.0000000000 10.0000000000 152.0000000000 10.0000000000 296.0000000000 10.0000000000 307.0000000000 10.0000000000 344.0000000000 10.0000000000 371.0000000000 12.0000000000 73.0000000000 14.0000000000 100.0000000000 20.0000000000 370.0000000000 27.0000000000 92.0000000000 32.0000000000 371.0000000000 32.0000000000 325.0000000000 41.0000000000 337.0000000000 42.0000000000 366.0000000000 44.0000000000 332.0000000000 47.0000000000 10.0000000000 52.0000000000 25.0000000000 53.0000000000 349.0000000000 53.0000000000 120.0000000000 56.0000000000 285.0000000000 58.0000000000 352.0000000000 59.0000000000 112.0000000000 66.0000000000 132.0000000000 73.0000000000 313.0000000000 75.0000000000 51.0000000000 77.0000000000 28.0000000000 89.0000000000 64.0000000000 99.0000000000 21.0000000000 103.0000000000 352.0000000000 115.0000000000 318.0000000000 118.0000000000 361.0000000000 124.0000000000 42.0000000000 126.0000000000 324.0000000000 133.0000000000 266.0000000000 135.0000000000 61.0000000000 136.0000000000 84.0000000000 142.0000000000 200.0000000000 144.0000000000 129.0000000000 146.0000000000 217.0000000000 148.0000000000 322.0000000000 195.0000000000 283.0000000000 217.0000000000 316.0000000000 248.0000000000 277.0000000000 258.0000000000 297.0000000000 262.0000000000 333.0000000000 263.0000000000 305.0000000000 264.0000000000 373.0000000000 305.0000000000 273.0000000000 306.0000000000 288.0000000000 309.0000000000 202.0000000000 356.0000000000 +12 17 23 0 14 17 28 0 22 17 41 0 59 17 48 0 77 17 13 0 5 17 17 0 8 17 20 0 10 17 29 0 23 17 32 0 27 17 39 0 39 17 45 0 68 17 47 0 76 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +8 17 26 16 13 17 6 16 0 17 15 16 7 17 34 16 20 17 7 16 2 17 9 16 4 17 21 16 8 17 31 16 19 +0 diff --git a/meowpp.test/src/autostitch.cpp b/meowpp.test/src/autostitch.cpp index e63ef43..b62d13b 100644 --- a/meowpp.test/src/autostitch.cpp +++ b/meowpp.test/src/autostitch.cpp @@ -16,7 +16,6 @@ #include "meowpp/gra/Bitmap.h" #include "meowpp/gra/Photo.h" #include "meowpp/gra/Camera.h" -#include "meowpp/gra/WatchBall.h" #include "meowpp/math/utility.h" #include "meowpp/math/methods.h" @@ -43,6 +42,10 @@ double p0 = 0.07, P = 0.99; double q = 0.7, r = 0.01, Q = 0.97; double stop = 1; double o_radius = 500; +double angle_t = PI / 4.0; +double aspect_t = 2.0; + +std::vector input_name; MyK_Match match; std::vector > input_bitmap; @@ -73,54 +76,67 @@ std::vector outputs; //////////////////////////// **# setup #** /////////////////////////// bool setup(int argc, char** argv) { - usg.optionAdd('h', "Display this help document."); - usg.optionAdd('i', + usg.optionAdd("h", "Display this help document."); + usg.optionAdd("i", "Specify the input images are in " "instead of specifying from arguments", "", "", false); - usg.optionAdd('o', + usg.optionAdd("o", "Output file name, (not include '.jpg' suffix)", "", "output", false); - usg.optionAdd('d', + usg.optionAdd("f", + "File name for output the text data", + "", + "output.txt", + false); + usg.optionAdd("d", "Specify which Feature-Point-Detect algorithm to use", "", "", true); - usg.optionAdd('p', + usg.optionAdd("ransac-p0", "Pribabilicity for RANSAC to choose a right feature point", "", stringPrintf("%.10f", p0), false); - usg.optionAdd('P', + usg.optionAdd("ransac-ok", "Pribabilicity for RANSAC access", "", stringPrintf("%.10f", P), false); - usg.optionAdd('q', + usg.optionAdd("prob-p1", "p1 for Prob. Model", "", stringPrintf("%.10f", q), false); - usg.optionAdd('r', + usg.optionAdd("prob-p0", "p0 for Prob. Model", "", stringPrintf("%.10f", r), false); - usg.optionAdd('Q', + usg.optionAdd("prob-min", "p_min for Prob. Model", "", stringPrintf("%.10f", Q), false); - usg.optionAdd('s', + usg.optionAdd("s", "stop threshold for boundle adjustment", "", stringPrintf("%.10f", stop), false); - usg.optionAdd('O', + usg.optionAdd("output-radius", "output ball radius", "", stringPrintf("%.10f", o_radius), false); + usg.optionAdd("match-angle", + "angle threshold for matching", + "", stringPrintf("%.10f", angle_t / PI * 180), + false); + usg.optionAdd("match-aspect", + "aspect threshold for matching", + "", stringPrintf("%.10f", aspect_t), + false); std::vector fpsd_algorithm_list = ObjSelector::names(); for (size_t i = 0, I = fpsd_algorithm_list.size(); i < I; i++) { const ObjBase* tmp = ObjSelector::get(fpsd_algorithm_list[i]); - usg.optionValueAcceptAdd('d', + usg.optionValueAcceptAdd("d", fpsd_algorithm_list[i], tmp->type()); usg.import(((MyFeaturePointsDetector*)tmp)->usage()); @@ -130,7 +146,7 @@ bool setup(int argc, char** argv) { // set arg std::string err_msg; bool ok = usg.arguments(argc, argv, &err_msg); - if (usg.hasOptionSetup('h')) { + if (usg.hasOptionSetup("h")) { printf("%s\n", usg.usage().c_str()); exit(0); } @@ -144,12 +160,11 @@ bool setup(int argc, char** argv) { //////////////// **# Input images and convert it #** ///////////////// bool input() { - std::vector input_name; - if (!usg.hasOptionSetup('i')) { + if (!usg.hasOptionSetup("i")) { input_name = usg.procArgs(); } else { - std::string base = usg.optionValue('i', 0); + std::string base = usg.optionValue("i", 0); if (base.length() == 0 || base[base.length() - 1] != '/') { base += "/"; } @@ -197,7 +212,7 @@ bool input() { //////////////////////// **# FeaturePoint #** //////////////////////// bool detect() { - std::string fpsd_algo_name = usg.optionValue('d', 0); + std::string fpsd_algo_name = usg.optionValue("d", 0); MyFeaturePointsDetector* detector( (MyFeaturePointsDetector*)ObjSelector::create(fpsd_algo_name)); detector->usage(usg); @@ -237,11 +252,11 @@ bool ransac() { messagePrintf( 1, "RANSAC"); MyRansacCheck::usage(usg); // tmp output - p0 = inRange(0.00001, 0.9999, atof(usg.optionValue('p', 0).c_str())); - P = inRange(0.00001, 0.9999, atof(usg.optionValue('P', 0).c_str())); + p0 = inRange(0.00001, 0.9999, atof(usg.optionValue("ransac-p0", 0).c_str())); + P = inRange(0.00001, 0.9999, atof(usg.optionValue("ransac-ok", 0).c_str())); for (size_t i = 0, I = input_bitmap.size(); i < I; i++) { for (size_t j = 0, J = input_bitmap.size(); j < J; j++) { - size_t num = 3u; + size_t num = 4u; // !!!!!!!!!!!!!!!!!!! messagePrintf( 1, "ransac %lu --- %lu", i, j); MyRansacCheck chk(&(fpsv[i]), &(fpsv[j])); FeaturePointIndexPairs ret = ransac(pairs[i][j], chk, num, p0, P); @@ -273,11 +288,13 @@ bool ransac() { return true; } -///////////////////////// **# prob module #** //////////////////////// -bool prob_mod() { - q = inRange(0.00001, 0.99999, atof(usg.optionValue('q', 0).c_str())); - r = inRange(0.00001, 0.99999, atof(usg.optionValue('r', 0).c_str())); - Q = inRange(0.00001, 0.99999, atof(usg.optionValue('Q', 0).c_str())); +//////////////////// **# checking match again #** //////////////////// +bool match_check() { + q = inRange(0.00001, 0.99999, atof(usg.optionValue("prob-p1", 0).c_str())); + r = inRange(0.00001, 0.99999, atof(usg.optionValue("prob-p0", 0).c_str())); + Q = inRange(0.00001, 0.99999, atof(usg.optionValue("prob-min", 0).c_str())); + aspect_t = inRange(0.000001, 9999.0, atof(usg.optionValue("match-aspect", 0).c_str())); + angle_t = inRange(0.1,999.0, atof(usg.optionValue("match-angle", 0).c_str()))/180 * PI; double m_ni = log(q * (1 - r)) - log(r * (1 - q)); double c = log(Q) - log(1 - Q); double m_nf = log(1 - r) - log(1 - q); @@ -291,150 +308,32 @@ bool prob_mod() { double ni = pairs[i][j].size(), nf = 0; MyRansacCheck chk(&(fpsv[i]), &(fpsv[j])); chk.rememberVCalc(pairs[i][j]); - for (size_t k = 0, K = fpsv[i].size(); k < K; k++) { - Vector2D to(chk.to(Vector2D(fpsv[i][k](0), - fpsv[i][k](1)))); - if (0 <= to.x() && to.x() <= (double)input_bitmap[j].width() && - 0 <= to.y() && to.y() <= (double)input_bitmap[j].height()) { - nf++; + if (chk.check(aspect_t, angle_t)) { + for (size_t k = 0, K = fpsv[i].size(); k < K; k++) { + Vector2D to(chk.to(Vector2D(fpsv[i][k](0), + fpsv[i][k](1)))); + if (0 <= to.x() && to.x() <= (double)input_bitmap[j].width() && + 0 <= to.y() && to.y() <= (double)input_bitmap[j].height()) { + nf++; + } } - } - if (ni * m_ni > c + m_nf * nf) { - messagePrintf(0, "accept %lu --- %lu", i, j); - messagePrintf(0, - "%.0f * %.3f = %.3f ?? %.3f = %.3f + %.3f * %.0f", - ni, m_ni, ni * m_ni, c + m_nf * nf, c, m_nf, nf); - continue; - } - else { - pairs[i][j].clear(); - } - } - } - messagePrintf(-1, "ok"); - return true; -} - -///////////////////// **# group them together #** //////////////////// -bool group() { - messagePrintf(1, "group"); - // union - DisjointSet dsj(input_bitmap.size()); - for (size_t i = 0, I = input_bitmap.size(); i < I; i++) { - for (size_t j = 0; j < I; j++) { - if(pairs[i][j].empty()) continue; - dsj.merge(i, j); - } - } - std::vector root; - for (size_t i = 0, I = input_bitmap.size(); i < I; i++) { - if (dsj.root(i) == i) { - root.push_back(i); - } - } - // split into groups - outputs.resize(root.size()); - for (size_t i = 0, I = root.size(); i < I; i++) { - messagePrintf(1, "Group %d", i); - std::vector ids; - for (size_t j = 0, J = input_bitmap.size(); j < J; j++) { - if (dsj.root(j) != root[i]) continue; - outputs[i].cameras.push_back(Camera()); - outputs[i].cameras[outputs[i].cameras.size() - 1].photo( - Photo(input_bitmap[j]) - ); - ids.push_back(j); - messagePrintf(0, "camera %lu from bitmap %lu", - outputs[i].cameras.size() - 1, j); - } - for (size_t j = 0, J = ids.size(); j < J; ++j) { - for (size_t k = 0; k < J; ++k) { - if (j == k) continue; - size_t i1 = ids[j], i2 = ids[k]; - if (pairs[i1][i2].empty()) continue; - outputs[i].edges.push_back(OutputSet::Edge(j, k)); - size_t index = outputs[i].edges.size() - 1; - for (size_t n = 0, N = pairs[i1][i2].size(); n < N; ++n) { - outputs[i].edges[index].v1.push_back( - fpsv[i1][pairs[i1][i2][n].from.second] - ); - outputs[i].edges[index].v2.push_back( - fpsv[i1][pairs[i1][i2][n].to.second] - ); + if (ni * m_ni > c + m_nf * nf) { + messagePrintf(0, "accept %lu --- %lu", i, j); + messagePrintf(0, + "%.0f * %.3f = %.3f ?? %.3f = %.3f + %.3f * %.0f", + ni, m_ni, ni * m_ni, c + m_nf * nf, c, m_nf, nf); + continue; } - messagePrintf(0, "Edge %lu---%lu, size = %lu", - i1, i2, outputs[i].edges[index].v1.size()); - } - } - std::sort(outputs[i].edges.begin(), outputs[i].edges.end()); - messagePrintf(-1, ""); - } - messagePrintf(-1, "ok"); - return true; -} - -////////////////////// **# boundle adjustment #** //////////////////// -bool boundle() { - stop = inRange(0.01, 100000.0, atof(usg.optionValue('s', 0).c_str())); - messagePrintf(1, "boundle adjustment"); - for (size_t i = 0, I = outputs.size(); i < I; i++) { - int id = 0; - std::set in; - size_t i1 = outputs[i].edges[0].i1; - size_t i2 = outputs[i].edges[0].i2; - for (size_t j = 0, J = outputs[i].edges[0].v1.size(); j < J; ++j) { - outputs[i].cameras[i1].fixedPoints2DGet().identityPointAdd( - id, outputs[i].edges[0].v1[j]); - outputs[i].cameras[i2].fixedPoints2DGet().identityPointAdd( - id, outputs[i].edges[0].v2[j]); - id++; - } - in.insert(i1); - in.insert(i2); - double r_lst = Camera::boundleAdjustment2D( - &(outputs[i].cameras), - stop - ); - for (size_t j = 1, J = outputs[i].edges.size(); j < J; ++j) { - size_t best; - for (best = 0; best < J; ++best) { - if (in.find(outputs[i].edges[best].i1) == in.end() && - in.find(outputs[i].edges[best].i2) == in.end()) continue; - break; - } - i1 = outputs[i].edges[best].i1; - i2 = outputs[i].edges[best].i2; - for (size_t j = 0, J = outputs[i].edges[best].v1.size(); j < J; ++j) { - outputs[i].cameras[i1].fixedPoints2DGet().identityPointAdd( - id, outputs[i].edges[best].v1[j]); - outputs[i].cameras[i2].fixedPoints2DGet().identityPointAdd( - id, outputs[i].edges[best].v2[j]); - id++; } - in.insert(i1); - in.insert(i2); - std::vector > tmp(outputs[i].cameras); - double r = Camera::boundleAdjustment2D(&tmp, stop); - if (r > r_lst * 1.5) continue; - outputs[i].cameras = tmp; + pairs[i][j].clear(); } } messagePrintf(-1, "ok"); return true; } -bool expand() { - o_radius = inRange(100.0, 1000000.0, atof(usg.optionValue('O', 0).c_str())); - output_bitmap.resize(outputs.size()); - for (size_t i = 0, I = outputs.size(); i < I; ++i) { - WatchBall wb; - wb.cameras(outputs[i].cameras); - output_bitmap[i] = wb.expand(o_radius); - } - return true; -} - ////////////////////// **# Write to output file #** ////////////////// + bool output() { messagePrintf(1, "Write images"); for (size_t i = 0; i < output_bitmap.size(); i++) { @@ -450,7 +349,7 @@ bool output() { img.at(y, x)[2] = tmp.r(); } } - std::string output_name(usg.optionValue('o', 0) + std::string output_name(usg.optionValue("o", 0) + (output_bitmap.size() > 1 ? stringPrintf("%lu", i) : "") @@ -467,54 +366,6 @@ bool output() { return true; } -//* -bool tmp_output() { - output_bitmap = input_bitmap; - for (size_t i = 0, I = input_bitmap.size(); i < I; i++) { - for (size_t j = 0, J = fpsv[i].size(); j < J; j++) { - ssize_t x = fpsv[i][j](0); - ssize_t y = fpsv[i][j](1); - ssize_t dx[2] = {0, 1}, x0[2] = {0, -10}; - ssize_t dy[2] = {1, 0}, y0[2] = {-10, 0}; - for(size_t k = 0; k < 2; k++){ - for(size_t count = 0; count < 20; count++){ - ssize_t xx = x + dx[k] * count + x0[k]; - ssize_t yy = y + dy[k] * count + y0[k]; - if(0 <= xx && xx < (ssize_t)input_bitmap[i].width() && - 0 <= yy && yy < (ssize_t)input_bitmap[i].height()){ - output_bitmap[i].pixel(yy, xx, Vector3D(1.0, 1.0, 0.0)); - } - } - } - } - } - return output(); -} -// */ - -/* -bool g_output(){ - output_bitmap.resize(input_bitmap.size() * 2); - for(size_t i = 0, I = input_bitmap.size(); i < I; i++){ - output_bitmap[i * 2 ] = input_bitmap[i]; - output_bitmap[i * 2 + 1] = input_bitmap[i]; - output_bitmap[i * 2 ].gradiancedX(3, 3); - output_bitmap[i * 2 + 1].gradiancedY(3, 3); - for(size_t x = 0, X = output_bitmap[i * 2].width(); x < X; x++){ - for(size_t y = 0, Y = output_bitmap[i * 2].height(); y < Y; y++){ - Vector3D v; - v = output_bitmap[i * 2](y, x); - output_bitmap[i * 2](y, x) = Vector3D(v.length() / sqrt(2.0)); - v = output_bitmap[i * 2 + 1](y, x); - output_bitmap[i * 2 + 1](y, x) = Vector3D(v.length() / sqrt(2.0)); - } - } - } - return output(); -} - -// */ - bool pair_output(){ for(size_t i = 0, I = input_bitmap.size(); i < I; i++){ for(size_t j = 0, J = input_bitmap.size(); j < J; j++){ @@ -523,75 +374,33 @@ bool pair_output(){ chk.rememberVCalc(pairs[i][j]); size_t index = output_bitmap.size(); output_bitmap.push_back(input_bitmap[i]); - for(ssize_t x = 0, X = input_bitmap[i].width(); x < X; x++){ - for(ssize_t y = 0, Y = input_bitmap[i].height(); y < Y; y++){ + for(ssize_t x = 0, X = input_bitmap[i].width(); x < X; x++) { + for(ssize_t y = 0, Y = input_bitmap[i].height(); y < Y; y++) { Vector2D to(chk.to(Vector2D(x, y))); ssize_t x2 = to.x(), y2 = to.y(); - if(0 <= x2 && x2 <= (ssize_t)input_bitmap[j].width() && - 0 <= y2 && y2 <= (ssize_t)input_bitmap[j].height()){ + if (0 <= x2 && x2 <= (ssize_t)input_bitmap[j].width() && + 0 <= y2 && y2 <= (ssize_t)input_bitmap[j].height()) { output_bitmap[index].pixel(y, x, (input_bitmap[i].pixel(y, x) + input_bitmap[j].pixel(y2,x2)) / 2 ); } } } - } - } - return output(); -} -/* -bool pair_output2(){ - for(size_t i = 0, I = input_bitmap.size(); i < I; i++){ - for(size_t j = 0, J = input_bitmap.size(); j < J; j++){ - if((i + 1) % I != j && (j + 1) % J != i) continue; - messagePrintf(0, "%3lu--%3lu: %lu", i, j, pairs[i][j].size()); - if(pairs[i][j].empty()) continue; - MyRansacCheck chk(&(fpsv[i]), &(fpsv[j])); - chk.rememberVCalc(pairs[i][j]); - size_t index = output_bitmap.size(); - output_bitmap.push_back(input_bitmap[i]); - for(ssize_t x = 0, X = input_bitmap[i].width(); x < X; x++){ - for(ssize_t y = 0, Y = input_bitmap[i].height(); y < Y; y++){ - Vector2D to(chk.to(Vector2D(x, y))); - ssize_t x2 = to.x(), y2 = to.y(); - if(0 <= x2 && x2 <= (ssize_t)input_bitmap[j].width() && - 0 <= y2 && y2 <= (ssize_t)input_bitmap[j].height()){ - output_bitmap[index].pixel(y, x, (input_bitmap[i].pixel(y, x) + - input_bitmap[j].pixel(y2,x2)) / 2 - ); + for (size_t k = 0, K = pairs[i][j].size(); k < K; ++k) { + ssize_t x0 = fpsv[i][pairs[i][j][k].from.second](0); + ssize_t y0 = fpsv[i][pairs[i][j][k].from.second](1); + for (ssize_t d = -10; d <= 10; ++d) { + if (0 <= x0 + d && x0 + d < (ssize_t)input_bitmap[i].width() - 1) { + output_bitmap[index].pixel(y0, x0 + d, + RGBf_Space(Vector3D( + 1.0, 1.0, 0.0 + ))); } - } - } - for(size_t k = 0, K = fpsv[i].size(); k < K; k++){ - ssize_t dy[2] = {0, 1}, dx[2] = {1, 0}; - ssize_t y0[2] = {0, -10}, x0[2] = {-10, 0}; - ssize_t x = fpsv[i][k](0), y = fpsv[i][k](1); - for(ssize_t m = 0; m < 2; m++){ - for(ssize_t n = 0; n < 20; n++){ - ssize_t xx = x + x0[m] + dx[m] * n; - ssize_t yy = y + y0[m] + dy[m] * n; - if(0 <= xx && xx <= (ssize_t)input_bitmap[j].width() && - 0 <= yy && yy <= (ssize_t)input_bitmap[j].height()){ - output_bitmap[index].pixel(yy, xx, - Vector3D(1.0, 1.0, 0)); - } - } - } - } - for(size_t k = 0, K = pairs[i][j].size(); k < K; k++){ - ssize_t dy[2] = {0, 1}, dx[2] = {1, 0}; - ssize_t y0[2] = {0, -10}, x0[2] = {-10, 0}; - ssize_t x = fpsv[i][pairs[i][j][k].from.second](0); - ssize_t y = fpsv[i][pairs[i][j][k].from.second](1); - for(ssize_t m = 0; m < 2; m++){ - for(ssize_t n = 0; n < 20; n++){ - ssize_t xx = x + x0[m] + dx[m] * n; - ssize_t yy = y + y0[m] + dy[m] * n; - if(0 <= xx && xx <= (ssize_t)input_bitmap[j].width() && - 0 <= yy && yy <= (ssize_t)input_bitmap[j].height()){ - output_bitmap[index].pixel(yy, xx, - Vector3D(1.0, 0.0, 0)); - } + if (0 <= y0 + d && y0 + d < (ssize_t)input_bitmap[i].height() - 1) { + output_bitmap[index].pixel(y0 + d, x0, + RGBf_Space(Vector3D( + 1.0, 1.0, 0.0 + ))); } } } @@ -599,8 +408,34 @@ bool pair_output2(){ } return output(); } -// */ +bool text_output() { + std::string s = usg.optionValue("f", 0); + FILE* f = fopen(s.c_str(), "w"); + fprintf(f, "%lu\n", input_bitmap.size()); + for (size_t i = 0, I = input_bitmap.size(); i < I; ++i) { + fprintf(f, "%s\n", input_name[i].c_str()); + fprintf(f, "%lu %lu %lu ", + input_bitmap[i].height(), input_bitmap[i].width(), fpsv[i].size()); + for (size_t j = 0, J = fpsv[i].size(); j < J; ++j) { + fprintf(f, "%.10f %.10f ", fpsv[i][j](0), fpsv[i][j](1)); + } + fprintf(f, "\n"); + for (size_t j = 0; j < I; ++j) { + fprintf(f, "%lu ", pairs[i][j].size()); + for (size_t k = 0, K = pairs[i][j].size(); k < K; ++k) { + fprintf(f, "%lu %lu %lu %lu ", + pairs[i][j][k].from.first, + pairs[i][j][k].from.second, + pairs[i][j][k].to.first, + pairs[i][j][k].to.second); + } + fprintf(f, "\n"); + } + } + fclose(f); + return true; +} int main(int argc, char** argv){ setup(argc, argv); @@ -608,11 +443,8 @@ int main(int argc, char** argv){ detect(); kmatch(); ransac(); - prob_mod(); - group(); - pair_output(); return 0; - boundle(); - expand(); - output(); + match_check(); + pair_output(); + text_output(); return 0; } diff --git a/meowpp.test/src/autostitch_FeaturePointsDetector_Harris.cpp b/meowpp.test/src/autostitch_FeaturePointsDetector_Harris.cpp index ebcca5b..573c4b6 100644 --- a/meowpp.test/src/autostitch_FeaturePointsDetector_Harris.cpp +++ b/meowpp.test/src/autostitch_FeaturePointsDetector_Harris.cpp @@ -13,45 +13,45 @@ class Harris: public MyFeaturePointsDetector{ public: Usage usage() const{ Usage ret; - ret.optionAdd('K', + ret.optionAdd("harris-k", "Specify the constant K of 'R = detM - KtraceM'", "", stringPrintf("%.10f", _body.paramK()), false); - ret.optionAdd('R', + ret.optionAdd("harris-r", "Specify the threshold of R to determind whether is " "featuer point or not", "", stringPrintf("%.10f", _body.paramR()), false); - ret.optionAdd('W', + ret.optionAdd("harris-w", "Specify the sigma of the gaussian blur", "", stringPrintf("%.10f", _body.paramW()), false); - ret.optionAdd('N', + ret.optionAdd("harris-n", "Specify the sigma of the gaussian blur to de-noise", "", stringPrintf("%.10f", _body.paramN()), false); - ret.optionAdd('G', + ret.optionAdd("harris-g", "Specify the sigma of the gaussian blur to generate feature", "", stringPrintf("%.10f", _body.paramG()), false); - ret.optionAdd('L', + ret.optionAdd("harris-l", ".........", "", stringPrintf("%.10f", _body.paramL()), false); - ret.optionAdd('B', + ret.optionAdd("harris-b", "Description size", "", stringPrintf("%lu", _body.paramB()), false); return ret; } bool usage(meow::Usage const& usg){ - double K = atof(usg.optionValue('K', 0).c_str()); - double R = atof(usg.optionValue('R', 0).c_str()); - double W = atof(usg.optionValue('W', 0).c_str()); - double N = atof(usg.optionValue('N', 0).c_str()); - double L = atof(usg.optionValue('L', 0).c_str()); - double G = atof(usg.optionValue('G', 0).c_str()); - size_t B = atoi(usg.optionValue('B', 0).c_str()); + double K = atof(usg.optionValue("harris-k", 0).c_str()); + double R = atof(usg.optionValue("harris-r", 0).c_str()); + double W = atof(usg.optionValue("harris-w", 0).c_str()); + double N = atof(usg.optionValue("harris-n", 0).c_str()); + double L = atof(usg.optionValue("harris-l", 0).c_str()); + double G = atof(usg.optionValue("harris-g", 0).c_str()); + size_t B = atoi(usg.optionValue("harris-b", 0).c_str()); _body.paramK(K); _body.paramR(R); _body.paramW(W); diff --git a/meowpp.test/src/autostitch_K_Match.cpp b/meowpp.test/src/autostitch_K_Match.cpp index d2fe8c6..6e5c69f 100644 --- a/meowpp.test/src/autostitch_K_Match.cpp +++ b/meowpp.test/src/autostitch_K_Match.cpp @@ -18,7 +18,7 @@ MyK_Match::~MyK_Match(){ Usage MyK_Match::usage() const{ Usage usg; - usg.optionAdd('k', + usg.optionAdd("kmatch-k", "k nearest neighbors", "", stringPrintf("%d", 5), false); @@ -26,7 +26,7 @@ Usage MyK_Match::usage() const{ } bool MyK_Match::usage(meow::Usage const& usg){ - _body.paramK(atoi(usg.optionValue('k', 0).c_str())); + _body.paramK(atoi(usg.optionValue("kmatch-k", 0).c_str())); return true; } diff --git a/meowpp.test/src/autostitch_RansacCheck.cpp b/meowpp.test/src/autostitch_RansacCheck.cpp index 0410396..becc7da 100644 --- a/meowpp.test/src/autostitch_RansacCheck.cpp +++ b/meowpp.test/src/autostitch_RansacCheck.cpp @@ -3,27 +3,30 @@ #include "meowpp/math/Matrix.h" #include "meowpp/math/Vector.h" #include +#include +#include + using namespace meow; double MyRansacCheck::threshold = 5.0; -meow::Usage MyRansacCheck::usage(){ +meow::Usage MyRansacCheck::usage() { Usage usg; - usg.optionAdd('t', + usg.optionAdd("ransac-threshold", "Threshold for RANSAC", "", stringPrintf("%.10f", threshold), false); return usg; } -bool MyRansacCheck::usage(Usage const& usg){ +bool MyRansacCheck::usage(Usage const& usg) { threshold = inRange(0.0000001, 1000.0, - atof(usg.optionValue('t', 0).c_str())); + atof(usg.optionValue("ransac-threshold", 0).c_str())); return true; } -MyRansacCheck::MyRansacCheck(){ +MyRansacCheck::MyRansacCheck() { } @@ -44,44 +47,58 @@ MyRansacCheck::~MyRansacCheck(){ } -std::pair, Vector3D > MyRansacCheck::vCalc( - std::vector const& __sample -) const{ - Matrix m(6, 7, 0.0); - for(size_t i = 0; i < 3u; i++){ +Vector MyRansacCheck::vCalc(std::vector const& __sample) const { + Matrix m(__sample.size() * 2, 9, 0.0); + for (size_t i = 0, I = __sample.size(); i < I; ++i) { m(i * 2 , 0, (*_from)[__sample[i].from.second](0)); m(i * 2 , 1, (*_from)[__sample[i].from.second](1)); m(i * 2 , 2, 1.0); - m(i * 2 , 6, (*_to)[__sample[i].to.second](0)); + m(i * 2 , 6, -(*_from)[__sample[i].from.second](0) * (*_to)[__sample[i].to.second](0)); + m(i * 2 , 7, -(*_from)[__sample[i].from.second](1) * (*_to)[__sample[i].to.second](0)); + m(i * 2 , 8, (*_to)[__sample[i].to.second](0)); m(i * 2 + 1, 3, (*_from)[__sample[i].from.second](0)); m(i * 2 + 1, 4, (*_from)[__sample[i].from.second](1)); m(i * 2 + 1, 5, 1.0); - m(i * 2 + 1, 6, (*_to)[__sample[i].to.second](1)); + m(i * 2 + 1, 6, -(*_from)[__sample[i].from.second](0) * (*_to)[__sample[i].to.second](1)); + m(i * 2 + 1, 7, -(*_from)[__sample[i].from.second](1) * (*_to)[__sample[i].to.second](1)); + m(i * 2 + 1, 8, (*_to)[__sample[i].to.second](1)); } - m.triangulared(); - Vector x(6, 0.0); - for(ssize_t i = 5; i >= 0; i--){ - double sum = 0; - for(size_t j = i + 1; j < 6u; j++){ - sum += x(j) * m(i, j); + if (__sample.size() == 4) { + m.triangulared(); + Vector x(8, 0.0); + for (ssize_t i = 7; i >= 0; i--) { + double sum = 0; + for (size_t j = i + 1; j < 8u; j++) { + sum += x(j) * m(i, j); + } + x.entry(i, (m(i, 8) - sum) / m(i, i)); } - x.entry(i, (m(i, 6) - sum) / m(i, i)); + return x; + } + else { + Matrix b(m.col(8)); + m.cols(8, 0.0); + Vector v((m.transpose() * m).inverse() * m.transpose() * b); + return v; } - Vector3D vX(x(0), x(1), x(2)); - Vector3D vY(x(3), x(4), x(5)); - return std::pair, Vector3D >(vX, vY); } void MyRansacCheck::rememberVCalc(std::vector - const& __sample){ - std::pair, Vector3D > p(vCalc(__sample)); - _vX = p.first; - _vY = p.second; + const& __sample) { + Vector x(vCalc(__sample)); + a_ = x(0); + b_ = x(1); + c_ = x(2); + d_ = x(3); + e_ = x(4); + f_ = x(5); + A_ = x(6); + B_ = x(7); } -bool MyRansacCheck::ok(FeaturePointIndexPair const& __m) const{ +bool MyRansacCheck::ok(FeaturePointIndexPair const& __m) const { Vector2D from( (*_from)[__m.from.second](0), (*_from)[__m.from.second](1)); @@ -96,9 +113,9 @@ bool MyRansacCheck::ok(FeaturePointIndexPair const& __m) const{ double MyRansacCheck::operator()(std::vector const& __sample, std::vector - const& __data) const{ - for(size_t i = 0, I = __sample.size(); i < I; i++){ - for(size_t j = 0, J = __sample.size(); j < J; j++){ + const& __data) const { + for(size_t i = 0, I = __sample.size(); i < I; i++) { + for (size_t j = 0, J = __sample.size(); j < J; j++) { if(i == j) continue; if(__sample[i].from.second == __sample[j].from.second) return -1; if(__sample[i].to .second == __sample[j].to .second) return -1; @@ -106,16 +123,32 @@ double MyRansacCheck::operator()(std::vector } ((MyRansacCheck*)this)->rememberVCalc(__sample); size_t ret = 0; - for(size_t i = 0, I = __data.size(); i < I; i++){ - if(ok(__data[i])){ + for (size_t i = 0, I = __data.size(); i < I; i++) { + if (ok(__data[i])) { ret++; } } return 0.001 + ret; } +bool MyRansacCheck::check(double r, double a) { + return true; + Vector2D v_x(a_, b_); + Vector2D v_y(c_, d_); + double len1 = v_x.length() * r; + double len2 = v_x.length() / r; + double len = v_y.length(); + if (len1 > len2) std::swap(len1, len2); + if (len < len1 || len2 < len) return false; + double sn = fabs(sin(a)); + double msn = fabs(v_x.cross(v_y) / v_x.length() / v_y.length()); + if (msn < sn) return false; + return true; +} -Vector2D MyRansacCheck::to(Vector2D const& __v) const{ - Vector3D v(__v(0), __v(1), 1); - return Vector2D(v.dot(_vX), v.dot(_vY)); +Vector2D MyRansacCheck::to(Vector2D const& v) const { + return Vector2D( + (v.x() * a_ + v.y() * b_ + c_) / (A_ * v.x() + B_ * v.y() + 1), + (v.x() * d_ + v.y() * e_ + f_) / (A_ * v.x() + B_ * v.y() + 1) + ); } diff --git a/meowpp.test/src/dsa.cpp b/meowpp.test/src/dsa.cpp index 9b93395..8a3c499 100644 --- a/meowpp.test/src/dsa.cpp +++ b/meowpp.test/src/dsa.cpp @@ -14,15 +14,16 @@ int count = 0; int main(int argc, char** argv){ std::vector ids(meow::ObjSelector<0>::names()); - usg2.optionAdd('t', "Select which subject to test", + usg2.optionAdd("t", "Select which subject to test", "", "", false); for(size_t i = 0; i < ids.size(); i++){ TestFunction* tmp = (TestFunction*)meow::ObjSelector<0>::get(ids[i]); - usg2.optionValueAcceptAdd('t', ids[i], tmp->name() + ", " + tmp->description()); + usg2.optionValueAcceptAdd("t", ids[i], tmp->name()+", "+tmp->description()); } - usg.optionAdd('h', "Display this help document"); + usg.optionAdd("h", "Display this help document"); + usg.optionAdd("help", "Display this help document"); usg.usageBeginAdd(" is a little test program to check whether" "the data structures in the template is correct by" "random generate lots of data to test"); @@ -33,14 +34,14 @@ int main(int argc, char** argv){ if(usg.arguments(argc, argv, &err) == false){ printf("%s\n\n%s\n", err.c_str(), usg.usage().c_str()); return 1; - }else if(usg.hasOptionSetup('h')){ + }else if(usg.hasOptionSetup("h") || usg.hasOptionSetup("help")) { printf("%s", usg.usage().c_str()); return 0; }else{ usg2.update(usg); - if(usg2.optionValuesSize('t') > 0){ - for(int i = 0, I = usg2.optionValuesSize('t'); i < I; i++){ - std::string wh = usg2.optionValue('t', i); + if(usg2.optionValuesSize("t") > 0){ + for(int i = 0, I = usg2.optionValuesSize("t"); i < I; i++){ + std::string wh = usg2.optionValue("t", i); TestFunction* f = (TestFunction*)meow::ObjSelector<0>::get(wh); if(f->run() == false){ printf("error occure on %s\n", f->name().c_str()); diff --git a/meowpp.test/src/oo.cpp b/meowpp.test/src/oo.cpp index 54c69d5..ede8a24 100644 --- a/meowpp.test/src/oo.cpp +++ b/meowpp.test/src/oo.cpp @@ -6,6 +6,7 @@ #include #include +#include using namespace meow; @@ -14,13 +15,14 @@ private: struct Myself{ int n; Myself() { } + Myself(Myself const& m): n(m.n) { + } ~Myself() { } - void copyFrom(Myself const& m){ n = m.n; } }; Self const self; public: - A(): self(true){ self()->n = 0; } - A(A const& b): self(false) { copyFrom(b); } + A(): self(){ self()->n = 0; } + A(A const& b): self(b.self, Self::COPY_FROM) { } ~A() { } int num() const { return self->n; } int num(int k) { return (self()->n = k); } @@ -34,38 +36,33 @@ struct B { B() { n = 0; count = 1; } }; -static A as[100]; -static B *bs[100]; - -static size_t N = 100; +static const size_t N = 50; +static A as[N]; +static B *bs[N]; int main(){ + srand(time(0)); for (size_t i = 0; i < N; i++) { bs[i] = new B; } - for (size_t i = 0; i < 1000; i++) { + for (size_t i = 0; i < 500; i++) { int k = rand(); - if (k % 3 == 0) { + if (k % 3 == 0) { // copyFrom int x, y; do { x = rand() % N; y = rand() % N; } while(x == y); as[x].copyFrom(as[y]); - bs[x]->count--; - if (bs[x]->count == 0) { - delete bs[x]; - } - bs[x] = new B; bs[x]->n = bs[y]->n; } - else if (k % 3 == 1) { + else if (k % 3 == 1) { // referenceFrom int x, y; do { x = rand() % N; y = rand() % N; - } while(x == y); + } while(x == y || x / (N / 5) != y / (N / 5)); as[x].referenceFrom(as[y]); bs[x]->count--; if (bs[x]->count == 0) { @@ -74,7 +71,7 @@ int main(){ bs[x] = bs[y]; bs[x]->count++; } - else { + else { // set value int x = rand() % N, v = rand() % 100; as[x].num(v); bs[x]->n = v; @@ -90,6 +87,7 @@ int main(){ printf("false!\n"); return 1; } + //for (size_t j = 0; j < N; j++) { printf("%d ", as[j].num()); } printf("\n"); } for (size_t i = 0; i < N; i++) { printf("%d ", as[i].num()); } printf("\n"); diff --git a/meowpp.test/src/rot_bundle.cpp b/meowpp.test/src/rot_bundle.cpp new file mode 100644 index 0000000..d626e8e --- /dev/null +++ b/meowpp.test/src/rot_bundle.cpp @@ -0,0 +1,319 @@ +#include +#include +#include +#include +#include + +#include +#include + +#include "meowpp/dsa/DisjointSet.h" +#include "meowpp/Usage.h" +#include "meowpp/gra/Eye.h" +#include "meowpp/colors/RGB_Space.h" +#include "meowpp/gra/Bitmap.h" +#include "meowpp/utility.h" +#include "meowpp/math/utility.h" +#include "meowpp/geo/Vectors.h" +#include "meowpp/gra/WatchBall.h" + +#include "meowpp/gra/BundleAdjustment_LM.h" + +using namespace meow; + +////////////////////////////////////////////////////////////////// + +Usage usg("rot_bundle"); + +std::vector bitmap_name; +std::vector > eyes; +std::vector > > fpsv; +std::vector > > > pairs; +std::vector > groups; +std::vector > balls; +std::vector > center; + +double f_init; +double threshold; + +////////////////////////////////////////////////////////////////// + +bool setup(int argc, char** argv) { + usg.optionAdd("f", + "Input text file", + "filename", + "", + true); + usg.optionAdd("h", + "help docu"); + usg.optionAdd("output-radius", + "...", + "floating point", + "1000", + false); + usg.optionAdd("o", + "prefix of output images", + "pathname", + "output", + false); + usg.optionAdd("f-init", + "init focal length", + "floating point", + "300.0", + false); + usg.optionAdd("t", + "threshold for bundle adjustment", + "floating point", + "5.0", + false); + std::string s; + bool ok = usg.arguments(argc, argv, &s); + if (usg.hasOptionSetup("h")) { + printf("%s\n", usg.usage().c_str()); + exit(0); + } + if (!ok) { + fprintf(stderr, "%s\n", s.c_str()); + exit(1); + } + return true; +} + +bool read() { + messagePrintf(1, "read file"); + FILE* f = fopen(usg.optionValue("f", 0).c_str(), "r"); + size_t N; + if (fscanf(f, "%lu", &N) < 1) { + fprintf(stderr, "format error!\n"); + exit(-1); + } + std::vector > fps_id; + int id_max = 0; + bitmap_name.resize(N); + eyes.resize(N); + fpsv.resize(N); + fps_id.resize(N); + pairs.resize(N); + center.resize(N); + for (size_t i = 0; i < N; ++i) { + pairs[i].resize(N); + char s[1000]; + if (fscanf(f, "%s", s) < 1) { + fprintf(stderr, "format error!\n"); + exit(-1); + } + size_t h, w; + if (fscanf(f, "%lu %lu", &h, &w) < 2) { + fprintf(stderr, "format error!\n"); + exit(-1); + } + center[i].y(1.0 * h / 2); + center[i].x(1.0 * w / 2); + bitmap_name[i] = s; + size_t M; + if (fscanf(f, "%lu", &M) < 1) { + fprintf(stderr, "format error!\n"); + exit(-1); + } + Vector v(2, 0.0); + for (size_t j = 0; j < M; ++j) { + double x, y; + if (fscanf(f, "%lf %lf", &x, &y) < 2) { + fprintf(stderr, "format error!\n"); + exit(-1); + } + v.entry(0, x - center[i].x()); + v.entry(1, -(y - center[i].y())); + fpsv[i].push_back(v); + fps_id[i].push_back(id_max++); + } + for (size_t j = 0; j < N; ++j) { + size_t O; + if (fscanf(f, "%lu", &O) < 1) { + fprintf(stderr, "format error!\n"); + exit(-1); + } + for (size_t k = 0; k < O; ++k) { + size_t a, b, c, d; + if (fscanf(f, "%lu %lu %lu %lu", &a, &b, &c, &d) < 4) { + fprintf(stderr, "format error!\n"); + exit(-1); + } + pairs[i][j].push_back(PairToPair(a, b, c, d)); + } + } + } + fclose(f); + messagePrintf(-1, "ok"); + messagePrintf(1, "merge fixed points"); + DisjointSet st(id_max); + for (size_t i = 0, I = eyes.size(); i < I; ++i) { + for (size_t j = 0, J = pairs[i].size(); j < J; ++j) { + for (size_t k = 0, K = pairs[i][j].size(); k < K; ++k) { + st.merge(fps_id[pairs[i][j][k].from.first][pairs[i][j][k].from.second], + fps_id[pairs[i][j][k].to .first][pairs[i][j][k].to .second]); + } + } + } + for (size_t i = 0, I = eyes.size(); i < I; ++i) { + std::string s(stringPrintf("eye %lu: ", i)); + for (size_t j = 0, J = fps_id[i].size(); j < J; ++j) { + int id = st.root(fps_id[i][j]); + s += stringPrintf("%d ", id); + eyes[i].cameraGet().fixedPoints2DGet().identityPointAdd(id, fpsv[i][j]); + } + messagePrintf(0, "%s", s.c_str()); + } + messagePrintf(-1, "ok"); + messagePrintf(0, "Number of Eyes: %lu", eyes.size()); + for (size_t i = 0, I = eyes.size(); i < I; ++i) { + messagePrintf(0, "eyes[%lu] have %lu fixed points", i, fpsv[i].size()); + } + messagePrintf(0, "relation:"); + for (size_t i = 0, I = eyes.size(); i < I; ++i) { + std::string s; + for (size_t j = 0; j < I; ++j) { + s += stringPrintf("%3lu ", pairs[i][j].size()); + } + messagePrintf(0, "%s", s.c_str()); + } + return true; +} + +bool group() { + size_t N = eyes.size(); + messagePrintf(1, "group"); + // union + DisjointSet dsj(N); + for (size_t i = 0; i < N; i++) { + for (size_t j = 0; j < N; j++) { + if(pairs[i][j].empty()) continue; + dsj.merge(i, j); + } + } + std::vector root; + for (size_t i = 0, I = eyes.size(); i < I; i++) { + if (dsj.root(i) == i) { + root.push_back(i); + } + } + // split into groups + groups.resize(root.size()); + for (size_t i = 0, I = root.size(); i < I; i++) { + messagePrintf(1, "Group %lu", i); + std::vector ids; + for (size_t j = 0; j < N; ++j) { + if (dsj.root(j) != root[i]) continue; + groups[i].push_back(j); + } + for (size_t j = 0, J = groups[i].size(); j < J; ++j) { + messagePrintf(0, "eye %lu", groups[i][j]); + } + messagePrintf(-1, ""); + } + messagePrintf(-1, "ok"); + return true; +} + +bool bundle() { + threshold = inRange(0.0005, 1000.0, atof(usg.optionValue("t", 0).c_str())); + f_init = inRange(0.005, 100000.0, atof(usg.optionValue("f-init", 0).c_str())); + BundleAdjustment_LM bdl; + for (size_t i = 0, I = groups.size(); i < I; ++i) { + messagePrintf(1, "bundle adjust for group %lu", i); + std::vector > seq; + for (size_t j = 0, J = groups[i].size(); j < J; ++j) { + eyes[groups[i][j]].cameraGet().photoGet().focal(f_init); + seq.push_back(SceneInfo(&(eyes[groups[i][j]]), + CAN_ROTATE | CAN_ZOOM)); + } + bdl.threshold(threshold); + bdl.adjustEye(&seq); + messagePrintf(-1, "ok"); + } + return true; +} + +bool input() { + messagePrintf(1, "loading images"); + for (size_t i = 0, I = eyes.size(); i < I; ++i) { + messagePrintf(1, "%s", bitmap_name[i].c_str()); + cv::Mat img = cv::imread(bitmap_name[i], CV_LOAD_IMAGE_COLOR); + if (!img.data) { + messagePrintf(-1, "opencv read error!, ignore"); + continue; + } + size_t width = img.size().width ; + size_t height = img.size().height; + Bitmap bmp; + bmp.size(height, width, RGBf_Space(0)); + for (size_t x = 0; x < width; x++) { + for (size_t y = 0; y < height; y++) { + RGBi_Space tmp(Vector3D( + img.at(y, x)[2], + img.at(y, x)[1], + img.at(y, x)[0])); + RGBf_Space p; + colorTransformate(tmp, &p); + bmp.pixel(y, x, p); + } + } + eyes[i].cameraGet().photoGet().reset(bmp, eyes[i].camera().photo().focal()); + messagePrintf(-1, "ok"); + } + messagePrintf(-1, "ok"); + return true; +} + +bool output() { + for (size_t i = 0, I = groups.size(); i < I; ++i) { + WatchBall ball; + std::vector > cs(groups[i].size()); + for (size_t j = 0, J = groups[i].size(); j < J; ++j) { + cs[j].referenceFrom(eyes[groups[i][j]].camera()); + } + ball.cameras(cs); + balls.push_back(ball); + } + double r = inRange(10.0, 100000.0, atof(usg.optionValue("output-radius", 0).c_str())); + messagePrintf(1, "Write images"); + Bitmap bmp; + for (size_t i = 0; i < balls.size(); i++) { + bmp = balls[i].expand(r); + size_t width = bmp.width (); + size_t height = bmp.height(); + cv::Mat img(height, width, CV_8UC3); + for (size_t x = 0; x < width; x++) { + for (size_t y = 0; y < height; y++) { + RGBi_Space tmp; + colorTransformate(bmp.pixel(y, x), &tmp); + img.at(y, x)[0] = tmp.b(); + img.at(y, x)[1] = tmp.g(); + img.at(y, x)[2] = tmp.r(); + } + } + std::string output_name(usg.optionValue("o", 0) + + (balls.size() > 1 ? stringPrintf("%lu", i) : "") + + ".jpg"); + messagePrintf(1, "Write to file '%s'", output_name.c_str()); + if (imwrite(output_name, img) == false) { + messagePrintf(-1, "opencv fail, ignore"); + } + else { + messagePrintf(-1, "%lux%lu, ok", width, height); + } + } + messagePrintf(-1, "ok"); + return true; +} + +int main(int argc, char** argv) { + setup(argc, argv); + read(); + group(); + bundle(); + input(); + output(); + return 0; +} + -- cgit v1.2.3