From 6054fca954b1facd6f5ed611f5bf37ab15a36e4d Mon Sep 17 00:00:00 2001 From: Simon Mayer Date: Mon, 13 Sep 2021 15:55:42 +0200 Subject: [PATCH] Added code for creating tiles of the complete Pasetti map --- stitching/100pct_stitch_data.json | 1 + stitching/50pct_stitch_data.json | 1 + stitching/complete_data.json | 1 + stitching/create_tiles.py | 474 +++++++++++++++++---- stitching/create_urls.py | 17 + stitching/download_imgs.py | 31 +- stitching/scan.py | 132 ++++-- stitching/stitch_data_backup_20210520.json | 1 + stitching/tile_data.json | 1 + stitching/tiles_list.txt | 188 ++++++++ 10 files changed, 720 insertions(+), 127 deletions(-) create mode 100644 stitching/100pct_stitch_data.json create mode 100644 stitching/50pct_stitch_data.json create mode 100644 stitching/complete_data.json create mode 100644 stitching/create_urls.py create mode 100644 stitching/stitch_data_backup_20210520.json create mode 100644 stitching/tile_data.json create mode 100644 stitching/tiles_list.txt diff --git a/stitching/100pct_stitch_data.json b/stitching/100pct_stitch_data.json new file mode 100644 index 0000000..65b0237 --- /dev/null +++ b/stitching/100pct_stitch_data.json @@ -0,0 +1 @@ +[{"src_name": "10.jpg", "src_shape": [9156, 6299], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -0.08323251825809101, "scale": 0.9987168967645754, "x": 7249.3757696577595, "y": -2.724258105480133}, {"src_name": "11.jpg", "src_shape": [9084, 7582], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -0.47064110395516434, "scale": 0.99932858086887, "x": 14520.367084024429, "y": 15.122426728092172}, {"src_name": "12.jpg", "src_shape": [8844, 7559], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -0.3934912301887074, "scale": 0.999136761213508, "x": 22040.481973340997, "y": 93.96687861442064}, {"src_name": "13.jpg", "src_shape": [9238, 7029], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -0.434097036012544, "scale": 0.9986708756016456, "x": 29744.064499184497, "y": -562.9346567727545}, {"src_name": "14.jpg", "src_shape": [11792, 8237], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 18.600059627212573, "scale": 1.0020764862820368, "x": 35033.4632490913, "y": -1024.0566486723437}, {"src_name": "15.jpg", "src_shape": [11759, 7230], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 30.68075628506069, "scale": 1.0009182704184914, "x": 42887.81547783238, "y": -3841.5277625327826}, {"src_name": "16.jpg", "src_shape": [9365, 6404], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 59.82279296555016, "scale": 1.0009182704184914, "x": 49902.765972915266, "y": -6380.498397027013}, {"src_name": "17.jpg", "src_shape": [11981, 7406], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 51.87690541183168, "scale": 1.0009182704184914, "x": 53281.43875456772, "y": -13988.201325446247}, {"src_name": "18.jpg", "src_shape": [9453, 6347], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 22.265292737953867, "scale": 0.999588330521774, "x": 59945.931362984986, "y": -22227.53301867346}, {"src_name": "19.jpg", "src_shape": [11376, 7020], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 17.70908500064079, "scale": 0.9998145593061389, "x": 67085.48710489878, "y": -25832.364488756244}, {"src_name": "20.jpg", "src_shape": [10526, 6398], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -3.924011069028669, "scale": 1.0041193654563056, "x": 76131.65790231591, "y": -28950.31525277943}, {"src_name": "21.jpg", "src_shape": [11158, 6737], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -1.044135599368746, "scale": 1.0042571970758538, "x": 83771.56745292133, "y": -28341.76357277581}, {"src_name": "22.jpg", "src_shape": [10263, 7406], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 14.457035689973846, "scale": 1.004350071415454, "x": 91436.30606125844, "y": -28595.105355916494}, {"src_name": "23.jpg", "src_shape": [12586, 7774], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 8.869061556340297, "scale": 1.0052213036049598, "x": 97700.51780117485, "y": -30653.181933241314}, {"src_name": "24.jpg", "src_shape": [10715, 6333], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -11.761740571320273, "scale": 1.006091934936296, "x": 108756.38210642435, "y": -31831.039783707114}, {"src_name": "25.jpg", "src_shape": [9772, 6269], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -11.79997942199967, "scale": 1.006116659710978, "x": 116323.41059760892, "y": -30239.90038613914}, {"src_name": "26.jpg", "src_shape": [13219, 7022], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -6.445648727695039, "scale": 1.006749943656571, "x": 123153.69088469553, "y": -28745.195514703526}, {"src_name": "27.jpg", "src_shape": [10073, 6318], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 33.75144326568981, "scale": 1.0077586102113194, "x": 130423.70665317748, "y": -25939.682546747237}, {"src_name": "28.jpg", "src_shape": [10200, 6271], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 33.674021364833415, "scale": 1.008391872225681, "x": 137437.85784668117, "y": -30591.891274223784}, {"src_name": "29.jpg", "src_shape": [9595, 6271], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 33.757834814583475, "scale": 1.0081342102679347, "x": 143343.54542588824, "y": -34530.120127684524}, {"src_name": "30.jpg", "src_shape": [9470, 6270], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 33.680702877345844, "scale": 1.0088215651381964, "x": 149909.548026535, "y": -38900.404657660045}, {"src_name": "31.jpg", "src_shape": [13882, 7391], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 33.132379212547136, "scale": 1.0093495484320776, "x": 156701.699821807, "y": -43447.96279685678}, {"src_name": "32.jpg", "src_shape": [10320, 6788], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -57.080362702260175, "scale": 1.0144216567156559, "x": 171255.72627292192, "y": -46745.078143500534}, {"src_name": "33.jpg", "src_shape": [10303, 6340], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -71.67371168132911, "scale": 1.0174740789525134, "x": 175952.5244436693, "y": -40227.64774128849}, {"src_name": "34.jpg", "src_shape": [9322, 6285], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -71.84103050073985, "scale": 1.012587508189394, "x": 178643.23751634933, "y": -32062.045852230367}, {"src_name": "35.jpg", "src_shape": [8912, 6270], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -71.73197135746067, "scale": 1.014121437112159, "x": 180924.82405599073, "y": -25133.919554938635}, {"src_name": "42.jpg", "src_shape": [10826, 6237], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -56.981971357460665, "scale": 1.0176708621420516, "x": 182743.5740314759, "y": -18119.837913482002}, {"src_name": "43.jpg", "src_shape": [9485, 6221], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -56.69258924913813, "scale": 1.0181433384309562, "x": 187070.57985403686, "y": -11417.269100808506}, {"src_name": "44.jpg", "src_shape": [10467, 6840], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -58.20093187951715, "scale": 1.01893642997591, "x": 191585.1029427969, "y": -4830.094320148035}, {"src_name": "45.jpg", "src_shape": [11509, 8512], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -74.52912000074454, "scale": 1.0188206468899867, "x": 196137.87010461817, "y": 1426.7731062498933}, {"src_name": "46.jpg", "src_shape": [12996, 9228], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -56.389921443528, "scale": 1.017938349272385, "x": 197055.3069500258, "y": 7311.389125761174}, {"src_name": "47.jpg", "src_shape": [13300, 11354], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -62.65462095691766, "scale": 1.018575559658753, "x": 205165.0985488695, "y": 14766.4491925195}, {"src_name": "48.jpg", "src_shape": [12987, 11065], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -48.802369204021176, "scale": 1.0179266161684193, "x": 207920.66268320417, "y": 22670.998023416087}, {"src_name": "49.jpg", "src_shape": [9320, 12354], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -32.35694592320657, "scale": 1.0110220684989601, "x": 212732.03164057143, "y": 28842.012506094725}, {"src_name": "50.jpg", "src_shape": [8169, 12348], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -32.48146419285468, "scale": 1.010656564136338, "x": 219396.82025046006, "y": 33044.572578691615}, {"src_name": "39.jpg", "src_shape": [11210, 13515], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -11.571740571320273, "scale": 1.0181650381555316, "x": 109474.31905976475, "y": -44804.890382753816}, {"src_name": "40.jpg", "src_shape": [9195, 15499], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -11.649348405703114, "scale": 1.0180082935797883, "x": 119584.37130188364, "y": -45453.287376699984}, {"src_name": "41.jpg", "src_shape": [9452, 15594], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -12.149163227703022, "scale": 1.0183215205335845, "x": 125971.26028801709, "y": -44190.513059378645}, {"src_name": "36.jpg", "src_shape": [10449, 8254], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -11.79997942199967, "scale": 1.009144091986939, "x": 116009.19863754098, "y": -24047.795859665293}, {"src_name": "37.jpg", "src_shape": [13068, 10060], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": -11.815639862215454, "scale": 1.0085756551960436, "x": 122605.69518659712, "y": -24515.13069358508}, {"src_name": "38.jpg", "src_shape": [17146, 10826], "dst_name": "9.jpg", "dst_shape": [8448, 6271], "angle": 33.674021364833415, "scale": 1.0149464193951478, "x": 125936.16592113758, "y": -35760.757611050656}] \ No newline at end of file diff --git a/stitching/50pct_stitch_data.json b/stitching/50pct_stitch_data.json new file mode 100644 index 0000000..0b10874 --- /dev/null +++ b/stitching/50pct_stitch_data.json @@ -0,0 +1 @@ +[{"src_name": "10.jpg", "src_shape": [4578, 3150], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -0.08323251825809101, "scale": 0.9987168967645754, "x": 3624.6878848288798, "y": -1.3621290527400665}, {"src_name": "11.jpg", "src_shape": [4542, 3791], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -0.47064110395516434, "scale": 0.99932858086887, "x": 7260.183542012214, "y": 7.561213364046086}, {"src_name": "12.jpg", "src_shape": [4422, 3780], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -0.3934912301887074, "scale": 0.999136761213508, "x": 11020.240986670498, "y": 46.98343930721032}, {"src_name": "13.jpg", "src_shape": [4619, 3515], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -0.434097036012544, "scale": 0.9986708756016456, "x": 14872.032249592248, "y": -281.46732838637723}, {"src_name": "14.jpg", "src_shape": [5896, 4119], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 18.600059627212573, "scale": 1.0020764862820368, "x": 17516.73162454565, "y": -512.0283243361719}, {"src_name": "15.jpg", "src_shape": [5880, 3615], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 30.68075628506069, "scale": 1.0009182704184914, "x": 21443.90773891619, "y": -1920.7638812663913}, {"src_name": "16.jpg", "src_shape": [4683, 3202], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 59.82279296555016, "scale": 1.0009182704184914, "x": 24951.382986457633, "y": -3190.2491985135066}, {"src_name": "17.jpg", "src_shape": [5991, 3703], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 51.87690541183168, "scale": 1.0009182704184914, "x": 26640.71937728386, "y": -6994.100662723124}, {"src_name": "18.jpg", "src_shape": [4727, 3174], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 22.265292737953867, "scale": 0.999588330521774, "x": 29972.965681492493, "y": -11113.76650933673}, {"src_name": "19.jpg", "src_shape": [5688, 3510], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 17.70908500064079, "scale": 0.9998145593061389, "x": 33542.74355244939, "y": -12916.182244378122}, {"src_name": "20.jpg", "src_shape": [5263, 3199], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -3.924011069028669, "scale": 1.0041193654563056, "x": 38065.82895115796, "y": -14475.157626389715}, {"src_name": "21.jpg", "src_shape": [5579, 3369], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -1.044135599368746, "scale": 1.0042571970758538, "x": 41885.783726460664, "y": -14170.881786387905}, {"src_name": "22.jpg", "src_shape": [5132, 3703], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 14.457035689973846, "scale": 1.004350071415454, "x": 45718.15303062922, "y": -14297.552677958247}, {"src_name": "23.jpg", "src_shape": [6293, 3887], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 8.869061556340297, "scale": 1.0052213036049598, "x": 48850.258900587425, "y": -15326.590966620657}, {"src_name": "24.jpg", "src_shape": [5358, 3167], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.761740571320273, "scale": 1.006091934936296, "x": 54378.19105321218, "y": -15915.519891853557}, {"src_name": "25.jpg", "src_shape": [4886, 3135], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.79997942199967, "scale": 1.006116659710978, "x": 58161.70529880446, "y": -15119.95019306957}, {"src_name": "26.jpg", "src_shape": [6610, 3511], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -6.445648727695039, "scale": 1.006749943656571, "x": 61576.84544234777, "y": -14372.597757351763}, {"src_name": "27.jpg", "src_shape": [5037, 3159], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.75144326568981, "scale": 1.0077586102113194, "x": 65211.85332658874, "y": -12969.841273373619}, {"src_name": "28.jpg", "src_shape": [5100, 3136], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.674021364833415, "scale": 1.008391872225681, "x": 68718.92892334059, "y": -15295.945637111892}, {"src_name": "29.jpg", "src_shape": [4798, 3136], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.757834814583475, "scale": 1.0081342102679347, "x": 71671.77271294412, "y": -17265.060063842262}, {"src_name": "30.jpg", "src_shape": [4735, 3135], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.680702877345844, "scale": 1.0088215651381964, "x": 74954.7740132675, "y": -19450.202328830022}, {"src_name": "31.jpg", "src_shape": [6941, 3696], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.132379212547136, "scale": 1.0093495484320776, "x": 78350.8499109035, "y": -21723.98139842839}, {"src_name": "32.jpg", "src_shape": [5160, 3394], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -57.080362702260175, "scale": 1.0144216567156559, "x": 85627.86313646096, "y": -23372.539071750267}, {"src_name": "33.jpg", "src_shape": [5152, 3170], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -71.67371168132911, "scale": 1.0174740789525134, "x": 87976.26222183465, "y": -20113.823870644246}, {"src_name": "34.jpg", "src_shape": [4661, 3143], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -71.84103050073985, "scale": 1.012587508189394, "x": 89321.61875817466, "y": -16031.022926115184}, {"src_name": "35.jpg", "src_shape": [4456, 3135], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -71.73197135746067, "scale": 1.014121437112159, "x": 90462.41202799536, "y": -12566.959777469317}, {"src_name": "42.jpg", "src_shape": [5413, 3119], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -56.981971357460665, "scale": 1.0176708621420516, "x": 91371.78701573795, "y": -9059.918956741001}, {"src_name": "43.jpg", "src_shape": [4743, 3111], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -56.69258924913813, "scale": 1.0181433384309562, "x": 93535.28992701843, "y": -5708.634550404253}, {"src_name": "44.jpg", "src_shape": [5234, 3420], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -58.20093187951715, "scale": 1.01893642997591, "x": 95792.55147139844, "y": -2415.0471600740175}, {"src_name": "45.jpg", "src_shape": [5755, 4256], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -74.52912000074454, "scale": 1.0188206468899867, "x": 98068.93505230908, "y": 713.3865531249467}, {"src_name": "46.jpg", "src_shape": [6498, 4614], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -56.389921443528, "scale": 1.017938349272385, "x": 98527.6534750129, "y": 3655.694562880587}, {"src_name": "47.jpg", "src_shape": [6650, 5677], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -62.65462095691766, "scale": 1.018575559658753, "x": 102582.54927443474, "y": 7383.22459625975}, {"src_name": "48.jpg", "src_shape": [6494, 5533], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -48.802369204021176, "scale": 1.0179266161684193, "x": 103960.33134160208, "y": 11335.499011708043}, {"src_name": "49.jpg", "src_shape": [4660, 6177], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -32.35694592320657, "scale": 1.0110220684989601, "x": 106366.01582028571, "y": 14421.006253047362}, {"src_name": "50.jpg", "src_shape": [4085, 6174], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -32.48146419285468, "scale": 1.010656564136338, "x": 109698.41012523003, "y": 16522.286289345808}, {"src_name": "39.jpg", "src_shape": [5605, 6758], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.571740571320273, "scale": 1.0181650381555316, "x": 54737.159529882374, "y": -22402.445191376908}, {"src_name": "40.jpg", "src_shape": [4598, 7750], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.649348405703114, "scale": 1.0180082935797883, "x": 59792.18565094182, "y": -22726.643688349992}, {"src_name": "41.jpg", "src_shape": [4726, 7797], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -12.149163227703022, "scale": 1.0183215205335845, "x": 62985.630144008544, "y": -22095.256529689323}, {"src_name": "36.jpg", "src_shape": [5225, 4127], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.79997942199967, "scale": 1.009144091986939, "x": 58004.59931877049, "y": -12023.897929832647}, {"src_name": "37.jpg", "src_shape": [6534, 5030], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.815639862215454, "scale": 1.0085756551960436, "x": 61302.84759329856, "y": -12257.56534679254}, {"src_name": "38.jpg", "src_shape": [8573, 5413], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.674021364833415, "scale": 1.0149464193951478, "x": 62968.08296056879, "y": -17880.378805525328}] \ No newline at end of file diff --git a/stitching/complete_data.json b/stitching/complete_data.json new file mode 100644 index 0000000..967de78 --- /dev/null +++ b/stitching/complete_data.json @@ -0,0 +1 @@ +[{"src_name": "10.jpg", "src_shape": [4578, 3150], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -0.08323251825809101, "scale": 0.9987168967645754, "x": 3624.6878848288798, "y": -1.3621290527400665}, {"src_name": "11.jpg", "src_shape": [4542, 3791], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -0.47064110395516434, "scale": 0.99932858086887, "x": 7260.183542012214, "y": 7.561213364046086}, {"src_name": "12.jpg", "src_shape": [4422, 3780], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -0.3934912301887074, "scale": 0.999136761213508, "x": 11020.240986670498, "y": 46.98343930721032}, {"src_name": "13.jpg", "src_shape": [4619, 3515], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -0.434097036012544, "scale": 0.9986708756016456, "x": 14872.032249592248, "y": -281.46732838637723}, {"src_name": "14.jpg", "src_shape": [5896, 4119], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 18.600059627212573, "scale": 1.0020764862820368, "x": 17516.73162454565, "y": -512.0283243361719}, {"src_name": "15.jpg", "src_shape": [5880, 3615], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 30.68075628506069, "scale": 1.0009182704184914, "x": 21443.90773891619, "y": -1920.7638812663913}, {"src_name": "16.jpg", "src_shape": [4683, 3202], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 59.82279296555016, "scale": 1.0009182704184914, "x": 24951.382986457633, "y": -3190.2491985135066}, {"src_name": "17.jpg", "src_shape": [5991, 3703], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 51.87690541183168, "scale": 1.0009182704184914, "x": 26640.71937728386, "y": -6994.100662723124}, {"src_name": "18.jpg", "src_shape": [4727, 3174], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 22.265292737953867, "scale": 0.999588330521774, "x": 29972.965681492493, "y": -11113.76650933673}, {"src_name": "19.jpg", "src_shape": [5688, 3510], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 17.70908500064079, "scale": 0.9998145593061389, "x": 33542.74355244939, "y": -12916.182244378122}, {"src_name": "20.jpg", "src_shape": [5263, 3199], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -3.924011069028669, "scale": 1.0041193654563056, "x": 38065.82895115796, "y": -14475.157626389715}, {"src_name": "21.jpg", "src_shape": [5579, 3369], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -1.044135599368746, "scale": 1.0042571970758538, "x": 41885.783726460664, "y": -14170.881786387905}, {"src_name": "22.jpg", "src_shape": [5132, 3703], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 14.457035689973846, "scale": 1.004350071415454, "x": 45718.15303062922, "y": -14297.552677958247}, {"src_name": "23.jpg", "src_shape": [6293, 3887], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 8.869061556340297, "scale": 1.0052213036049598, "x": 48850.258900587425, "y": -15326.590966620657}, {"src_name": "24.jpg", "src_shape": [5358, 3167], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.761740571320273, "scale": 1.006091934936296, "x": 54378.19105321218, "y": -15915.519891853557}, {"src_name": "25.jpg", "src_shape": [4886, 3135], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.79997942199967, "scale": 1.006116659710978, "x": 58161.70529880446, "y": -15119.95019306957}, {"src_name": "26.jpg", "src_shape": [6610, 3511], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -6.445648727695039, "scale": 1.006749943656571, "x": 61576.84544234777, "y": -14372.597757351763}, {"src_name": "27.jpg", "src_shape": [5037, 3159], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.75144326568981, "scale": 1.0077586102113194, "x": 65211.85332658874, "y": -12969.841273373619}, {"src_name": "28.jpg", "src_shape": [5100, 3136], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.674021364833415, "scale": 1.008391872225681, "x": 68718.92892334059, "y": -15295.945637111892}, {"src_name": "29.jpg", "src_shape": [4798, 3136], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.757834814583475, "scale": 1.0081342102679347, "x": 71671.77271294412, "y": -17265.060063842262}, {"src_name": "30.jpg", "src_shape": [4735, 3135], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.680702877345844, "scale": 1.0088215651381964, "x": 74954.7740132675, "y": -19450.202328830022}, {"src_name": "31.jpg", "src_shape": [6941, 3696], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.132379212547136, "scale": 1.0093495484320776, "x": 78350.8499109035, "y": -21723.98139842839}, {"src_name": "32.jpg", "src_shape": [5160, 3394], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -57.080362702260175, "scale": 1.0144216567156559, "x": 85627.86313646096, "y": -23372.539071750267}, {"src_name": "33.jpg", "src_shape": [5152, 3170], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -71.67371168132911, "scale": 1.0174740789525134, "x": 87976.26222183465, "y": -20113.823870644246}, {"src_name": "34.jpg", "src_shape": [4661, 3143], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -71.84103050073985, "scale": 1.012587508189394, "x": 89321.61875817466, "y": -16031.022926115184}, {"src_name": "35.jpg", "src_shape": [4456, 3135], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -71.73197135746067, "scale": 1.014121437112159, "x": 90462.41202799536, "y": -12566.959777469317}, {"src_name": "42.jpg", "src_shape": [5413, 3119], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -56.981971357460665, "scale": 1.0176708621420516, "x": 91371.78701573795, "y": -9059.918956741001}, {"src_name": "43.jpg", "src_shape": [4743, 3111], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -56.69258924913813, "scale": 1.0181433384309562, "x": 93535.28992701843, "y": -5708.634550404253}, {"src_name": "44.jpg", "src_shape": [5234, 3420], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -58.20093187951715, "scale": 1.01893642997591, "x": 95792.55147139844, "y": -2415.0471600740175}, {"src_name": "45.jpg", "src_shape": [5755, 4256], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -74.52912000074454, "scale": 1.0188206468899867, "x": 98068.93505230908, "y": 713.3865531249467}, {"src_name": "46.jpg", "src_shape": [6498, 4614], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -56.389921443528, "scale": 1.017938349272385, "x": 98527.6534750129, "y": 3655.694562880587}, {"src_name": "47.jpg", "src_shape": [6650, 5677], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -62.65462095691766, "scale": 1.018575559658753, "x": 102582.54927443474, "y": 7383.22459625975}, {"src_name": "48.jpg", "src_shape": [6494, 5533], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -48.802369204021176, "scale": 1.0179266161684193, "x": 103960.33134160208, "y": 11335.499011708043}, {"src_name": "49.jpg", "src_shape": [4660, 6177], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -32.35694592320657, "scale": 1.0110220684989601, "x": 106366.01582028571, "y": 14421.006253047362}, {"src_name": "50.jpg", "src_shape": [4085, 6174], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -32.48146419285468, "scale": 1.010656564136338, "x": 109698.41012523003, "y": 16522.286289345808}, {"src_name": "39.jpg", "src_shape": [5605, 6758], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.571740571320273, "scale": 1.0181650381555316, "x": 54737.159529882374, "y": -22402.445191376908}, {"src_name": "40.jpg", "src_shape": [4598, 7750], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.649348405703114, "scale": 1.0180082935797883, "x": 59792.18565094182, "y": -22726.643688349992}, {"src_name": "41.jpg", "src_shape": [4726, 7797], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -12.149163227703022, "scale": 1.0183215205335845, "x": 62985.630144008544, "y": -22095.256529689323}, {"src_name": "36.jpg", "src_shape": [5225, 4127], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.79997942199967, "scale": 1.009144091986939, "x": 58004.59931877049, "y": -12023.897929832647}, {"src_name": "37.jpg", "src_shape": [6534, 5030], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -11.815639862215454, "scale": 1.0085756551960436, "x": 61302.84759329856, "y": -12257.56534679254}, {"src_name": "38.jpg", "src_shape": [8573, 5413], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 33.674021364833415, "scale": 1.0149464193951478, "x": 62968.08296056879, "y": -17880.378805525328}, {"src_name": "51.jpg", "src_shape": [4740, 3401], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -32.60646419285468, "scale": 1.0081299227259972, "x": 111926.45994526535, "y": 19590.450235989934}, {"src_name": "52_3.jpg", "src_shape": [4748, 3369], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -31.99646419285468, "scale": 1.0105494345405395, "x": 111465.05490634698, "y": 20227.56223596467}, {"src_name": "52_2.jpg", "src_shape": [4748, 3369], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 88.44353580714531, "scale": 1.0105494345405395, "x": 113052.40561273348, "y": 25743.93449718882}, {"src_name": "52_1.jpg", "src_shape": [4748, 3369], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -61.306464192854676, "scale": 1.0093396786332685, "x": 115380.92676010395, "y": 21018.747090162993}, {"src_name": "53.jpg", "src_shape": [4748, 3413], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 28.24353580714532, "scale": 1.0081299227259972, "x": 114887.76314189617, "y": 22105.865290890775}, {"src_name": "54.jpg", "src_shape": [4724, 3401], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 28.14353580714532, "scale": 1.0101461825714493, "x": 118118.54275858832, "y": 20357.31812146886}, {"src_name": "55.jpg", "src_shape": [4736, 3405], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 28.543535807145318, "scale": 1.0081299227259972, "x": 121377.17211430515, "y": 18602.651083655106}, {"src_name": "57_3.jpg", "src_shape": [4745, 3401], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -151.73646419285467, "scale": 1.0081299227259972, "x": 130484.63174496556, "y": 17593.938265884084}, {"src_name": "56.jpg", "src_shape": [4752, 3397], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 8.793535807145318, "scale": 1.0081299227259972, "x": 125651.50073922634, "y": 16315.325918576566}, {"src_name": "57_2.jpg", "src_shape": [4745, 3401], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -7.05646419285468, "scale": 1.0081299227259972, "x": 128361.120508739, "y": 15460.066303367423}, {"src_name": "58.jpg", "src_shape": [4744, 3401], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -22.206464192854682, "scale": 1.0081299227259972, "x": 131074.77658935005, "y": 15646.165357956645}, {"src_name": "59_2.jpg", "src_shape": [4733, 3368], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -186.95646419285467, "scale": 1.0081299227259972, "x": 133266.5664029346, "y": 17974.504313132562}, {"src_name": "59_1.jpg", "src_shape": [4733, 3368], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -22.206464192854682, "scale": 1.011154312494175, "x": 131656.24984106122, "y": 14260.103600300583}, {"src_name": "60.jpg", "src_shape": [4733, 3397], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -22.00646419285468, "scale": 1.0081299227259972, "x": 134538.85333270056, "y": 17065.0518300168}, {"src_name": "62_2.jpg", "src_shape": [4728, 3377], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -202.40646419285468, "scale": 1.011154312494175, "x": 138192.27660289663, "y": 20584.480675767078}, {"src_name": "57_1.jpg", "src_shape": [4745, 3401], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -22.10646419285468, "scale": 1.0126665073782641, "x": 137982.91637127302, "y": 18446.0041278479}, {"src_name": "61.jpg", "src_shape": [4752, 3412], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -6.206464192854682, "scale": 1.0081299227259972, "x": 137928.49859531247, "y": 18570.36125459007}, {"src_name": "62_1.jpg", "src_shape": [4728, 3377], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -5.756464192854679, "scale": 1.0131705723396272, "x": 138099.99739366848, "y": 17095.57308514858}, {"src_name": "64_1.jpg", "src_shape": [4724, 3373], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -175.75646419285468, "scale": 1.0131705723396272, "x": 143570.15864862068, "y": 22276.18680678206}, {"src_name": "63.jpg", "src_shape": [4744, 3401], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 14.693535807145317, "scale": 1.0081299227259972, "x": 141573.14348886095, "y": 19127.01199776324}, {"src_name": "64_2.jpg", "src_shape": [4724, 3373], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 40.19353580714532, "scale": 1.0081299227259972, "x": 143263.898276186, "y": 19686.781740009246}, {"src_name": "65.jpg", "src_shape": [4740, 3409], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 66.39353580714533, "scale": 1.0081299227259972, "x": 145331.2398626755, "y": 18658.818705995684}, {"src_name": "67_1.jpg", "src_shape": [4728, 3377], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 48.59353580714532, "scale": 1.0131705723396272, "x": 146650.98480090458, "y": 15201.930639084669}, {"src_name": "66.jpg", "src_shape": [4728, 3396], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 31.24353580714532, "scale": 1.0101461825714493, "x": 147888.0244248904, "y": 13567.44026578401}, {"src_name": "67_2.jpg", "src_shape": [4728, 3377], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": -162.30646419285466, "scale": 1.0101461825714493, "x": 156433.99080539568, "y": 13374.754166816387}, {"src_name": "68.jpg", "src_shape": [4744, 3389], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 4.643535807145319, "scale": 1.0081299227259972, "x": 152395.31948679156, "y": 10985.147122252647}, {"src_name": "73_1.jpg", "src_shape": [4727, 3373], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 12.193535807145317, "scale": 1.0161949621078052, "x": 155697.12595014682, "y": 10788.739721080769}, {"src_name": "69.jpg", "src_shape": [4717, 3401], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 21.49353580714532, "scale": 1.0081299227259972, "x": 156092.2819130359, "y": 10833.281283919654}, {"src_name": "70.jpg", "src_shape": [4732, 3397], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 21.193535807145317, "scale": 1.0081299227259972, "x": 159506.63288806134, "y": 9504.939158887664}, {"src_name": "71.jpg", "src_shape": [4756, 3365], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 21.343535807145322, "scale": 1.011154312494175, "x": 160614.87297914515, "y": 12415.879572815946}, {"src_name": "72.jpg", "src_shape": [2396, 3373], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 21.093535807145322, "scale": 1.0081299227259972, "x": 164445.28257083296, "y": 10891.739700309125}, {"src_name": "73_2.jpg", "src_shape": [4727, 3373], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 20.793535807145318, "scale": 1.0081299227259972, "x": 161535.51273717734, "y": 8720.44410945709}, {"src_name": "74.jpg", "src_shape": [4764, 3363], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 63.64353580714532, "scale": 1.0131705723396272, "x": 163123.88152546453, "y": 8598.39411159584}, {"src_name": "75.jpg", "src_shape": [4744, 3369], "dst_name": "9.jpg", "dst_shape": [4224, 3136], "angle": 63.743535807145314, "scale": 1.0081299227259972, "x": 164832.12598524612, "y": 5188.970061572891}] \ No newline at end of file diff --git a/stitching/create_tiles.py b/stitching/create_tiles.py index 234bb39..08027bf 100644 --- a/stitching/create_tiles.py +++ b/stitching/create_tiles.py @@ -1,33 +1,32 @@ +import numpy as np + from scan import * import cvxpy as cp from itertools import product - - -class EmptyTileError(Exception): - pass - - -class OutOfBoundsError(Exception): - pass +import time class Tile: - def __init__(self, side_length=100, top_left=(0, 0), roi=(0, 0, 100, 100), img_names=None): + def __init__(self, side_length=100, top_left=(0, 0), img_names=None): self.side_length = side_length self.top_left = top_left - self.roi = roi self.img_names = img_names - def is_out_of_roi(self): - x, y = self.top_left[0], self.top_left[1] - check_x = (x >= self.roi[0]) & (x <= self.roi[0] + self.roi[2]) - check_y = (y >= self.roi[1]) & (y <= self.roi[1] + self.roi[3]) - return not (check_x & check_y) + def has_intersection(self, data): + tl = np.array(self.top_left) + sl = self.side_length + pts = np.array([tl, tl + np.array([sl, 0]), tl + np.array([sl, sl]), tl + np.array([0, sl])], np.int32) + if have_overlap(pts, 0, np.array(get_vertices(data[0]['dst_shape'], 0, 0, 0)).reshape((4, 2)), 0): + return True + for dat in data: + if have_overlap(pts, 0, get_rectangle(dat), dat['angle']): + return True + return False - def check_intersections(self, data): + def check_all_intersections(self, data): tl = np.array(self.top_left) sl = self.side_length - pts = [tl, tl + np.array([sl, 0]), tl + np.array([sl, sl]), tl + np.array([0, sl])] + pts = np.array([tl, tl + np.array([sl, 0]), tl + np.array([sl, sl]), tl + np.array([0, sl])], np.int32) img_lis = [] if have_overlap(pts, 0, np.array(get_vertices(data[0]['dst_shape'], 0, 0, 0)).reshape((4, 2)), 0): img_lis.append(data[0]['dst_name']) @@ -38,29 +37,18 @@ class Tile: self.img_names = img_lis -def get_linear_ineq(rect, angle): +def get_linear_ineq(rect_angle): + rect, angle = rect_angle rad = angle * np.pi / 180 - if np.absolute(rad) <= np.pi / 4: - slope = np.tan(rad) - inter_1 = rect[0][1] - slope * rect[0][0] - a1, a2, b1 = slope, - 1, - inter_1 - inter_2 = rect[3][1] - slope * rect[3][0] - a3, a4, b2 = - slope, 1, inter_2 - inter_3 = rect[0][0] + slope * rect[0][1] - a5, a6, b3 = - 1, - slope, - inter_3 - inter_4 = rect[1][0] + slope * rect[1][1] - a7, a8, b4 = 1, slope, inter_4 - else: - # exchange x and y here? right now only copied from above - slope = np.tan(rad) - inter_1 = rect[0][1] - slope * rect[0][0] - a1, a2, b1 = slope, - 1, - inter_1 - inter_2 = rect[3][1] - slope * rect[3][0] - a3, a4, b2 = - slope, 1, inter_2 - inter_3 = rect[0][0] + slope * rect[0][1] - a5, a6, b3 = - 1, - slope, - inter_3 - inter_4 = rect[1][0] + slope * rect[1][1] - a7, a8, b4 = 1, slope, inter_4 + slope = np.tan(rad) + inter_1 = rect[0][1] - slope * rect[0][0] + a1, a2, b1 = slope, - 1, - inter_1 + inter_2 = rect[3][1] - slope * rect[3][0] + a3, a4, b2 = - slope, 1, inter_2 + inter_3 = rect[0][0] + slope * rect[0][1] + a5, a6, b3 = - 1, - slope, - inter_3 + inter_4 = rect[1][0] + slope * rect[1][1] + a7, a8, b4 = 1, slope, inter_4 A1 = np.array([[a1, a2], [a3, a4]]) B1 = np.array([b1, b2]) A2 = np.array([[a5, a6], [a7, a8]]) @@ -77,19 +65,56 @@ def have_overlap(rect_1, angle_1, rect_2, angle_2): for i in range(4): shifted_1[i] = rect_1[i] - np.array(p0) shifted_2[i] = rect_2[i] - np.array(p0) - A1, B1, A2, B2 = get_linear_ineq(shifted_1, - angle_1) - A3, B3, A4, B4 = get_linear_ineq(shifted_2, - angle_2) - x = cp.Variable(2) - prob = cp.Problem(cp.Minimize(2), [A1 @ x <= B1, A2 @ x <= B2, A3 @ x <= B3, A4 @ x <= B4]) - prob.solve() - solution = x.value - return solution is not None + center_1 = get_center(shifted_1) + center_2 = get_center(shifted_2) + r_1 = get_gc_radius(shifted_1) + r_2 = get_gc_radius(shifted_2) + distance = np.sqrt((center_1[0] - center_2[0])**2 + (center_1[1] - center_2[1])**2) + if distance >= r_1 + r_2: + return False + else: + A1, B1, A2, B2 = get_linear_ineq(order_rectangle(shifted_1, angle_1)) + A3, B3, A4, B4 = get_linear_ineq(order_rectangle(shifted_2, angle_2)) + x = cp.Variable(2) + prob = cp.Problem(cp.Minimize(2), [A1 @ x <= B1, A2 @ x <= B2, A3 @ x <= B3, A4 @ x <= B4]) + try: + prob.solve() + except cp.error.SolverError: + print('Solver error') + return True + solution = x.value + return solution is not None + + +def order_rectangle(rect, angle): + quadrant = int(angle // 90) + if quadrant < 0: + quadrant += 1 + new_rect = np.zeros_like(rect) + for i in range(4): + new_rect[i] = rect[(i + quadrant) % 4] + return new_rect, - (angle - quadrant * 90) def get_rectangle(dat): return get_vertices(np.array(dat['src_shape']) * dat['scale'], dat['angle'], dat['x'], dat['y']).reshape((4, 2)) +def get_gc_radius(rect): + p1, p2, p3, p4 = rect + center = get_center(rect) + r_x = p1[0] - center[0] + r_y = p1[1] - center[1] + return np.sqrt(r_x**2 + r_y**2) + + +def get_center(rect): + p1, p2, p3, p4 = rect + c_x = (p1[0] + p3[0])/2 + c_y = (p1[1] + p3[1])/2 + return c_x, c_y + + def get_warp_scale(data, name): for dat in data: if dat['src_name'] == name: @@ -120,84 +145,290 @@ def get_data_from_names(data, names): for dat in data: if dat['src_name'] == name: ret_data.append(dat) - else: - ret_data.append(data[0]) return ret_data -def smart_slice(output, input, x1, x2, y1, y2): - xmin = max(0, x1) - xmax = min(x2, input.shape[1]) - ymin = max(0, y1) - ymax = min(y2, input.shape[0]) - tile_xmin = max(0, -x1) - tile_xmax = min(input.shape[1] - x1, output.shape[1]) - tile_ymin = max(0, -y1) - tile_ymax = min(input.shape[0] - y1, output.shape[0]) - output[tile_ymin: tile_ymax, tile_xmin: tile_xmax] = input[ymin: ymax, xmin: xmax] - return output +def scale_data(data, factor, img_path): + new_data = copy.deepcopy(data) + for dat in new_data: + dat['src_shape'] = get_img_shape(img_path + dat['src_name']) + dat['dst_shape'] = get_img_shape(img_path + dat['dst_name']) + dat['x'] = dat['x'] * factor + dat['y'] = dat['y'] * factor + return new_data + + +def smart_slice(out_img, in_img, x, y): + xmin = max(0, x) + xmax = min(x + out_img.shape[0], in_img.shape[1]) + ymin = max(0, y) + ymax = min(y + out_img.shape[1], in_img.shape[0]) + tile_xmin = max(0, -x) + tile_xmax = min(in_img.shape[1] - x, out_img.shape[1]) + tile_ymin = max(0, -y) + tile_ymax = min(in_img.shape[0] - y, out_img.shape[0]) + out_img[tile_ymin: tile_ymax, tile_xmin: tile_xmax] = in_img[ymin: ymax, xmin: xmax] + return out_img + + +def get_2nd_part(): + part_2_data = [{'src_name': '52_3.jpg', 'src_shape': [4748, 3369], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 0.61, 'scale': 1.0024, 'x': -45, 'y': 779}, + {'src_name': '52_2.jpg', 'src_shape': [4748, 3369], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 121.05, 'scale': 1.0024, 'x': 4230, 'y': 4540}, + {'src_name': '52_1.jpg', 'src_shape': [4748, 3369], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': -28.7, 'scale': 1.0012, 'x': 3650, 'y': -653}, + {'src_name': '53.jpg', 'src_shape': [4748, 3413], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 60.85, 'scale': 1.0, 'x': 3819, 'y': 519}, + {'src_name': '54.jpg', 'src_shape': [4724, 3401], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 60.75, 'scale': 1.0020, 'x': 5584, 'y': -2669}, + {'src_name': '55.jpg', 'src_shape': [4736, 3405], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 61.15, 'scale': 1.0, 'x': 7369, 'y': -5877}, + {'src_name': '57_3.jpg', 'src_shape': [4745, 3401], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': -119.13, 'scale': 1.0, 'x': 14440, 'y': -11588}, + {'src_name': '56.jpg', 'src_shape': [4752, 3397], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 41.4, 'scale': 1.0, 'x': 9718, 'y': -10073}, + {'src_name': '57_2.jpg', 'src_shape': [4745, 3401], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 25.55, 'scale': 1.0, 'x': 11525, 'y': -12236}, + {'src_name': '58.jpg', 'src_shape': [4744, 3401], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 10.4, 'scale': 1.0, 'x': 13892, 'y': -13531}, + {'src_name': '59_2.jpg', 'src_shape': [4733, 3368], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': -154.35, 'scale': 1.0, 'x': 16968, 'y': -12757}, + {'src_name': '59_1.jpg', 'src_shape': [4733, 3368], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 10.4, 'scale': 1.003, 'x': 13637, 'y': -15000}, + {'src_name': '60.jpg', 'src_shape': [4733, 3397], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 10.6, 'scale': 1.0, 'x': 17545, 'y': -14197}, + {'src_name': '62_2.jpg', 'src_shape': [4728, 3377], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': -169.8, 'scale': 1.003, 'x': 22479, 'y': -13209}, + {'src_name': '57_1.jpg', 'src_shape': [4745, 3401], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 10.5, 'scale': 1.0045, 'x': 21161, 'y': -14884}, + {'src_name': '61.jpg', 'src_shape': [4752, 3412], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 26.4, 'scale': 1.0, 'x': 21182, 'y': -14751}, + {'src_name': '62_1.jpg', 'src_shape': [4728, 3377], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 26.85, 'scale': 1.005, 'x': 20537, 'y': -16075}, + {'src_name': '64_1.jpg', 'src_shape': [4724, 3373], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': -143.15, 'scale': 1.005, 'x': 27877, 'y': -14670}, + {'src_name': '63.jpg', 'src_shape': [4744, 3401], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 47.3, 'scale': 1.0, 'x': 24525, 'y': -16234}, + {'src_name': '64_2.jpg', 'src_shape': [4724, 3373], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 72.8, 'scale': 1.0, 'x': 26237, 'y': -16670}, + {'src_name': '65.jpg', 'src_shape': [4740, 3409], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 99.0, 'scale': 1.0, 'x': 27415, 'y': -18634}, + {'src_name': '67_1.jpg', 'src_shape': [4728, 3377], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 81.2, 'scale': 1.005, 'x': 26670, 'y': -22228}, + {'src_name': '66.jpg', 'src_shape': [4728, 3396], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 63.85, 'scale': 1.002, 'x': 26830, 'y': -24255}, + {'src_name': '67_2.jpg', 'src_shape': [4728, 3377], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': -129.7, 'scale': 1.002, 'x': 33868, 'y': -28984}, + {'src_name': '68.jpg', 'src_shape': [4744, 3389], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 37.25, 'scale': 1.0, 'x': 29216, 'y': -28822}, + {'src_name': '73_1.jpg', 'src_shape': [4727, 3373], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 44.8, 'scale': 1.008, 'x': 31870, 'y': -30751}, + {'src_name': '69.jpg', 'src_shape': [4717, 3401], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 54.1, 'scale': 1.0, 'x': 32224, 'y': -30925}, + {'src_name': '70.jpg', 'src_shape': [4732, 3397], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 53.8, 'scale': 1.0, 'x': 34367, 'y': -33860}, + {'src_name': '71.jpg', 'src_shape': [4756, 3365], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 53.95, 'scale': 1.003, 'x': 36849, 'y': -32020}, + {'src_name': '72.jpg', 'src_shape': [2396, 3373], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 53.7, 'scale': 1.0, 'x': 39235, 'y': -35341}, + {'src_name': '73_2.jpg', 'src_shape': [4727, 3373], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 53.4, 'scale': 1.0, 'x': 35643, 'y': -35600}, + {'src_name': '74.jpg', 'src_shape': [4764, 3363], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 96.25, 'scale': 1.005, 'x': 36905, 'y': -36551}, + {'src_name': '75.jpg', 'src_shape': [4744, 3369], 'dst_name': '51.jpg', 'dst_shape': [4740, 3401], + 'angle': 96.35, 'scale': 1.0, 'x': 36510, 'y': -40313} + ] + return part_2_data + +def get_connection_1_2(): + return {'src_name': '51.jpg', 'src_shape': [4740, 3401], 'dst_name': '50.jpg', 'dst_shape': [4085, 6174], + 'angle': -0.125, 'scale': 0.9975, 'x': 3490, 'y': 1377} -def draw_tiles(data, side_length=200, incl_first=True): + +def transform_2nd_part(): + part_2_data = get_2nd_part() + conn_to_part_2 = get_connection_1_2() + conn_data = [invert_coord_frame(conn_to_part_2)] + part_2_data + conn_data_ext = [invert_coord_frame(all_comp_scaled[34])] + conn_data + trafo_data = transform_data_relative_to_first(conn_data_ext[:2])[1] + new_data = [trafo_data] + trafo_data = invert_coord_frame(trafo_data) + for dat in part_2_data: + new_data.append(transform_data_relative_to_first([trafo_data, invert_coord_frame(dat)])[1]) + return new_data + + +def prepare_tiles(data, side_length, roi, power=3): + scale = 2 ** power + tiles = generate_tiles(scale * side_length, roi) + while scale > 1: + tiles = list(filter(lambda x: x.has_intersection(data), tiles)) + scale = scale // 2 + smaller_tiles = [] + for tile in tiles: + loc_roi = (tile.top_left[0], tile.top_left[1], tile.side_length, tile.side_length) + new_tiles = generate_tiles(scale * side_length, loc_roi) + smaller_tiles += new_tiles + tiles = smaller_tiles + for tile in tiles: + tile.check_all_intersections(data) + tiles = list(filter(lambda x: x.img_names is not None, tiles)) + return tiles + + +def generate_tiles(side_length, roi): + x_range = range(roi[0], roi[0] + roi[2], side_length) + y_range = range(roi[1], roi[1] + roi[3], side_length) + corners = product(x_range, y_range) + tiles = [Tile(side_length, top_left) for top_left in corners] + return tiles + + +def register_tiles(data, side_length, incl_first=True): + start = time.time() roi = get_roi(data, incl_first) print(roi) - range_x = range(roi[0], roi[0] + roi[2], side_length) - range_y = range(roi[1], roi[1] + roi[3], side_length) - corners = product(range_x, range_y) - tiles = [] - for top_left in corners: - tile = Tile(side_length, top_left, roi) - tile.check_intersections(data) - if tile.img_names is not None: - tiles.append(tile) + tiles = prepare_tiles(data, side_length, roi, power=5) + elapsed = time.time() - start + print('time used for checking intersections: ' + str(int(elapsed)) + ' s') tile_dict = {} for tile in tiles: if tuple(tile.img_names) in tile_dict.keys(): tile_dict[tuple(tile.img_names)] += [tile.top_left] else: tile_dict[tuple(tile.img_names)] = [tile.top_left] + return tile_dict + + +def draw_tiles(data, tile_dict, side_length=200, incl_first=True): + start = time.time() + roi = get_roi(data, incl_first) + print(roi) for names, tile_corners in tile_dict.items(): blender = cv.detail_MultiBandBlender() - blend_width = 10 - num_bands = np.log(blend_width) / np.log(2.) - 1. - blender.setNumBands(num_bands.astype(np.int32)) - local_roi = get_roi(get_data_from_names(data, names), incl_first) + # blend_width = 10 + # num_bands = np.log(blend_width) / np.log(2.) - 1. + blender.setNumBands(2) + # blender = cv.detail_FeatherBlender() + if (len(names) == 1) and ('9.jpg' in names): + local_roi = (0, 0, data[0]['dst_shape'][0], data[0]['dst_shape'][1]) + else: + local_incl_first = '9.jpg' in names + local_roi = get_roi(get_data_from_names(data, names), local_incl_first) + print(local_roi, names) blender.prepare(local_roi) - print(names, tile_corners) for name in names: warper = cv.PyRotationWarper('affine', get_warp_scale(data, name)) - img = cv.imread(f'imgs/danube_10_pct/{name}').astype(np.int16) + img = cv.imread(f'imgs/danube_50_pct/{name}').astype(np.int16) + mask_path_10pct = pathlib.Path(f'imgs/danube_10_pct/masks/mask_{name}'.replace('.jpg', '.png')) + mask_path_50pct = pathlib.Path(f'imgs/danube_50_pct/masks/mask_{name}'.replace('.jpg', '.png')) + if mask_path_10pct.exists(): + mask = cv.imread(mask_path_10pct.as_posix(), flags=cv.IMREAD_GRAYSCALE) + mask = cv.blur(mask, (7, 7)) + mask = cv.resize(src=mask, dsize=(img.shape[1], img.shape[0]), fx=0, fy=0, + interpolation=cv.INTER_CUBIC) + ret, mask = cv.threshold(mask, 127, 255, cv.THRESH_BINARY) + elif mask_path_50pct.exists(): + mask = cv.imread(mask_path_50pct.as_posix(), flags=cv.IMREAD_GRAYSCALE) + mask = cv.blur(mask, (25, 25)) + ret, mask = cv.threshold(mask, 127, 255, cv.THRESH_BINARY) + else: + print('no mask loaded!') + return corner, img = warper.warp(img, get_3x3_id(), compose_R_mat(get_angle(data, name), 1, 0, 0), - cv.INTER_LINEAR, cv.BORDER_REFLECT) - mask = cv.imread(f'imgs/danube_10_pct/masks/mask_{name}'.replace('jpg', 'png'), flags=cv.IMREAD_GRAYSCALE) - mask = cv.UMat(mask) + # cv.INTER_LINEAR, cv.BORDER_REFLECT) + cv.INTER_LINEAR, cv.BORDER_CONSTANT) corner, mask = warper.warp(mask, get_3x3_id(), compose_R_mat(get_angle(data, name), 1, 0, 0), - cv.INTER_NEAREST, cv.BORDER_CONSTANT) + cv.INTER_LINEAR, cv.BORDER_CONSTANT) corner = (corner[0] + round(get_translation_vec(data, name)[0]), corner[1] + round(get_translation_vec(data, name)[1])) - blender.feed(cv.UMat(img), mask, corner) + blender.feed(cv.UMat(img), cv.UMat(mask), corner) result, result_mask = blender.blend(None, None) for tl in tile_corners: - tile_img = 255 * np.ones((side_length, side_length, 3), np.int16) + tile_img = np.zeros((side_length, side_length, 3), np.int16) slice_x = tl[0] - local_roi[0] slice_y = tl[1] - local_roi[1] - img_slice = 255 * np.ones((side_length, side_length, 3), np.int16) - img_slice = smart_slice(img_slice, result, slice_x, slice_x + side_length, slice_y, slice_y + side_length) + img_slice = np.zeros((side_length, side_length, 3), np.int16) + img_slice = smart_slice(img_slice, result, slice_x, slice_y) mask_slice = 255 * np.ones((side_length, side_length), np.uint8) - mask_slice = smart_slice(mask_slice, result_mask, slice_x, slice_x + side_length, slice_y, slice_y + side_length) + mask_slice = smart_slice(mask_slice, result_mask, slice_x, slice_y) mask_slice_inv = cv.bitwise_not(mask_slice) tile_img = cv.bitwise_and(tile_img, tile_img, mask=mask_slice_inv) img_slice = cv.bitwise_and(img_slice, img_slice, mask=mask_slice) tile_img = cv.add(tile_img, img_slice) - cv.imwrite(f'imgs_out/tiles/{tl[0] - roi[0]}_{tl[1] - roi[1]}.png', tile_img) + if np.sum(tile_img) > 0: + cv.imwrite( + f'imgs_out/tiles/tile_{(tl[0] - roi[0])//side_length}_{(tl[1] - roi[1])//side_length}.tif', + tile_img) + total_time = time.time() - start + print('total drawing time needed: ' + str(int(total_time)) + ' s') + + +def draw_images(data, draw_first=True, scaling=0.5): + dst_sz = get_roi(data, draw_first) + print(dst_sz) + blender = cv.detail_MultiBandBlender() + blender.setNumBands(2) + blender.prepare(dst_sz) + if draw_first: + img = cv.imread('imgs/danube_50_pct/9.jpg').astype(np.int16) + mask = cv.imread('imgs/danube_10_pct/masks/mask_9.png', flags=cv.IMREAD_GRAYSCALE) + mask = cv.blur(mask, (7, 7)) + mask = cv.resize(src=mask, dsize=(img.shape[1], img.shape[0]), fx=0, fy=0, interpolation=cv.INTER_CUBIC) + ret, mask = cv.threshold(mask, 127, 255, cv.THRESH_BINARY) + blender.feed(cv.UMat(img), cv.UMat(mask), (0, 0)) + for dat in data: + warper = cv.PyRotationWarper('affine', dat['scale']) + img = cv.imread(f'imgs/danube_50_pct/{dat["src_name"]}').astype(np.int16) + corner, img = warper.warp(img, get_3x3_id(), compose_R_mat(dat['angle'], 1, 0, 0), + cv.INTER_LINEAR, cv.BORDER_REFLECT) + # cv.INTER_NEAREST, cv.BORDER_CONSTANT) + mask_path_10pct = pathlib.Path(f'imgs/danube_10_pct/masks/mask_{dat["src_name"]}'.replace('.jpg', '.png')) + mask_path_50pct = pathlib.Path(f'imgs/danube_50_pct/masks/mask_{dat["src_name"]}'.replace('.jpg', '.png')) + if mask_path_10pct.exists(): + mask = cv.imread(mask_path_10pct.as_posix(), flags=cv.IMREAD_GRAYSCALE) + mask = cv.blur(mask, (7, 7)) + mask = cv.resize(src=mask, dsize=(dat['src_shape'][0], dat['src_shape'][1]), fx=0, fy=0, + interpolation=cv.INTER_CUBIC) + ret, mask = cv.threshold(mask, 127, 255, cv.THRESH_BINARY) + else: + mask = cv.imread(mask_path_50pct.as_posix(), flags=cv.IMREAD_GRAYSCALE) + # mask = cv.blur(mask, (30, 30)) + # ret, mask = cv.threshold(mask, 127, 255, cv.THRESH_BINARY) + corner, mask = warper.warp(mask, get_3x3_id(), compose_R_mat(dat['angle'], 1, 0, 0), + cv.INTER_NEAREST, cv.BORDER_CONSTANT) + corner = (corner[0] + round(dat['x']), corner[1] + round(dat['y'])) + print(dat['src_name'], corner, img.shape) + blender.feed(cv.UMat(img), cv.UMat(mask), corner) + result, result_mask = blender.blend(None, None) + if scaling != 1: + result = cv.resize(result, None, fx=scaling, fy=scaling, interpolation=cv.INTER_AREA) + result_mask = cv.resize(result_mask, None, fx=scaling, fy=scaling, interpolation=cv.INTER_AREA) + cv.imwrite('tdi_2.png', result) + cv.imwrite('tdi_2_mask.png', result_mask) if __name__ == '__main__': - with open('10pct_stitch_data.json', 'r') as fp: - all_comp = json.load(fp) + # with open('stitch_data.json', 'r') as fp: + # components = json.load(fp) + # components = do_corrections(components) + # all_comp = collect_all_components(components) + # all_comp_scaled = scale_data(all_comp, 5, img_path='imgs/danube_50_pct/') + # all_comp_scaled = scale_data(all_comp, 10, img_path='imgs/danube_100_pct/') + # with open('50pct_stitch_data.json', 'w') as fp: + # json.dump(all_comp_scaled, fp) + # with open('100pct_stitch_data.json', 'w') as fp: + # json.dump(all_comp_scaled, fp) + with open('50pct_stitch_data.json', 'r') as fp: + all_comp_scaled = json.load(fp) + # with open('100pct_stitch_data.json', 'r') as fp: + # all_comp_scaled = json.load(fp) # rect5 = get_rectangle(all_comp[21]) # rect6 = get_rectangle(all_comp[22]) # res = have_overlap(rect5, all_comp[21]['angle'], rect6, all_comp[22]['angle']) + # print(res) # if res is not None: # roi = get_roi(all_comp[21:23], incl_first=False) # circ_x = round(res[0] - roi[0]) @@ -216,7 +447,74 @@ if __name__ == '__main__': # 0, thickness=10, lineType=cv.LINE_8) # cv.imwrite('test.png', img) # draw_tiles(all_comp[14:19] + all_comp[-6:], incl_first=False) - draw_tiles(all_comp, side_length=400, incl_first=True) + + # # create tile data: + # tile_dict = register_tiles(all_comp_scaled, side_length=500, incl_first=True) + # tile_dict_no_tuple = {} + # for key, value in tile_dict.items(): + # tile_dict_no_tuple[str(key)] = value + # with open('tile_data.json', 'w') as fp: + # json.dump(tile_dict_no_tuple, fp) + + # load tile data: + # with open('tile_data.json', 'r') as fp: + # tile_dict_no_tup = json.load(fp) + # tile_dict = {} + # for key, value in tile_dict_no_tup.items(): + # tile_dict[eval(key)] = value + # print(get_gc_radius([[-1, -1], [3, -1], [3, 1], [-1, 1]])) + # print(get_center([[-1, -1], [3, -1], [3, 1], [-1, 1]])) + # print(get_gc_radius([[-1, 0], [3, 0], [3, 2], [-1, 2]])) + # print(get_center([[-1, 0], [3, 0], [3, 2], [-1, 2]])) + # dat_15 = {"src_name": "15.jpg", "src_shape": [11759, 7230], "dst_name": "9.jpg", "dst_shape": [8448, 6271], + # "angle": 30.68075628506069, "scale": 1.0009182704184914, "x": 42887.81547783238, "y": -3841.5277625327826} + # rect_15 = get_rectangle(dat_15) + # rect_tile = np.array([[44000, 894], [48000, 894], [48000, 4894], [44000, 4894]]) + # print(rect_15, rect_tile) + # tile = Tile(side_length=4000, top_left=(44000, 894)) + # center_1 = get_center(rect_15) + # center_2 = get_center(rect_tile) + # print(center_1, center_2) + # r_1 = get_gc_radius(rect_15) + # r_2 = get_gc_radius(rect_tile) + # distance = np.sqrt((center_1[0] - center_2[0]) ** 2 + (center_1[1] - center_2[1]) ** 2) + # print(r_1, r_2, np.sqrt(8)) + # print(distance, r_1 + r_2) + # print(tile.has_intersection([dat_15])) + + # tile_dict = register_tiles(all_comp_scaled, side_length=3000, incl_first=True) + + complete_data = all_comp_scaled + transform_2nd_part() + # with open('complete_data.json', 'w') as fp: + # json.dump(complete_data, fp) + for i, dat in enumerate(complete_data): + print(i, dat) + # draw_images([complete_data[34], complete_data[41]], False, scaling=0.5) + + # tiles_dict = register_tiles(complete_data, side_length=3000, incl_first=True) + # tiles_dict_old = register_tiles(all_comp_scaled, side_length=3000, incl_first=True) + # old_keys = tiles_dict_old.keys() + # new_keys = tiles_dict.keys() + # diff_keys = list(set(new_keys) - set(old_keys)) + # tiles_dict_subset = {k: tiles_dict[k] for k in diff_keys} + # # for k, val in tiles_dict_subset.items(): + # # print(k, val) + # + # draw_tiles(complete_data, tiles_dict_subset, side_length=3000, incl_first=True) + # test_img = draw_rectangles_from_data([complete_data[64], complete_data[65]], draw_first=False) + # cv.imwrite('test_img.png', test_img) + # rect_1 = get_rectangle(complete_data[64]) + # rect_2 = get_rectangle(complete_data[65]) + # rect_3 = get_rectangle(complete_data[66]) + # print(rect_1) + # print(rect_2) + # print(have_overlap(rect_1, complete_data[64]['angle'], rect_2, complete_data[65]['angle'])) + + # img = cv.imread('imgs/danube_50_pct/9.jpg').astype(np.int16) + # mask = cv.imread('imgs/danube_10_pct/masks/mask_9.png', flags=cv.IMREAD_GRAYSCALE) + # mask = resize_mask(mask, img) + # print(mask.shape) + # print(img.shape) # # debug in the case angle > pi/4: # rect1 = get_rectangle(all_comp[5]) diff --git a/stitching/create_urls.py b/stitching/create_urls.py new file mode 100644 index 0000000..0dfef1a --- /dev/null +++ b/stitching/create_urls.py @@ -0,0 +1,17 @@ +import glob + +if __name__ == '__main__': + # png_lis = glob.glob('imgs_out/tiles_400px/*.png') + # png_lis = [png.replace('imgs_out/tiles_400px/', '').replace('.png', '') for png in png_lis] + # url_template = 'https://iiif-test.onb.ac.at/images/MISC/donau/' + # url_lis = [url_template + png for png in png_lis] + # with open('tiles_list.txt', 'w') as fh: + # for url in url_lis: + # fh.write(url + '\n') + tif_lis = glob.glob('imgs_out/tiles/*.tif') + with open('tiles_list.txt', 'w') as fh: + for path in tif_lis: + fh.write('http://127.0.0.1:5004/tiles' + path.replace('imgs_out/tiles', '') + '\n') + with open('tiles_list_remote.txt', 'w') as fh: + for path in tif_lis: + fh.write('https://edition.onb.ac.at/iiif/donau-tiles' + path.replace('imgs_out/tiles', '') + '\n') \ No newline at end of file diff --git a/stitching/download_imgs.py b/stitching/download_imgs.py index b4aea9b..6182dad 100644 --- a/stitching/download_imgs.py +++ b/stitching/download_imgs.py @@ -3,16 +3,39 @@ import pathlib def dl_at_qual(pct): - for num in range(9, 51): + directory = pathlib.Path(f'imgs/danube_{pct}_pct') + if not directory.exists(): + directory.mkdir() + # for num in range(9, 51): + for num in range(1, 9): path = pathlib.Path(f'imgs/danube_{pct}_pct/{num}.jpg') if path.exists(): return else: - if num == 9: - num = '09' + # if num == 9: + # num = '09' + num = '0' + str(num) r = requests.get(f'https://iiif.onb.ac.at/images/REPO/7502199/000000{num}.jpg/full/pct:{pct}/0/native.jpg') open(path, 'wb').write(r.content) +def dl_second_part(pct): + directory = pathlib.Path(f'imgs/danube_{pct}_pct_part_ii') + if not directory.exists(): + directory.mkdir() + for num in range(1, 27): + path = pathlib.Path(f'imgs/danube_{pct}_pct_part_ii/{num}.jpg') + if path.exists(): + return + else: + if num < 10: + num = '0' + str(num) + r = requests.get(f'https://iiif.onb.ac.at/images/REPO/7505639/000000{num}.jpg/full/pct:{pct}/0/native.jpg') + open(path, 'wb').write(r.content) + + if __name__ == '__main__': - dl_at_qual(10) + # dl_at_qual(10) + # dl_at_qual(50) + dl_at_qual(100) + # dl_second_part(50) \ No newline at end of file diff --git a/stitching/scan.py b/stitching/scan.py index b85fa60..c68250b 100644 --- a/stitching/scan.py +++ b/stitching/scan.py @@ -497,20 +497,10 @@ def get_roi(data, incl_first=True): pt_max = np.max(points, axis=0) pt_min = np.min(points, axis=0) x, y = pt_min[0], pt_min[1] - w, h = pt_max[0] - pt_min[0], pt_max[1] - pt_min[1] + w, h = pt_max[0] - pt_min[0] + 1, pt_max[1] - pt_min[1] + 1 return x, y, w, h -def scale_data(data, factor): - new_data = copy.deepcopy(data) - for dat in new_data: - dat['src_shape'] = [dat['src_shape'][0] * factor, dat['src_shape'][1] * factor] - dat['dst_shape'] = [dat['dst_shape'][0] * factor, dat['dst_shape'][1] * factor] - dat['x'] = dat['x'] * factor - dat['y'] = dat['y'] * factor - return new_data - - def draw_rectangles_from_data(data, draw_first=True): dst_sz = get_roi(data, draw_first) new_img = 255 * np.ones((dst_sz[3], dst_sz[2]), np.uint8) @@ -519,11 +509,15 @@ def draw_rectangles_from_data(data, draw_first=True): (data[0]['dst_shape'][0] - dst_sz[0], data[0]['dst_shape'][1] - dst_sz[1]), 128, thickness=10, lineType=cv.LINE_8) for dat in data: - new_img = cv.polylines(img=new_img, pts=[get_vertices(np.array(dat['src_shape']) * dat['scale'], - dat['angle'], dat['x'] - dst_sz[0], - dat['y'] - dst_sz[1])], + points = get_vertices(np.array(dat['src_shape']) * dat['scale'], dat['angle'], dat['x'] - dst_sz[0], + dat['y'] - dst_sz[1]) + new_img = cv.polylines(img=new_img, pts=[points], isClosed=True, color=128, thickness=10) - # new_img = cv.resize(new_img, None, fx=0.15, fy=0.15, interpolation=cv.INTER_AREA) + points = points.reshape((4, 2)) + for pt in points: + # print(pt) + new_img = cv.putText(new_img, str(int(pt[0])) + ', ' + str(int(pt[1])), pt, 0, 10, 0, thickness=5) + new_img = cv.resize(new_img, None, fx=0.15, fy=0.15, interpolation=cv.INTER_AREA) # cv.imwrite('test.png', new_img) return new_img @@ -534,7 +528,7 @@ def draw_images_from_data(data, draw_first=True): blender = cv.detail_MultiBandBlender() # blend_strength = 5 # blend_width = np.sqrt(dst_sz[2] * dst_sz[3]) * blend_strength / 100 - blend_width = 10 + blend_width = 5 num_bands = np.log(blend_width) / np.log(2.) - 1. print(num_bands) blender.setNumBands(num_bands.astype(np.int32)) @@ -564,8 +558,8 @@ def draw_images_from_data(data, draw_first=True): corner = (corner[0] + round(dat['x']), corner[1] + round(dat['y'])) blender.feed(cv.UMat(img), mask, corner) result, result_mask = blender.blend(None, None) - # result = cv.resize(result, None, fx=0.15, fy=0.15, interpolation=cv.INTER_AREA) - # result_mask = cv.resize(result_mask, None, fx=0.15, fy=0.15, interpolation=cv.INTER_AREA) + result = cv.resize(result, None, fx=0.15, fy=0.15, interpolation=cv.INTER_AREA) + result_mask = cv.resize(result_mask, None, fx=0.15, fy=0.15, interpolation=cv.INTER_AREA) cv.imwrite('test_draw_images.png', result) cv.imwrite('test_draw_images_mask.png', result_mask) @@ -573,32 +567,36 @@ def draw_images_from_data(data, draw_first=True): def connections_between_components(): conn_1_2 = {'src_name': '42.jpg', 'src_shape': [1083, 624], 'dst_name': '35.jpg', 'dst_shape': [891, 627], - 'angle': 14.68, 'scale': 1.0, - 'x': 715.0, 'y': 46.0} + 'angle': 14.75, 'scale': 1.0035, + 'x': 713.0, 'y': 46.5} + # conn_1_2_old = {'src_name': '42.jpg', 'src_shape': [1083, 624], + # 'dst_name': '35.jpg', 'dst_shape': [891, 627], + # 'angle': 14.68, 'scale': 1.0035, + # 'x': 715.0, 'y': 46.0} conn_1_3 = {'src_name': '39.jpg', 'src_shape': [1121, 1352], 'dst_name': '24.jpg', 'dst_shape': [1072, 633], 'angle': 0.190, 'scale': 1.012, 'x': -193.0, 'y': -1277.0} - conn_1_3_old = {'src_name': '39.jpg', 'src_shape': [1121, 1352], - 'dst_name': '24.jpg', 'dst_shape': [1072, 633], - 'angle': 0.0, 'scale': 1.00, - 'x': -183.0, 'y': -1260.0} + # conn_1_3_old = {'src_name': '39.jpg', 'src_shape': [1121, 1352], + # 'dst_name': '24.jpg', 'dst_shape': [1072, 633], + # 'angle': 0.0, 'scale': 1.00, + # 'x': -183.0, 'y': -1260.0} conn_1_4 = {'src_name': '25.jpg', 'src_shape': [977, 627], 'dst_name': '36.jpg', 'dst_shape': [1045, 825], 'angle': 0.0, 'scale': 0.997, 'x': -95.0, 'y': -607.0} - conn_1_4_old = {'src_name': '25.jpg', 'src_shape': [977, 627], - 'dst_name': '36.jpg', 'dst_shape': [1045, 825], - 'angle': 0.0, 'scale': 1.0, - 'x': -96.0, 'y': -601.0} + # conn_1_4_old = {'src_name': '25.jpg', 'src_shape': [977, 627], + # 'dst_name': '36.jpg', 'dst_shape': [1045, 825], + # 'angle': 0.0, 'scale': 1.0, + # 'x': -96.0, 'y': -601.0} conn_1_5 = {'src_name': '38.jpg', 'src_shape': [1715, 1083], 'dst_name': '28.jpg', 'dst_shape': [1020, 627], 'angle': 0.0, 'scale': 1.0065, 'x': -665.0, 'y': -1059.0} - conn_1_5_old = {'src_name': '38.jpg', 'src_shape': [1715, 1083], - 'dst_name': '28.jpg', 'dst_shape': [1020, 627], - 'angle': 0.0, 'scale': 1.0, - 'x': -660.0, 'y': -1051.0} + # conn_1_5_old = {'src_name': '38.jpg', 'src_shape': [1715, 1083], + # 'dst_name': '28.jpg', 'dst_shape': [1020, 627], + # 'angle': 0.0, 'scale': 1.0, + # 'x': -660.0, 'y': -1051.0} return [conn_1_2, conn_1_3, conn_1_4, conn_1_5] @@ -611,6 +609,69 @@ def invert_coord_frame(dat): return new_dat +def do_corrections(data): + data[0]['data'][6]['scale'] = 1.0 + data[0]['data'][6]['x'] += 9 + data[0]['data'][6]['y'] += -5 + data[0]['data'][6]['angle'] += 0.55 + data[0]['data'][7]['scale'] = 1.0 + data[0]['data'][7]['x'] += -2 + data[0]['data'][7]['y'] += -1 + data[0]['data'][22]['angle'] += -0.35 + data[0]['data'][22]['scale'] = 0.995 + data[0]['data'][22]['x'] += 4 + data[0]['data'][22]['y'] += -5 + data[0]['data'][23]['scale'] = 0.997 + data[0]['data'][23]['angle'] += -0.1 + data[0]['data'][23]['x'] += 4 + data[0]['data'][23]['y'] += 4 + data[0]['data'][24]['scale'] *= 1.004 + data[0]['data'][24]['x'] += -3 + data[0]['data'][24]['y'] += -2 + return data + + +def get_compass_list(): + lis = {'9.jpg': (3797.6 - 3963.0, 201.1 - 526.8), + '10.jpg': (3886.1 - 4048.0, 201.2 - 498.9), + '11.jpg': (3995.0 - 4145.5, 207.7 - 490.5), + '12.jpg': (3996.3 - 4133.0, 224.0 - 457.5), + '13.jpg': (3731.0 - 3941.2, 533.3 - 828.0), + '14.jpg': (4595.2 - 4664.9, 477.5 - 808.6), + '15.jpg': (4018.7 - 4020.3, 646.9 - 996.0), + '16.jpg': (4204.3 - 4022.3, 236.3 - 548.0), + '17.jpg': (3850.3 - 3740.0, 153.0 - 409.8), + '18.jpg': (4225.9 - 4232.4, 260.7 - 523.5), + '19.jpg': (3982.9 - 4009.5, 254.4 - 518.1), + '20.jpg': (4285.1 - 4378.9, 201.6 - 360.2), + '21.jpg': (4183.0 - 4309.0, 358.4 - 586.7), + '22.jpg': (4049.5 - 4154.0, 722.5 - 987.0), + '23.jpg': (4467.6 - 4515.1, 424.0 - 618.2), + '24.jpg': (4240.2 - 4288.0, 105.1 - 326.5), + '25.jpg': (4174.0 - 4239.2, 183.8 - 364.0), + '26.jpg': (4380.2 - 4430.0, 559.4 - 726.8), + '27.jpg': (4531.4 - 4532.0, 232.0 - 447.8), + '28.jpg': (4096.2 - 4094.2, 231.1 - 420.8), + '29.jpg': (4281.7 - 4279.4, 248.5 - 521.4), + '30.jpg': (3948.5 - 3945.3, 115.4 - 268.0), + '32.jpg': (3885.4 - 3994.5, 431.1 - 433.5), + '33.jpg': (4377.0 - 4555.2, 137.2 - 97.0), + '34.jpg': (4025.5 - 4232.5, 285.1 - 237.6), + '35.jpg': (4184.3 - 4395.7, 255.0 - 206.5), + '38.jpg': (7396.4 - 7399.5, 2450.6 - 2672.2), + '41.jpg': (4560.0 - 4638.8, 4783.5 - 4980.0), + '42.jpg': (4044.4 - 4255.5, 199.4 - 202.9), + '43.jpg': (3649.2 - 3855.9, 129.0 - 132.1), + '44.jpg': (3664.5 - 3860.2, 108.1 - 104.6), + '45.jpg': (4596.0 - 4722.2, 209.6 - 169.8), + '46.jpg': (5048.7 - 5252.4, 327.8 - 328.5), + '47.jpg': (5445.3 - 5648.4, 2864.5 - 2843.5), + '48.jpg': (4672.9 - 4825.3, 1752.7 - 1766.9), + '49.jpg': (3920.5 - 4109.8, 1685.0 - 1761.2), + '50.jpg': (3842.5 - 4003.3, 1725.1 - 1788.0)} + return lis + + def create_matches_data(): path = 'imgs/danube_10_pct' comp_1 = [f'{path}/{i}.jpg' for i in range(9, 36)] @@ -655,14 +716,15 @@ if __name__ == '__main__': # create_matches_data() with open('stitch_data.json', 'r') as fp: components = json.load(fp) + components = do_corrections(components) all_comp = collect_all_components(components) # with open('10pct_stitch_data.json', 'w') as fp: # json.dump(all_comp, fp) # draw_images_from_data(all_comp[14:19] + all_comp[-6:], draw_first=False) # draw_images_from_data(all_comp[17:19] + all_comp[-1:], draw_first=False) - draw_images_from_data(all_comp[5:7], draw_first=False) - rect_img = draw_rectangles_from_data(all_comp[5:7], draw_first=False) - cv.imwrite('test_draw_rectangles.png', rect_img) + draw_images_from_data(all_comp, draw_first=True) + # rect_img = draw_rectangles_from_data(all_comp, draw_first=True) + # cv.imwrite('test_draw_rectangles.png', rect_img) else: imgs = [cv.imread(name) for name in comp_2] result = full_stitching_pipeline(imgs, comp_2) diff --git a/stitching/stitch_data_backup_20210520.json b/stitching/stitch_data_backup_20210520.json new file mode 100644 index 0000000..9761973 --- /dev/null +++ b/stitching/stitch_data_backup_20210520.json @@ -0,0 +1 @@ +[{"component": 1, "data": [{"src_name": "9.jpg", "src_shape": [845, 627], "dst_name": "10.jpg", "dst_shape": [916, 630], "angle": -0.08323251825809101, "scale": 1.0012847517044934, "x": -725.8677796027105, "y": 1.327231526027312}, {"src_name": "10.jpg", "src_shape": [916, 630], "dst_name": "11.jpg", "dst_shape": [908, 758], "angle": -0.3874085856970733, "scale": 0.9993879049233608, "x": -727.5777707043392, "y": 4.190702764230509}, {"src_name": "11.jpg", "src_shape": [908, 758], "dst_name": "12.jpg", "dst_shape": [884, 756], "angle": 0.07714987376645693, "scale": 1.0001919853845924, "x": -752.6976600173008, "y": -2.722047131190443}, {"src_name": "12.jpg", "src_shape": [884, 756], "dst_name": "13.jpg", "dst_shape": [924, 703], "angle": -0.04060580582383663, "scale": 1.0004665056559117, "x": -770.8630238226102, "y": 71.61996380936549}, {"src_name": "13.jpg", "src_shape": [924, 703], "dst_name": "14.jpg", "dst_shape": [1179, 824], "angle": 19.03415666322512, "scale": 0.9966014463696012, "x": -514.9510007319319, "y": -124.7481107560606}, {"src_name": "14.jpg", "src_shape": [1179, 824], "dst_name": "15.jpg", "dst_shape": [1176, 723], "angle": 12.080696657848115, "scale": 1.0011571532839152, "x": -818.5039133607494, "y": -158.31696770299678}, {"src_name": "15.jpg", "src_shape": [1176, 723], "dst_name": "16.jpg", "dst_shape": [937, 640], "angle": 28.592036680489468, "scale": 1.0017053478189943, "x": -580.5875386714158, "y": -473.35757729772814}, {"src_name": "16.jpg", "src_shape": [937, 640], "dst_name": "17.jpg", "dst_shape": [1198, 741], "angle": -7.945887553718481, "scale": 0.998128975245677, "x": -804.3304803657236, "y": 204.68126293641077}, {"src_name": "17.jpg", "src_shape": [1198, 741], "dst_name": "18.jpg", "dst_shape": [945, 635], "angle": -29.61161267387781, "scale": 1.0013304876178608, "x": -929.3256677685242, "y": 510.1955368303441}, {"src_name": "18.jpg", "src_shape": [945, 635], "dst_name": "19.jpg", "dst_shape": [1138, 702], "angle": -4.556207737313075, "scale": 0.9997737292558313, "x": -789.9232782713025, "y": 126.25049426119003}, {"src_name": "19.jpg", "src_shape": [1138, 702], "dst_name": "20.jpg", "dst_shape": [1053, 640], "angle": -21.63309606966946, "scale": 0.9957128541702706, "x": -877.5442565359942, "y": 371.4400443436195}, {"src_name": "20.jpg", "src_shape": [1053, 640], "dst_name": "21.jpg", "dst_shape": [1116, 674], "angle": 2.879875469659923, "scale": 0.9998627526693865, "x": -761.7302014882371, "y": -46.72425088925411}, {"src_name": "21.jpg", "src_shape": [1116, 674], "dst_name": "22.jpg", "dst_shape": [1026, 741], "angle": 15.501171289342592, "scale": 0.9999075279205494, "x": -745.2862873407202, "y": -166.09871117818025}, {"src_name": "22.jpg", "src_shape": [1026, 741], "dst_name": "23.jpg", "dst_shape": [1259, 777], "angle": -5.58797413363355, "scale": 0.999133293150094, "x": -647.2823465060284, "y": 106.21263420892734}, {"src_name": "23.jpg", "src_shape": [1259, 777], "dst_name": "24.jpg", "dst_shape": [1072, 633], "angle": -20.63080212766057, "scale": 0.9991346403831461, "x": -1051.9550572768376, "y": 338.61525237180757}, {"src_name": "24.jpg", "src_shape": [1072, 633], "dst_name": "25.jpg", "dst_shape": [977, 627], "angle": -0.03823885067939719, "scale": 0.9999754255389337, "x": -768.5489616265443, "y": -1.0028453153164518}, {"src_name": "25.jpg", "src_shape": [977, 627], "dst_name": "26.jpg", "dst_shape": [1322, 702], "angle": 5.354330694304631, "scale": 0.9993709620252941, "x": -690.827078455422, "y": -71.3667599052535}, {"src_name": "26.jpg", "src_shape": [1322, 702], "dst_name": "27.jpg", "dst_shape": [1007, 632], "angle": 40.197091993384845, "scale": 0.9989990990456168, "x": -445.1440206705711, "y": -632.2760304280525}, {"src_name": "27.jpg", "src_shape": [1007, 632], "dst_name": "28.jpg", "dst_shape": [1020, 627], "angle": -0.07742190085639233, "scale": 0.9993720080141424, "x": -834.6668719016778, "y": -1.7376411784221855}, {"src_name": "28.jpg", "src_shape": [1020, 627], "dst_name": "29.jpg", "dst_shape": [960, 627], "angle": 0.08381344975005875, "scale": 1.0002555829919488, "x": -704.108783857091, "y": -0.7416929236555762}, {"src_name": "29.jpg", "src_shape": [960, 627], "dst_name": "30.jpg", "dst_shape": [947, 627], "angle": -0.07713193723763126, "scale": 0.9993186556532744, "x": -781.8471778231437, "y": -0.45372213170232434}, {"src_name": "30.jpg", "src_shape": [947, 627], "dst_name": "31.jpg", "dst_shape": [1388, 739], "angle": -0.5483236647987095, "scale": 0.9994769073858493, "x": -809.7688783926799, "y": 9.486127607310602}, {"src_name": "31.jpg", "src_shape": [1388, 739], "dst_name": "32.jpg", "dst_shape": [1032, 679], "angle": -89.86274191480732, "scale": 0.9998071486991533, "x": -510.87536291751366, "y": 1385.9836340266602}, {"src_name": "32.jpg", "src_shape": [1032, 679], "dst_name": "33.jpg", "dst_shape": [1030, 634], "angle": -14.493348979068939, "scale": 1.001578824314171, "x": -757.2064029176969, "y": 232.79422793291977}, {"src_name": "33.jpg", "src_shape": [1030, 634], "dst_name": "34.jpg", "dst_shape": [932, 629], "angle": -0.16731881941073357, "scale": 1.0008225355013083, "x": -846.0615251668322, "y": 3.1709044191330316}, {"src_name": "34.jpg", "src_shape": [932, 629], "dst_name": "35.jpg", "dst_shape": [891, 627], "angle": 0.10905914327918778, "scale": 0.9984874307290723, "x": -719.2575072074923, "y": -0.5041634588358995}]}, {"component": 2, "data": [{"src_name": "42.jpg", "src_shape": [1083, 624], "dst_name": "43.jpg", "dst_shape": [949, 622], "angle": 0.2893821083225323, "scale": 0.9995359432497662, "x": -783.5510704757684, "y": -6.320499726540566}, {"src_name": "43.jpg", "src_shape": [949, 622], "dst_name": "44.jpg", "dst_shape": [1047, 684], "angle": -1.5083426303790213, "scale": 0.9992216476694503, "x": -782.9084950985991, "y": 35.904104956761635}, {"src_name": "44.jpg", "src_shape": [1047, 684], "dst_name": "45.jpg", "dst_shape": [1151, 851], "angle": -16.3281881212274, "scale": 1.0001136442280363, "x": -711.0771906589666, "y": 266.8568160409473}, {"src_name": "45.jpg", "src_shape": [1151, 851], "dst_name": "46.jpg", "dst_shape": [1300, 923], "angle": 18.139198557216538, "scale": 1.0008667495612404, "x": -531.3371856145068, "y": -244.93581461312954}, {"src_name": "46.jpg", "src_shape": [1300, 923], "dst_name": "47.jpg", "dst_shape": [1330, 1135], "angle": -6.264699513389657, "scale": 0.9993744102925644, "x": -1015.8542832900469, "y": 371.01288964629526}, {"src_name": "47.jpg", "src_shape": [1330, 1135], "dst_name": "48.jpg", "dst_shape": [1299, 1107], "angle": 13.852251752896482, "scale": 1.0006375150035631, "x": -762.5982928801842, "y": -307.78195866642574}, {"src_name": "48.jpg", "src_shape": [1299, 1107], "dst_name": "49.jpg", "dst_shape": [932, 1235], "angle": 16.445423280814605, "scale": 1.0068292749333456, "x": -728.6673781812307, "y": -260.9078565606926}, {"src_name": "49.jpg", "src_shape": [932, 1235], "dst_name": "50.jpg", "dst_shape": [817, 1235], "angle": -0.1245182696481108, "scale": 1.0003616504118136, "x": -779.5992511948398, "y": 3.3677247076398014}]}, {"component": 3, "data": [{"src_name": "39.jpg", "src_shape": [1121, 1352], "dst_name": "40.jpg", "dst_shape": [920, 1550], "angle": -0.07760783438284052, "scale": 1.0001539718062533, "x": -959.8032830385117, "y": 262.9132319512283}, {"src_name": "40.jpg", "src_shape": [920, 1550], "dst_name": "41.jpg", "dst_shape": [945, 1559], "angle": -0.49981482199990906, "scale": 0.9996924085885643, "x": -639.2482216447894, "y": 10.770331317759712}]}, {"component": 4, "data": [{"src_name": "36.jpg", "src_shape": [1045, 825], "dst_name": "37.jpg", "dst_shape": [1307, 1006], "angle": -0.015660440215784714, "scale": 1.0005636035214283, "x": -630.694768562902, "y": 179.27784988325527}]}] \ No newline at end of file diff --git a/stitching/tile_data.json b/stitching/tile_data.json new file mode 100644 index 0000000..b2e5453 --- /dev/null +++ b/stitching/tile_data.json @@ -0,0 +1 @@ +{"('9.jpg',)": [[0, -53], [500, -53], [1000, -53], [1500, -53], [0, 447], [0, 947], [500, 447], [500, 947], [0, 1447], [0, 1947], [500, 1447], [500, 1947], [1000, 447], [1000, 947], [1500, 447], [1500, 947], [1000, 1447], [1000, 1947], [1500, 1447], [1500, 1947], [2000, -53], [2500, -53], [3000, -53], [2000, 447], [2000, 947], [2500, 447], [2500, 947], [2000, 1447], [2000, 1947], [2500, 1447], [2500, 1947], [3000, 447], [3000, 947], [3000, 1447], [3000, 1947], [0, 2447], [0, 2947], [500, 2447], [500, 2947], [1000, 2447], [1000, 2947], [1500, 2447], [1500, 2947], [2000, 2447], [2000, 2947], [2500, 2447], [2500, 2947], [3000, 2447], [3000, 2947]], "('9.jpg', '10.jpg')": [[3500, -53], [3500, 447], [3500, 947], [3500, 1447], [3500, 1947], [3500, 2447], [3500, 2947], [4000, -53], [4000, 447], [4000, 947], [4000, 1447], [4000, 1947], [4000, 2447], [4000, 2947]], "('10.jpg',)": [[4500, -53], [5000, -53], [5500, -53], [4500, 447], [4500, 947], [4500, 1447], [4500, 1947], [5000, 447], [5000, 947], [5500, 447], [5500, 947], [5000, 1447], [5000, 1947], [5500, 1447], [5500, 1947], [6000, -53], [6500, -53], [6000, 447], [6000, 947], [6500, 447], [6500, 947], [6000, 1447], [6000, 1947], [6500, 1447], [6500, 1947], [4500, 2447], [4500, 2947], [5000, 2447], [5000, 2947], [5500, 2447], [5500, 2947], [6000, 2447], [6000, 2947], [6500, 2447], [6500, 2947]], "('10.jpg', '11.jpg')": [[7000, -53], [7500, -53], [7000, 447], [7000, 947], [7500, 447], [7500, 947], [7000, 1447], [7000, 1947], [7500, 1447], [7500, 1947], [7000, 2447], [7000, 2947], [7500, 2447], [7500, 2947], [8000, -53], [8000, 447], [8000, 947], [8000, 1447], [8000, 1947], [8000, 2447], [8000, 2947]], "('11.jpg',)": [[7000, 3447], [7500, 3447], [8500, -53], [9000, -53], [9500, -53], [8500, 447], [8500, 947], [8500, 1447], [8500, 1947], [9000, 447], [9000, 947], [9500, 447], [9500, 947], [9000, 1447], [9000, 1947], [9500, 1447], [9500, 1947], [10000, -53], [10500, -53], [10000, 447], [10000, 947], [10500, 447], [10500, 947], [10000, 1447], [10000, 1947], [10500, 1447], [10500, 1947], [8500, 2447], [8500, 2947], [8000, 3447], [8500, 3447], [9000, 2447], [9000, 2947], [9500, 2447], [9500, 2947], [9000, 3447], [9500, 3447], [10000, 2447], [10000, 2947], [10500, 2447], [10000, 3447]], "('11.jpg', '12.jpg')": [[11000, -53], [11500, -53], [11000, 447], [11000, 947], [11500, 447], [11500, 947], [11000, 1447], [11000, 1947], [11500, 1447], [11500, 1947], [10500, 2947], [10500, 3447], [11000, 2447], [11000, 2947], [11500, 2447], [11500, 2947], [11000, 3447], [11500, 3447]], "('12.jpg',)": [[12000, -53], [12500, -53], [13000, -53], [13500, -53], [12000, 447], [12000, 947], [12500, 447], [12500, 947], [12000, 1447], [12000, 1947], [12500, 1447], [12500, 1947], [13000, 447], [13000, 947], [13500, 447], [13500, 947], [13000, 1447], [13000, 1947], [13500, 1447], [13500, 1947], [14000, -53], [14000, 447], [14000, 947], [14000, 1447], [14000, 1947], [12000, 2447], [12000, 2947], [12500, 2447], [12500, 2947], [12000, 3447], [12500, 3447], [13000, 2447], [13000, 2947], [13500, 2447], [13500, 2947], [13000, 3447], [13500, 3447], [14000, 2447], [14000, 2947], [14000, 3447], [14500, 3447], [15000, 3447]], "('13.jpg',)": [[14500, -553], [15000, -553], [15500, -553], [15500, -53], [15500, 447], [15500, 947], [15500, 1447], [15500, 1947], [15500, 2447], [15500, 2947], [16000, -553], [16000, -53], [16500, -553], [16500, -53], [17000, -553], [17000, -53], [16000, 447], [16000, 947], [16500, 447], [16500, 947], [16000, 1447], [16000, 1947], [16500, 1447], [16500, 1947], [17000, 447], [17000, 947], [17500, 947], [17000, 1447], [17000, 1947], [17500, 1447], [17500, 1947], [16000, 2447], [16000, 2947], [16500, 2447], [16500, 2947], [17000, 2447], [17000, 2947], [17500, 2447], [17500, 2947], [18000, 2447], [18000, 2947]], "('12.jpg', '13.jpg')": [[14500, -53], [15000, -53], [14500, 447], [14500, 947], [14500, 1447], [14500, 1947], [15000, 447], [15000, 947], [15000, 1447], [15000, 1947], [14500, 2447], [14500, 2947], [15000, 2447], [15000, 2947]], "('17.jpg',)": [[28500, -10053], [29000, -11053], [29000, -10553], [29000, -10053], [29500, -10553], [29500, -10053], [30000, -12053], [30500, -12053], [27500, -9053], [27000, -8553], [27000, -8053], [27500, -8553], [27500, -8053], [26500, -7553], [28000, -9553], [28000, -9053], [28500, -9553], [28500, -9053], [28000, -8553], [28000, -8053], [28500, -8553], [28500, -8053], [29000, -9553], [29000, -9053], [29500, -9553], [29500, -9053], [29000, -8553], [29000, -8053], [29500, -8553], [29500, -8053], [28000, -7553], [28500, -7553], [28500, -7053], [29000, -7553], [29000, -7053], [29500, -7553], [29500, -7053], [29500, -6553], [30000, -9553], [30000, -9053], [30000, -8553], [30000, -8053], [30500, -8553], [30500, -8053], [31000, -8053], [31500, -8053], [30000, -7553], [30000, -7053], [30500, -7553], [30500, -7053], [30000, -6553], [30500, -6553], [30500, -6053], [31000, -7553], [31000, -7053], [31500, -7553], [31000, -6553], [32000, -8053], [32500, -8553]], "('17.jpg', '18.jpg')": [[29500, -11553], [29500, -11053], [30000, -11553], [30000, -11053], [30500, -11553], [30500, -11053], [30000, -10553], [30000, -10053], [30500, -10553], [30500, -10053], [31000, -11553], [31000, -11053], [31500, -11053], [31000, -10553], [31000, -10053], [31500, -10553], [31500, -10053], [30500, -9553], [30500, -9053], [31000, -9553], [31000, -9053], [31500, -9553], [31500, -9053], [31000, -8553], [31500, -8553], [32000, -10553], [32000, -10053], [32500, -10053], [33000, -10053], [32000, -9553], [32000, -9053], [32500, -9553], [32500, -9053], [32000, -8553], [33000, -9553]], "('18.jpg',)": [[31000, -12053], [31500, -12053], [31500, -11553], [32000, -12553], [32000, -12053], [32500, -12553], [32500, -12053], [33000, -13053], [33000, -12553], [33000, -12053], [32000, -11553], [32000, -11053], [32500, -11553], [32500, -11053], [32500, -10553], [33000, -11553], [33000, -11053], [33500, -11053], [33000, -10553], [33500, -10553], [33500, -10053], [33000, -9053], [33500, -9553], [34000, -9553], [34500, -9553]], "('14.jpg',)": [[20500, -2053], [17500, -1053], [18000, -1053], [18500, -1053], [19000, -1553], [19000, -1053], [19500, -1553], [19500, -1053], [19500, -553], [19500, -53], [19500, 447], [19500, 947], [19500, 1447], [19500, 1947], [19500, 2447], [19500, 2947], [20000, -1553], [20000, -1053], [20500, -1553], [20500, -1053], [20000, -553], [20000, -53], [20500, -553], [20500, -53], [21000, -1553], [21000, -1053], [21000, -553], [21000, -53], [21500, -553], [21500, -53], [20000, 447], [20000, 947], [20500, 447], [20500, 947], [20000, 1447], [20000, 1947], [20500, 1447], [20500, 1947], [21000, 447], [21000, 947], [21500, 447], [21500, 947], [21000, 1447], [21000, 1947], [21500, 1447], [21500, 1947], [22000, -53], [22000, 447], [22000, 947], [22500, 947], [22000, 1447], [22000, 1947], [22500, 1447], [22500, 1947], [23000, 1447], [23000, 1947], [23500, 1447], [20000, 2447], [20000, 2947], [20500, 2447], [21000, 2447], [21500, 2447], [24000, 947], [24000, 1447]], "('14.jpg', '15.jpg')": [[21000, -2053], [21500, -2053], [22000, -2553], [22000, -2053], [22500, -2553], [22500, -2053], [23000, -2553], [23000, -2053], [21500, -1553], [21500, -1053], [22000, -1553], [22000, -1053], [22500, -1553], [22500, -1053], [22000, -553], [22500, -553], [22500, -53], [23000, -1553], [23000, -1053], [23500, -1553], [23500, -1053], [23000, -553], [23000, -53], [23500, -553], [23500, -53], [22500, 447], [23000, 447], [23000, 947], [23500, 447], [23500, 947], [24000, -53], [24000, 447]], "('15.jpg',)": [[21500, -2553], [22500, -3053], [23000, -3553], [23000, -3053], [23500, -3553], [23500, -3053], [23500, -2553], [23500, -2053], [24000, -4053], [24500, -4053], [24000, -3553], [24000, -3053], [24500, -3053], [24000, -2553], [24000, -2053], [24500, -2553], [24500, -2053], [25000, -2553], [25000, -2053], [25500, -2553], [25500, -2053], [26000, -2053], [28000, -2053], [24000, -1553], [24000, -1053], [24500, -1553], [24500, -1053], [24000, -553], [24500, -553], [24500, -53], [25000, -1553], [25000, -1053], [25500, -1553], [25500, -1053], [25000, -553], [25000, -53], [25500, -553], [24500, 447], [26000, -1553], [26000, -1053], [26500, -1553], [26500, -1053], [26000, -553], [27000, -1553], [27000, -1053], [27500, -1553]], "('13.jpg', '14.jpg')": [[17500, -553], [17500, -53], [17500, 447], [18000, -553], [18000, -53], [18500, -553], [18500, -53], [19000, -553], [19000, -53], [18000, 447], [18000, 947], [18500, 447], [18500, 947], [18000, 1447], [18000, 1947], [18500, 1447], [18500, 1947], [19000, 447], [19000, 947], [19000, 1447], [19000, 1947], [18500, 2447], [18500, 2947], [19000, 2447], [19000, 2947]], "('16.jpg', '17.jpg')": [[26500, -7053], [27000, -7553], [27000, -7053], [27500, -7553], [27500, -7053], [27000, -6553], [27500, -6553], [27500, -6053], [28000, -7053], [28000, -6553], [28000, -6053], [28500, -6553], [28500, -6053], [29000, -6553], [29000, -6053], [29500, -6053], [30000, -6053], [28000, -5553], [28500, -5553], [29000, -5553], [29000, -5053], [29500, -5553], [29500, -5053], [30000, -5553]], "('16.jpg',)": [[26000, -6053], [26500, -6553], [26500, -6053], [27000, -6053], [26000, -5553], [26500, -5553], [27000, -5553], [27000, -5053], [27500, -5553], [27500, -5053], [27500, -4553], [27500, -4053], [28000, -5053], [28500, -5053], [28000, -4553], [28000, -4053], [28500, -4553], [28500, -4053], [29000, -4553], [29000, -4053], [28000, -3553], [28000, -3053], [28500, -3553], [28500, -3053]], "('15.jpg', '16.jpg')": [[25500, -5053], [25000, -4553], [25000, -4053], [25500, -4553], [25500, -4053], [24500, -3553], [25000, -3553], [25000, -3053], [25500, -3553], [25500, -3053], [26000, -5053], [26500, -5053], [26000, -4553], [26000, -4053], [26500, -4553], [26500, -4053], [27000, -4553], [27000, -4053], [26000, -3553], [26000, -3053], [26500, -3553], [26500, -3053], [26000, -2553], [26500, -2553], [26500, -2053], [27000, -3553], [27000, -3053], [27500, -3553], [27500, -3053], [27000, -2553], [27000, -2053], [27500, -2553], [27500, -2053], [28000, -2553]], "('19.jpg',)": [[35500, -14053], [33500, -13553], [34000, -13553], [34500, -13553], [34500, -13053], [35000, -13553], [35000, -13053], [35500, -13553], [35500, -13053], [35000, -12553], [35000, -12053], [35500, -12553], [35500, -12053], [35500, -11553], [35500, -11053], [36000, -14053], [36500, -14053], [37000, -14553], [37000, -14053], [37500, -14553], [37500, -14053], [38500, -15053], [36000, -13553], [36000, -13053], [36500, -13553], [36500, -13053], [36000, -12553], [36000, -12053], [36500, -12553], [36500, -12053], [37000, -13553], [37000, -13053], [37000, -12553], [37000, -12053], [36000, -11553], [36000, -11053], [36500, -11553], [36500, -11053], [36000, -10553], [36000, -10053], [36500, -10553], [37000, -11553], [37000, -11053], [37500, -11053], [37000, -10553], [37500, -10553], [38000, -11053], [38500, -11053], [39000, -11053]], "('18.jpg', '19.jpg')": [[33500, -13053], [33500, -12553], [33500, -12053], [33500, -11553], [34000, -13053], [34000, -12553], [34000, -12053], [34500, -12553], [34500, -12053], [34000, -11553], [34000, -11053], [34500, -11553], [34500, -11053], [34000, -10553], [34000, -10053], [34500, -10553], [34500, -10053], [35000, -11553], [35000, -11053], [35000, -10553], [35000, -10053], [35500, -10553], [35500, -10053]], "('19.jpg', '20.jpg')": [[38000, -14553], [38000, -14053], [38500, -14553], [38500, -14053], [39000, -14553], [39000, -14053], [37500, -13553], [37500, -13053], [37500, -12553], [37500, -12053], [37500, -11553], [38000, -13553], [38000, -13053], [38500, -13553], [38500, -13053], [38000, -12553], [38000, -12053], [38500, -12553], [38500, -12053], [39000, -13553], [39000, -13053], [39500, -13053], [39000, -12553], [39000, -12053], [39500, -12553], [39500, -12053], [38000, -11553], [38500, -11553], [39000, -11553], [39500, -11553], [40000, -11553]], "('20.jpg',)": [[39500, -14553], [39500, -14053], [39500, -13553], [40000, -14553], [40000, -14053], [40500, -14553], [40500, -14053], [41000, -14553], [41000, -14053], [40000, -13553], [40000, -13053], [40500, -13553], [40500, -13053], [40000, -12553], [40000, -12053], [40500, -12553], [40500, -12053], [41000, -13553], [41000, -13053], [41000, -12553], [41000, -12053], [40500, -11553], [41000, -11553], [41000, -11053]], "('20.jpg', '21.jpg')": [[41500, -14553], [41500, -14053], [42000, -14553], [42000, -14053], [42500, -14553], [42500, -14053], [43000, -14553], [43000, -14053], [41500, -13553], [41500, -13053], [41500, -12553], [41500, -12053], [41500, -11553], [41500, -11053], [42000, -13553], [42000, -13053], [42500, -13553], [42500, -13053], [42000, -12553], [42000, -12053], [42500, -12553], [42500, -12053], [43000, -13553], [43000, -13053], [43000, -12553], [43000, -12053], [42000, -11553], [42000, -11053], [42500, -11553], [42500, -11053], [43000, -11553], [43000, -11053]], "('21.jpg',)": [[43500, -14553], [43500, -14053], [43500, -13553], [43500, -13053], [43500, -12553], [43500, -12053], [43500, -11553], [43500, -11053], [44000, -14553], [44000, -14053], [44500, -14553], [44500, -14053], [45000, -14553], [45000, -14053], [44000, -13553], [44000, -13053], [44500, -13553], [44500, -13053], [44000, -12553], [44000, -12053], [44500, -12553], [44500, -12053], [45000, -13553], [45000, -13053], [45500, -13053], [45000, -12553], [45000, -12053], [45500, -12553], [45500, -12053], [44000, -11553], [44000, -11053], [44500, -11553], [44500, -11053], [45000, -11553], [45000, -11053], [45500, -11553], [45500, -11053], [46000, -11053]], "('21.jpg', '22.jpg')": [[45500, -14553], [45500, -14053], [46000, -14553], [46000, -14053], [46500, -14553], [46500, -14053], [47000, -14553], [47000, -14053], [45500, -13553], [46000, -13553], [46000, -13053], [46500, -13553], [46500, -13053], [46000, -12553], [46000, -12053], [46500, -12553], [46500, -12053], [47000, -13553], [47000, -13053], [47000, -12553], [47000, -12053], [46000, -11553], [46500, -11553], [46500, -11053], [47000, -11553], [47000, -11053]], "('22.jpg',)": [[46500, -15053], [47000, -15053], [47500, -15053], [47500, -14553], [47500, -14053], [47500, -13553], [47500, -13053], [47500, -12553], [47500, -12053], [47500, -11553], [47500, -11053], [48000, -15053], [48000, -14553], [48000, -14053], [48500, -14053], [48000, -13553], [48000, -13053], [48500, -13553], [48500, -13053], [48000, -12553], [48000, -12053], [48500, -12553], [48500, -12053], [48000, -11553], [48000, -11053], [48500, -11553]], "('39.jpg',)": [[54500, -22553], [54500, -22053], [55000, -22553], [55000, -22053], [55500, -22553], [55500, -22053], [53500, -19053], [53500, -18553], [53500, -18053], [54000, -21553], [54000, -21053], [54500, -21553], [54500, -21053], [54000, -20553], [54000, -20053], [54500, -20553], [54500, -20053], [55000, -21553], [55000, -21053], [55500, -21553], [55500, -21053], [55000, -20553], [55000, -20053], [55500, -20553], [55500, -20053], [54000, -19553], [54000, -19053], [54500, -19553], [54500, -19053], [54000, -18553], [54000, -18053], [54500, -18553], [54500, -18053], [55000, -19553], [55000, -19053], [55500, -19553], [55500, -19053], [55000, -18553], [55000, -18053], [55500, -18553], [55500, -18053], [53500, -17553], [53500, -17053], [53000, -16553], [54000, -17553], [54000, -17053], [54500, -17553], [54500, -17053], [55000, -17553], [55000, -17053], [55500, -17553], [55500, -17053], [55500, -16553], [56000, -22553], [56000, -22053], [56500, -22053], [57000, -22053], [57500, -22053], [58000, -22053], [58500, -22053], [56000, -21553], [56000, -21053], [56500, -21553], [56500, -21053], [56000, -20553], [56000, -20053], [56500, -20553], [56500, -20053], [57000, -21553], [57000, -21053], [57500, -21553], [57500, -21053], [57000, -20553], [57000, -20053], [57500, -20553], [57500, -20053], [56000, -19553], [56000, -19053], [56500, -19553], [56500, -19053], [56000, -18553], [56000, -18053], [56500, -18553], [56500, -18053], [57000, -19553], [57000, -19053], [57500, -19553], [57500, -19053], [57000, -18553], [57000, -18053], [57500, -18553], [57500, -18053], [58000, -21553], [58000, -21053], [58500, -21553], [58500, -21053], [58000, -20553], [58000, -20053], [58500, -20553], [58500, -20053], [58000, -19553], [58000, -19053], [58500, -19553], [58000, -18553], [58000, -18053], [56000, -17553], [56000, -17053], [56500, -17553], [56500, -17053], [56000, -16553], [56500, -16553], [56500, -16053], [57000, -17553], [57000, -17053], [57500, -17553], [57500, -17053], [57000, -16553], [57000, -16053], [57500, -16553], [57500, -16053], [58000, -17553], [58000, -17053]], "('22.jpg', '23.jpg')": [[48500, -15553], [48500, -15053], [48500, -14553], [49000, -15553], [49000, -15053], [49500, -15553], [49500, -15053], [49000, -14553], [49000, -14053], [49500, -14553], [49500, -14053], [50500, -16053], [50000, -15553], [50000, -15053], [50500, -15553], [50500, -15053], [50000, -14553], [50000, -14053], [50500, -14553], [50500, -14053], [51000, -14553], [51000, -14053], [49000, -13553], [49000, -13053], [49500, -13553], [49500, -13053], [49000, -12553], [49000, -12053], [49500, -12553], [49500, -12053], [49000, -11553], [49500, -11553], [50000, -13553], [50000, -13053], [50500, -13553], [50500, -13053], [50000, -12553], [50000, -12053], [50500, -12553], [50500, -12053], [51000, -13553], [51000, -13053], [51000, -12553], [51000, -12053], [51500, -12553], [51500, -12053]], "('23.jpg',)": [[50000, -16053], [51000, -16053], [51500, -16053], [51000, -15553], [51000, -15053], [51500, -15553], [51500, -15053], [51500, -14553], [51500, -14053], [51500, -13553], [51500, -13053], [50000, -11553], [52000, -16053], [52500, -16053], [52000, -15553], [52000, -15053], [52500, -15553], [52500, -15053], [52000, -14553], [52000, -14053], [52500, -14553], [52500, -14053], [53000, -15553], [53000, -15053], [53500, -15053], [53000, -14553], [53000, -14053], [52000, -13553], [52000, -13053], [52500, -13553], [52500, -13053], [52000, -12553], [52000, -12053], [52500, -12553], [52500, -12053], [53000, -13553], [53000, -13053], [53000, -12553], [53000, -12053], [53500, -12553], [54000, -12553]], "('23.jpg', '39.jpg')": [[53000, -16053], [53500, -16553], [53500, -16053], [53500, -15553], [54000, -16553], [54500, -16553], [55000, -16553]], "('23.jpg', '24.jpg')": [[53500, -14553], [53500, -14053], [54000, -15053], [54500, -15053], [54000, -14553], [54000, -14053], [54500, -14553], [54500, -14053], [55000, -15053], [55000, -14553], [55000, -14053], [55500, -14053], [53500, -13553], [53500, -13053], [54000, -13553], [54000, -13053], [54500, -13553], [54500, -13053], [54500, -12553], [55000, -13553], [55000, -13053], [55500, -13553], [55500, -13053], [55000, -12553], [55500, -12553]], "('23.jpg', '24.jpg', '39.jpg')": [[54000, -16053], [54500, -16053], [55000, -16053], [54000, -15553], [54500, -15553], [55000, -15553]], "('24.jpg', '39.jpg')": [[55500, -16053], [55500, -15553], [56000, -16053], [56000, -15553], [56000, -15053], [56500, -15553], [56500, -15053], [57000, -15553], [57000, -15053], [57500, -15553], [57500, -15053]], "('24.jpg',)": [[55500, -15053], [55500, -14553], [56000, -14553], [56000, -14053], [56500, -14553], [56500, -14053], [57000, -14553], [57000, -14053], [56000, -13553], [56000, -13053], [56500, -13553], [56500, -13053], [56000, -12553], [56500, -12553], [57000, -13553], [57000, -13053], [57000, -12553], [57000, -12053]], "('40.jpg',)": [[59500, -23053], [59500, -22553], [59500, -22053], [60000, -23053], [60500, -23053], [60000, -22553], [60000, -22053], [60500, -22553], [60500, -22053], [61000, -22553], [61000, -22053], [61500, -22553], [61500, -22053], [62000, -22553], [62000, -22053], [60500, -21553], [60500, -21053], [60500, -20553], [60500, -20053], [61000, -21553], [61000, -21053], [61500, -21553], [61500, -21053], [61000, -20553], [61000, -20053], [61500, -20553], [61500, -20053], [60000, -19553], [60000, -19053], [60500, -19553], [60500, -19053], [60000, -18553], [60000, -18053], [60500, -18553], [60500, -18053], [61000, -19553], [61000, -19053], [61500, -19553], [61500, -19053], [61000, -18553], [61000, -18053], [61500, -18553], [61500, -18053], [62000, -21553], [62000, -21053], [62000, -20553], [59500, -17053], [59500, -16553], [59500, -16053], [59500, -15553], [60000, -17553], [60000, -17053], [60500, -17553], [60500, -17053], [60000, -16553], [60000, -16053], [60500, -16553], [60500, -16053], [61000, -17553], [61000, -17053], [61000, -16553], [61000, -16053], [60000, -15553], [60500, -15553]], "('39.jpg', '40.jpg')": [[59000, -21553], [59000, -21053], [59500, -21553], [59500, -21053], [59000, -20553], [59000, -20053], [59500, -20553], [59500, -20053], [58500, -19053], [58500, -18553], [58500, -18053], [59000, -19553], [59000, -19053], [59500, -19553], [59500, -19053], [59000, -18553], [59000, -18053], [59500, -18553], [59500, -18053], [60000, -21553], [60000, -21053], [60000, -20553], [60000, -20053], [58500, -17553], [58500, -17053], [58000, -16553], [58000, -16053], [58500, -16553], [58500, -16053], [59000, -17553], [59000, -17053], [59500, -17553], [59000, -16553], [59000, -16053], [59000, -15553]], "('40.jpg', '41.jpg')": [[62500, -22553], [62500, -22053], [63000, -22553], [63000, -22053], [63500, -22053], [62500, -21553], [62500, -21053], [62000, -20053], [62500, -20553], [62500, -20053], [63000, -21553], [63000, -21053], [63500, -21553], [63500, -21053], [63000, -20553], [63000, -20053], [63500, -20553], [63500, -20053], [62000, -19553], [62000, -19053], [62500, -19553], [62500, -19053], [62000, -18553], [62000, -18053], [62500, -18553], [63000, -19553], [63000, -19053], [63500, -19553], [61500, -17553], [61500, -17053], [61500, -16553], [61500, -16053], [61000, -15553], [61000, -15053], [61500, -15553], [61500, -15053], [62000, -17553], [62000, -17053], [62500, -17553], [62500, -17053], [62000, -16553], [62000, -16053], [62500, -16553], [62500, -16053], [63000, -17053], [63000, -16553], [63000, -16053], [62000, -15553], [62000, -15053], [62500, -15553], [62500, -15053], [63000, -15553], [64000, -22053], [64000, -21553], [64000, -21053], [64000, -20553], [64000, -20053]], "('40.jpg', '41.jpg', '38.jpg')": [[62500, -18053], [63500, -19053], [63000, -18553], [63000, -18053], [63500, -18553], [63500, -18053], [63000, -17553], [63500, -17553]], "('24.jpg', '25.jpg')": [[57500, -14553], [57500, -14053], [58000, -14553], [58000, -14053], [58500, -14053], [59000, -14553], [59000, -14053], [59500, -14553], [57500, -13553], [57500, -13053], [57500, -12553], [58000, -13553], [58000, -13053], [58500, -13553], [58500, -13053], [58000, -12553], [58500, -12553], [59000, -13553], [59000, -13053], [59000, -12553]], "('24.jpg', '25.jpg', '39.jpg', '40.jpg')": [[58000, -15553], [58000, -15053], [58500, -15053], [59000, -15053]], "('24.jpg', '39.jpg', '40.jpg')": [[58500, -15553]], "('24.jpg', '25.jpg', '39.jpg')": [[58500, -14553]], "('24.jpg', '25.jpg', '40.jpg')": [[59500, -15053]], "('25.jpg',)": [[59500, -14053], [59500, -13553], [59500, -13053], [59500, -12553], [60000, -14053], [60500, -14053], [60000, -13553], [60000, -13053], [60500, -13553], [60500, -13053], [60000, -12553], [60500, -12553], [60500, -12053]], "('24.jpg', '25.jpg', '36.jpg')": [[57500, -12053], [58000, -12053], [58500, -12053], [59000, -12053]], "('36.jpg',)": [[57500, -11553], [57500, -11053], [57000, -10053], [57500, -10553], [57500, -10053], [58000, -11553], [58000, -11053], [58500, -11553], [58500, -11053], [58000, -10553], [58000, -10053], [58500, -10553], [58500, -10053], [59000, -11553], [59000, -11053], [59500, -11053], [59000, -10553], [59000, -10053], [59500, -10553], [59500, -10053], [60000, -11053], [60000, -10553], [60000, -10053], [57000, -9553], [57000, -9053], [57500, -9553], [57500, -9053], [57000, -8553], [57000, -8053], [57500, -8553], [57500, -8053], [58000, -9553], [58000, -9053], [58500, -9553], [58500, -9053], [58000, -8553], [58000, -8053], [58500, -8553], [58500, -8053], [59000, -9553], [59000, -9053], [59500, -9553], [59500, -9053], [59000, -8553], [59000, -8053], [59500, -8553], [59500, -8053], [59000, -7553], [59500, -7553], [60000, -9553], [60000, -9053]], "('25.jpg', '36.jpg')": [[59500, -12053], [59500, -11553], [60000, -12053], [60000, -11553], [60500, -11553]], "('25.jpg', '40.jpg')": [[60000, -15053], [60500, -15053], [60000, -14553], [60500, -14553]], "('25.jpg', '40.jpg', '41.jpg')": [[61000, -14553]], "('25.jpg', '26.jpg')": [[61000, -14053], [61500, -14053], [62000, -14053], [61000, -13553], [61000, -13053], [61500, -13553], [61500, -13053], [62000, -13553], [62000, -13053], [62500, -13553], [62500, -13053], [62500, -12553]], "('25.jpg', '26.jpg', '40.jpg', '41.jpg')": [[61500, -14553], [62000, -14553], [62500, -14553]], "('41.jpg', '38.jpg')": [[63500, -17053], [63500, -16553], [65000, -20053], [65500, -20053], [64000, -19053], [64500, -19553], [64500, -19053], [64000, -18553], [64000, -18053], [64500, -18553], [64500, -18053], [65000, -19553], [65000, -19053], [65500, -19553], [65500, -19053], [65000, -18553], [65000, -18053], [65500, -18553], [65500, -18053], [66500, -21053], [66000, -20553], [66000, -20053], [66500, -20553], [66500, -20053], [67000, -21053], [67500, -21553], [67500, -21053], [67000, -20553], [67000, -20053], [67500, -20553], [66000, -19553], [66000, -19053], [66500, -19553], [66500, -19053], [66000, -18553], [66000, -18053], [66500, -18553], [66500, -18053], [67000, -19553], [67000, -19053], [67000, -18553], [67000, -18053], [64000, -17553], [64000, -17053], [64500, -17553], [64500, -17053], [64000, -16553], [64000, -16053], [64500, -16553], [64500, -16053], [65000, -17553], [65000, -17053], [65500, -17553], [65500, -17053], [65000, -16553], [65000, -16053], [65500, -16553], [65500, -16053], [64500, -15553], [64500, -15053], [65000, -15553], [65000, -15053], [65500, -15553], [65500, -15053], [65000, -14553], [65500, -14553], [66000, -17553], [66000, -17053], [66500, -17553], [66500, -17053], [66000, -16553], [66000, -16053], [66500, -16553], [66500, -16053], [66000, -15553], [66000, -15053], [66000, -14553]], "('41.jpg',)": [[63500, -16053], [63000, -15053], [63500, -15553], [63500, -15053], [64500, -22053], [65000, -22053], [65500, -22053], [64500, -21553], [64500, -21053], [64500, -20553], [64500, -20053], [65000, -21553], [65000, -21053], [65500, -21553], [65500, -21053], [65000, -20553], [65500, -20553], [64000, -19553], [66000, -21553], [66000, -21053], [66500, -21553], [67000, -21553], [64000, -15553], [64000, -15053], [64500, -14553]], "('25.jpg', '26.jpg', '41.jpg')": [[62500, -14053]], "('26.jpg', '41.jpg')": [[63000, -14553], [63000, -14053], [63500, -14553], [63500, -14053], [64000, -14553], [64000, -14053], [64500, -14053], [65000, -14053], [64500, -13553]], "('25.jpg', '26.jpg', '37.jpg')": [[61000, -12553], [61000, -12053], [61500, -12553], [61500, -12053], [62000, -12553], [62000, -12053], [62500, -12053]], "('36.jpg', '37.jpg')": [[60500, -11053], [60500, -10553], [60500, -10053], [61000, -10553], [61000, -10053], [61500, -10553], [61500, -10053], [62000, -10553], [62000, -10053], [62500, -10553], [62500, -10053], [63000, -10553], [60500, -9553], [60500, -9053], [60000, -8553], [60000, -8053], [60500, -8553], [60500, -8053], [61000, -9553], [61000, -9053], [61500, -9553], [61500, -9053], [61000, -8553], [61000, -8053], [61500, -8553], [61500, -8053], [60000, -7553], [60500, -7553], [61000, -7553], [61000, -7053], [61500, -7553], [61500, -7053], [62000, -9553], [62000, -9053], [62500, -9553], [62500, -9053], [62000, -8553], [62000, -8053], [62500, -8553], [62500, -8053], [62000, -7553], [62000, -7053]], "('25.jpg', '26.jpg', '36.jpg', '37.jpg')": [[61000, -11553], [61500, -11553], [62000, -11553], [62000, -11053]], "('26.jpg', '36.jpg', '37.jpg')": [[61000, -11053], [61500, -11053], [62500, -11553], [62500, -11053], [63000, -11053]], "('26.jpg',)": [[63000, -13553], [63000, -13053], [63500, -13553], [63500, -13053], [63000, -12553], [63500, -12553], [64000, -13553], [64000, -13053], [64500, -13053], [64000, -12553], [64500, -12553], [65000, -12053]], "('26.jpg', '37.jpg')": [[63000, -12053], [63500, -12053], [63000, -11553], [63500, -11553], [63500, -11053], [63500, -10553], [64000, -12053], [64500, -12053], [64000, -11553], [64000, -11053], [64500, -11553], [64500, -11053], [64000, -10553], [64500, -10553], [65000, -11553], [65000, -11053], [65500, -11553], [65500, -11053], [65000, -10553], [65500, -10553], [66000, -10553], [67500, -10553]], "('37.jpg',)": [[63000, -10053], [63500, -10053], [63000, -9553], [63000, -9053], [63500, -9553], [63500, -9053], [63000, -8553], [63000, -8053], [63500, -8553], [63500, -8053], [62500, -7553], [62500, -7053], [63000, -7553], [63000, -7053], [63500, -7553], [63500, -7053], [63500, -6553], [64000, -10053], [64500, -10053], [65000, -10053], [65500, -10053], [66000, -10053], [66500, -10053], [67000, -10053], [67500, -10053], [64000, -9553], [64000, -9053], [64500, -9553], [64500, -9053], [64000, -8553], [64000, -8053], [64500, -8553], [64500, -8053], [65000, -9553], [65000, -9053], [65500, -9553], [65500, -9053], [65000, -8553], [65000, -8053], [65500, -8553], [65500, -8053], [64000, -7553], [64000, -7053], [64500, -7553], [64500, -7053], [64000, -6553], [64500, -6553], [65000, -7553], [65000, -7053], [65500, -7553], [65500, -7053], [65000, -6553], [65500, -6553], [66000, -9553], [66000, -9053], [66500, -9553], [66500, -9053], [66000, -8553], [66000, -8053], [66500, -8553], [66500, -8053], [67000, -9553], [67000, -9053], [67000, -8553], [67000, -8053], [66000, -7553], [66000, -7053], [66500, -7553], [66500, -7053], [66000, -6553], [66000, -6053], [66500, -6553], [66500, -6053], [67000, -7553]], "('38.jpg',)": [[67500, -20053], [67500, -19553], [67500, -19053], [67500, -18553], [67500, -18053], [68000, -22053], [68500, -22053], [69500, -23053], [69000, -22553], [69000, -22053], [69500, -22553], [69500, -22053], [70000, -23053], [70000, -22553], [70000, -22053], [70500, -22553], [70500, -22053], [68000, -21553], [68000, -21053], [68500, -21553], [68500, -21053], [68000, -20553], [68000, -20053], [68500, -20553], [68500, -20053], [69000, -21553], [69000, -21053], [69500, -21553], [69500, -21053], [69000, -20553], [69000, -20053], [69500, -20553], [69500, -20053], [68000, -19553], [68000, -19053], [68500, -19553], [68500, -19053], [68000, -18553], [68000, -18053], [68500, -18553], [68500, -18053], [69000, -19553], [69000, -19053], [69500, -19553], [69500, -19053], [69000, -18553], [69000, -18053], [69500, -18553], [69500, -18053], [70000, -21553], [70000, -21053], [70500, -21553], [70500, -21053], [70000, -20553], [70000, -20053], [70500, -20553], [70500, -20053], [71000, -21553], [71000, -21053], [71500, -21053], [71000, -20553], [71000, -20053], [71500, -20553], [71500, -20053], [70000, -19553], [70000, -19053], [70500, -19553], [70500, -19053], [70000, -18553], [70000, -18053], [70500, -18553], [70500, -18053], [71000, -19553], [71000, -19053], [71500, -19553], [71500, -19053], [71000, -18553], [71000, -18053], [71500, -18553], [71500, -18053], [67000, -17553], [67000, -17053], [67500, -17553], [67500, -17053], [67000, -16553], [67000, -16053], [67500, -16553], [67500, -16053], [66500, -15553], [66500, -15053], [67000, -15553], [67000, -15053], [67500, -15553], [68000, -17553], [68000, -17053], [68500, -17553], [68500, -17053], [68000, -16553], [68000, -16053], [68500, -16553], [68500, -16053], [69000, -17553], [69000, -17053], [69500, -17553], [69500, -17053], [69000, -16553], [70000, -17553], [70000, -17053], [70500, -17553], [72000, -20053], [72000, -19553], [72000, -19053], [72500, -19553], [72500, -19053], [72000, -18553]], "('26.jpg', '41.jpg', '38.jpg')": [[65500, -14053]], "('26.jpg', '27.jpg', '41.jpg', '38.jpg')": [[66000, -14053], [65500, -13553], [66000, -13553]], "('27.jpg', '38.jpg')": [[66500, -14553], [67500, -15053], [67000, -14553], [67500, -14553], [68000, -15553], [68000, -15053]], "('26.jpg', '27.jpg', '38.jpg')": [[66500, -14053], [67000, -14053]], "('26.jpg', '27.jpg')": [[67500, -14053], [65000, -13053], [65500, -13053], [65000, -12553], [65500, -12553], [65500, -12053], [66000, -13053], [66500, -13553], [66500, -13053], [66000, -12553], [66000, -12053], [66500, -12553], [66500, -12053], [67000, -13553], [67000, -13053], [67500, -13553], [67500, -13053], [67000, -12553], [67000, -12053], [67500, -12553], [67500, -12053], [67500, -11553], [68000, -14053], [68000, -13553], [68000, -13053], [68000, -12553], [68000, -12053]], "('26.jpg', '27.jpg', '41.jpg')": [[65000, -13553]], "('26.jpg', '27.jpg', '37.jpg')": [[66000, -11553], [66000, -11053], [66500, -11553], [66500, -11053], [66500, -10553], [67000, -11553], [67000, -11053], [67500, -11053], [67000, -10553]], "('27.jpg', '28.jpg', '38.jpg')": [[69000, -16053], [69500, -16053], [68500, -15553], [68500, -15053], [69000, -15553]], "('28.jpg', '38.jpg')": [[69500, -16553], [70500, -17053], [70000, -16553], [70000, -16053], [70500, -16553], [71000, -17553], [71000, -17053]], "('27.jpg',)": [[68000, -14553], [68500, -14553], [68500, -14053], [69000, -14053], [68500, -13553], [68500, -13053], [68500, -12553], [68500, -12053], [69000, -13553], [69000, -13053], [69500, -13053], [69000, -12553], [69000, -12053], [69500, -12553], [69500, -12053], [68000, -11553], [68000, -11053], [68500, -11553], [70000, -12553]], "('27.jpg', '28.jpg')": [[69000, -15053], [69500, -15553], [69500, -15053], [69000, -14553], [69500, -14553], [69500, -14053], [70000, -15053], [70000, -14553], [70000, -14053], [70500, -14553], [70500, -14053], [69500, -13553], [70000, -13553], [70000, -13053], [70500, -13553], [70500, -13053], [71000, -13553], [71000, -13053]], "('28.jpg',)": [[70500, -16053], [71000, -16553], [71000, -16053], [71500, -16553], [71500, -16053], [70000, -15553], [70500, -15553], [70500, -15053], [71000, -15553], [71000, -15053], [71500, -15553], [71500, -15053], [71000, -14553], [71000, -14053], [71500, -14553], [71500, -14053], [71500, -13553], [72000, -15553], [72000, -15053], [72500, -15053], [72000, -14553], [72000, -14053], [72500, -14553], [72500, -14053], [73000, -14553]], "('28.jpg', '29.jpg', '38.jpg')": [[71500, -17553], [71500, -17053], [72000, -18053], [72500, -18553], [72500, -18053], [73000, -18553], [73000, -18053], [72000, -17553]], "('29.jpg',)": [[73500, -19053], [73500, -18553], [73500, -18053], [74000, -19553], [74000, -19053], [74500, -19053], [74000, -18553], [74000, -18053], [74500, -18553], [74500, -18053], [75000, -18553], [75000, -18053], [74000, -17553], [74500, -17553], [74500, -17053], [74500, -16553], [75000, -17553], [75000, -17053], [75500, -17553], [75500, -17053], [75000, -16553], [75000, -16053], [75500, -16553], [75500, -16053], [76000, -17053], [76000, -16553]], "('29.jpg', '30.jpg')": [[75000, -20053], [75500, -20053], [74500, -19553], [75000, -19553], [75000, -19053], [75500, -19553], [75500, -19053], [75500, -18553], [75500, -18053], [76000, -19553], [76000, -19053], [76500, -19053], [76000, -18553], [76000, -18053], [76500, -18553], [76500, -18053], [77000, -18053], [76000, -17553], [76500, -17553], [76500, -17053], [77000, -17553], [77000, -17053]], "('30.jpg',)": [[75500, -20553], [76500, -21053], [76000, -20553], [76000, -20053], [76500, -20553], [76500, -20053], [77000, -21553], [77000, -21053], [77500, -21553], [77500, -21053], [77000, -20553], [77000, -20053], [77500, -20553], [77500, -20053], [76500, -19553], [77000, -19553], [77000, -19053], [77500, -19553], [77500, -19053], [77000, -18553], [77500, -18553], [77500, -18053], [78000, -21053], [78000, -20553], [78000, -20053], [78500, -20553], [78500, -20053], [78000, -19553], [78000, -19053], [78500, -19553], [78500, -19053], [78000, -18553], [78000, -18053], [78500, -18553], [78500, -18053], [79000, -19553], [79000, -19053], [79500, -19053], [79000, -18553], [77500, -17553]], "('30.jpg', '31.jpg')": [[78000, -22053], [78500, -22553], [78500, -22053], [79000, -22053], [78000, -21553], [78500, -21553], [78500, -21053], [79000, -21553], [79000, -21053], [79500, -21553], [79500, -21053], [79000, -20553], [79000, -20053], [79500, -20553], [79500, -20053], [79500, -19553], [80000, -20553], [80000, -20053], [80500, -20053], [80000, -19553], [80000, -19053], [80500, -19553]], "('31.jpg',)": [[79500, -23053], [79000, -22553], [79500, -22553], [79500, -22053], [81000, -24053], [81500, -24553], [81500, -24053], [80000, -23553], [80000, -23053], [80500, -23553], [80500, -23053], [80000, -22553], [80000, -22053], [80500, -22553], [80500, -22053], [81000, -23553], [81000, -23053], [81500, -23553], [81500, -23053], [81000, -22553], [81000, -22053], [81500, -22553], [81500, -22053], [82500, -25053], [82000, -24553], [82000, -24053], [82500, -24553], [82500, -24053], [83000, -25553], [83000, -25053], [83500, -25553], [83500, -25053], [83000, -24553], [83000, -24053], [83500, -24553], [83500, -24053], [82000, -23553], [82000, -23053], [82500, -23553], [82500, -23053], [82000, -22553], [82000, -22053], [82500, -22553], [83000, -23553], [83000, -23053], [83500, -23553], [83500, -23053], [83000, -22553], [80000, -21553], [80000, -21053], [80500, -21553], [80500, -21053], [80500, -20553], [81000, -21553], [81000, -21053], [81500, -21553], [81500, -21053], [81000, -20553], [81000, -20053], [81500, -20553], [81500, -20053], [80500, -19053], [81000, -19553], [81000, -19053], [81500, -19553], [82000, -21553], [82000, -21053], [82500, -21053], [82000, -20553], [82000, -20053], [82500, -20553], [82500, -20053], [84000, -25553], [84000, -25053], [84500, -25553], [84500, -25053], [84000, -24553], [84000, -24053], [84500, -24553], [84500, -24053], [85000, -24553], [85000, -24053], [85500, -24053], [84000, -23553], [84500, -23553]], "('28.jpg', '29.jpg')": [[72000, -17053], [72500, -17553], [72500, -17053], [72000, -16553], [72000, -16053], [72500, -16553], [72500, -16053], [73000, -17553], [73000, -17053], [73500, -17553], [73500, -17053], [73000, -16553], [73000, -16053], [73500, -16553], [73500, -16053], [72500, -15553], [73000, -15553], [73000, -15053], [73500, -15553], [73500, -15053], [74000, -17053], [74000, -16553], [74000, -16053], [74500, -16053], [74000, -15553], [74000, -15053], [74500, -15553]], "('31.jpg', '32.jpg')": [[82500, -22053], [83000, -22053], [83500, -22553], [83500, -22053], [82500, -21553], [83000, -21553], [83000, -21053], [83500, -21553], [83500, -21053], [83000, -20553], [84000, -23053], [84500, -23053], [84000, -22553], [84000, -22053], [84500, -22553], [84500, -22053], [85000, -23553], [85000, -23053], [85500, -23553], [85500, -23053], [85000, -22553], [85000, -22053], [85500, -22553], [85500, -22053], [86000, -23053], [86000, -22553], [84000, -21553], [84000, -21053], [84500, -21553]], "('32.jpg',)": [[83500, -20553], [83500, -20053], [83500, -19553], [86000, -22053], [86500, -22053], [84500, -21053], [84000, -20553], [84000, -20053], [84500, -20553], [84500, -20053], [85000, -21553], [85000, -21053], [85500, -21553], [85500, -21053], [85000, -20553], [85000, -20053], [85500, -20553], [85500, -20053], [84000, -19553], [84000, -19053], [84500, -18553], [84500, -18053], [86000, -21553], [86000, -21053], [86500, -21553], [86500, -21053], [86000, -20553], [86500, -20553], [87000, -21553], [87000, -21053], [87000, -20553]], "('32.jpg', '33.jpg')": [[84500, -19553], [84500, -19053], [85000, -19553], [85000, -19053], [85500, -19553], [85500, -19053], [85000, -18553], [85000, -18053], [85500, -18553], [85500, -18053], [86000, -20053], [86500, -20053], [87000, -20053], [87500, -20553], [87500, -20053], [86000, -19553], [86000, -19053], [86500, -19553], [86500, -19053], [86000, -18553], [86000, -18053], [86500, -18553], [86500, -18053], [87000, -19553], [87000, -19053], [87500, -19553], [87500, -19053], [87000, -18553], [87000, -18053], [87500, -18553], [85000, -17553], [85500, -17553], [86000, -17553], [88000, -20053], [88000, -19553], [88000, -19053]], "('33.jpg',)": [[87500, -18053], [85500, -17053], [85500, -16553], [85500, -16053], [86000, -17053], [86500, -17553], [86500, -17053], [86000, -16553], [86000, -16053], [86500, -16553], [86500, -16053], [87000, -17553], [87000, -17053], [87500, -17553], [87500, -17053], [87000, -16553], [87000, -16053], [87500, -16553], [88000, -18553], [88000, -18053], [88500, -18553], [88500, -18053], [88000, -17553], [88000, -17053], [88500, -17553], [88500, -17053], [88000, -16553], [88500, -16553], [89000, -17053], [89000, -16553]], "('33.jpg', '34.jpg')": [[87500, -16053], [86000, -15553], [86000, -15053], [86500, -15553], [86500, -15053], [86000, -14553], [86500, -14553], [87000, -15553], [87000, -15053], [87500, -15553], [87500, -15053], [87000, -14553], [87500, -14553], [88000, -16053], [88500, -16053], [89000, -16053], [88000, -15553], [88000, -15053], [88500, -15553], [88500, -15053], [89000, -15553], [89000, -15053], [89500, -15553]], "('34.jpg',)": [[86500, -14053], [87000, -14053], [87500, -14053], [86500, -13553], [86500, -13053], [87000, -13553], [87000, -13053], [87500, -13553], [87500, -13053], [87000, -12553], [87500, -12553], [88000, -14553], [88000, -14053], [88500, -14553], [88500, -14053], [89500, -15053], [89000, -14553], [89000, -14053], [89500, -14553], [89500, -14053], [90000, -14053], [88000, -13553], [88000, -13053], [88500, -13553], [88500, -13053], [88000, -12553], [89000, -13553], [89000, -13053], [89500, -13553], [89500, -13053], [90000, -13553]], "('34.jpg', '35.jpg')": [[87000, -12053], [87500, -12053], [87000, -11553], [87500, -11553], [87500, -11053], [88000, -12053], [88500, -12553], [88500, -12053], [89000, -12553], [89000, -12053], [89500, -12553], [89500, -12053], [88000, -11553], [88000, -11053], [88500, -11553], [88500, -11053], [89000, -11553], [89000, -11053], [89500, -11553], [90000, -13053], [90000, -12553], [90000, -12053], [90500, -12553], [90500, -12053], [90000, -11553], [90500, -11553]], "('35.jpg',)": [[87500, -10553], [87500, -10053], [88000, -10553], [88000, -10053], [88500, -10553], [88500, -10053], [89500, -11053], [89000, -10553], [89000, -10053], [89500, -10553], [89500, -10053], [90000, -11053], [90500, -11053], [90000, -10553], [90000, -10053], [90500, -10553], [90500, -10053], [91000, -11053], [91000, -10553], [91000, -10053], [88000, -9553], [88000, -9053], [88500, -9553], [88500, -9053], [88000, -8553], [88500, -8553], [88500, -8053], [89000, -9553], [89000, -9053], [89500, -9553], [89500, -9053], [89000, -8553], [90000, -9553], [90000, -9053], [90500, -9553], [91500, -9553]], "('35.jpg', '42.jpg')": [[89000, -8053], [89500, -8553], [89500, -8053], [88500, -7553], [89000, -7553], [89500, -7553], [90500, -9053], [90000, -8553], [90000, -8053], [90500, -8553], [90500, -8053], [91000, -9553], [91000, -9053], [91500, -9053], [91000, -8553], [91000, -8053], [91500, -8553]], "('42.jpg',)": [[88500, -7053], [89000, -7053], [89500, -7053], [89000, -6553], [89500, -6553], [89500, -6053], [91500, -8053], [90000, -7553], [90000, -7053], [90500, -7553], [90500, -7053], [90000, -6553], [90000, -6053], [90500, -6553], [90500, -6053], [91000, -7553], [91000, -7053], [91500, -7553], [91500, -7053], [91000, -6553], [91000, -6053], [91500, -6553], [91500, -6053], [89500, -5553], [90000, -5553], [90000, -5053], [90500, -5553], [90500, -5053], [90500, -4553], [91000, -5553], [91000, -5053], [91500, -5553], [92000, -8553], [92000, -8053], [92000, -7553], [92000, -7053], [92500, -7553], [92500, -7053], [92000, -6553], [92000, -6053], [92500, -6553], [92500, -6053], [93000, -7053], [93000, -6553], [92000, -5553]], "('42.jpg', '43.jpg')": [[90500, -4053], [91500, -5053], [91000, -4553], [91000, -4053], [91500, -4553], [91500, -4053], [91000, -3553], [91000, -3053], [91500, -3553], [91500, -3053], [93000, -6053], [93500, -6053], [92000, -5053], [92500, -5553], [92500, -5053], [92000, -4553], [92000, -4053], [92500, -4553], [92500, -4053], [93000, -5553], [93000, -5053], [93500, -5553], [93500, -5053], [93000, -4553], [93000, -4053], [93500, -4553], [93500, -4053], [92000, -3553], [92000, -3053], [92500, -3553], [93000, -3553], [94000, -5053], [94000, -4553]], "('43.jpg',)": [[91500, -2553], [92500, -3053], [92000, -2553], [92000, -2053], [92500, -2553], [92500, -2053], [93000, -3053], [93500, -3553], [93500, -3053], [93000, -2553], [93000, -2053], [93500, -2553], [93500, -2053], [94000, -4053], [94500, -4553], [94500, -4053], [94000, -3553], [94000, -3053], [94500, -3553], [94500, -3053], [94000, -2553], [94500, -2553], [95000, -3553], [95000, -3053], [95500, -3053], [92000, -1553], [92500, -1553], [93000, -1553]], "('43.jpg', '44.jpg')": [[94000, -2053], [94500, -2053], [95000, -2553], [95000, -2053], [95500, -2553], [95500, -2053], [92500, -1053], [93000, -1053], [93500, -1553], [93500, -1053], [93000, -553], [93000, -53], [93500, -553], [93500, -53], [94000, -1553], [94000, -1053], [94500, -1553], [94500, -1053], [94000, -553], [95000, -1553], [95000, -1053], [95500, -1553], [96000, -2053], [96000, -1553]], "('44.jpg',)": [[92500, -553], [93000, 447], [93500, 447], [93500, 947], [94000, -53], [94500, -553], [94500, -53], [95500, -1053], [95000, -553], [95000, -53], [95500, -553], [95500, -53], [94000, 447], [94000, 947], [94500, 447], [94500, 947], [95000, 447], [95500, 447], [96000, -2553], [96000, -1053], [96500, -1553], [96500, -1053], [96000, -553], [96000, -53], [96500, -553], [96500, -53], [97000, -553], [97000, -53], [97500, -53], [96000, 447], [96500, 447]], "('45.jpg',)": [[93500, 1447], [93500, 1947], [94000, 2447], [94000, 2947], [94500, 2947], [94000, 3447], [94000, 3947], [94500, 3447], [94500, 3947], [95000, 3947], [94500, 4447], [94500, 4947], [94500, 5447], [95000, 4447], [95000, 4947], [95500, 4447], [98000, 447], [96000, 3947], [96500, 3447], [96500, 3947], [97500, 2947], [97000, 3447], [97500, 3447], [96000, 4447], [98000, 2947], [98500, 2447], [98500, 2947]], "('44.jpg', '45.jpg')": [[94000, 1447], [94000, 1947], [94500, 1447], [94500, 1947], [95000, 947], [95500, 947], [95000, 1447], [95000, 1947], [95500, 1447], [95500, 1947], [94500, 2447], [95000, 2447], [95000, 2947], [95500, 2447], [95500, 2947], [95000, 3447], [95500, 3447], [95500, 3947], [96000, 947], [96500, 947], [96000, 1447], [96000, 1947], [96500, 1447], [96500, 1947], [97000, 447], [97000, 947], [97500, 447], [97500, 947], [97000, 1447], [97000, 1947], [97500, 1447], [97500, 1947], [98000, 947], [98000, 1447], [98000, 1947], [98500, 1947], [96000, 2447], [96000, 2947], [96500, 2447], [96500, 2947], [96000, 3447], [97000, 2447], [97000, 2947], [97500, 2447], [98000, 2447]], "('46.jpg',)": [[94500, 5947], [94500, 6447], [95500, 7947], [99500, 4947], [100000, 5447], [100000, 5947], [96000, 7447], [96000, 7947], [96500, 7447], [96500, 7947], [97000, 7447], [97000, 7947], [97500, 7447], [97500, 7947], [96000, 8447], [96000, 8947], [96500, 8447], [96500, 8947], [96500, 9447], [97000, 8447], [97000, 8947], [97500, 8447], [97500, 8947], [97000, 9447], [98000, 6947], [98500, 6947], [98000, 7447], [98000, 7947], [98500, 7447], [98500, 7947], [99000, 6947], [99500, 6447], [99500, 6947], [99000, 7447], [99000, 7947], [99500, 7447], [99500, 7947], [98000, 8447], [98000, 8947], [98500, 8447], [99000, 8447], [97000, 10447], [100000, 6447], [100000, 6947], [100500, 6447], [100500, 6947], [100000, 7447], [100000, 7947], [100500, 7447], [101000, 6947]], "('45.jpg', '46.jpg')": [[95500, 4947], [95000, 5447], [95000, 5947], [95500, 5447], [95500, 5947], [95000, 6447], [95000, 6947], [95500, 6447], [95500, 6947], [95000, 7447], [95500, 7447], [97000, 3947], [97500, 3947], [96000, 4947], [96500, 4447], [96500, 4947], [96000, 5447], [96000, 5947], [96500, 5447], [96500, 5947], [97000, 4447], [97000, 4947], [97500, 4447], [97500, 4947], [97000, 5447], [97000, 5947], [97500, 5447], [97500, 5947], [98000, 3447], [98000, 3947], [98500, 3447], [98500, 3947], [99000, 3947], [98000, 4447], [98000, 4947], [98500, 4447], [98500, 4947], [98000, 5447], [98000, 5947], [98500, 5447], [98500, 5947], [99000, 4447], [99000, 4947], [99000, 5447], [99000, 5947], [99500, 5447], [99500, 5947], [96000, 6447], [96000, 6947], [96500, 6447], [96500, 6947], [97000, 6447], [97000, 6947], [97500, 6447], [97500, 6947], [98000, 6447], [98500, 6447], [99000, 6447]], "('46.jpg', '47.jpg')": [[97000, 9947], [97500, 9447], [97500, 9947], [98500, 8947], [98000, 9447], [98000, 9947], [98500, 9447], [98500, 9947], [99000, 8947], [99500, 8447], [99500, 8947], [99000, 9447], [99000, 9947], [99500, 9447], [99500, 9947], [97500, 10447], [97500, 10947], [98000, 10447], [98000, 10947], [98500, 10447], [98500, 10947], [98000, 11447], [98500, 11447], [99000, 10447], [99000, 10947], [99500, 10447], [99500, 10947], [100500, 7947], [101000, 7447], [101000, 7947], [101500, 7947], [100000, 8447], [100000, 8947], [100500, 8447], [100500, 8947], [100000, 9447], [100000, 9947], [100500, 9447], [100500, 9947], [101000, 8447], [101000, 8947], [101500, 8447], [101500, 8947], [101000, 9447], [101000, 9947], [101500, 9447], [102000, 8447], [102000, 8947], [100000, 10447]], "('47.jpg',)": [[98000, 11947], [98500, 11947], [99000, 11447], [99000, 11947], [99500, 11447], [99500, 11947], [98500, 12447], [98500, 12947], [99000, 12447], [99000, 12947], [99500, 12447], [99500, 12947], [99000, 13447], [99000, 13947], [99500, 13447], [99500, 13947], [101500, 7447], [101500, 9947], [102000, 6947], [102500, 6947], [102000, 7447], [102000, 7947], [102500, 7447], [102500, 7947], [103000, 7947], [102500, 8447], [102500, 8947], [102000, 9447], [102000, 9947], [102500, 9447], [102500, 9947], [103000, 8447], [103000, 8947], [103500, 8947], [103000, 9447], [103000, 9947], [103500, 9447], [103500, 9947], [100000, 10947], [100500, 10447], [100500, 10947], [100000, 11447], [100000, 11947], [100500, 11447], [100500, 11947], [101000, 10447], [101000, 10947], [101500, 10447], [101500, 10947], [101000, 11447], [101000, 11947], [101500, 11447], [101500, 11947], [100000, 12447], [100000, 12947], [100500, 12447], [100500, 12947], [100000, 13447], [101000, 12447], [101000, 12947], [101500, 12447], [102000, 10447], [102000, 10947], [102500, 10447], [102500, 10947], [102000, 11447], [102000, 11947], [102500, 11447], [103000, 10447], [103000, 10947], [103500, 10447], [104000, 9947], [104000, 10447], [104500, 10947], [104500, 11447], [105000, 11947]], "('47.jpg', '48.jpg')": [[100000, 13947], [100500, 13447], [100500, 13947], [101500, 12947], [101000, 13447], [101000, 13947], [101500, 13447], [101500, 13947], [102500, 11947], [103500, 10947], [103000, 11447], [103000, 11947], [103500, 11447], [103500, 11947], [102000, 12447], [102000, 12947], [102500, 12447], [102500, 12947], [102000, 13447], [102000, 13947], [102500, 13447], [102500, 13947], [103000, 12447], [103000, 12947], [103500, 12447], [103500, 12947], [103000, 13447], [103000, 13947], [103500, 13447], [103500, 13947], [99500, 14447], [99500, 14947], [100000, 14447], [100000, 14947], [100500, 14447], [100500, 14947], [100000, 15447], [100500, 15447], [100500, 15947], [101000, 14447], [101000, 14947], [101500, 14447], [101500, 14947], [101000, 15447], [101500, 15447], [102000, 14447], [102000, 14947], [102500, 14447], [102500, 14947], [103000, 14447], [103500, 14447], [104000, 10947], [104000, 11447], [104000, 11947], [104500, 11947], [104000, 12447], [104000, 12947], [104500, 12447], [104500, 12947], [104000, 13447], [104000, 13947], [104500, 13447], [104500, 13947], [105000, 12447], [105000, 12947], [105500, 12947], [105000, 13447], [105500, 13447]], "('48.jpg',)": [[101000, 15947], [101500, 15947], [100500, 16447], [101000, 16447], [101000, 16947], [101500, 16447], [101500, 16947], [101500, 17447], [102000, 15447], [102000, 15947], [102500, 15447], [102500, 15947], [103000, 14947], [103500, 14947], [103000, 15447], [103000, 15947], [103500, 15447], [103500, 15947], [102000, 16447], [102000, 16947], [102500, 16447], [102500, 16947], [102000, 17447], [102000, 17947], [102500, 17447], [102500, 17947], [103000, 16447], [103000, 16947], [103500, 16447], [103500, 16947], [103000, 17447], [103000, 17947], [103500, 17447], [102500, 18447], [105000, 13947], [105500, 13947], [106000, 13447], [106500, 13947], [104000, 14447], [104000, 14947], [104500, 14447], [104500, 14947], [104000, 15447], [104000, 15947], [104500, 15447], [104500, 15947], [105000, 14447], [105000, 14947], [105500, 14447], [104000, 16447]], "('48.jpg', '49.jpg')": [[103500, 17947], [103000, 18447], [103000, 18947], [103500, 18447], [103500, 18947], [103500, 19447], [106000, 13947], [105500, 14947], [105000, 15447], [105000, 15947], [105500, 15447], [105500, 15947], [104000, 16947], [104500, 16447], [104500, 16947], [104000, 17447], [104000, 17947], [104500, 17447], [104500, 17947], [105000, 16447], [105000, 16947], [105500, 16447], [105500, 16947], [105000, 17447], [105000, 17947], [105500, 17447], [105500, 17947], [106000, 14447], [106000, 14947], [106500, 14447], [106500, 14947], [106000, 15447], [106000, 15947], [106500, 15447], [106500, 15947], [107000, 14447], [107000, 14947], [107500, 14947], [107000, 15447], [107000, 15947], [107500, 15447], [107500, 15947], [106000, 16447], [106000, 16947], [106500, 16447], [106500, 16947], [106000, 17447], [106000, 17947], [106500, 17447], [107000, 16447], [107000, 16947], [107500, 16447], [107500, 16947], [107000, 17447], [104000, 18447], [104000, 18947], [104500, 18447], [104500, 18947], [104000, 19447], [104000, 19947], [104500, 19447], [105000, 18447], [105000, 18947], [105500, 18447], [108000, 15947], [108000, 16447]], "('49.jpg',)": [[103000, 19447], [103000, 19947], [103500, 19947], [106500, 17947], [107000, 17947], [107500, 17447], [107500, 17947], [104500, 19947], [105500, 18947], [105000, 19447], [105000, 19947], [105500, 19447], [105500, 19947], [104000, 20447], [104500, 20447], [104500, 20947], [105000, 20447], [105000, 20947], [105500, 20447], [105500, 20947], [105500, 21447], [106000, 18447], [106000, 18947], [106500, 18447], [106500, 18947], [106000, 19447], [106000, 19947], [106500, 19447], [106500, 19947], [107000, 18447], [107000, 18947], [107500, 18447], [107000, 19447], [106000, 20447], [106000, 20947], [108000, 15447], [108500, 15447], [108500, 15947], [109000, 15947], [109500, 15947], [108000, 16947], [108500, 16447], [108500, 16947], [108000, 17447]], "('49.jpg', '50.jpg')": [[107500, 18947], [107000, 19947], [107500, 19447], [107500, 19947], [106500, 20447], [106500, 20947], [106000, 21447], [106500, 21447], [106500, 21947], [107000, 20447], [107000, 20947], [107500, 20447], [107500, 20947], [107000, 21447], [107000, 21947], [108000, 17947], [108500, 17447], [108500, 17947], [109000, 16447], [109000, 16947], [109500, 16447], [109500, 16947], [109000, 17447], [109000, 17947], [109500, 17447], [109500, 17947], [110000, 16447], [110000, 16947], [110000, 17447], [108000, 18447], [108000, 18947], [108500, 18447], [108500, 18947], [108000, 19447], [108000, 19947], [108500, 19447], [109000, 18447], [109000, 18947], [108000, 20447]], "('50.jpg',)": [[107500, 21447], [107500, 21947], [110500, 16947], [110000, 17947], [110500, 17447], [110500, 17947], [111000, 16947], [111000, 17447], [111000, 17947], [111500, 17447], [111500, 17947], [108500, 19947], [109500, 18447], [109500, 18947], [109000, 19447], [109000, 19947], [109500, 19447], [109500, 19947], [108000, 20947], [108500, 20447], [108500, 20947], [108000, 21447], [108000, 21947], [108500, 21447], [108500, 21947], [109000, 20447], [109000, 20947], [109500, 20447], [109500, 20947], [109000, 21447], [109000, 21947], [109500, 21447], [109500, 21947], [110000, 18447], [110000, 18947], [110500, 18447], [110500, 18947], [110000, 19447], [110000, 19947], [110500, 19447], [110500, 19947], [111000, 18447], [111000, 18947], [111500, 18447], [111500, 18947], [111000, 19447], [111000, 19947], [111500, 19447], [111500, 19947], [110000, 20447], [110000, 20947], [110500, 20447], [110500, 20947], [110000, 21447], [110000, 21947], [110500, 21447], [110500, 21947], [111000, 20447], [111000, 20947], [111500, 20447], [111500, 20947], [111000, 21447], [111000, 21947], [107000, 22447], [107500, 22447], [108000, 22447], [108000, 22947], [108500, 22447], [108500, 22947], [108500, 23447], [109000, 22447], [109000, 22947], [109500, 22447], [109500, 22947], [109000, 23447], [109500, 23447], [109500, 23947], [110000, 22447], [110000, 22947], [110500, 22447], [110500, 22947], [110000, 23447], [112000, 17947], [112500, 17947], [112000, 18447], [112000, 18947], [112500, 18447], [112500, 18947], [112000, 19447], [112000, 19947], [112500, 19447], [113000, 18447], [113000, 18947], [112000, 20447]]} \ No newline at end of file diff --git a/stitching/tiles_list.txt b/stitching/tiles_list.txt new file mode 100644 index 0000000..5923039 --- /dev/null +++ b/stitching/tiles_list.txt @@ -0,0 +1,188 @@ +http://127.0.0.1:5004/tiles/tile_20_4.tif +http://127.0.0.1:5004/tiles/tile_9_6.tif +http://127.0.0.1:5004/tiles/tile_29_4.tif +http://127.0.0.1:5004/tiles/tile_8_7.tif +http://127.0.0.1:5004/tiles/tile_19_2.tif +http://127.0.0.1:5004/tiles/tile_28_4.tif +http://127.0.0.1:5004/tiles/tile_21_4.tif +http://127.0.0.1:5004/tiles/tile_11_5.tif +http://127.0.0.1:5004/tiles/tile_33_11.tif +http://127.0.0.1:5004/tiles/tile_25_1.tif +http://127.0.0.1:5004/tiles/tile_32_11.tif +http://127.0.0.1:5004/tiles/tile_21_1.tif +http://127.0.0.1:5004/tiles/tile_49_12.tif +http://127.0.0.1:5004/tiles/tile_37_15.tif +http://127.0.0.1:5004/tiles/tile_37_14.tif +http://127.0.0.1:5004/tiles/tile_19_5.tif +http://127.0.0.1:5004/tiles/tile_22_4.tif +http://127.0.0.1:5004/tiles/tile_28_2.tif +http://127.0.0.1:5004/tiles/tile_28_1.tif +http://127.0.0.1:5004/tiles/tile_37_16.tif +http://127.0.0.1:5004/tiles/tile_44_13.tif +http://127.0.0.1:5004/tiles/tile_20_6.tif +http://127.0.0.1:5004/tiles/tile_53_13.tif +http://127.0.0.1:5004/tiles/tile_30_6.tif +http://127.0.0.1:5004/tiles/tile_32_8.tif +http://127.0.0.1:5004/tiles/tile_11_4.tif +http://127.0.0.1:5004/tiles/tile_25_2.tif +http://127.0.0.1:5004/tiles/tile_31_6.tif +http://127.0.0.1:5004/tiles/tile_9_5.tif +http://127.0.0.1:5004/tiles/tile_15_3.tif +http://127.0.0.1:5004/tiles/tile_54_10.tif +http://127.0.0.1:5004/tiles/tile_47_14.tif +http://127.0.0.1:5004/tiles/tile_41_15.tif +http://127.0.0.1:5004/tiles/tile_49_13.tif +http://127.0.0.1:5004/tiles/tile_35_13.tif +http://127.0.0.1:5004/tiles/tile_29_3.tif +http://127.0.0.1:5004/tiles/tile_14_4.tif +http://127.0.0.1:5004/tiles/tile_26_2.tif +http://127.0.0.1:5004/tiles/tile_15_4.tif +http://127.0.0.1:5004/tiles/tile_56_10.tif +http://127.0.0.1:5004/tiles/tile_46_14.tif +http://127.0.0.1:5004/tiles/tile_31_7.tif +http://127.0.0.1:5004/tiles/tile_29_2.tif +http://127.0.0.1:5004/tiles/tile_31_11.tif +http://127.0.0.1:5004/tiles/tile_20_3.tif +http://127.0.0.1:5004/tiles/tile_44_15.tif +http://127.0.0.1:5004/tiles/tile_2_9.tif +http://127.0.0.1:5004/tiles/tile_29_1.tif +http://127.0.0.1:5004/tiles/tile_36_16.tif +http://127.0.0.1:5004/tiles/tile_21_2.tif +http://127.0.0.1:5004/tiles/tile_30_7.tif +http://127.0.0.1:5004/tiles/tile_10_6.tif +http://127.0.0.1:5004/tiles/tile_43_14.tif +http://127.0.0.1:5004/tiles/tile_53_12.tif +http://127.0.0.1:5004/tiles/tile_19_4.tif +http://127.0.0.1:5004/tiles/tile_9_4.tif +http://127.0.0.1:5004/tiles/tile_7_8.tif +http://127.0.0.1:5004/tiles/tile_0_9.tif +http://127.0.0.1:5004/tiles/tile_26_1.tif +http://127.0.0.1:5004/tiles/tile_40_15.tif +http://127.0.0.1:5004/tiles/tile_5_9.tif +http://127.0.0.1:5004/tiles/tile_8_8.tif +http://127.0.0.1:5004/tiles/tile_27_1.tif +http://127.0.0.1:5004/tiles/tile_34_15.tif +http://127.0.0.1:5004/tiles/tile_33_13.tif +http://127.0.0.1:5004/tiles/tile_41_14.tif +http://127.0.0.1:5004/tiles/tile_56_9.tif +http://127.0.0.1:5004/tiles/tile_33_12.tif +http://127.0.0.1:5004/tiles/tile_26_0.tif +http://127.0.0.1:5004/tiles/tile_33_9.tif +http://127.0.0.1:5004/tiles/tile_1_8.tif +http://127.0.0.1:5004/tiles/tile_54_13.tif +http://127.0.0.1:5004/tiles/tile_40_16.tif +http://127.0.0.1:5004/tiles/tile_52_12.tif +http://127.0.0.1:5004/tiles/tile_24_2.tif +http://127.0.0.1:5004/tiles/tile_39_16.tif +http://127.0.0.1:5004/tiles/tile_52_13.tif +http://127.0.0.1:5004/tiles/tile_16_4.tif +http://127.0.0.1:5004/tiles/tile_36_14.tif +http://127.0.0.1:5004/tiles/tile_53_11.tif +http://127.0.0.1:5004/tiles/tile_2_8.tif +http://127.0.0.1:5004/tiles/tile_3_9.tif +http://127.0.0.1:5004/tiles/tile_35_15.tif +http://127.0.0.1:5004/tiles/tile_9_7.tif +http://127.0.0.1:5004/tiles/tile_45_15.tif +http://127.0.0.1:5004/tiles/tile_10_4.tif +http://127.0.0.1:5004/tiles/tile_21_6.tif +http://127.0.0.1:5004/tiles/tile_5_8.tif +http://127.0.0.1:5004/tiles/tile_31_10.tif +http://127.0.0.1:5004/tiles/tile_49_14.tif +http://127.0.0.1:5004/tiles/tile_46_15.tif +http://127.0.0.1:5004/tiles/tile_3_8.tif +http://127.0.0.1:5004/tiles/tile_34_12.tif +http://127.0.0.1:5004/tiles/tile_38_15.tif +http://127.0.0.1:5004/tiles/tile_17_4.tif +http://127.0.0.1:5004/tiles/tile_50_12.tif +http://127.0.0.1:5004/tiles/tile_51_12.tif +http://127.0.0.1:5004/tiles/tile_4_8.tif +http://127.0.0.1:5004/tiles/tile_7_7.tif +http://127.0.0.1:5004/tiles/tile_7_9.tif +http://127.0.0.1:5004/tiles/tile_29_6.tif +http://127.0.0.1:5004/tiles/tile_51_13.tif +http://127.0.0.1:5004/tiles/tile_22_1.tif +http://127.0.0.1:5004/tiles/tile_14_3.tif +http://127.0.0.1:5004/tiles/tile_43_13.tif +http://127.0.0.1:5004/tiles/tile_21_5.tif +http://127.0.0.1:5004/tiles/tile_54_12.tif +http://127.0.0.1:5004/tiles/tile_4_9.tif +http://127.0.0.1:5004/tiles/tile_18_3.tif +http://127.0.0.1:5004/tiles/tile_17_3.tif +http://127.0.0.1:5004/tiles/tile_38_16.tif +http://127.0.0.1:5004/tiles/tile_42_15.tif +http://127.0.0.1:5004/tiles/tile_52_11.tif +http://127.0.0.1:5004/tiles/tile_54_11.tif +http://127.0.0.1:5004/tiles/tile_22_2.tif +http://127.0.0.1:5004/tiles/tile_13_4.tif +http://127.0.0.1:5004/tiles/tile_39_15.tif +http://127.0.0.1:5004/tiles/tile_55_9.tif +http://127.0.0.1:5004/tiles/tile_12_5.tif +http://127.0.0.1:5004/tiles/tile_42_14.tif +http://127.0.0.1:5004/tiles/tile_35_14.tif +http://127.0.0.1:5004/tiles/tile_31_9.tif +http://127.0.0.1:5004/tiles/tile_40_14.tif +http://127.0.0.1:5004/tiles/tile_23_3.tif +http://127.0.0.1:5004/tiles/tile_31_8.tif +http://127.0.0.1:5004/tiles/tile_33_14.tif +http://127.0.0.1:5004/tiles/tile_6_9.tif +http://127.0.0.1:5004/tiles/tile_35_16.tif +http://127.0.0.1:5004/tiles/tile_28_0.tif +http://127.0.0.1:5004/tiles/tile_49_15.tif +http://127.0.0.1:5004/tiles/tile_13_3.tif +http://127.0.0.1:5004/tiles/tile_19_6.tif +http://127.0.0.1:5004/tiles/tile_10_5.tif +http://127.0.0.1:5004/tiles/tile_48_13.tif +http://127.0.0.1:5004/tiles/tile_48_15.tif +http://127.0.0.1:5004/tiles/tile_45_14.tif +http://127.0.0.1:5004/tiles/tile_17_2.tif +http://127.0.0.1:5004/tiles/tile_19_3.tif +http://127.0.0.1:5004/tiles/tile_47_15.tif +http://127.0.0.1:5004/tiles/tile_32_9.tif +http://127.0.0.1:5004/tiles/tile_36_13.tif +http://127.0.0.1:5004/tiles/tile_23_1.tif +http://127.0.0.1:5004/tiles/tile_23_2.tif +http://127.0.0.1:5004/tiles/tile_23_4.tif +http://127.0.0.1:5004/tiles/tile_27_0.tif +http://127.0.0.1:5004/tiles/tile_6_8.tif +http://127.0.0.1:5004/tiles/tile_55_12.tif +http://127.0.0.1:5004/tiles/tile_18_4.tif +http://127.0.0.1:5004/tiles/tile_45_13.tif +http://127.0.0.1:5004/tiles/tile_30_4.tif +http://127.0.0.1:5004/tiles/tile_32_7.tif +http://127.0.0.1:5004/tiles/tile_30_3.tif +http://127.0.0.1:5004/tiles/tile_0_8.tif +http://127.0.0.1:5004/tiles/tile_9_8.tif +http://127.0.0.1:5004/tiles/tile_32_12.tif +http://127.0.0.1:5004/tiles/tile_30_5.tif +http://127.0.0.1:5004/tiles/tile_36_15.tif +http://127.0.0.1:5004/tiles/tile_32_10.tif +http://127.0.0.1:5004/tiles/tile_8_6.tif +http://127.0.0.1:5004/tiles/tile_34_11.tif +http://127.0.0.1:5004/tiles/tile_12_3.tif +http://127.0.0.1:5004/tiles/tile_21_3.tif +http://127.0.0.1:5004/tiles/tile_55_13.tif +http://127.0.0.1:5004/tiles/tile_29_5.tif +http://127.0.0.1:5004/tiles/tile_42_13.tif +http://127.0.0.1:5004/tiles/tile_12_4.tif +http://127.0.0.1:5004/tiles/tile_18_2.tif +http://127.0.0.1:5004/tiles/tile_20_1.tif +http://127.0.0.1:5004/tiles/tile_55_11.tif +http://127.0.0.1:5004/tiles/tile_34_14.tif +http://127.0.0.1:5004/tiles/tile_19_1.tif +http://127.0.0.1:5004/tiles/tile_50_13.tif +http://127.0.0.1:5004/tiles/tile_20_2.tif +http://127.0.0.1:5004/tiles/tile_20_5.tif +http://127.0.0.1:5004/tiles/tile_43_15.tif +http://127.0.0.1:5004/tiles/tile_33_10.tif +http://127.0.0.1:5004/tiles/tile_24_3.tif +http://127.0.0.1:5004/tiles/tile_25_3.tif +http://127.0.0.1:5004/tiles/tile_28_3.tif +http://127.0.0.1:5004/tiles/tile_16_3.tif +http://127.0.0.1:5004/tiles/tile_1_9.tif +http://127.0.0.1:5004/tiles/tile_34_13.tif +http://127.0.0.1:5004/tiles/tile_30_8.tif +http://127.0.0.1:5004/tiles/tile_22_3.tif +http://127.0.0.1:5004/tiles/tile_48_14.tif +http://127.0.0.1:5004/tiles/tile_44_14.tif +http://127.0.0.1:5004/tiles/tile_22_5.tif +http://127.0.0.1:5004/tiles/tile_55_10.tif -- GitLab