diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.1.png b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.1.png deleted file mode 100644 index 21b0d0b017d140ad17456c384e583e7cf308297a..0000000000000000000000000000000000000000 --- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:34a5f9e6daad51f0e614fe07e4755422c8420fda029e7ad7302de31a92535982 -size 1340160 diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png deleted file mode 100644 index c2d86e289fa134625e4e008e8b5765201acd9478..0000000000000000000000000000000000000000 --- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:870c0d619c315c9843cd9a5aedc44a34471d5fecbc9306a492efbb47c19530b9 -size 1340628 diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png.aux.xml b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png.aux.xml deleted file mode 100644 index 761fbb2f643719fcae011bda40747b745e89f458..0000000000000000000000000000000000000000 --- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png.aux.xml +++ /dev/null @@ -1,27 +0,0 @@ -<PAMDataset> - <SRS>PROJCS["WGS 84 / UTM zone 32N", - GEOGCS["WGS 84", - DATUM["WGS_1984", - SPHEROID["WGS 84",6378137,298.257223563, - AUTHORITY["EPSG","7030"]], - AUTHORITY["EPSG","6326"]], - PRIMEM["Greenwich",0], - UNIT["degree",0.0174532925199433], - AUTHORITY["EPSG","4326"]], - PROJECTION["Transverse_Mercator"], - PARAMETER["latitude_of_origin",0], - PARAMETER["central_meridian",9], - PARAMETER["scale_factor",0.9996], - PARAMETER["false_easting",500000], - PARAMETER["false_northing",0], - UNIT["metre",1, - AUTHORITY["EPSG","9001"]], - AUTHORITY["EPSG","32632"]]</SRS> - <GeoTransform> 4.3913640000000002e+05, 5.9999999999999998e-01, 0.0000000000000000e+00, 5.2737065999999996e+06, 0.0000000000000000e+00, -5.9999999999999998e-01</GeoTransform> - <Metadata domain="IMAGE_STRUCTURE"> - <MDI key="INTERLEAVE">PIXEL</MDI> - </Metadata> - <Metadata> - <MDI key="AREA_OR_POINT">Area</MDI> - </Metadata> -</PAMDataset> diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.1.png b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.1.png deleted file mode 100644 index 3bb75ceacc22bea2c6e5b72383c4b972febd74fa..0000000000000000000000000000000000000000 --- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b68d89bfa22c07d91a304ff20c04aa4c242197a66cf24b4f7957cc863c1fd2f7 -size 15199 diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png deleted file mode 100644 index bb6e778dc5e12c0296d21e697596fa5ea9eb8c0d..0000000000000000000000000000000000000000 --- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:079e3734a9c954f76d4b58596b0ffe9b0bbecb92958774bb7b6c433cb9b7a36d -size 15220 diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png.aux.xml b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png.aux.xml deleted file mode 100644 index 21ce935f9d0862129f77af6bd48d60cba2eabf67..0000000000000000000000000000000000000000 --- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png.aux.xml +++ /dev/null @@ -1,24 +0,0 @@ -<PAMDataset> - <SRS>PROJCS["WGS 84 / UTM zone 32N", - GEOGCS["WGS 84", - DATUM["WGS_1984", - SPHEROID["WGS 84",6378137,298.257223563, - AUTHORITY["EPSG","7030"]], - AUTHORITY["EPSG","6326"]], - PRIMEM["Greenwich",0], - UNIT["degree",0.0174532925199433], - AUTHORITY["EPSG","4326"]], - PROJECTION["Transverse_Mercator"], - PARAMETER["latitude_of_origin",0], - PARAMETER["central_meridian",9], - PARAMETER["scale_factor",0.9996], - PARAMETER["false_easting",500000], - PARAMETER["false_northing",0], - UNIT["metre",1, - AUTHORITY["EPSG","9001"]], - AUTHORITY["EPSG","32632"]]</SRS> - <GeoTransform> 4.3913640000000002e+05, 5.9999999999999998e-01, 0.0000000000000000e+00, 5.2737065999999996e+06, 0.0000000000000000e+00, -5.9999999999999998e-01</GeoTransform> - <Metadata> - <MDI key="AREA_OR_POINT">Area</MDI> - </Metadata> -</PAMDataset> diff --git a/Data/Baseline/Examples/FeatureExtraction/SeamCarvingExampleOutput.png b/Data/Baseline/Examples/FeatureExtraction/SeamCarvingExampleOutput.png deleted file mode 100644 index 426eb10b3d9e1e644289252ae467dbd16d37a9ee..0000000000000000000000000000000000000000 --- a/Data/Baseline/Examples/FeatureExtraction/SeamCarvingExampleOutput.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4015aa8e7dcf8993def02252301d5f91eb73b970fecd277f799194551bc99ce0 -size 35299 diff --git a/Data/Baseline/Examples/FeatureExtraction/SeamCarvingOtherExampleOutput.png b/Data/Baseline/Examples/FeatureExtraction/SeamCarvingOtherExampleOutput.png deleted file mode 100644 index eed540571c0e9fe756b6835a6a8782e25d6da40e..0000000000000000000000000000000000000000 --- a/Data/Baseline/Examples/FeatureExtraction/SeamCarvingOtherExampleOutput.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:da8f331a2806a0c06405abcd7806ebdb668e13a74457151313f13a5ed7c57a32 -size 45234 diff --git a/Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png b/Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png deleted file mode 100644 index d4307ec6f7341c32901e56f56b41927d18eedefb..0000000000000000000000000000000000000000 --- a/Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7a01fe4d41a060407d2613ba9595fde7321aa77c6e44f6552bb83d77d0dcef34 -size 1334929 diff --git a/Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png.aux.xml b/Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png.aux.xml deleted file mode 100644 index 761fbb2f643719fcae011bda40747b745e89f458..0000000000000000000000000000000000000000 --- a/Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png.aux.xml +++ /dev/null @@ -1,27 +0,0 @@ -<PAMDataset> - <SRS>PROJCS["WGS 84 / UTM zone 32N", - GEOGCS["WGS 84", - DATUM["WGS_1984", - SPHEROID["WGS 84",6378137,298.257223563, - AUTHORITY["EPSG","7030"]], - AUTHORITY["EPSG","6326"]], - PRIMEM["Greenwich",0], - UNIT["degree",0.0174532925199433], - AUTHORITY["EPSG","4326"]], - PROJECTION["Transverse_Mercator"], - PARAMETER["latitude_of_origin",0], - PARAMETER["central_meridian",9], - PARAMETER["scale_factor",0.9996], - PARAMETER["false_easting",500000], - PARAMETER["false_northing",0], - UNIT["metre",1, - AUTHORITY["EPSG","9001"]], - AUTHORITY["EPSG","32632"]]</SRS> - <GeoTransform> 4.3913640000000002e+05, 5.9999999999999998e-01, 0.0000000000000000e+00, 5.2737065999999996e+06, 0.0000000000000000e+00, -5.9999999999999998e-01</GeoTransform> - <Metadata domain="IMAGE_STRUCTURE"> - <MDI key="INTERLEAVE">PIXEL</MDI> - </Metadata> - <Metadata> - <MDI key="AREA_OR_POINT">Area</MDI> - </Metadata> -</PAMDataset> diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.dbf deleted file mode 100644 index 872a668071680090e04ee4154d26d68b18630e90..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f9d6c2cacc6b2947ee21de06212d8456f1ad1dd817eb08f0cca74a461982e6fc -size 13050 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shp deleted file mode 100644 index 0ae7cfbd6a7bb8fd9ede0766fb817fafdaef3a1b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:03dc018b3fda6afc76870dbb82d43cf954b483d451a44bc9609547a646cd5f69 -size 17244 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shx deleted file mode 100644 index d7d3c02a05f660729a7ea7f614bb249b23c8dfdb..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9ddb05befb0e32de1d63c65853967329a2e279c8b47ead80a68e659a11f2d692 -size 1516 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.dbf deleted file mode 100644 index 872a668071680090e04ee4154d26d68b18630e90..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f9d6c2cacc6b2947ee21de06212d8456f1ad1dd817eb08f0cca74a461982e6fc -size 13050 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.prj b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.prj deleted file mode 100644 index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp deleted file mode 100644 index d989282e41d5a15672cd37b1ec88f1cf38868494..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a761c4931a9325ce306da5c82f1be3c709ab0f888aeab4a412932872c3e8d79d -size 23692 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shx deleted file mode 100644 index de9ebdc4ff20d670b2fcea817a3e9ffc5835fb36..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1f99f80a26a8df140d6cdb44d9ed2f1a32a2477927138eca8c5aec56b9ab66e9 -size 1516 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.dbf deleted file mode 100644 index 0a7f2145c124cc5de965a72bb2b58d5209ddb9ca..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c11d7da214ea38b7c3c0083a92ee13467c13dca735075c01d8ddb73124bc4437 -size 1881 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.prj b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.prj deleted file mode 100644 index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shp deleted file mode 100644 index f4493a2480785e067a59ea8563bff53f69594f84..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f6b7569316bbb6954532949243743a6a02bf59b8e6f15e8768ab74cd49d18ff9 -size 2948 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shx deleted file mode 100644 index 902c5a761865f19597c28d48f90b02dccbb32fcf..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bd87422448e1242a1b30eb69ae88d4a36a96bfc2d00764a8ec3c35e02063a1c7 -size 292 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.dbf deleted file mode 100644 index 0a7f2145c124cc5de965a72bb2b58d5209ddb9ca..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c11d7da214ea38b7c3c0083a92ee13467c13dca735075c01d8ddb73124bc4437 -size 1881 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.prj b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.prj deleted file mode 100644 index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp deleted file mode 100644 index e549ed0a01f161cd1bb1e48d37d67a1bb984818c..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c1a477f4f647ebb0feff76da6fe3b92adcac25972372a94e5fa9b5db4b3be02d -size 4084 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shx deleted file mode 100644 index 911a74cdb5a4c9e5647301206e325a1f1f2192cf..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:956ffd6cbb30ed2bc8c585e8c938477943d920f7309981a9864bf8f98ae3f992 -size 292 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.dbf deleted file mode 100644 index 9254d4d3c5008b4dff3d1cd4653a1c8e3d6820c2..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:970b377a49bf3308da27de62de02dc2000e666a4cc49a220023e212cc5082896 -size 713 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.prj b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.prj deleted file mode 100644 index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shp deleted file mode 100644 index b8d4601a93154c3eb59f2a18c30d1e4c224a4af5..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6e9dbd487f0d15fc07a187b9e38649eaef4829ff8a64ffbbe0ebf59c0ced2848 -size 1172 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shx deleted file mode 100644 index b7889485ca6f854bec6f1120cc7157177b7d3062..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eade214003f288170371c708073838963df379c9d55bfb68b77c488c94d10b7e -size 164 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.dbf deleted file mode 100644 index 9254d4d3c5008b4dff3d1cd4653a1c8e3d6820c2..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:970b377a49bf3308da27de62de02dc2000e666a4cc49a220023e212cc5082896 -size 713 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.prj b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.prj deleted file mode 100644 index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp deleted file mode 100644 index b3b4cc6c6425eb929a2a6fe0b4c3611afb8e04ca..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3b83881bd76b1347059066ae1057d27cf0497cb92ac6cb16e07ec3d5ee29f5bd -size 1172 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shx deleted file mode 100644 index 1b5b61f68e07a0b7e530125c3df3fe5484a228cd..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:78741d544b7ebd7211d6f2655d31b801443f6a60a75ec18a1dfe94e80f51852c -size 164 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.dbf deleted file mode 100644 index 1227f9a239e9e54e85d947eb4eee51ed810d3fe4..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5e98e653523faa8868276d04332dc8a207b8e99bb2e86814c2ecf3e71f64184d -size 3097 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.prj b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.prj deleted file mode 100644 index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shp b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shp deleted file mode 100644 index f4493a2480785e067a59ea8563bff53f69594f84..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f6b7569316bbb6954532949243743a6a02bf59b8e6f15e8768ab74cd49d18ff9 -size 2948 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shx b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shx deleted file mode 100644 index 902c5a761865f19597c28d48f90b02dccbb32fcf..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bd87422448e1242a1b30eb69ae88d4a36a96bfc2d00764a8ec3c35e02063a1c7 -size 292 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.dbf deleted file mode 100644 index 1227f9a239e9e54e85d947eb4eee51ed810d3fe4..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5e98e653523faa8868276d04332dc8a207b8e99bb2e86814c2ecf3e71f64184d -size 3097 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.prj b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.prj deleted file mode 100644 index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shp b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shp deleted file mode 100644 index e549ed0a01f161cd1bb1e48d37d67a1bb984818c..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c1a477f4f647ebb0feff76da6fe3b92adcac25972372a94e5fa9b5db4b3be02d -size 4084 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shx b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shx deleted file mode 100644 index 911a74cdb5a4c9e5647301206e325a1f1f2192cf..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:956ffd6cbb30ed2bc8c585e8c938477943d920f7309981a9864bf8f98ae3f992 -size 292 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.dbf deleted file mode 100644 index 9ba00259ac7d3effd149c9bde7c15def5fb69d93..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ac3987c4408a1c86528898189249cc26502b02b536a0e64a5106f0d230b3a8b -size 33 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.prj b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.prj deleted file mode 100644 index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shp b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shp deleted file mode 100644 index f970b67678a899f87859859d3bcb35a9b4c6c525..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:926401bfc2997f7c001f827859a1281ceb6f688660720f605f14f3e54207568e -size 100 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shx b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shx deleted file mode 100644 index f970b67678a899f87859859d3bcb35a9b4c6c525..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:926401bfc2997f7c001f827859a1281ceb6f688660720f605f14f3e54207568e -size 100 diff --git a/Data/Baseline/OTB/Files/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt b/Data/Baseline/OTB/Files/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt deleted file mode 100644 index 4a22e8ff04fcc5b9c47c42cd28b5191c0977cbc6..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt +++ /dev/null @@ -1,18048 +0,0 @@ ---- -Label : 1 -Position : [244.61, 1.64508] -Measurements : [1399.95, 310113, 0.266257, -0.476478] ---- -Label : 1 -Position : [241.128, 6.12] -Measurements : [1466.45, 487704, 0.232991, -1.2636] ---- -Label : 1 -Position : [145.371, 6.6365] -Measurements : [1208.23, 386771, 0.401874, -0.981297] ---- -Label : 1 -Position : [633.408, 8.68] -Measurements : [1465.12, 382959, 0.372033, -1.244] ---- -Label : 1 -Position : [250.856, 9.192] -Measurements : [993.262, 136479, 0.278658, -0.930991] ---- -Label : 1 -Position : [255.214, 10.1541] -Measurements : [1078.76, 119096, 0.313496, -0.642462] ---- -Label : 1 -Position : [390.951, 10.5048] -Measurements : [1572.18, 315723, -0.278482, -0.414006] ---- -Label : 1 -Position : [243.582, 10.5278] -Measurements : [1045.65, 500117, 1.10216, -0.141367] ---- -Label : 1 -Position : [732.736, 10.728] -Measurements : [1762.88, 822066, -0.103484, -1.57081] ---- -Label : 1 -Position : [137.973, 11.0771] -Measurements : [1256.87, 159712, 0.616424, 0.726392] ---- -Label : 1 -Position : [141.8, 11.24] -Measurements : [1091.2, 260850, 0.559676, -0.294604] ---- -Label : 1 -Position : [731.097, 11.4464] -Measurements : [1592.97, 893144, 0.148556, -1.60652] ---- -Label : 1 -Position : [633.484, 11.7069] -Measurements : [1417.94, 406889, 0.473387, -1.23179] ---- -Label : 1 -Position : [631.412, 12.0436] -Measurements : [1338.02, 330638, 0.756367, -0.51725] ---- -Label : 1 -Position : [388.688, 12.264] -Measurements : [1610.63, 268830, -0.15682, -0.3936] ---- -Label : 1 -Position : [255.69, 13.11] -Measurements : [1106.66, 105507, 0.132854, -0.843231] ---- -Label : 1 -Position : [632.879, 13.4648] -Measurements : [1188.96, 285530, 1.08638, 0.33468] ---- -Label : 1 -Position : [636.692, 13.4681] -Measurements : [1033.69, 268840, 1.51544, 1.83386] ---- -Label : 1 -Position : [736.543, 13.4748] -Measurements : [1164.8, 883154, 1.1134, -0.431529] ---- -Label : 1 -Position : [390.222, 13.9819] -Measurements : [1660.22, 229802, 0.0782276, -0.814122] ---- -Label : 1 -Position : [632.384, 14.312] -Measurements : [1012.4, 177711, 0.772086, 0.107333] ---- -Label : 1 -Position : [21.4766, 14.8077] -Measurements : [795.261, 357152, 1.18748, 0.459446] ---- -Label : 1 -Position : [392.641, 16.0582] -Measurements : [1638.22, 226522, 0.14735, -0.93468] ---- -Label : 1 -Position : [249.832, 17.896] -Measurements : [1307.62, 466036, 1.02525, 0.247706] ---- -Label : 1 -Position : [392.272, 17.896] -Measurements : [1615.52, 211561, 0.107659, -0.903024] ---- -Label : 1 -Position : [463.44, 17.896] -Measurements : [1208.43, 545199, 0.88799, -0.0947112] ---- -Label : 1 -Position : [24.0958, 18.4597] -Measurements : [1141.29, 306141, 1.15167, 1.3369] ---- -Label : 1 -Position : [245.902, 18.73] -Measurements : [1440.71, 720124, 0.354696, -1.28161] ---- -Label : 1 -Position : [22.504, 19.432] -Measurements : [1278.26, 415437, 0.803853, -0.10986] ---- -Label : 1 -Position : [514.821, 20.527] -Measurements : [1898.42, 453807, 0.1057, -1.21854] ---- -Label : 1 -Position : [463.682, 20.8592] -Measurements : [1761.42, 608797, 0.142866, -1.24805] ---- -Label : 1 -Position : [516.176, 20.968] -Measurements : [1914.58, 572565, -0.0181663, -1.35972] ---- -Label : 1 -Position : [153.662, 21.1989] -Measurements : [1506.15, 580964, -0.152713, -1.35291] ---- -Label : 1 -Position : [388.377, 21.2292] -Measurements : [1267.5, 207452, 0.360062, -0.744269] ---- -Label : 1 -Position : [250.729, 22.2607] -Measurements : [1073.09, 473769, 1.24396, 0.868018] ---- -Label : 1 -Position : [516.187, 22.3915] -Measurements : [2146.87, 480967, -0.342337, -1.23822] ---- -Label : 1 -Position : [462.482, 22.4791] -Measurements : [2129.57, 517522, -0.267177, -1.15811] ---- -Label : 1 -Position : [506.96, 22.504] -Measurements : [1908.17, 249995, 0.161354, -0.726865] ---- -Label : 1 -Position : [398.494, 22.8755] -Measurements : [1657.21, 181656, 0.00827773, -0.871096] ---- -Label : 1 -Position : [737.143, 23.0831] -Measurements : [783.959, 227622, 1.37876, 0.616613] ---- -Label : 1 -Position : [465.466, 23.1043] -Measurements : [2152.34, 547081, -0.158895, -1.23519] ---- -Label : 1 -Position : [509.553, 23.3008] -Measurements : [1965.67, 280987, 0.0783567, -1.00579] ---- -Label : 1 -Position : [732.224, 24.04] -Measurements : [1025.3, 238485, 0.672238, -0.889804] ---- -Label : 1 -Position : [781.738, 24.5256] -Measurements : [464.236, 23392.7, 1.45716, 0.94265] ---- -Label : 1 -Position : [501.188, 24.5512] -Measurements : [1608.93, 167753, 0.226801, -0.447532] ---- -Label : 1 -Position : [468.56, 24.552] -Measurements : [2138.24, 554036, -0.226939, -0.996085] ---- -Label : 1 -Position : [151.016, 25.064] -Measurements : [1748.73, 214056, 0.0103525, -0.888018] ---- -Label : 1 -Position : [399.44, 25.064] -Measurements : [1504.12, 316982, -0.312925, -0.924175] ---- -Label : 1 -Position : [26.6549, 26.0814] -Measurements : [1091.79, 305305, 0.576538, -0.74217] ---- -Label : 1 -Position : [28.136, 26.6] -Measurements : [1120.4, 265311, 0.662549, -0.538509] ---- -Label : 1 -Position : [511.833, 26.6849] -Measurements : [1906.72, 445497, -0.27535, -1.01516] ---- -Label : 1 -Position : [499.28, 27.624] -Measurements : [1507.84, 123543, -0.351548, -0.862913] ---- -Label : 1 -Position : [398.49, 27.822] -Measurements : [1379.79, 415076, -0.0775959, -1.37466] ---- -Label : 1 -Position : [736.674, 28.041] -Measurements : [684.173, 210658, 1.89014, 2.60705] ---- -Label : 1 -Position : [785.231, 28.2292] -Measurements : [779.812, 223683, 1.6827, 2.81675] ---- -Label : 1 -Position : [785.984, 29.16] -Measurements : [790.413, 215790, 1.75073, 3.0408] ---- -Label : 1 -Position : [503.064, 29.2999] -Measurements : [1488.67, 276999, -0.132504, -0.813677] ---- -Label : 1 -Position : [467.211, 29.4727] -Measurements : [2357.58, 460440, -0.774753, -0.199534] ---- -Label : 1 -Position : [154.914, 29.6333] -Measurements : [1296.44, 486853, 0.554433, -0.211259] ---- -Label : 1 -Position : [33.1288, 31.4463] -Measurements : [709.888, 109907, 0.782466, 0.0455805] ---- -Label : 1 -Position : [474.192, 32.744] -Measurements : [2346.91, 320418, -1.04922, 0.608591] ---- -Label : 1 -Position : [474.373, 35.4507] -Measurements : [2561.21, 202660, -0.843659, 0.465157] ---- -Label : 1 -Position : [469.383, 36.2274] -Measurements : [2513.07, 331345, -1.47677, 2.25475] ---- -Label : 1 -Position : [477.776, 38.888] -Measurements : [2501.1, 299662, -0.407297, -0.786396] ---- -Label : 1 -Position : [476.508, 40.2221] -Measurements : [2547.82, 277359, -0.337944, -0.875621] ---- -Label : 1 -Position : [481.204, 41.0933] -Measurements : [2436.21, 246087, -0.848396, -0.195383] ---- -Label : 1 -Position : [146.811, 42.9006] -Measurements : [651.591, 127745, 1.1435, 0.595122] ---- -Label : 1 -Position : [480.125, 44.6418] -Measurements : [2439.53, 235119, -0.839143, -0.361184] ---- -Label : 1 -Position : [150.438, 44.8023] -Measurements : [786.291, 238061, 0.976615, 0.295175] ---- -Label : 1 -Position : [639.04, 45.032] -Measurements : [1011.28, 306948, 0.537234, -0.97489] ---- -Label : 1 -Position : [401.488, 45.544] -Measurements : [1072.85, 211038, 0.179089, -1.22378] ---- -Label : 1 -Position : [396.788, 46.1598] -Measurements : [938.122, 220132, 0.588968, -0.970861] ---- -Label : 1 -Position : [482.896, 46.568] -Measurements : [2462.39, 198571, -0.789782, -0.439342] ---- -Label : 1 -Position : [478.701, 46.9408] -Measurements : [2528.31, 225390, -0.654415, -0.417266] ---- -Label : 1 -Position : [30.696, 47.08] -Measurements : [1279.16, 397520, 0.40258, -1.13234] ---- -Label : 1 -Position : [148.456, 47.08] -Measurements : [1060.5, 232907, 0.789113, 0.21222] ---- -Label : 1 -Position : [636.712, 47.2538] -Measurements : [993.879, 330254, 0.537125, -1.12924] ---- -Label : 1 -Position : [399.698, 47.6833] -Measurements : [1003.16, 238939, 0.366465, -1.29767] ---- -Label : 1 -Position : [32.0718, 48.8004] -Measurements : [1227.68, 366444, 0.396699, -1.1008] ---- -Label : 1 -Position : [483.182, 48.8229] -Measurements : [2470.79, 165384, -0.700125, -0.47963] ---- -Label : 1 -Position : [146.13, 48.9529] -Measurements : [1140.38, 163198, 0.522848, -0.842353] ---- -Label : 1 -Position : [280.813, 49.2236] -Measurements : [942.677, 241572, 0.526166, -0.794988] ---- -Label : 1 -Position : [639.248, 49.3982] -Measurements : [833.569, 350365, 1.02295, -0.452583] ---- -Label : 1 -Position : [32.9101, 51.4564] -Measurements : [914.108, 389934, 1.14525, 0.0384974] ---- -Label : 1 -Position : [481.821, 51.4818] -Measurements : [2514.74, 201478, -0.496563, -0.814439] ---- -Label : 1 -Position : [281.576, 53.224] -Measurements : [982.418, 185655, 0.818729, -0.322751] ---- -Label : 1 -Position : [150.504, 53.736] -Measurements : [1613.92, 300809, -0.104234, -0.926321] ---- -Label : 1 -Position : [485.968, 53.736] -Measurements : [2291.15, 219738, -0.0303204, -0.791027] ---- -Label : 1 -Position : [408.469, 54.7806] -Measurements : [1503.82, 414269, 0.102071, -0.983995] ---- -Label : 1 -Position : [485.552, 55.1294] -Measurements : [2260.99, 198482, -0.173856, -0.770322] ---- -Label : 1 -Position : [512.892, 55.3723] -Measurements : [1247.32, 321649, -0.307241, -1.43016] ---- -Label : 1 -Position : [406.096, 55.784] -Measurements : [1487.85, 324277, 0.0955268, -0.564059] ---- -Label : 1 -Position : [402.194, 56.0926] -Measurements : [1173.87, 227091, -0.0469741, -1.26695] ---- -Label : 1 -Position : [487.202, 56.3229] -Measurements : [2209.63, 203604, -0.0750906, -0.907866] ---- -Label : 1 -Position : [146.981, 56.3887] -Measurements : [1464.68, 161968, -0.540099, -0.799225] ---- -Label : 1 -Position : [147.923, 56.7645] -Measurements : [1574.03, 169744, -0.52637, -0.269704] ---- -Label : 1 -Position : [646.398, 57.769] -Measurements : [1019.1, 248626, 0.220451, -0.359875] ---- -Label : 1 -Position : [514.128, 57.832] -Measurements : [1207.79, 357121, -0.139803, -1.63507] ---- -Label : 1 -Position : [286.376, 57.8966] -Measurements : [762.626, 160955, 1.02396, -0.0826948] ---- -Label : 1 -Position : [149.827, 57.9983] -Measurements : [1734.81, 223766, -0.145279, -0.214388] ---- -Label : 1 -Position : [512.777, 58.3428] -Measurements : [1407.02, 230704, -0.777545, -0.589553] ---- -Label : 1 -Position : [410.743, 59.3163] -Measurements : [1466.21, 370036, 0.00546922, -1.14312] ---- -Label : 1 -Position : [489.552, 59.88] -Measurements : [2206.16, 199262, 0.139083, -0.632729] ---- -Label : 1 -Position : [150.504, 60.392] -Measurements : [1564.09, 285351, 0.00264356, -0.629832] ---- -Label : 1 -Position : [641.343, 61.6995] -Measurements : [1123.44, 401059, 0.127394, -1.27937] ---- -Label : 1 -Position : [524.025, 62.343] -Measurements : [678.39, 220280, 1.76188, 2.84388] ---- -Label : 1 -Position : [642.624, 62.44] -Measurements : [1281.61, 341332, -0.199448, -1.04494] ---- -Label : 1 -Position : [526.376, 63.0292] -Measurements : [755.474, 235552, 1.2852, 1.36501] ---- -Label : 1 -Position : [409.68, 63.464] -Measurements : [1344.05, 363137, 0.32516, -1.07766] ---- -Label : 1 -Position : [489.304, 64.2746] -Measurements : [2550.7, 245615, -0.353762, -0.684571] ---- -Label : 1 -Position : [153.747, 64.3541] -Measurements : [1127.62, 387477, 0.528247, -0.89447] ---- -Label : 1 -Position : [528.797, 65.0709] -Measurements : [923.884, 206711, 0.785987, 0.772355] ---- -Label : 1 -Position : [411.712, 65.1208] -Measurements : [1195.28, 444668, 0.501999, -1.10361] ---- -Label : 1 -Position : [736.373, 65.2588] -Measurements : [925.973, 569079, 0.923134, -0.82582] ---- -Label : 1 -Position : [526.416, 66.024] -Measurements : [937.748, 200420, 0.787841, 0.832355] ---- -Label : 1 -Position : [634.566, 66.0589] -Measurements : [1107.19, 437732, 0.288566, -0.990485] ---- -Label : 1 -Position : [408.468, 66.9523] -Measurements : [1271.67, 345809, 0.447664, -0.87485] ---- -Label : 1 -Position : [493.648, 67.048] -Measurements : [2565.87, 318345, -0.862812, 0.120293] ---- -Label : 1 -Position : [489.309, 67.1856] -Measurements : [2778.19, 156517, -0.590919, -0.103957] ---- -Label : 1 -Position : [151.016, 67.56] -Measurements : [951.112, 257371, 0.707459, -0.969823] ---- -Label : 1 -Position : [494.365, 68.7431] -Measurements : [2469.63, 425073, -0.873973, -0.285714] ---- -Label : 1 -Position : [531.024, 69.096] -Measurements : [1060.1, 152696, 0.894956, 1.33329] ---- -Label : 1 -Position : [532.841, 69.2365] -Measurements : [1031.55, 152734, 0.893183, 1.52887] ---- -Label : 1 -Position : [731.712, 69.608] -Measurements : [1750.46, 494126, -0.476515, -0.796277] ---- -Label : 1 -Position : [639.552, 70.12] -Measurements : [1435.04, 407739, -0.113456, -1.35784] ---- -Label : 1 -Position : [151.236, 71.2708] -Measurements : [651.874, 196335, 1.62119, 1.23144] ---- -Label : 1 -Position : [407.12, 71.656] -Measurements : [1190.02, 321318, 0.830741, -0.0541515] ---- -Label : 1 -Position : [501.307, 71.8869] -Measurements : [1765.1, 370415, 0.368729, -0.5675] ---- -Label : 1 -Position : [724.253, 72.0387] -Measurements : [1547.51, 427895, 0.253832, -0.914729] ---- -Label : 1 -Position : [38.4345, 72.907] -Measurements : [1163, 314130, 0.310145, -0.713743] ---- -Label : 1 -Position : [299.15, 73.1046] -Measurements : [973.079, 407487, 0.788035, -0.760626] ---- -Label : 1 -Position : [497.744, 73.192] -Measurements : [2045.32, 569107, -0.0844212, -1.21743] ---- -Label : 1 -Position : [730.479, 73.5615] -Measurements : [1501, 609631, 0.0505779, -1.44031] ---- -Label : 1 -Position : [530.782, 73.6834] -Measurements : [992.847, 70865.1, -0.139589, -0.777455] ---- -Label : 1 -Position : [534.608, 74.728] -Measurements : [1076.39, 54277.8, -0.0403846, -0.619779] ---- -Label : 1 -Position : [722.496, 74.728] -Measurements : [1309.99, 278624, 0.633246, -0.191714] ---- -Label : 1 -Position : [637.029, 74.9055] -Measurements : [1013.84, 510831, 0.825043, -0.926402] ---- -Label : 1 -Position : [534.278, 75.1308] -Measurements : [1098.33, 55019.9, 0.384065, 0.538966] ---- -Label : 1 -Position : [35.304, 75.24] -Measurements : [1287.51, 361736, 0.298422, -1.14136] ---- -Label : 1 -Position : [297.825, 75.3346] -Measurements : [986.428, 433855, 0.69096, -0.968558] ---- -Label : 1 -Position : [411.711, 75.5489] -Measurements : [1704.36, 500308, -0.110353, -1.16457] ---- -Label : 1 -Position : [300.112, 75.752] -Measurements : [1106.38, 364343, 0.585591, -0.972097] ---- -Label : 1 -Position : [40.0663, 75.8806] -Measurements : [1062.4, 201917, 0.444531, -0.966213] ---- -Label : 1 -Position : [725.415, 76.5828] -Measurements : [1286.91, 369058, 0.39385, -0.929769] ---- -Label : 1 -Position : [415.312, 76.776] -Measurements : [1848.33, 716938, -0.219702, -1.43866] ---- -Label : 1 -Position : [537.68, 77.8] -Measurements : [1196.33, 128090, 0.647327, 0.501685] ---- -Label : 1 -Position : [534.852, 78.2465] -Measurements : [1133.03, 99343, 0.339302, 0.434633] ---- -Label : 0 -Position : [92.1127, 78.4374] -Measurements : [1109.44, 7506.35, -1.04267, 1.00777] ---- -Label : 1 -Position : [411.345, 78.5972] -Measurements : [1717.57, 450220, 0.0725332, -1.28834] ---- -Label : 1 -Position : [533.148, 78.6543] -Measurements : [1080.99, 84062.9, -0.0894858, -0.408748] ---- -Label : 0 -Position : [95.3936, 78.7711] -Measurements : [1108.25, 13396.4, 0.482908, 2.23481] ---- -Label : 0 -Position : [109.322, 79.1238] -Measurements : [1071.97, 37925.4, 0.685131, 0.956957] ---- -Label : 0 -Position : [87.738, 80.0104] -Measurements : [1150.49, 9287.65, -2.39312, 5.91688] ---- -Label : 1 -Position : [499.792, 80.36] -Measurements : [2213.86, 503045, -0.259567, -1.03712] ---- -Label : 1 -Position : [418.984, 80.6891] -Measurements : [1368.77, 549868, 0.845426, -0.36176] ---- -Label : 1 -Position : [723.008, 80.872] -Measurements : [1358.47, 349551, 0.640774, -0.592525] ---- -Label : 1 -Position : [411.116, 81.0041] -Measurements : [1510.43, 419937, 0.407037, -0.773012] ---- -Label : 1 -Position : [720.457, 81.2607] -Measurements : [1383.69, 273300, 0.731504, -0.0320697] ---- -Label : 1 -Position : [230.957, 81.8943] -Measurements : [1454.9, 546540, 0.382177, -1.32888] ---- -Label : 1 -Position : [541.264, 81.896] -Measurements : [1450.31, 245132, 0.273894, -0.251411] ---- -Label : 1 -Position : [231.437, 82.1053] -Measurements : [1430.38, 486833, 0.534145, -1.08849] ---- -Label : 1 -Position : [310.374, 82.6047] -Measurements : [971.624, 327632, 0.823834, -0.376812] ---- -Label : 1 -Position : [536.303, 82.9859] -Measurements : [1378.75, 215446, 0.727624, 0.327514] ---- -Label : 1 -Position : [313.09, 83.2544] -Measurements : [1152.17, 286801, 0.79644, 0.0569467] ---- -Label : 1 -Position : [505.03, 83.2899] -Measurements : [1781.76, 209495, 0.398465, -0.453074] ---- -Label : 1 -Position : [720.173, 83.6023] -Measurements : [1486.33, 258472, 0.324757, -0.256891] ---- -Label : 1 -Position : [502.527, 84.2095] -Measurements : [1706.72, 379939, 0.435575, -0.540791] ---- -Label : 1 -Position : [545.971, 84.3644] -Measurements : [1502.72, 189370, 0.597719, 0.193823] ---- -Label : 1 -Position : [500.389, 84.472] -Measurements : [1762.43, 576006, 0.400357, -0.902264] ---- -Label : 1 -Position : [247.76, 84.5176] -Measurements : [1046.37, 432718, 0.45893, -1.19884] ---- -Label : 1 -Position : [508.496, 84.968] -Measurements : [1742.37, 188795, -0.0165191, -0.493912] ---- -Label : 1 -Position : [234.984, 85.992] -Measurements : [1204.86, 228773, 0.848148, 0.435681] ---- -Label : 1 -Position : [415.824, 85.992] -Measurements : [1133.36, 175910, 0.251633, -1.14509] ---- -Label : 1 -Position : [643.648, 85.992] -Measurements : [1312.1, 349484, 0.214303, -0.569861] ---- -Label : 1 -Position : [793.834, 86.3359] -Measurements : [1049.86, 177361, 0.109025, -1.09353] ---- -Label : 1 -Position : [641.83, 86.7441] -Measurements : [1244.36, 350427, 0.403563, -0.466927] ---- -Label : 1 -Position : [545.977, 86.789] -Measurements : [1617.33, 249607, 0.533211, -0.250782] ---- -Label : 1 -Position : [227.816, 87.016] -Measurements : [1616.24, 348367, -0.0880458, -1.27861] ---- -Label : 1 -Position : [311.376, 87.016] -Measurements : [1637.86, 483075, 0.141674, -0.8608] ---- -Label : 1 -Position : [793.152, 87.016] -Measurements : [994.897, 211129, 0.201361, -1.31052] ---- -Label : 1 -Position : [234.962, 87.1838] -Measurements : [1255.91, 256777, 0.748086, 0.224963] ---- -Label : 1 -Position : [251.155, 87.3764] -Measurements : [1410.69, 266279, -0.0403681, -0.772312] ---- -Label : 1 -Position : [647.236, 87.4288] -Measurements : [1342.99, 275609, 0.507612, -0.116743] ---- -Label : 1 -Position : [512.434, 88.3334] -Measurements : [1930.01, 222004, -0.329513, -0.876027] ---- -Label : 1 -Position : [220.961, 88.5146] -Measurements : [1387.2, 218699, -0.310078, -1.0715] ---- -Label : 1 -Position : [250.344, 88.552] -Measurements : [1371.55, 260591, -0.0649667, -0.638483] ---- -Label : 1 -Position : [508.06, 88.9408] -Measurements : [1737.51, 353590, -0.341023, -0.77548] ---- -Label : 1 -Position : [513.104, 89.064] -Measurements : [1953.25, 243690, -0.482045, -0.747181] ---- -Label : 1 -Position : [514.67, 89.8881] -Measurements : [1926.18, 238072, -0.35238, -0.936509] ---- -Label : 1 -Position : [544.848, 90.088] -Measurements : [1625.45, 328196, 0.343572, -0.436161] ---- -Label : 1 -Position : [722.496, 90.088] -Measurements : [1379.22, 213429, -0.901277, -0.752079] ---- -Label : 1 -Position : [645.793, 90.2686] -Measurements : [1288.29, 169307, 0.171626, 0.355703] ---- -Label : 1 -Position : [208.699, 90.2753] -Measurements : [974.846, 163077, -0.0711373, -1.42608] ---- -Label : 1 -Position : [416.173, 90.3642] -Measurements : [813.742, 220021, 1.01131, -0.443239] ---- -Label : 1 -Position : [789.228, 90.7935] -Measurements : [717.319, 255956, 1.15583, -0.290952] ---- -Label : 1 -Position : [541.634, 90.8781] -Measurements : [1618.67, 263329, 0.568741, 0.274917] ---- -Label : 1 -Position : [229.384, 91.0036] -Measurements : [1566.22, 295184, 0.0635331, -1.00503] ---- -Label : 1 -Position : [314.538, 91.1327] -Measurements : [1477.03, 507536, 0.697796, -0.781491] ---- -Label : 1 -Position : [510.1, 91.1933] -Measurements : [1862.81, 416812, -0.734054, -0.438029] ---- -Label : 1 -Position : [219.112, 91.624] -Measurements : [1330.96, 264912, -0.198132, -1.41048] ---- -Label : 1 -Position : [646.208, 91.624] -Measurements : [1225.45, 143585, -0.386217, -0.99674] ---- -Label : 1 -Position : [312.4, 92.136] -Measurements : [1530.97, 560692, 0.338826, -1.08327] ---- -Label : 1 -Position : [516.458, 92.2009] -Measurements : [1770.19, 312177, 0.040679, -1.30023] ---- -Label : 1 -Position : [726.724, 92.3023] -Measurements : [1237.89, 272684, -0.37824, -1.59925] ---- -Label : 1 -Position : [719.156, 92.5538] -Measurements : [1067.91, 339129, 0.110837, -1.81924] ---- -Label : 1 -Position : [209.896, 93.16] -Measurements : [979.264, 145084, -0.0279663, -1.22398] ---- -Label : 1 -Position : [645.654, 93.3011] -Measurements : [1147.74, 144378, -0.25268, -1.09159] ---- -Label : 1 -Position : [255.976, 93.672] -Measurements : [1574.34, 174765, -0.433033, -0.118507] ---- -Label : 1 -Position : [516.176, 94.184] -Measurements : [1704.18, 339435, 0.0761093, -1.13292] ---- -Label : 1 -Position : [215.59, 94.2739] -Measurements : [1138.59, 256619, 0.291274, -1.27282] ---- -Label : 1 -Position : [310.847, 95.7036] -Measurements : [1171.76, 652815, 0.7876, -0.659716] ---- -Label : 1 -Position : [208.894, 95.9693] -Measurements : [900.298, 165919, 0.0614197, -1.36078] ---- -Label : 1 -Position : [317.024, 97.5957] -Measurements : [1090.27, 343145, 0.700512, -0.545723] ---- -Label : 1 -Position : [259.572, 97.6378] -Measurements : [1136.85, 270942, 0.24863, -0.766387] ---- -Label : 1 -Position : [522.782, 98.1872] -Measurements : [1734.26, 206765, -0.3432, -0.991281] ---- -Label : 1 -Position : [252.666, 98.5213] -Measurements : [1171.93, 215554, 0.310786, -1.03181] ---- -Label : 1 -Position : [523.087, 98.5224] -Measurements : [1729.93, 210981, -0.348607, -1.00413] ---- -Label : 1 -Position : [715.883, 98.8042] -Measurements : [888.529, 233329, 0.476561, -1.30497] ---- -Label : 1 -Position : [520.272, 99.304] -Measurements : [1806.94, 192973, -0.680368, -0.0148814] ---- -Label : 1 -Position : [527.616, 99.4919] -Measurements : [1637.93, 233703, -0.216636, -0.989002] ---- -Label : 1 -Position : [158.965, 100.627] -Measurements : [1057.99, 576974, 0.506057, -1.36932] ---- -Label : 1 -Position : [319.424, 101.19] -Measurements : [1289, 357238, 0.00683936, -1.27157] ---- -Label : 1 -Position : [518.634, 101.39] -Measurements : [1690.59, 367844, -0.604401, -0.491386] ---- -Label : 1 -Position : [257.705, 101.623] -Measurements : [1051.64, 198055, 0.185547, -1.15064] ---- -Label : 1 -Position : [714.293, 101.693] -Measurements : [1210.87, 228499, -0.287881, -0.99352] ---- -Label : 1 -Position : [167.379, 101.709] -Measurements : [955.185, 446514, 1.0842, -0.413929] ---- -Label : 1 -Position : [716.352, 101.864] -Measurements : [1162.44, 277330, -0.218701, -1.30119] ---- -Label : 1 -Position : [162.792, 102.376] -Measurements : [1307.06, 507986, 0.191174, -1.53486] ---- -Label : 1 -Position : [318.032, 102.376] -Measurements : [1422.34, 334825, -0.446, -0.904958] ---- -Label : 1 -Position : [523.344, 102.888] -Measurements : [1894.2, 194640, -0.749489, -0.154715] ---- -Label : 1 -Position : [261.826, 103.644] -Measurements : [1160.42, 144003, -0.371143, -0.82547] ---- -Label : 1 -Position : [262.12, 103.912] -Measurements : [1183.55, 151938, -0.242121, -0.650662] ---- -Label : 1 -Position : [557.136, 103.912] -Measurements : [1492.43, 305852, -0.200073, -0.403389] ---- -Label : 0 -Position : [118.265, 104.411] -Measurements : [1242.47, 30363.2, 3.0769, 10.8863] ---- -Label : 1 -Position : [667.802, 105.478] -Measurements : [988.599, 207015, 0.450568, -0.583402] ---- -Label : 1 -Position : [528.325, 105.5] -Measurements : [1643.96, 309566, -0.205076, -1.30918] ---- -Label : 1 -Position : [712.708, 105.576] -Measurements : [1529.85, 199512, -0.446041, -0.403548] ---- -Label : 1 -Position : [552.95, 105.776] -Measurements : [1457.92, 306223, -0.28068, -0.184712] ---- -Label : 1 -Position : [318.374, 106.244] -Measurements : [1380.64, 286111, -0.334023, -0.932676] ---- -Label : 1 -Position : [319.056, 107.496] -Measurements : [1257.26, 294835, -0.104061, -1.29524] ---- -Label : 1 -Position : [263.398, 107.806] -Measurements : [1323.32, 141925, 0.548271, 1.09352] ---- -Label : 1 -Position : [267.24, 108.008] -Measurements : [1297.52, 289741, 0.367777, -0.55024] ---- -Label : 1 -Position : [669.76, 108.008] -Measurements : [1096.11, 207340, 0.330401, -0.997764] ---- -Label : 1 -Position : [266.811, 108.092] -Measurements : [1317.16, 247175, 0.400011, -0.191347] ---- -Label : 1 -Position : [712.768, 108.52] -Measurements : [1649.63, 164183, -0.465255, -0.542033] ---- -Label : 1 -Position : [560.955, 108.68] -Measurements : [1783.91, 228472, -0.233207, -0.411194] ---- -Label : 1 -Position : [715.55, 108.875] -Measurements : [1505.38, 281221, -0.452804, -1.02453] ---- -Label : 1 -Position : [320.201, 109.112] -Measurements : [1094.93, 289132, 0.307046, -1.16672] ---- -Label : 1 -Position : [524.368, 109.544] -Measurements : [1682.74, 307050, -0.41468, -0.57049] ---- -Label : 1 -Position : [565.896, 109.876] -Measurements : [1602.1, 208530, 0.235627, -0.639146] ---- -Label : 1 -Position : [703.909, 110.454] -Measurements : [1554.45, 180969, -0.292626, -0.692169] ---- -Label : 1 -Position : [666.324, 110.829] -Measurements : [953.362, 231893, 0.559366, -0.695741] ---- -Label : 1 -Position : [710.066, 110.97] -Measurements : [1638.12, 226903, -0.642881, -0.373772] ---- -Label : 1 -Position : [561.232, 111.592] -Measurements : [1847.63, 154407, 0.0181275, -0.555982] ---- -Label : 1 -Position : [706.624, 111.592] -Measurements : [1599.78, 168121, -0.300517, -0.586663] ---- -Label : 0 -Position : [111.176, 111.596] -Measurements : [1132.23, 45687.3, -0.693308, 1.8718] ---- -Label : 1 -Position : [526.561, 112.25] -Measurements : [1579.72, 235304, -0.244512, -0.651862] ---- -Label : 1 -Position : [699.749, 112.672] -Measurements : [1251.2, 255559, -0.0256705, -0.969806] ---- -Label : 1 -Position : [563.428, 112.678] -Measurements : [1795.67, 165651, 0.152948, -0.511471] ---- -Label : 1 -Position : [167.335, 113.116] -Measurements : [769.335, 232433, 1.19259, 0.182167] ---- -Label : 1 -Position : [325.712, 113.128] -Measurements : [979.65, 157331, 0.858817, 0.281219] ---- -Label : 1 -Position : [523.294, 113.255] -Measurements : [1442.84, 351951, -0.308333, -0.896829] ---- -Label : 1 -Position : [162.792, 113.56] -Measurements : [923.253, 210067, 0.779048, -0.527959] ---- -Label : 1 -Position : [164.882, 113.932] -Measurements : [894.756, 219335, 0.809942, -0.485659] ---- -Label : 1 -Position : [321.412, 114.382] -Measurements : [729.804, 160832, 1.59829, 2.50418] ---- -Label : 1 -Position : [700.48, 114.664] -Measurements : [1297.14, 241601, 0.141907, -0.876793] ---- -Label : 1 -Position : [528.992, 115.24] -Measurements : [1439.84, 214192, -0.0367069, -0.966983] ---- -Label : 1 -Position : [683.072, 115.688] -Measurements : [1369.02, 382654, 0.110694, -1.30542] ---- -Label : 1 -Position : [787.649, 116.056] -Measurements : [1069.04, 298355, 0.349867, -1.02274] ---- -Label : 1 -Position : [282.045, 116.276] -Measurements : [888.759, 514390, 1.21048, -0.158209] ---- -Label : 1 -Position : [703.015, 116.342] -Measurements : [1255.66, 230138, 0.165227, -0.861112] ---- -Label : 1 -Position : [532.728, 116.619] -Measurements : [1301.11, 192281, 0.316429, -0.825745] ---- -Label : 1 -Position : [328.936, 117.268] -Measurements : [899.582, 131603, 0.749477, 0.890214] ---- -Label : 1 -Position : [786.872, 117.296] -Measurements : [1271.02, 329826, 0.083441, -0.856405] ---- -Label : 1 -Position : [784.771, 117.505] -Measurements : [1346.42, 300073, -0.0267144, -0.645099] ---- -Label : 1 -Position : [686.252, 117.957] -Measurements : [986.837, 440009, 1.04617, -0.347022] ---- -Label : 1 -Position : [787.104, 119.325] -Measurements : [1331.1, 302350, 0.178207, -0.702826] ---- -Label : 1 -Position : [279.016, 119.704] -Measurements : [1349.87, 654100, 0.242578, -1.36819] ---- -Label : 1 -Position : [425.724, 119.956] -Measurements : [928.918, 279548, 0.342888, -1.45729] ---- -Label : 1 -Position : [534.518, 119.975] -Measurements : [1287.76, 203152, 0.38779, -0.597426] ---- -Label : 1 -Position : [679.096, 120.442] -Measurements : [1277.73, 392586, 0.0631674, -1.13376] ---- -Label : 0 -Position : [111.436, 121.004] -Measurements : [973.243, 48617, -0.721266, -0.840469] ---- -Label : 0 -Position : [81.0551, 121.076] -Measurements : [1105.47, 10824.7, 0.584296, 0.979848] ---- -Label : 0 -Position : [129.052, 121.197] -Measurements : [760.452, 15625.3, 0.0282606, 1.66524] ---- -Label : 1 -Position : [425.568, 121.384] -Measurements : [966.733, 244442, 0.385685, -1.39025] ---- -Label : 1 -Position : [530.528, 121.384] -Measurements : [1425.93, 204361, -0.0090095, -0.614752] ---- -Label : 1 -Position : [282.599, 121.848] -Measurements : [1174.81, 688615, 0.662836, -1.10586] ---- -Label : 1 -Position : [784.312, 121.904] -Measurements : [1460.44, 284210, 0.116577, -0.888131] ---- -Label : 1 -Position : [41.9856, 122.153] -Measurements : [783.859, 240284, 0.783098, -0.674306] ---- -Label : 0 -Position : [95.8715, 122.848] -Measurements : [897.204, 40152.7, 0.103602, -1.7928] ---- -Label : 1 -Position : [787.268, 123.75] -Measurements : [1288.25, 293997, 0.573319, -0.808307] ---- -Label : 1 -Position : [275.095, 123.757] -Measurements : [1673.88, 435774, -0.0841427, -0.793278] ---- -Label : 1 -Position : [530.447, 123.991] -Measurements : [1404.69, 249970, 0.0651425, -0.575455] ---- -Label : 1 -Position : [44.52, 124.312] -Measurements : [1072.95, 256575, 0.527127, -0.594927] ---- -Label : 1 -Position : [278.504, 125.336] -Measurements : [1561.76, 478849, 0.0748846, -0.945546] ---- -Label : 1 -Position : [778.168, 126] -Measurements : [1290.07, 281976, 0.14496, -0.793504] ---- -Label : 1 -Position : [429.459, 126.113] -Measurements : [499.872, 76914.2, 3.16918, 10.2205] ---- -Label : 1 -Position : [279.561, 127.608] -Measurements : [1526.21, 498000, 0.116888, -0.971512] ---- -Label : 1 -Position : [776.613, 127.692] -Measurements : [1048.91, 274883, 0.0767666, -1.46346] ---- -Label : 1 -Position : [583.501, 127.812] -Measurements : [630.413, 101710, 1.0013, -0.341788] ---- -Label : 1 -Position : [165.864, 127.896] -Measurements : [1046.98, 195802, 0.375744, -0.594556] ---- -Label : 1 -Position : [535.648, 128.552] -Measurements : [1884.15, 177643, -0.521138, -0.0654111] ---- -Label : 1 -Position : [45.4843, 128.665] -Measurements : [1155.56, 186924, 0.370493, -0.529542] ---- -Label : 1 -Position : [168.958, 128.857] -Measurements : [1124.04, 244409, 0.047706, -1.13973] ---- -Label : 1 -Position : [583.459, 129.25] -Measurements : [739.246, 115252, 0.379303, -1.31422] ---- -Label : 1 -Position : [535.975, 129.426] -Measurements : [1867.47, 209846, -0.799698, 0.459274] ---- -Label : 1 -Position : [164.638, 129.947] -Measurements : [951.631, 191198, 0.365229, -0.689925] ---- -Label : 1 -Position : [780.877, 130.637] -Measurements : [909.113, 222529, 0.69993, -0.85232] ---- -Label : 1 -Position : [532.503, 130.641] -Measurements : [1613.34, 345253, -0.412173, -0.812511] ---- -Label : 1 -Position : [280.552, 130.968] -Measurements : [1328.1, 409007, 0.231777, -0.884732] ---- -Label : 1 -Position : [581.184, 132.352] -Measurements : [959.499, 83611.4, -0.632973, -0.573179] ---- -Label : 1 -Position : [276.709, 132.601] -Measurements : [1227.19, 254635, 0.547162, -0.808944] ---- -Label : 1 -Position : [46.568, 133.528] -Measurements : [1344.19, 255406, 0.319402, -0.901558] ---- -Label : 1 -Position : [287.255, 134.418] -Measurements : [767.178, 207829, 1.15703, 0.124504] ---- -Label : 1 -Position : [282.831, 134.513] -Measurements : [1130.19, 295781, 0.431002, -1.03989] ---- -Label : 1 -Position : [51.3268, 134.638] -Measurements : [1256.62, 200843, 0.550443, -0.672985] ---- -Label : 1 -Position : [325.728, 135.72] -Measurements : [1343.55, 563424, 0.181802, -1.46002] ---- -Label : 1 -Position : [42.7433, 136.251] -Measurements : [1155.67, 347608, 0.508557, -1.01234] ---- -Label : 1 -Position : [321.8, 137.406] -Measurements : [1200.88, 639851, 0.479749, -1.38497] ---- -Label : 1 -Position : [559.277, 138.527] -Measurements : [1579.95, 149686, -0.143497, -0.535129] ---- -Label : 0 -Position : [126.879, 138.925] -Measurements : [971.829, 62864.1, -0.530778, -1.04523] ---- -Label : 1 -Position : [322.458, 138.968] -Measurements : [1192.2, 684416, 0.461354, -1.47774] ---- -Label : 1 -Position : [284.136, 139.16] -Measurements : [807.465, 100527, 0.496844, -0.935616] ---- -Label : 1 -Position : [285.511, 139.706] -Measurements : [771.995, 106183, 0.644265, -0.823326] ---- -Label : 1 -Position : [560.704, 140.544] -Measurements : [1612.83, 142992, -0.239338, -0.434783] ---- -Label : 1 -Position : [206.54, 142.21] -Measurements : [793.994, 101125, 0.191725, -1.34298] ---- -Label : 1 -Position : [427.788, 142.527] -Measurements : [611.776, 111051, 1.26625, 0.671914] ---- -Label : 1 -Position : [555.427, 142.816] -Measurements : [1617.08, 150326, -0.177052, -1.05987] ---- -Label : 1 -Position : [164.84, 144.28] -Measurements : [966.97, 277437, 0.962301, -0.230972] ---- -Label : 1 -Position : [556.096, 145.152] -Measurements : [1678.88, 200841, -0.329494, -0.882302] ---- -Label : 1 -Position : [163.359, 145.282] -Measurements : [1006.48, 258708, 0.930751, -0.241716] ---- -Label : 1 -Position : [564.854, 145.326] -Measurements : [1175.97, 251257, 0.558618, -0.630028] ---- -Label : 1 -Position : [54.9896, 145.451] -Measurements : [640.903, 61901.6, 0.849688, -0.31097] ---- -Label : 1 -Position : [168.815, 145.821] -Measurements : [760.356, 243685, 1.40623, 0.849425] ---- -Label : 1 -Position : [432.736, 145.96] -Measurements : [871.897, 200631, 0.417074, -0.772109] ---- -Label : 1 -Position : [202.216, 146.328] -Measurements : [735.998, 77507.3, 0.486003, -1.20397] ---- -Label : 1 -Position : [199.37, 147.35] -Measurements : [718.547, 93630.1, 0.353925, -1.40405] ---- -Label : 1 -Position : [439.491, 147.445] -Measurements : [708.74, 207666, 1.36753, 0.801427] ---- -Label : 1 -Position : [288.658, 147.677] -Measurements : [820.014, 405995, 1.28555, 0.346208] ---- -Label : 1 -Position : [293.013, 147.905] -Measurements : [689.878, 362867, 1.92391, 2.28359] ---- -Label : 1 -Position : [555.565, 148.116] -Measurements : [1626, 177019, 0.0103185, -1.14299] ---- -Label : 1 -Position : [435.109, 149.683] -Measurements : [1119.72, 281166, 0.430565, -0.748525] ---- -Label : 1 -Position : [50.664, 150.424] -Measurements : [987.126, 342024, 0.981039, 9.90691e-05] ---- -Label : 0 -Position : [100.443, 151.887] -Measurements : [964.573, 24883.9, 0.241763, -1.53948] ---- -Label : 1 -Position : [288.864, 152.104] -Measurements : [1148.26, 381276, 0.332974, -0.883249] ---- -Label : 1 -Position : [435.296, 152.104] -Measurements : [1228.6, 368882, 0.566702, -0.73073] ---- -Label : 1 -Position : [548.117, 152.945] -Measurements : [1248.03, 146106, -0.718104, -0.195879] ---- -Label : 1 -Position : [437.238, 153.945] -Measurements : [1162.21, 400716, 0.603825, -0.726079] ---- -Label : 1 -Position : [49.582, 154.739] -Measurements : [952.488, 406598, 1.13155, -0.0186492] ---- -Label : 0 -Position : [93.9722, 154.808] -Measurements : [1190, 42335.4, 0.741809, -0.136511] ---- -Label : 1 -Position : [549.952, 155.904] -Measurements : [1215.97, 145716, -0.712105, -0.179858] ---- -Label : 1 -Position : [437.856, 157.736] -Measurements : [1194.07, 376919, 0.749542, -0.509319] ---- -Label : 1 -Position : [290.912, 158.76] -Measurements : [1105.7, 220256, 0.171187, -1.18595] ---- -Label : 1 -Position : [286.405, 158.931] -Measurements : [1013.65, 174437, 0.530106, -0.759662] ---- -Label : 0 -Position : [116.922, 158.994] -Measurements : [1020.36, 27234.7, -1.59742, 1.84507] ---- -Label : 1 -Position : [548.215, 159] -Measurements : [1010.95, 229876, -0.162641, -1.4615] ---- -Label : 1 -Position : [435.795, 159.645] -Measurements : [1084.69, 319821, 1.08762, 0.482812] ---- -Label : 1 -Position : [173.172, 160.418] -Measurements : [910.603, 360753, 0.92316, -0.711811] ---- -Label : 1 -Position : [434.626, 161.185] -Measurements : [991.996, 185225, 1.224, 1.78436] ---- -Label : 1 -Position : [296.135, 161.251] -Measurements : [1171.76, 456721, 0.430665, -1.07225] ---- -Label : 1 -Position : [288.841, 161.311] -Measurements : [1144.47, 257208, 0.493746, -0.647602] ---- -Label : 1 -Position : [439.961, 161.588] -Measurements : [1235, 383454, 0.625274, -0.770277] ---- -Label : 1 -Position : [170.472, 161.688] -Measurements : [1108.1, 440775, 0.496568, -1.33749] ---- -Label : 1 -Position : [51.24, 162.517] -Measurements : [721.785, 254747, 1.65975, 1.89345] ---- -Label : 1 -Position : [439.392, 163.368] -Measurements : [1222.62, 298314, 0.82134, -0.208641] ---- -Label : 1 -Position : [169.046, 163.37] -Measurements : [1166.61, 393993, 0.507265, -1.33034] ---- -Label : 1 -Position : [439.227, 163.469] -Measurements : [1222.62, 298314, 0.82134, -0.208641] ---- -Label : 0 -Position : [80.6968, 163.915] -Measurements : [1146.21, 8771.87, 0.102303, -1.03749] ---- -Label : 1 -Position : [53.736, 165.272] -Measurements : [800.873, 221357, 1.64339, 2.1331] ---- -Label : 1 -Position : [293.165, 165.495] -Measurements : [1445.16, 315696, 0.193153, -0.948964] ---- -Label : 0 -Position : [85.073, 165.554] -Measurements : [1088.24, 17474.6, -1.2738, 1.97941] ---- -Label : 1 -Position : [293.984, 165.928] -Measurements : [1445.16, 315696, 0.193153, -0.948964] ---- -Label : 1 -Position : [51.1578, 167.01] -Measurements : [763.843, 231835, 1.73052, 2.19185] ---- -Label : 1 -Position : [343.648, 169] -Measurements : [928.066, 235749, 0.533846, -1.16419] ---- -Label : 1 -Position : [346.821, 169.459] -Measurements : [840.941, 229802, 0.898385, -0.643969] ---- -Label : 1 -Position : [200.924, 169.571] -Measurements : [1027.23, 540995, 0.645869, -1.15679] ---- -Label : 0 -Position : [115.217, 169.683] -Measurements : [846.398, 16393.4, 0.466025, -0.546362] ---- -Label : 1 -Position : [343.379, 169.888] -Measurements : [928.066, 235749, 0.533846, -1.16419] ---- -Label : 1 -Position : [202.371, 170.412] -Measurements : [1227.81, 562870, 0.311362, -1.45724] ---- -Label : 0 -Position : [87.0626, 170.842] -Measurements : [904.53, 31835.2, -0.157591, -1.63508] ---- -Label : 1 -Position : [458.099, 171.513] -Measurements : [1748.77, 230032, -0.80657, -0.0312607] ---- -Label : 0 -Position : [100.77, 171.907] -Measurements : [752.345, 4246.94, 0.00409903, 1.81988] ---- -Label : 1 -Position : [205.288, 171.928] -Measurements : [1381.38, 545814, 0.219604, -1.5491] ---- -Label : 1 -Position : [172.454, 172.899] -Measurements : [769.186, 229563, 1.00374, -0.192638] ---- -Label : 0 -Position : [130.268, 173.077] -Measurements : [1041.78, 13687.9, -1.06755, 0.613121] ---- -Label : 1 -Position : [453.728, 174.12] -Measurements : [1576.33, 275832, -0.406668, -0.164106] ---- -Label : 1 -Position : [466.46, 174.791] -Measurements : [1265.68, 242176, 0.590304, -0.316957] ---- -Label : 1 -Position : [452.318, 175.335] -Measurements : [1454.43, 318888, -0.35921, -0.585877] ---- -Label : 0 -Position : [118.619, 176.382] -Measurements : [947.783, 25016.6, 1.87238, 9.26613] ---- -Label : 1 -Position : [175.785, 176.617] -Measurements : [1179.15, 363424, -0.0431143, -1.2454] ---- -Label : 1 -Position : [459.36, 176.68] -Measurements : [1814.73, 239735, -0.461905, -0.741981] ---- -Label : 1 -Position : [718.776, 176.688] -Measurements : [1344.26, 143039, -0.283975, -0.23451] ---- -Label : 1 -Position : [174.568, 177.048] -Measurements : [1301.67, 324422, -0.302307, -0.943574] ---- -Label : 1 -Position : [172.228, 177.982] -Measurements : [1196.49, 338762, -0.117432, -1.20676] ---- -Label : 1 -Position : [463.593, 177.989] -Measurements : [1584.79, 262685, 0.139275, -1.06502] ---- -Label : 1 -Position : [469.066, 178.497] -Measurements : [1225.01, 192878, 0.14609, -0.472889] ---- -Label : 1 -Position : [457.188, 178.617] -Measurements : [1739.82, 252758, -0.392531, -0.697884] ---- -Label : 1 -Position : [468.064, 178.728] -Measurements : [1205.72, 165909, 0.0544097, -0.530043] ---- -Label : 1 -Position : [179.848, 179.5] -Measurements : [1073.83, 372779, 0.505805, -1.2185] ---- -Label : 1 -Position : [472.734, 179.848] -Measurements : [1420.95, 280567, -0.215442, -1.17759] ---- -Label : 0 -Position : [84.4024, 180.274] -Measurements : [962.054, 19438, -0.666317, -1.0598] ---- -Label : 1 -Position : [721.135, 180.474] -Measurements : [1119.45, 175922, 0.651067, -0.624889] ---- -Label : 1 -Position : [715.191, 181.662] -Measurements : [1145.86, 190723, 0.308976, -1.0098] ---- -Label : 1 -Position : [176.104, 182.168] -Measurements : [1168.06, 351181, 0.24595, -1.3993] ---- -Label : 1 -Position : [476.256, 182.312] -Measurements : [1413.98, 381507, -0.104882, -1.43638] ---- -Label : 0 -Position : [119.927, 182.936] -Measurements : [1034.32, 35375, 2.20187, 6.84498] ---- -Label : 1 -Position : [480.888, 183.168] -Measurements : [993.334, 432702, 0.897719, -0.792276] ---- -Label : 0 -Position : [87.6863, 183.363] -Measurements : [1015.35, 69459.9, 0.914419, 0.550633] ---- -Label : 0 -Position : [78.6616, 183.498] -Measurements : [1011.36, 3655.02, 0.373185, -0.928352] ---- -Label : 0 -Position : [124.706, 185.457] -Measurements : [1051.73, 78638.7, 0.59633, 0.921091] ---- -Label : 1 -Position : [875.834, 190.969] -Measurements : [1006.11, 50158.9, -1.03185, 0.406372] ---- -Label : 1 -Position : [24.0479, 194.139] -Measurements : [511.819, 36538.6, 1.00629, -0.471377] ---- -Label : 1 -Position : [28.4819, 194.312] -Measurements : [587.787, 94716.6, 2.0327, 5.3558] ---- -Label : 1 -Position : [210.686, 194.708] -Measurements : [1081.93, 616511, 0.465294, -1.48121] ---- -Label : 1 -Position : [883.424, 194.798] -Measurements : [890.391, 102875, -0.151164, -1.5192] ---- -Label : 1 -Position : [880.712, 195.648] -Measurements : [824.918, 104315, 0.0428919, -1.56379] ---- -Label : 1 -Position : [206.437, 195.744] -Measurements : [1013.23, 662647, 0.759068, -1.05212] ---- -Label : 1 -Position : [28.648, 199.064] -Measurements : [654.467, 82489.4, 2.02281, 5.76205] ---- -Label : 1 -Position : [211.432, 199.064] -Measurements : [1510.98, 504539, -0.00991282, -1.47667] ---- -Label : 0 -Position : [64.8357, 200.144] -Measurements : [1033.71, 10272.1, 0.797339, 4.29059] ---- -Label : 0 -Position : [106.807, 200.498] -Measurements : [1029.8, 16500.3, -1.30319, 1.23472] ---- -Label : 1 -Position : [711.024, 201.745] -Measurements : [859.114, 162654, 0.969496, 0.252542] ---- -Label : 0 -Position : [108.755, 201.787] -Measurements : [1033.13, 17517, -1.16156, 1.03798] ---- -Label : 1 -Position : [706.632, 202.304] -Measurements : [909.044, 205380, 0.669954, -0.913504] ---- -Label : 1 -Position : [862.044, 202.522] -Measurements : [1090.65, 501719, 0.629952, -1.05298] ---- -Label : 0 -Position : [133.631, 203.069] -Measurements : [1015.21, 19261.5, -2.2191, 4.98905] ---- -Label : 1 -Position : [176.3, 203.428] -Measurements : [1100.39, 432746, 0.522518, -1.20115] ---- -Label : 1 -Position : [891.78, 203.667] -Measurements : [891.333, 421627, 0.970045, -0.602316] ---- -Label : 1 -Position : [357.984, 204.328] -Measurements : [1249.78, 497817, 0.531452, -0.822011] ---- -Label : 1 -Position : [889.843, 204.868] -Measurements : [785.969, 382163, 1.34655, 0.298143] ---- -Label : 1 -Position : [360.317, 205.079] -Measurements : [1113.8, 357503, 0.535817, -1.1484] ---- -Label : 1 -Position : [179.176, 205.208] -Measurements : [1108.75, 417131, 0.654059, -1.15038] ---- -Label : 1 -Position : [176.006, 206.321] -Measurements : [1168.34, 376583, 0.497907, -1.13431] ---- -Label : 1 -Position : [863.816, 206.912] -Measurements : [1183.23, 443396, 0.635468, -1.05555] ---- -Label : 1 -Position : [703.397, 207.005] -Measurements : [556.119, 75660.8, 1.9211, 2.94926] ---- -Label : 1 -Position : [894.536, 207.424] -Measurements : [984.415, 380697, 0.85635, -0.735312] ---- -Label : 1 -Position : [301.117, 207.52] -Measurements : [1469.09, 244028, -0.346245, -0.798871] ---- -Label : 1 -Position : [361.807, 208.293] -Measurements : [1054.72, 357596, 0.695484, -1.06173] ---- -Label : 1 -Position : [305.152, 208.656] -Measurements : [1062.9, 253742, 0.257437, -1.23242] ---- -Label : 0 -Position : [103.974, 208.707] -Measurements : [1044.9, 5652.95, -1.27797, 4.6118] ---- -Label : 0 -Position : [65.0811, 209.122] -Measurements : [1141.98, 18419.1, 1.57678, 2.24398] ---- -Label : 1 -Position : [861.112, 210.405] -Measurements : [1267.54, 360823, 0.35263, -1.10572] ---- -Label : 1 -Position : [308.787, 210.95] -Measurements : [793.141, 216224, 0.916479, -0.735237] ---- -Label : 1 -Position : [862.601, 211.896] -Measurements : [1143.86, 404827, 0.63832, -0.810785] ---- -Label : 1 -Position : [719.041, 213.273] -Measurements : [1026.08, 78610.5, 0.290094, -0.7538] ---- -Label : 1 -Position : [860.232, 214.592] -Measurements : [1031.01, 233719, 0.582786, -0.737979] ---- -Label : 1 -Position : [860.301, 216.547] -Measurements : [1022.67, 230172, 0.624532, -0.629547] ---- -Label : 1 -Position : [363.225, 216.858] -Measurements : [1988.31, 684467, -0.379378, -1.06607] ---- -Label : 1 -Position : [364.128, 217.64] -Measurements : [1897.61, 738105, -0.237603, -1.31869] ---- -Label : 1 -Position : [714.824, 218.176] -Measurements : [821.876, 154001, 0.536069, -0.777765] ---- -Label : 1 -Position : [715.735, 218.326] -Measurements : [890.303, 150882, 0.244042, -0.991735] ---- -Label : 0 -Position : [88.1349, 218.534] -Measurements : [1005.05, 11746.3, 3.01618, 13.4804] ---- -Label : 1 -Position : [867.549, 218.703] -Measurements : [697.238, 154574, 0.835332, -0.779369] ---- -Label : 1 -Position : [181.278, 218.732] -Measurements : [1296.75, 706447, 0.139058, -1.41445] ---- -Label : 0 -Position : [108.14, 218.817] -Measurements : [1065.29, 12187.3, -0.513496, 0.415816] ---- -Label : 1 -Position : [863.377, 219.477] -Measurements : [891.208, 233894, 0.672972, -0.61997] ---- -Label : 0 -Position : [133.607, 219.558] -Measurements : [915.083, 13643.5, -0.846548, 1.17435] ---- -Label : 1 -Position : [362.863, 219.67] -Measurements : [1842.68, 942342, -0.175373, -1.51707] ---- -Label : 1 -Position : [182.248, 220.056] -Measurements : [1535.29, 537093, -0.166385, -1.12571] ---- -Label : 1 -Position : [911.873, 220.529] -Measurements : [981.263, 152723, -0.273252, -1.40202] ---- -Label : 1 -Position : [182.637, 220.599] -Measurements : [1535.29, 537093, -0.166385, -1.12571] ---- -Label : 0 -Position : [128.703, 221.589] -Measurements : [951.459, 16191.8, -0.296294, -0.532626] ---- -Label : 1 -Position : [308.951, 222.08] -Measurements : [802.338, 214555, 0.903603, -0.0462955] ---- -Label : 1 -Position : [184.7, 222.318] -Measurements : [1566.67, 404076, 0.0908016, -0.81289] ---- -Label : 1 -Position : [867.4, 223.296] -Measurements : [1096.75, 236870, 0.240736, -0.759973] ---- -Label : 1 -Position : [907.336, 223.296] -Measurements : [755.819, 144529, 0.752759, -0.785582] ---- -Label : 1 -Position : [31.72, 223.64] -Measurements : [1053.28, 328868, 0.739464, -0.768644] ---- -Label : 1 -Position : [908.159, 223.694] -Measurements : [807.086, 151692, 0.501415, -1.17477] ---- -Label : 0 -Position : [67.2161, 223.945] -Measurements : [1176.23, 47964.9, 1.78288, 3.78042] ---- -Label : 1 -Position : [310.272, 224.016] -Measurements : [1111.51, 495259, 0.570385, -0.92457] ---- -Label : 1 -Position : [182.76, 224.152] -Measurements : [1647.78, 296626, 0.42371, -0.782878] ---- -Label : 1 -Position : [310.937, 224.798] -Measurements : [1111.51, 495259, 0.570385, -0.92457] ---- -Label : 1 -Position : [30.803, 225.572] -Measurements : [1017.8, 355643, 0.745761, -0.834526] ---- -Label : 1 -Position : [183.029, 225.933] -Measurements : [1579.74, 304237, 0.664633, -0.598438] ---- -Label : 0 -Position : [123.133, 226.472] -Measurements : [1068.52, 3217.49, -1.00626, 3.16216] ---- -Label : 1 -Position : [869.224, 226.677] -Measurements : [1015.9, 256264, 0.58223, -0.843968] ---- -Label : 1 -Position : [864.84, 226.88] -Measurements : [1052.3, 226196, 0.529199, -0.607237] ---- -Label : 1 -Position : [710.279, 227.086] -Measurements : [792.157, 134777, 0.50578, -1.19546] ---- -Label : 1 -Position : [862.126, 227.76] -Measurements : [897.374, 215853, 0.983941, 0.153139] ---- -Label : 1 -Position : [33.1171, 227.914] -Measurements : [953.108, 238848, 1.13436, 0.817858] ---- -Label : 1 -Position : [710.216, 228.416] -Measurements : [825.895, 135704, 0.384101, -1.28101] ---- -Label : 0 -Position : [60.2701, 228.586] -Measurements : [1064.9, 6211.3, 0.60023, -0.0306526] ---- -Label : 1 -Position : [311.296, 230.672] -Measurements : [1409.32, 536504, 0.104209, -1.54309] ---- -Label : 1 -Position : [715.214, 231.314] -Measurements : [1009.83, 170971, 0.706218, -0.136483] ---- -Label : 1 -Position : [313.87, 231.412] -Measurements : [1305.46, 574078, 0.335705, -1.51573] ---- -Label : 1 -Position : [906.824, 232] -Measurements : [1111.36, 291222, 0.176541, -1.13685] ---- -Label : 0 -Position : [56.9019, 233.286] -Measurements : [986.829, 7168.76, 0.00846685, -0.22224] ---- -Label : 1 -Position : [908.439, 234.492] -Measurements : [1340.28, 250918, 0.0879431, -0.964828] ---- -Label : 1 -Position : [16.2852, 234.852] -Measurements : [710.914, 168826, 0.682616, -0.931927] ---- -Label : 1 -Position : [904.699, 234.95] -Measurements : [1288.72, 315961, -0.0711211, -1.09406] ---- -Label : 1 -Position : [714.312, 235.072] -Measurements : [1209.51, 258403, 0.177586, -1.38318] ---- -Label : 1 -Position : [863.816, 235.072] -Measurements : [766.333, 86142.7, 0.605089, -0.663795] ---- -Label : 1 -Position : [309.719, 235.559] -Measurements : [835.819, 436572, 1.32409, 0.251109] ---- -Label : 1 -Position : [902.899, 235.683] -Measurements : [1206.66, 332303, 0.0196027, -1.31272] ---- -Label : 1 -Position : [712.613, 237.484] -Measurements : [1349.88, 286555, -0.357925, -1.10482] ---- -Label : 1 -Position : [712.354, 237.977] -Measurements : [1349.88, 286555, -0.357925, -1.10482] ---- -Label : 1 -Position : [20.5315, 238.029] -Measurements : [999.687, 183217, 0.0516971, -1.25309] ---- -Label : 1 -Position : [712.214, 238.36] -Measurements : [1449.11, 265176, -0.603101, -0.696948] ---- -Label : 1 -Position : [865.587, 239.052] -Measurements : [956.124, 120560, 0.0173135, -0.96128] ---- -Label : 1 -Position : [908.872, 239.168] -Measurements : [1200.91, 308237, 0.290084, -1.18105] ---- -Label : 1 -Position : [864.745, 239.275] -Measurements : [985.691, 99090.4, 0.117515, -0.727384] ---- -Label : 1 -Position : [16.872, 239.4] -Measurements : [1051.28, 134981, 0.16584, -0.893489] ---- -Label : 1 -Position : [904.082, 241.154] -Measurements : [985.929, 314813, 0.739275, -0.681034] ---- -Label : 1 -Position : [709.237, 241.399] -Measurements : [1246.95, 290046, -0.0863159, -1.28883] ---- -Label : 1 -Position : [859.941, 241.414] -Measurements : [999.436, 118709, -0.0629683, -1.29704] ---- -Label : 1 -Position : [1265.2, 241.432] -Measurements : [1182.54, 392403, 0.261345, -1.10779] ---- -Label : 1 -Position : [712.264, 241.728] -Measurements : [1372.76, 262720, -0.233318, -1.27239] ---- -Label : 1 -Position : [908.5, 241.804] -Measurements : [1162.23, 266354, 0.359413, -0.89179] ---- -Label : 1 -Position : [1258.66, 241.961] -Measurements : [1380.11, 132033, -0.161983, -0.62962] ---- -Label : 1 -Position : [864.84, 242.752] -Measurements : [868.386, 132788, 0.518228, -0.988712] ---- -Label : 0 -Position : [60.1129, 242.932] -Measurements : [971.734, 29827.2, -0.779773, 0.373738] ---- -Label : 0 -Position : [69.4194, 243.353] -Measurements : [812.667, 19641.8, -0.0692841, -0.810869] ---- -Label : 1 -Position : [1261.98, 244.224] -Measurements : [1464.19, 199725, 0.186734, -0.800198] ---- -Label : 0 -Position : [89.3778, 245.656] -Measurements : [1048.57, 22865.6, 1.52316, 6.60573] ---- -Label : 0 -Position : [61.823, 246.283] -Measurements : [958.351, 50894.5, -0.00415467, -0.677129] ---- -Label : 1 -Position : [909.384, 246.336] -Measurements : [1293.84, 420251, 0.629286, -0.612363] ---- -Label : 1 -Position : [317.44, 247.056] -Measurements : [1159.36, 246411, 0.235154, -0.610881] ---- -Label : 1 -Position : [864.598, 247.06] -Measurements : [762.301, 134820, 0.911803, -0.445678] ---- -Label : 1 -Position : [319.013, 247.654] -Measurements : [1104.21, 250637, 0.397901, -0.618335] ---- -Label : 1 -Position : [175.779, 247.798] -Measurements : [1806.55, 134620, 0.309509, 0.210585] ---- -Label : 0 -Position : [56.7737, 248.059] -Measurements : [1115.22, 21316.3, -1.19701, 3.65595] ---- -Label : 1 -Position : [1265.57, 248.32] -Measurements : [1400.04, 386926, 0.0969364, -1.31645] ---- -Label : 1 -Position : [15.7121, 248.405] -Measurements : [1530.52, 287904, -0.323624, -1.15259] ---- -Label : 0 -Position : [148.004, 248.757] -Measurements : [854.813, 21760, -1.06542, 0.133153] ---- -Label : 1 -Position : [1217.95, 248.832] -Measurements : [1759.71, 361715, -0.213039, -0.93058] ---- -Label : 1 -Position : [1264.53, 249.024] -Measurements : [1379.49, 389613, 0.157555, -1.28122] ---- -Label : 1 -Position : [911.806, 249.282] -Measurements : [1679.18, 384588, 0.282877, -1.10675] ---- -Label : 1 -Position : [865.553, 249.663] -Measurements : [807.124, 204699, 1.02958, -0.302475] ---- -Label : 1 -Position : [1261.11, 249.752] -Measurements : [1404.83, 235070, 0.0643815, -0.710326] ---- -Label : 1 -Position : [177.146, 249.785] -Measurements : [1549.26, 315187, 0.0983008, -0.594274] ---- -Label : 0 -Position : [109.77, 249.914] -Measurements : [1040.92, 10459.9, -1.00389, 0.317522] ---- -Label : 1 -Position : [382.501, 250.062] -Measurements : [1663.87, 892093, 0.0432028, -1.16457] ---- -Label : 1 -Position : [15.3317, 250.121] -Measurements : [1498.05, 334465, -0.36862, -1.2321] ---- -Label : 1 -Position : [15.848, 250.152] -Measurements : [1498.05, 334465, -0.36862, -1.2321] ---- -Label : 1 -Position : [178.664, 250.152] -Measurements : [1327.07, 335769, 0.366534, -0.659771] ---- -Label : 1 -Position : [869.147, 250.29] -Measurements : [684.653, 183146, 1.66781, 1.39747] ---- -Label : 1 -Position : [1213.93, 250.322] -Measurements : [1213.22, 579259, 0.469411, -1.20637] ---- -Label : 1 -Position : [1221.8, 250.708] -Measurements : [1587.12, 604175, -0.00410846, -1.49415] ---- -Label : 1 -Position : [310.122, 250.76] -Measurements : [1212.15, 161163, 0.775936, -0.250635] ---- -Label : 1 -Position : [909.279, 251.316] -Measurements : [1651.8, 443221, 0.0674686, -1.17702] ---- -Label : 1 -Position : [315.586, 251.505] -Measurements : [1322.33, 219288, 0.155867, -0.990853] ---- -Label : 1 -Position : [387.072, 251.664] -Measurements : [1931.64, 390549, 0.0234496, -0.208043] ---- -Label : 1 -Position : [910.92, 251.968] -Measurements : [1668.13, 461662, 0.0513141, -1.22413] ---- -Label : 0 -Position : [126.898, 252.351] -Measurements : [1016.3, 14954.5, -0.048602, -0.46863] ---- -Label : 1 -Position : [1250.34, 252.962] -Measurements : [1247.53, 322880, 0.536272, -0.834595] ---- -Label : 1 -Position : [865.352, 253.504] -Measurements : [853.489, 186985, 0.952944, -0.308027] ---- -Label : 1 -Position : [385.403, 253.939] -Measurements : [2102.93, 424272, 0.0861453, -0.380908] ---- -Label : 1 -Position : [865.352, 254.016] -Measurements : [856.453, 184444, 0.972312, -0.286989] ---- -Label : 1 -Position : [1182.35, 254.449] -Measurements : [1790.33, 484783, 0.0652818, -0.908935] ---- -Label : 1 -Position : [867.44, 254.474] -Measurements : [799.701, 196500, 1.15071, -0.0449687] ---- -Label : 1 -Position : [1196.12, 254.549] -Measurements : [2041.64, 1.02109e+06, -0.411857, -1.54142] ---- -Label : 1 -Position : [860.792, 254.757] -Measurements : [913.826, 138391, 0.559833, -0.863263] ---- -Label : 1 -Position : [908.357, 254.809] -Measurements : [1412.23, 647217, 0.247126, -1.5408] ---- -Label : 1 -Position : [1168.67, 254.831] -Measurements : [1889.79, 719158, 0.194722, -1.24675] ---- -Label : 1 -Position : [310.272, 255.248] -Measurements : [1217.14, 279089, 0.136048, -1.25992] ---- -Label : 0 -Position : [128.566, 255.441] -Measurements : [1109.3, 10061.8, -0.0638821, -1.40931] ---- -Label : 0 -Position : [96.3641, 255.457] -Measurements : [1132.96, 4614.7, -1.08726, 0.881292] ---- -Label : 1 -Position : [310.445, 255.895] -Measurements : [1217.14, 279089, 0.136048, -1.25992] ---- -Label : 1 -Position : [388.99, 256.192] -Measurements : [1854.75, 384452, 0.0546601, -0.696502] ---- -Label : 0 -Position : [60.9885, 256.605] -Measurements : [1113.98, 5532.94, -0.270312, 0.848228] ---- -Label : 1 -Position : [392.192, 256.784] -Measurements : [1501.8, 363354, 0.333766, -0.925513] ---- -Label : 1 -Position : [1180.58, 257.024] -Measurements : [2054.02, 331210, -0.221277, -0.0659788] ---- -Label : 1 -Position : [1194.91, 257.024] -Measurements : [2405.62, 471670, -0.778642, 0.188787] ---- -Label : 1 -Position : [1199.29, 257.124] -Measurements : [1605.35, 1.08056e+06, 0.42958, -1.44912] ---- -Label : 1 -Position : [314.796, 257.433] -Measurements : [1240.97, 511114, 0.392849, -1.28138] ---- -Label : 1 -Position : [1247.65, 257.536] -Measurements : [1223.46, 410436, 0.424089, -1.26315] ---- -Label : 1 -Position : [1249.77, 258.028] -Measurements : [1099.47, 419054, 0.765379, -0.891461] ---- -Label : 1 -Position : [1169.31, 258.56] -Measurements : [2003.74, 564609, 0.333267, -1.26695] ---- -Label : 0 -Position : [126.415, 258.636] -Measurements : [1129.71, 9506.17, -0.0137887, -1.38408] ---- -Label : 0 -Position : [121.642, 258.691] -Measurements : [1088.5, 3613.66, 0.00197447, -0.0827409] ---- -Label : 1 -Position : [390.1, 258.793] -Measurements : [1520, 467194, 0.135573, -1.29076] ---- -Label : 1 -Position : [400.896, 258.832] -Measurements : [1221.76, 239991, 0.442484, -0.513054] ---- -Label : 1 -Position : [1183.53, 259.491] -Measurements : [1973.27, 608379, -0.260823, -1.15329] ---- -Label : 1 -Position : [404.432, 259.873] -Measurements : [1150.14, 189804, 0.76918, 0.402144] ---- -Label : 1 -Position : [1152.51, 260.063] -Measurements : [1204.8, 182669, -0.132697, -0.997134] ---- -Label : 0 -Position : [106.77, 261.044] -Measurements : [1206.28, 1061.79, -0.410888, 0.180622] ---- -Label : 1 -Position : [1130.61, 261.144] -Measurements : [2561.17, 171090, -0.547921, -0.417651] ---- -Label : 1 -Position : [401.118, 261.371] -Measurements : [1123.23, 242041, 0.695339, -0.13039] ---- -Label : 1 -Position : [310.784, 261.392] -Measurements : [1544.54, 506822, -0.163673, -1.30474] ---- -Label : 1 -Position : [1143.48, 261.44] -Measurements : [1644.65, 321743, -0.0512625, -0.222908] ---- -Label : 0 -Position : [109.951, 261.974] -Measurements : [1190.55, 1282.52, -0.0150936, -0.135875] ---- -Label : 1 -Position : [913.452, 262.109] -Measurements : [934.031, 178900, 0.995524, -0.137872] ---- -Label : 1 -Position : [910.92, 262.208] -Measurements : [931.175, 190355, 0.998872, -0.112188] ---- -Label : 1 -Position : [311.33, 262.536] -Measurements : [1620.59, 526601, -0.288033, -1.24224] ---- -Label : 1 -Position : [399.863, 262.561] -Measurements : [1043.41, 249290, 0.564103, -0.323788] ---- -Label : 1 -Position : [1156.51, 262.656] -Measurements : [1462.4, 127159, -0.424693, -0.313032] ---- -Label : 1 -Position : [1147.07, 262.849] -Measurements : [1327.42, 371238, 0.294475, -1.32257] ---- -Label : 1 -Position : [1148.14, 262.952] -Measurements : [1294.73, 319986, 0.319489, -1.14969] ---- -Label : 1 -Position : [1167.25, 263.328] -Measurements : [1410.77, 486064, 1.27753, 0.761903] ---- -Label : 1 -Position : [1277.3, 263.8] -Measurements : [1038.55, 584822, 0.921905, -0.822194] ---- -Label : 1 -Position : [1107.2, 264.013] -Measurements : [2270.68, 226124, 0.0254142, -0.165368] ---- -Label : 1 -Position : [1160.18, 264.541] -Measurements : [1375.61, 208659, -0.14888, -1.05241] ---- -Label : 1 -Position : [908.278, 264.649] -Measurements : [1037.61, 286517, 0.530986, -0.985511] ---- -Label : 1 -Position : [313.04, 264.976] -Measurements : [1618.61, 570162, -0.266746, -1.41386] ---- -Label : 1 -Position : [1108.67, 265.389] -Measurements : [2377.87, 180581, 0.0326631, 0.255546] ---- -Label : 1 -Position : [401.408, 265.488] -Measurements : [947.133, 135441, 0.302264, -1.14469] ---- -Label : 1 -Position : [1126.07, 265.536] -Measurements : [2279.57, 195603, -0.44005, -0.0712758] ---- -Label : 1 -Position : [1134.78, 265.536] -Measurements : [2563.78, 322725, -0.600678, 0.164533] ---- -Label : 1 -Position : [1121.19, 266.037] -Measurements : [1943.03, 310356, -0.431312, -0.823779] ---- -Label : 1 -Position : [913.852, 266.153] -Measurements : [1109.52, 216541, 0.626918, -0.725646] ---- -Label : 1 -Position : [649.269, 266.252] -Measurements : [599.908, 71670.4, 2.3928, 4.93111] ---- -Label : 1 -Position : [1102.36, 266.371] -Measurements : [1796.64, 385031, 0.621278, -0.841863] ---- -Label : 1 -Position : [1116.34, 266.56] -Measurements : [1939.34, 318779, -0.529652, -0.991538] ---- -Label : 1 -Position : [731.72, 266.816] -Measurements : [1678.78, 356094, -0.371261, -1.03643] ---- -Label : 1 -Position : [1111.4, 266.824] -Measurements : [2391.49, 238823, -0.671226, 1.18281] ---- -Label : 1 -Position : [215.528, 267.048] -Measurements : [1048.73, 261716, 0.360984, -1.20366] ---- -Label : 1 -Position : [401.209, 267.138] -Measurements : [848.653, 146968, 0.61596, -0.959477] ---- -Label : 1 -Position : [1275.3, 267.264] -Measurements : [1515.46, 474401, 0.135607, -0.936487] ---- -Label : 1 -Position : [310.784, 267.536] -Measurements : [1784.98, 291353, -0.0732586, -0.961432] ---- -Label : 1 -Position : [732.312, 267.725] -Measurements : [1624.88, 397607, -0.266751, -1.21683] ---- -Label : 1 -Position : [737.788, 267.985] -Measurements : [1495.01, 406252, -0.0158629, -1.35555] ---- -Label : 1 -Position : [1106.62, 268.096] -Measurements : [2313.08, 382844, -0.30995, -0.775084] ---- -Label : 1 -Position : [1087.05, 268.174] -Measurements : [1116.31, 303861, 0.177003, -1.28857] ---- -Label : 1 -Position : [1115.53, 268.414] -Measurements : [2125.92, 383864, -0.4904, -0.522071] ---- -Label : 1 -Position : [1011.65, 268.45] -Measurements : [1449.4, 301681, 0.494051, -0.180817] ---- -Label : 1 -Position : [1015.43, 268.595] -Measurements : [1394.81, 214594, 1.5058, 1.77877] ---- -Label : 1 -Position : [735.943, 268.816] -Measurements : [1467.98, 466659, -0.0267311, -1.39712] ---- -Label : 1 -Position : [1126.18, 268.858] -Measurements : [2266.99, 280026, -0.601528, 0.0327727] ---- -Label : 1 -Position : [912.456, 268.864] -Measurements : [1056.26, 218909, 0.78688, -0.543438] ---- -Label : 1 -Position : [218.636, 269.021] -Measurements : [861.409, 263711, 0.985571, -0.461672] ---- -Label : 1 -Position : [1006.08, 269.187] -Measurements : [1053.38, 498724, 0.880973, -0.493719] ---- -Label : 1 -Position : [418.065, 269.348] -Measurements : [1047.11, 345073, 0.493225, -1.00819] ---- -Label : 1 -Position : [737.864, 269.376] -Measurements : [1377.22, 426667, 0.0218243, -1.34089] ---- -Label : 0 -Position : [95.9609, 269.49] -Measurements : [1213.82, 658.775, -0.438727, 2.60562] ---- -Label : 0 -Position : [68.1328, 269.557] -Measurements : [1072.21, 3184.61, -1.33882, 3.11863] ---- -Label : 1 -Position : [1130.29, 269.584] -Measurements : [2501.73, 275315, -0.678864, 0.10208] ---- -Label : 1 -Position : [314.053, 269.852] -Measurements : [1566.75, 365869, -0.192031, -0.989876] ---- -Label : 1 -Position : [1279.13, 269.863] -Measurements : [1127.24, 620688, 0.865744, -0.656894] ---- -Label : 1 -Position : [646.216, 269.888] -Measurements : [632.767, 85002.5, 1.93003, 2.94433] ---- -Label : 1 -Position : [504.57, 269.916] -Measurements : [1273.55, 200571, 0.942077, 0.818227] ---- -Label : 1 -Position : [1101.6, 269.958] -Measurements : [1666.82, 398976, 0.855085, -0.575542] ---- -Label : 1 -Position : [17.5717, 270.067] -Measurements : [770.188, 189094, 0.675891, -0.738604] ---- -Label : 1 -Position : [1011.9, 270.144] -Measurements : [1379.92, 367636, 0.435525, -0.60348] ---- -Label : 1 -Position : [1099.45, 270.144] -Measurements : [1333.36, 162280, 1.33995, 2.04295] ---- -Label : 1 -Position : [1051.49, 270.18] -Measurements : [877.43, 112723, 0.443687, -1.01122] ---- -Label : 1 -Position : [1048.25, 270.656] -Measurements : [783.695, 115229, 0.976985, -0.304765] ---- -Label : 1 -Position : [741.602, 270.67] -Measurements : [1321.47, 331540, 0.143417, -1.38843] ---- -Label : 1 -Position : [214.695, 270.934] -Measurements : [920.819, 278819, 0.74437, -0.933229] ---- -Label : 1 -Position : [17.0385, 270.938] -Measurements : [770.188, 189094, 0.675891, -0.738604] ---- -Label : 1 -Position : [528.172, 270.996] -Measurements : [886.537, 78060.2, -0.434116, -1.0551] ---- -Label : 1 -Position : [430.351, 271.052] -Measurements : [1192.49, 204780, 0.518345, -0.639888] ---- -Label : 1 -Position : [1089.72, 271.168] -Measurements : [1274.5, 276691, -0.224789, -1.12192] ---- -Label : 1 -Position : [1056.66, 271.427] -Measurements : [1004.53, 125629, 0.209047, -0.959801] ---- -Label : 1 -Position : [1063.69, 271.95] -Measurements : [1199.48, 184916, 0.975555, 0.752526] ---- -Label : 1 -Position : [497.964, 271.993] -Measurements : [1134.95, 141407, 0.251246, 0.0948628] ---- -Label : 1 -Position : [648.455, 272.008] -Measurements : [635.512, 81595.2, 2.05721, 3.32723] ---- -Label : 1 -Position : [1008.3, 272.118] -Measurements : [1108.59, 517710, 0.804248, -0.709147] ---- -Label : 1 -Position : [1006.78, 272.192] -Measurements : [939.057, 480229, 1.2488, 0.245804] ---- -Label : 1 -Position : [913.661, 272.262] -Measurements : [1010.54, 241337, 0.778371, -0.550833] ---- -Label : 1 -Position : [1045.81, 272.426] -Measurements : [687.398, 106725, 1.55161, 1.27755] ---- -Label : 1 -Position : [525.824, 272.656] -Measurements : [779.155, 72012, -0.0877633, -1.51572] ---- -Label : 1 -Position : [424.758, 273.124] -Measurements : [1106.27, 250153, 0.821168, -0.349988] ---- -Label : 1 -Position : [420.864, 273.168] -Measurements : [971.07, 327912, 0.863181, -0.524252] ---- -Label : 1 -Position : [178.328, 273.213] -Measurements : [777.815, 279267, 1.22349, 0.0729725] ---- -Label : 1 -Position : [740.122, 273.634] -Measurements : [1206.5, 377291, 0.275537, -1.35118] ---- -Label : 0 -Position : [101.587, 273.676] -Measurements : [1149.28, 9386.47, -1.92092, 4.36196] ---- -Label : 1 -Position : [314.368, 273.68] -Measurements : [1408.4, 266236, -0.0165045, -1.1435] ---- -Label : 1 -Position : [746.324, 273.844] -Measurements : [1014.73, 264450, 1.02647, 0.13557] ---- -Label : 1 -Position : [921.037, 273.907] -Measurements : [1124.67, 112792, -0.058301, -1.22011] ---- -Label : 1 -Position : [422.099, 274.108] -Measurements : [1027.75, 301602, 0.795925, -0.542135] ---- -Label : 1 -Position : [313.585, 274.132] -Measurements : [1322.23, 249323, -0.0515938, -1.21853] ---- -Label : 1 -Position : [425.984, 274.192] -Measurements : [1051.8, 272227, 0.85042, -0.319709] ---- -Label : 1 -Position : [502.272, 274.192] -Measurements : [1164.56, 304728, 0.669936, -0.490368] ---- -Label : 1 -Position : [16.36, 274.216] -Measurements : [948.219, 141586, 0.406117, -0.555703] ---- -Label : 1 -Position : [742.984, 274.496] -Measurements : [1138.91, 311444, 0.65742, -0.907084] ---- -Label : 1 -Position : [432.128, 274.704] -Measurements : [956.932, 237159, 1.20648, 0.350252] ---- -Label : 1 -Position : [1069.08, 274.914] -Measurements : [1366.27, 660416, 0.487956, -1.31934] ---- -Label : 1 -Position : [1087.83, 275.463] -Measurements : [891.113, 310761, 0.837804, -0.756201] ---- -Label : 0 -Position : [90.9274, 275.472] -Measurements : [1140.01, 16565.8, -1.24683, 1.16419] ---- -Label : 1 -Position : [1069.24, 275.776] -Measurements : [1468.46, 696259, 0.31273, -1.49559] ---- -Label : 1 -Position : [317.099, 276.092] -Measurements : [1457.27, 373348, 0.161787, -0.912438] ---- -Label : 1 -Position : [174.568, 276.264] -Measurements : [1040.6, 268999, 0.436337, -1.16028] ---- -Label : 1 -Position : [1059, 276.288] -Measurements : [1128.86, 172664, 0.185102, -0.839022] ---- -Label : 1 -Position : [529.616, 276.682] -Measurements : [534.419, 52732.9, 1.64724, 1.27171] ---- -Label : 1 -Position : [316.416, 276.752] -Measurements : [1403.25, 359905, 0.222155, -0.835988] ---- -Label : 1 -Position : [170.162, 277.019] -Measurements : [1051.99, 187144, 0.503535, -0.85975] ---- -Label : 1 -Position : [427.213, 277.039] -Measurements : [850.466, 244173, 1.08429, 0.220032] ---- -Label : 1 -Position : [916.552, 277.568] -Measurements : [1408.61, 397947, 0.270215, -1.24312] ---- -Label : 1 -Position : [320.447, 278.196] -Measurements : [1471.97, 415102, 0.120275, -1.11773] ---- -Label : 1 -Position : [431.718, 278.245] -Measurements : [751.49, 200757, 1.53889, 1.33916] ---- -Label : 1 -Position : [309.754, 278.32] -Measurements : [986.378, 229596, 1.05617, 0.135274] ---- -Label : 1 -Position : [756.158, 278.327] -Measurements : [1083.21, 133860, 0.16863, -0.116669] ---- -Label : 1 -Position : [748.053, 279.364] -Measurements : [846.623, 199501, 0.97813, 0.193646] ---- -Label : 1 -Position : [458.066, 279.736] -Measurements : [931.116, 143281, 0.0806578, -1.23171] ---- -Label : 1 -Position : [458.24, 279.824] -Measurements : [931.116, 143281, 0.0806578, -1.23171] ---- -Label : 1 -Position : [1064.38, 279.893] -Measurements : [1477.24, 471231, 0.357937, -1.16676] ---- -Label : 0 -Position : [58.0083, 280.441] -Measurements : [1092.19, 4189, -1.46914, 1.92006] ---- -Label : 1 -Position : [920.136, 281.664] -Measurements : [1413.13, 448823, 0.325568, -1.03628] ---- -Label : 1 -Position : [919.335, 281.879] -Measurements : [1502.83, 404140, 0.210886, -0.979899] ---- -Label : 1 -Position : [751.2, 282.04] -Measurements : [846.636, 179486, 1.11059, 0.34977] ---- -Label : 1 -Position : [23.0543, 282.059] -Measurements : [1060.61, 148375, 0.423553, -1.28133] ---- -Label : 1 -Position : [923.619, 283.372] -Measurements : [936.111, 447133, 1.21034, 0.0298327] ---- -Label : 1 -Position : [320, 283.408] -Measurements : [1223.09, 319019, 0.394555, -1.04137] ---- -Label : 1 -Position : [24.04, 283.944] -Measurements : [1109.57, 185013, 0.71294, -0.317033] ---- -Label : 1 -Position : [315.997, 284.254] -Measurements : [811.549, 105376, 1.51785, 2.92169] ---- -Label : 1 -Position : [456.405, 284.475] -Measurements : [636.738, 126317, 1.13706, -0.175113] ---- -Label : 1 -Position : [329.344, 284.507] -Measurements : [1232.13, 472271, 0.126069, -1.51784] ---- -Label : 0 -Position : [99.7498, 285.182] -Measurements : [1137.23, 5584.55, -1.27538, 1.00551] ---- -Label : 0 -Position : [134.817, 285.219] -Measurements : [881.613, 33029.8, 0.190826, -0.832184] ---- -Label : 1 -Position : [920.04, 285.427] -Measurements : [1098.97, 582074, 0.937742, -0.694146] ---- -Label : 1 -Position : [319.756, 285.975] -Measurements : [1062.69, 245338, 0.659867, -0.730357] ---- -Label : 1 -Position : [25.3173, 286.576] -Measurements : [1390.7, 392585, 0.475601, -0.862898] ---- -Label : 1 -Position : [326.144, 286.992] -Measurements : [1657.95, 321479, -0.262079, -0.556645] ---- -Label : 1 -Position : [1266.57, 287.599] -Measurements : [750.605, 328821, 1.18861, 0.297508] ---- -Label : 0 -Position : [82.092, 287.773] -Measurements : [1124.65, 5412.04, -0.83463, 2.52339] ---- -Label : 1 -Position : [327.007, 288.245] -Measurements : [1677.36, 315908, -0.263151, -0.565996] ---- -Label : 0 -Position : [53.4166, 288.46] -Measurements : [1084.23, 3188.59, -1.87187, 7.62871] ---- -Label : 0 -Position : [88.6119, 289.825] -Measurements : [1087.09, 18243.3, -2.03716, 4.80537] ---- -Label : 1 -Position : [241.64, 290.6] -Measurements : [1209.43, 504772, 0.448527, -1.37282] ---- -Label : 1 -Position : [324.126, 291.315] -Measurements : [1566.78, 298983, -0.0161348, -0.958735] ---- -Label : 1 -Position : [328.704, 291.6] -Measurements : [1633.21, 369999, -0.306372, -0.837135] ---- -Label : 1 -Position : [1271.2, 291.84] -Measurements : [1374.78, 214062, 0.214429, -0.478408] ---- -Label : 1 -Position : [302.592, 292.112] -Measurements : [1169.63, 179053, 0.71615, 0.337299] ---- -Label : 1 -Position : [950.114, 292.328] -Measurements : [1680.49, 291601, 1.32211, 0.949927] ---- -Label : 1 -Position : [1301.92, 292.352] -Measurements : [955.762, 370696, 0.795185, -0.645999] ---- -Label : 1 -Position : [1304.67, 292.855] -Measurements : [979.718, 336644, 0.835387, -0.556105] ---- -Label : 1 -Position : [303.353, 292.861] -Measurements : [1265.01, 181410, 0.710102, 0.106154] ---- -Label : 1 -Position : [245.825, 293.012] -Measurements : [919.762, 436385, 1.24983, 0.0658546] ---- -Label : 0 -Position : [107.608, 293.118] -Measurements : [1138.94, 1207.44, 0.129752, 0.0825713] ---- -Label : 1 -Position : [18.3898, 293.199] -Measurements : [2086.84, 553354, -0.499861, -0.93361] ---- -Label : 0 -Position : [103.183, 293.283] -Measurements : [1152.1, 969.171, 0.477588, 0.25307] ---- -Label : 1 -Position : [18.408, 293.672] -Measurements : [2086.84, 553354, -0.499861, -0.93361] ---- -Label : 0 -Position : [88.8033, 294.394] -Measurements : [1098.51, 11313.5, -3.58635, 13.8647] ---- -Label : 1 -Position : [306.176, 294.672] -Measurements : [1590.16, 252463, -0.0388323, -0.731191] ---- -Label : 1 -Position : [237.841, 294.969] -Measurements : [870.203, 441129, 1.23734, -0.0204835] ---- -Label : 1 -Position : [1306.59, 295.279] -Measurements : [658.351, 211218, 2.04249, 3.60718] ---- -Label : 0 -Position : [60.9388, 296.015] -Measurements : [1116.95, 1229.84, -1.56664, 3.49758] ---- -Label : 1 -Position : [299.216, 296.028] -Measurements : [900.519, 209900, 0.852429, -0.26981] ---- -Label : 1 -Position : [325.213, 296.53] -Measurements : [1405.13, 297875, 0.283657, -0.866397] ---- -Label : 1 -Position : [1275.42, 296.595] -Measurements : [1302.59, 305126, 0.494154, -0.588778] ---- -Label : 1 -Position : [1266.34, 296.68] -Measurements : [1298.97, 495857, 0.221354, -1.40382] ---- -Label : 1 -Position : [309.328, 296.733] -Measurements : [1853.68, 244272, -0.47485, -0.211116] ---- -Label : 1 -Position : [307.33, 296.858] -Measurements : [1784.36, 267463, -0.148655, -0.787287] ---- -Label : 1 -Position : [949.856, 296.888] -Measurements : [1770.62, 407193, 0.170323, -0.727444] ---- -Label : 1 -Position : [309.656, 297.175] -Measurements : [1901.04, 232764, -0.380573, -0.113782] ---- -Label : 1 -Position : [920.403, 297.197] -Measurements : [871.386, 96826.8, 0.503393, 0.0888838] ---- -Label : 1 -Position : [331.776, 297.232] -Measurements : [1420.68, 292436, -0.352953, -1.10581] ---- -Label : 1 -Position : [946.274, 297.246] -Measurements : [1599.99, 398568, -0.00129816, -0.766958] ---- -Label : 1 -Position : [251.368, 297.256] -Measurements : [993.275, 297765, 0.849048, -0.309308] ---- -Label : 1 -Position : [334.915, 297.361] -Measurements : [1084.38, 351454, 0.426584, -1.24256] ---- -Label : 1 -Position : [1274.27, 297.984] -Measurements : [1332.96, 331269, 0.468437, -0.752828] ---- -Label : 1 -Position : [22.0759, 297.999] -Measurements : [1652.09, 1.02569e+06, 0.211875, -1.65132] ---- -Label : 1 -Position : [311.296, 298.256] -Measurements : [1904.36, 261410, -0.702658, 0.32137] ---- -Label : 1 -Position : [1279.21, 298.307] -Measurements : [764.869, 140157, 0.896752, -0.579133] ---- -Label : 0 -Position : [69.7364, 298.37] -Measurements : [1089.44, 758.82, 0.398235, 0.174431] ---- -Label : 1 -Position : [917.303, 298.463] -Measurements : [897.027, 103491, 0.573066, 0.103263] ---- -Label : 1 -Position : [760.643, 298.511] -Measurements : [1266.55, 482232, 0.14761, -1.41716] ---- -Label : 1 -Position : [249.713, 298.849] -Measurements : [923.881, 333406, 0.947606, -0.355207] ---- -Label : 1 -Position : [919.136, 298.936] -Measurements : [946.786, 100771, 0.478163, -0.0212239] ---- -Label : 1 -Position : [757.222, 299.487] -Measurements : [1173.88, 493903, 0.320998, -1.36487] ---- -Label : 1 -Position : [248.122, 299.506] -Measurements : [855.49, 348116, 1.14937, -0.0696434] ---- -Label : 1 -Position : [317.066, 300.764] -Measurements : [1403.29, 280627, 0.168902, -1.20865] ---- -Label : 1 -Position : [328.18, 300.867] -Measurements : [1576.27, 251724, -0.352038, -0.661689] ---- -Label : 1 -Position : [760.928, 300.984] -Measurements : [1313.81, 416547, 0.211536, -1.34137] ---- -Label : 0 -Position : [83.0857, 301.136] -Measurements : [1035.29, 17717.4, -1.12875, -0.0603737] ---- -Label : 1 -Position : [313.574, 301.201] -Measurements : [1721.09, 342123, -0.319195, -0.541381] ---- -Label : 1 -Position : [915.915, 301.724] -Measurements : [788.007, 96760.5, 0.517847, -0.515003] ---- -Label : 1 -Position : [314.88, 301.84] -Measurements : [1661.9, 323981, -0.126379, -0.61667] ---- -Label : 1 -Position : [312.988, 301.877] -Measurements : [1741.87, 349458, -0.422613, -0.414977] ---- -Label : 1 -Position : [922.947, 302.058] -Measurements : [842.803, 140645, 0.708456, -0.642811] ---- -Label : 1 -Position : [863.369, 302.592] -Measurements : [1190.46, 653707, 0.437242, -1.42451] ---- -Label : 0 -Position : [73.1564, 302.927] -Measurements : [1063.72, 1571.58, -1.30126, 2.84423] ---- -Label : 1 -Position : [327.977, 303.362] -Measurements : [1374.89, 362764, -0.025753, -1.1578] ---- -Label : 1 -Position : [920.672, 304.056] -Measurements : [796.024, 135541, 0.988091, -0.0791952] ---- -Label : 1 -Position : [329.562, 304.413] -Measurements : [1460.62, 367780, -0.306666, -0.969825] ---- -Label : 1 -Position : [860.914, 304.582] -Measurements : [1465.11, 534631, -0.0360755, -1.30213] ---- -Label : 1 -Position : [858.72, 305.08] -Measurements : [1509.21, 378380, 0.120227, -0.875933] ---- -Label : 0 -Position : [141.946, 305.672] -Measurements : [1002.69, 8849.39, -0.255284, -1.37972] ---- -Label : 1 -Position : [332.288, 305.936] -Measurements : [1537.35, 457147, -0.304897, -1.12936] ---- -Label : 0 -Position : [73.7017, 307.667] -Measurements : [1036.37, 4929.06, -2.51853, 7.21282] ---- -Label : 1 -Position : [274.663, 307.725] -Measurements : [1783.92, 511878, -0.317551, -1.27095] ---- -Label : 1 -Position : [318.464, 308.496] -Measurements : [1011.89, 221130, 0.296984, -0.978957] ---- -Label : 0 -Position : [97.176, 309.451] -Measurements : [1058.1, 69435.8, 1.18385, 3.79824] ---- -Label : 1 -Position : [852.789, 310.726] -Measurements : [937.268, 343837, 1.06517, 0.251392] ---- -Label : 1 -Position : [320.521, 310.807] -Measurements : [841.622, 155065, 0.508284, -1.18065] ---- -Label : 1 -Position : [278.504, 311.08] -Measurements : [1513.87, 542416, -0.160913, -1.29831] ---- -Label : 1 -Position : [855.136, 311.224] -Measurements : [965.681, 422064, 1.06772, 0.0207412] ---- -Label : 1 -Position : [180.397, 311.562] -Measurements : [878.252, 502288, 1.09733, -0.399046] ---- -Label : 1 -Position : [317.416, 313.271] -Measurements : [676.317, 150744, 1.09745, -0.225275] ---- -Label : 1 -Position : [282.503, 313.562] -Measurements : [1098.62, 561433, 0.660325, -1.02543] ---- -Label : 0 -Position : [107.163, 313.761] -Measurements : [1136.26, 34082.8, 2.67994, 10.7748] ---- -Label : 0 -Position : [101.056, 313.921] -Measurements : [1005.03, 34591.4, -1.2708, 0.688471] ---- -Label : 1 -Position : [1292.36, 314.111] -Measurements : [1329.83, 361625, 0.536734, 0.451267] ---- -Label : 1 -Position : [851.409, 315.023] -Measurements : [518.923, 65611, 3.04831, 8.99739] ---- -Label : 1 -Position : [171.161, 315.662] -Measurements : [1166.81, 347315, 0.114413, -1.49268] ---- -Label : 1 -Position : [175.592, 315.688] -Measurements : [1324.94, 428503, 0.0213319, -1.40666] ---- -Label : 0 -Position : [126.002, 316.031] -Measurements : [1013.5, 6676.78, -0.423331, -0.903568] ---- -Label : 1 -Position : [1289.13, 317.056] -Measurements : [1501.1, 375295, 0.550041, -0.423567] ---- -Label : 1 -Position : [36.6487, 318.64] -Measurements : [892.864, 160753, 0.504941, 0.140527] ---- -Label : 0 -Position : [125.931, 319.107] -Measurements : [1040.87, 4890.14, -0.827509, -0.402262] ---- -Label : 1 -Position : [30.0153, 320.214] -Measurements : [748.116, 203575, 0.936712, 0.052045] ---- -Label : 1 -Position : [1287.55, 320.754] -Measurements : [1689.01, 354636, 0.0633067, -0.810724] ---- -Label : 1 -Position : [1297.4, 321.937] -Measurements : [1304.25, 118013, 0.104143, -0.45438] ---- -Label : 1 -Position : [1293.74, 322.688] -Measurements : [1461.73, 260869, 0.75782, 0.380715] ---- -Label : 1 -Position : [32.232, 323.36] -Measurements : [1124.61, 194880, 0.0505048, -0.763606] ---- -Label : 0 -Position : [76.8648, 324.006] -Measurements : [1036.07, 2884.28, -1.72646, 3.59258] ---- -Label : 1 -Position : [1298.34, 324.213] -Measurements : [1342.83, 161102, 0.218354, -0.630706] ---- -Label : 1 -Position : [897.156, 324.979] -Measurements : [801.316, 273652, 1.11685, 0.472567] ---- -Label : 1 -Position : [30.0511, 325.259] -Measurements : [1221.26, 161346, -0.149396, -0.575983] ---- -Label : 1 -Position : [898.656, 327.096] -Measurements : [900.46, 295303, 0.911096, -0.1566] ---- -Label : 1 -Position : [1295.33, 327.368] -Measurements : [1534.61, 306883, 0.337662, -0.275422] ---- -Label : 1 -Position : [28.136, 328.992] -Measurements : [1137.4, 208439, -0.176804, -1.21257] ---- -Label : 1 -Position : [1299.88, 329.856] -Measurements : [1868.54, 474080, 0.300947, -0.990441] ---- -Label : 1 -Position : [1295.53, 330.382] -Measurements : [1676.95, 511605, 0.300156, -0.778508] ---- -Label : 1 -Position : [896.2, 331.308] -Measurements : [745.264, 314389, 1.45924, 0.790869] ---- -Label : 1 -Position : [31.393, 332.068] -Measurements : [1478.44, 305886, 0.15462, -0.427132] ---- -Label : 1 -Position : [24.995, 332.951] -Measurements : [1004.96, 319137, 0.450735, -1.16757] ---- -Label : 1 -Position : [35.304, 333.088] -Measurements : [1513.98, 266411, 0.837431, -0.169678] ---- -Label : 1 -Position : [819.585, 335.624] -Measurements : [965.229, 172634, 0.236331, -0.664568] ---- -Label : 1 -Position : [32.9505, 335.688] -Measurements : [1660.38, 405910, -0.0888662, -1.11764] ---- -Label : 1 -Position : [388.574, 338.077] -Measurements : [1447.9, 1.08173e+06, 0.354629, -1.54885] ---- -Label : 1 -Position : [379.864, 339.331] -Measurements : [1453.77, 583560, 0.233993, -1.32254] ---- -Label : 1 -Position : [30.184, 339.744] -Measurements : [1722.53, 324170, -0.15393, -0.845581] ---- -Label : 1 -Position : [823.904, 339.896] -Measurements : [1025.37, 218483, 0.41484, -1.05394] ---- -Label : 1 -Position : [34.9349, 340.373] -Measurements : [1653.74, 352450, 0.173884, -1.07396] ---- -Label : 1 -Position : [384.512, 341.016] -Measurements : [1824.12, 664849, -0.0639393, -1.36818] ---- -Label : 1 -Position : [828.343, 341.341] -Measurements : [759.314, 234096, 1.27466, 0.175611] ---- -Label : 1 -Position : [31.5786, 342.049] -Measurements : [1783.36, 255148, -0.283535, -0.372619] ---- -Label : 1 -Position : [28.3428, 345.376] -Measurements : [1622.15, 158889, -0.389945, -0.751115] ---- -Label : 0 -Position : [128.417, 347.494] -Measurements : [966.241, 9470.65, -0.427983, -0.896549] ---- -Label : 1 -Position : [27.1152, 347.569] -Measurements : [1385.11, 243190, -0.218321, -1.37813] ---- -Label : 1 -Position : [28.136, 348.448] -Measurements : [1354.97, 291130, -0.24537, -1.52809] ---- -Label : 1 -Position : [225.383, 351.282] -Measurements : [1295.44, 543542, 0.426287, -1.28963] ---- -Label : 0 -Position : [116.786, 352.671] -Measurements : [1058.12, 12116.4, -2.85104, 9.29506] ---- -Label : 0 -Position : [75.7368, 354.428] -Measurements : [1166.54, 15632.4, 0.894411, 0.616058] ---- -Label : 1 -Position : [248.515, 354.812] -Measurements : [1673.76, 799735, -0.145397, -1.43538] ---- -Label : 1 -Position : [494.684, 354.912] -Measurements : [1102.73, 384686, 0.55021, -0.81691] ---- -Label : 1 -Position : [224.232, 355.104] -Measurements : [1503.57, 547230, 0.0527112, -1.52581] ---- -Label : 1 -Position : [1127.2, 355.598] -Measurements : [2074.99, 518193, -0.127428, -0.528294] ---- -Label : 1 -Position : [195.826, 356.224] -Measurements : [1082.07, 447669, 0.668964, -1.10361] ---- -Label : 0 -Position : [116.528, 356.833] -Measurements : [1029.76, 17913.7, -1.57809, 2.68615] ---- -Label : 1 -Position : [491.52, 356.84] -Measurements : [1473.24, 249410, 0.051303, -0.701314] ---- -Label : 1 -Position : [32.7376, 358.172] -Measurements : [651.011, 91448.5, 1.12431, 0.166156] ---- -Label : 1 -Position : [250.856, 358.176] -Measurements : [1872.36, 643647, -0.398515, -1.24] ---- -Label : 1 -Position : [238.575, 358.399] -Measurements : [971.085, 358901, 0.319499, -1.43387] ---- -Label : 1 -Position : [187.979, 358.403] -Measurements : [978.642, 459926, 0.606149, -1.29002] ---- -Label : 1 -Position : [241.14, 359.299] -Measurements : [1337.75, 254469, -0.313284, -0.814633] ---- -Label : 1 -Position : [228.903, 359.66] -Measurements : [943.164, 542799, 1.27245, 0.224254] ---- -Label : 1 -Position : [191.976, 360.224] -Measurements : [1198.38, 403389, 0.441222, -1.23737] ---- -Label : 1 -Position : [1130.68, 360.296] -Measurements : [2754.45, 546386, -0.828121, -0.255403] ---- -Label : 1 -Position : [39.073, 360.72] -Measurements : [801.782, 71520.4, 0.527475, -0.79077] ---- -Label : 1 -Position : [36.328, 360.736] -Measurements : [740.09, 76900.7, 0.948317, -0.264433] ---- -Label : 1 -Position : [207.336, 360.736] -Measurements : [1083.65, 351551, 0.59436, -0.972166] ---- -Label : 1 -Position : [240.616, 360.736] -Measurements : [1279.16, 259201, -0.336081, -0.905844] ---- -Label : 1 -Position : [209.926, 360.996] -Measurements : [1096.49, 335651, 0.644743, -0.93957] ---- -Label : 1 -Position : [255.149, 361.25] -Measurements : [1025.33, 820394, 1.13797, -0.401646] ---- -Label : 1 -Position : [492.046, 361.688] -Measurements : [1324.93, 304446, 0.359948, -0.787004] ---- -Label : 1 -Position : [202.507, 362.779] -Measurements : [758.795, 326023, 1.61784, 1.14283] ---- -Label : 1 -Position : [1125.69, 364.397] -Measurements : [1748.95, 385271, 1.11641, 0.443763] ---- -Label : 0 -Position : [81.9451, 364.568] -Measurements : [1063.34, 5854.01, 1.05216, 1.8461] ---- -Label : 1 -Position : [1178.06, 365.985] -Measurements : [886.928, 465178, 1.2481, 0.126126] ---- -Label : 1 -Position : [273.896, 366.368] -Measurements : [1143.48, 374598, 0.659708, -0.333251] ---- -Label : 1 -Position : [284.648, 367.392] -Measurements : [954.907, 45656.6, -0.231089, -0.665454] ---- -Label : 1 -Position : [1173.93, 367.744] -Measurements : [1157.86, 403720, 0.581964, -0.807707] ---- -Label : 1 -Position : [525.596, 367.949] -Measurements : [783.268, 364467, 1.24925, 0.334774] ---- -Label : 1 -Position : [539.152, 368.117] -Measurements : [1193.28, 631823, 0.900507, -0.490804] ---- -Label : 1 -Position : [278.747, 369.105] -Measurements : [1012.5, 237941, 1.47042, 2.26681] ---- -Label : 1 -Position : [520.393, 369.211] -Measurements : [1048.66, 416895, 0.492326, -1.15095] ---- -Label : 1 -Position : [277.177, 370.136] -Measurements : [945.034, 189340, 1.48244, 2.90752] ---- -Label : 1 -Position : [1171.98, 370.626] -Measurements : [931.69, 433750, 1.15905, -0.0595133] ---- -Label : 1 -Position : [534.528, 370.664] -Measurements : [1029.14, 364186, 1.57702, 2.36234] ---- -Label : 1 -Position : [287.482, 371.23] -Measurements : [948.184, 59057.7, -0.36291, -0.629689] ---- -Label : 1 -Position : [284.838, 372.084] -Measurements : [899.306, 58401.6, -0.24318, -0.633071] ---- -Label : 1 -Position : [524.288, 372.2] -Measurements : [1197.62, 302897, 0.49929, -1.03499] ---- -Label : 0 -Position : [77.9561, 372.201] -Measurements : [1079.98, 4207.35, 1.0146, 1.71099] ---- -Label : 1 -Position : [538.046, 372.35] -Measurements : [988.993, 339383, 0.971352, -0.151821] ---- -Label : 0 -Position : [150.227, 372.757] -Measurements : [1229.14, 32996.4, 0.494297, -0.745172] ---- -Label : 1 -Position : [293.1, 373.368] -Measurements : [1033.2, 93170.5, -0.255542, -1.0312] ---- -Label : 1 -Position : [293.376, 373.784] -Measurements : [1033.2, 93170.5, -0.255542, -1.0312] ---- -Label : 1 -Position : [289.037, 374.518] -Measurements : [1029.61, 71054.5, -0.145656, -0.636408] ---- -Label : 0 -Position : [84.4049, 374.771] -Measurements : [1094.08, 3891.08, 1.58465, 3.49479] ---- -Label : 0 -Position : [120.432, 375.219] -Measurements : [1059.57, 5005.6, -1.1571, 1.0382] ---- -Label : 0 -Position : [78.0707, 375.487] -Measurements : [1096, 2134.87, 0.634839, 0.533664] ---- -Label : 0 -Position : [100.413, 375.896] -Measurements : [1008.28, 2170.33, -0.190925, 0.356895] ---- -Label : 0 -Position : [76.9407, 376.385] -Measurements : [1086.16, 2849, 0.236747, 0.129677] ---- -Label : 0 -Position : [130.29, 377.145] -Measurements : [803.267, 33189.8, 0.0741495, -1.07347] ---- -Label : 0 -Position : [92.1529, 377.833] -Measurements : [1097.99, 23128, 1.60171, 2.06603] ---- -Label : 1 -Position : [342.528, 377.88] -Measurements : [2102.24, 570240, -0.402955, -0.962667] ---- -Label : 1 -Position : [339.165, 379.291] -Measurements : [1648.96, 1.05003e+06, 0.00722861, -1.66277] ---- -Label : 1 -Position : [543.092, 379.536] -Measurements : [957.537, 484110, 1.15973, -0.240661] ---- -Label : 1 -Position : [341.942, 380.04] -Measurements : [2050.94, 955353, -0.509036, -1.19656] ---- -Label : 1 -Position : [302.487, 380.29] -Measurements : [1173.98, 306768, 0.517941, -0.576989] ---- -Label : 1 -Position : [303.104, 380.44] -Measurements : [1196.92, 304257, 0.46022, -0.652252] ---- -Label : 1 -Position : [538.112, 380.904] -Measurements : [1462.03, 477712, -0.0318375, -1.56297] ---- -Label : 1 -Position : [306.948, 381.111] -Measurements : [1084.41, 333473, 0.793099, -0.507717] ---- -Label : 0 -Position : [88.715, 381.723] -Measurements : [1182.13, 22355.7, 0.821427, 0.160565] ---- -Label : 0 -Position : [83.9033, 381.786] -Measurements : [1159.53, 12281.8, 1.15369, 0.567158] ---- -Label : 1 -Position : [306.29, 382.778] -Measurements : [1067.05, 332709, 0.879665, -0.402924] ---- -Label : 0 -Position : [128.7, 383.382] -Measurements : [964.54, 14395.5, -0.909606, 0.452174] ---- -Label : 1 -Position : [307.712, 384.024] -Measurements : [974.267, 307598, 1.31357, 0.6633] ---- -Label : 1 -Position : [542.991, 384.142] -Measurements : [800.182, 341701, 1.78415, 1.97101] ---- -Label : 1 -Position : [33.768, 384.288] -Measurements : [895.824, 389002, 1.04428, 0.136469] ---- -Label : 1 -Position : [536.073, 384.29] -Measurements : [1412.41, 447854, 0.018311, -1.41854] ---- -Label : 1 -Position : [300.132, 384.395] -Measurements : [1134.16, 182243, 0.36602, -0.510284] ---- -Label : 0 -Position : [158.793, 384.688] -Measurements : [1111.14, 3448.12, 1.253, 2.86972] ---- -Label : 1 -Position : [531.32, 385.221] -Measurements : [1307.26, 334628, 0.361351, -1.09807] ---- -Label : 1 -Position : [37.3792, 385.999] -Measurements : [1415.47, 544143, 0.291589, -1.07497] ---- -Label : 0 -Position : [139.365, 386.319] -Measurements : [947.557, 10998, -0.0164515, 0.296629] ---- -Label : 1 -Position : [535.04, 386.536] -Measurements : [1242.39, 374640, 0.38586, -1.17141] ---- -Label : 1 -Position : [36.8771, 386.802] -Measurements : [1558.57, 639819, 0.534264, -0.486779] ---- -Label : 1 -Position : [41.448, 387.872] -Measurements : [1798.25, 571746, 0.245078, -0.362471] ---- -Label : 1 -Position : [38.4414, 389.267] -Measurements : [1888.62, 689619, 0.227818, -0.778128] ---- -Label : 0 -Position : [91.5758, 389.307] -Measurements : [1046.18, 19292.2, -1.00928, 1.27428] ---- -Label : 1 -Position : [42.6246, 391.71] -Measurements : [1499.46, 652634, 0.552446, -0.592604] ---- -Label : 1 -Position : [723.528, 394.24] -Measurements : [1293.89, 534656, 0.679288, -0.906691] ---- -Label : 1 -Position : [728.358, 394.385] -Measurements : [913.576, 452985, 1.67101, 1.66701] ---- -Label : 1 -Position : [540.672, 394.728] -Measurements : [1036.92, 192689, 0.928732, 0.0844256] ---- -Label : 0 -Position : [120.329, 394.979] -Measurements : [1030.67, 2088.07, -0.00292882, 0.536204] ---- -Label : 1 -Position : [53.7728, 396.652] -Measurements : [1747.54, 297395, -0.0596843, -0.46686] ---- -Label : 1 -Position : [535.693, 396.687] -Measurements : [797.866, 72402.5, 0.441314, -0.190174] ---- -Label : 1 -Position : [541.504, 397.342] -Measurements : [889.472, 163983, 1.30112, 1.33362] ---- -Label : 1 -Position : [350.908, 398.532] -Measurements : [711.83, 191618, 1.49223, 1.16671] ---- -Label : 1 -Position : [724.205, 398.75] -Measurements : [914.407, 561175, 1.41964, 0.668516] ---- -Label : 1 -Position : [49.64, 399.136] -Measurements : [1760.79, 435440, -0.108817, -1.11199] ---- -Label : 0 -Position : [154.43, 402.69] -Measurements : [1092.67, 22119.1, -1.14498, 1.42765] ---- -Label : 1 -Position : [353.28, 402.968] -Measurements : [774.807, 170130, 1.42406, 1.2049] ---- -Label : 1 -Position : [51.6486, 403.384] -Measurements : [1166.88, 578105, 0.863849, -0.616763] ---- -Label : 0 -Position : [117.844, 404.396] -Measurements : [1114.43, 17962.6, -0.886597, 1.18863] ---- -Label : 1 -Position : [62.6858, 404.419] -Measurements : [1178.35, 195504, -0.197495, -1.1333] ---- -Label : 1 -Position : [797.47, 406.143] -Measurements : [507.064, 68048.2, 2.42962, 5.13555] ---- -Label : 1 -Position : [916.831, 406.245] -Measurements : [762.472, 180066, 1.11748, 0.000988982] ---- -Label : 1 -Position : [353.501, 407.75] -Measurements : [553.966, 92119.4, 2.7191, 8.09168] ---- -Label : 1 -Position : [62.44, 407.84] -Measurements : [1245.64, 169765, -0.405401, -0.676118] ---- -Label : 1 -Position : [778.594, 407.894] -Measurements : [837.78, 215531, 0.113253, -1.73944] ---- -Label : 1 -Position : [915.08, 408.576] -Measurements : [807.777, 176175, 0.957463, -0.240786] ---- -Label : 1 -Position : [782.408, 409.088] -Measurements : [933.179, 138430, -0.216412, -1.48188] ---- -Label : 1 -Position : [1221.77, 410.184] -Measurements : [622.695, 204200, 2.32691, 4.57398] ---- -Label : 1 -Position : [909.181, 410.456] -Measurements : [791.064, 183726, 0.602742, -0.857243] ---- -Label : 1 -Position : [909.936, 410.463] -Measurements : [791.064, 183726, 0.602742, -0.857243] ---- -Label : 1 -Position : [60.9822, 410.709] -Measurements : [1115.57, 283113, 0.167235, -0.842756] ---- -Label : 1 -Position : [1217.52, 410.993] -Measurements : [873.734, 255944, 1.00293, 0.00975804] ---- -Label : 1 -Position : [792.648, 411.136] -Measurements : [809.283, 112909, 0.610934, -0.836807] ---- -Label : 1 -Position : [797.575, 411.37] -Measurements : [646.996, 115608, 1.21774, 0.226855] ---- -Label : 1 -Position : [68.061, 411.652] -Measurements : [1527.87, 247014, 0.0294026, -0.994186] ---- -Label : 1 -Position : [910.294, 412.547] -Measurements : [877.468, 169613, 0.63092, -0.651071] ---- -Label : 1 -Position : [909.448, 413.184] -Measurements : [801.535, 146704, 0.620722, -0.356229] ---- -Label : 1 -Position : [766.03, 413.862] -Measurements : [1172.6, 420361, 0.143245, -1.58112] ---- -Label : 1 -Position : [786.791, 413.942] -Measurements : [856.077, 110795, 0.25185, -1.26631] ---- -Label : 1 -Position : [1216.94, 414.368] -Measurements : [899.022, 240505, 1.06321, 0.0829718] ---- -Label : 1 -Position : [813.192, 415.232] -Measurements : [1239.04, 426480, 0.267245, -1.28562] ---- -Label : 1 -Position : [930.922, 415.586] -Measurements : [685.414, 204379, 1.13662, -0.232027] ---- -Label : 1 -Position : [768.166, 415.721] -Measurements : [1317.51, 403060, -0.172306, -1.51637] ---- -Label : 1 -Position : [873.984, 415.872] -Measurements : [590.38, 105650, 1.47544, 0.897345] ---- -Label : 1 -Position : [65.512, 416.032] -Measurements : [1700.58, 290380, -0.00680515, -0.94794] ---- -Label : 1 -Position : [768.584, 416.256] -Measurements : [1324.42, 393554, -0.179794, -1.47335] ---- -Label : 1 -Position : [893.119, 416.688] -Measurements : [939.527, 283659, 0.743562, -0.525585] ---- -Label : 1 -Position : [895.112, 417.28] -Measurements : [1010.12, 246797, 0.683016, -0.43508] ---- -Label : 1 -Position : [898.12, 417.804] -Measurements : [925.398, 290458, 0.789421, -0.527365] ---- -Label : 1 -Position : [74.6812, 419.043] -Measurements : [2073.43, 401342, -0.473729, -0.575139] ---- -Label : 1 -Position : [814.578, 419.262] -Measurements : [1315.69, 325948, 0.0345118, -1.23242] ---- -Label : 1 -Position : [871.048, 419.328] -Measurements : [733.64, 129512, 0.892418, -0.248229] ---- -Label : 1 -Position : [933, 419.328] -Measurements : [809.058, 194305, 0.70812, -0.886597] ---- -Label : 1 -Position : [812.492, 419.453] -Measurements : [1345.87, 287357, 0.113904, -1.18225] ---- -Label : 1 -Position : [839.957, 419.915] -Measurements : [694.174, 213573, 1.54485, 1.61826] ---- -Label : 1 -Position : [929.023, 419.974] -Measurements : [753.367, 175046, 0.94208, -0.369347] ---- -Label : 1 -Position : [873.528, 420.529] -Measurements : [704.959, 134564, 1.02537, -0.144874] ---- -Label : 1 -Position : [61.7148, 420.762] -Measurements : [1297.15, 418280, 0.0260362, -1.39948] ---- -Label : 1 -Position : [67.1091, 421.524] -Measurements : [2090.08, 373632, -0.210323, -0.807548] ---- -Label : 1 -Position : [752.214, 421.931] -Measurements : [537.312, 68072.8, 2.30821, 5.25888] ---- -Label : 1 -Position : [70.12, 422.4] -Measurements : [2191.55, 339292, -0.23023, -0.915324] ---- -Label : 1 -Position : [937.318, 423.034] -Measurements : [695.305, 185857, 1.32909, 0.562202] ---- -Label : 1 -Position : [837.256, 423.936] -Measurements : [925.997, 238192, 1.06973, 0.37556] ---- -Label : 1 -Position : [832.613, 425.314] -Measurements : [875.074, 270150, 1.01821, 0.275156] ---- -Label : 1 -Position : [851.894, 425.835] -Measurements : [832.761, 248294, 0.902637, -0.383226] ---- -Label : 1 -Position : [749.64, 425.984] -Measurements : [948.649, 228955, 0.59698, -0.368217] ---- -Label : 1 -Position : [932.488, 425.984] -Measurements : [900.822, 204635, 0.88108, -0.337504] ---- -Label : 1 -Position : [849.053, 426.665] -Measurements : [897.195, 255519, 0.571282, -0.869123] ---- -Label : 1 -Position : [76.264, 428.544] -Measurements : [2078.04, 544048, -0.674, -0.757565] ---- -Label : 1 -Position : [932.095, 428.584] -Measurements : [975.434, 208625, 0.782362, -0.425091] ---- -Label : 1 -Position : [934.89, 428.811] -Measurements : [1028.9, 241061, 0.446194, -0.928905] ---- -Label : 1 -Position : [849.032, 429.056] -Measurements : [1000.48, 196126, 0.467166, -0.538497] ---- -Label : 1 -Position : [77.6479, 429.295] -Measurements : [1910.85, 706300, -0.350016, -1.35219] ---- -Label : 1 -Position : [746.676, 429.75] -Measurements : [820.053, 132976, 0.335664, -1.09905] ---- -Label : 1 -Position : [936.584, 430.08] -Measurements : [1140.85, 249119, 0.263103, -1.2232] ---- -Label : 1 -Position : [928.885, 430.352] -Measurements : [944.775, 82908.1, 2.11441, 4.56546] ---- -Label : 1 -Position : [738.527, 430.575] -Measurements : [734.847, 139994, 0.397738, -1.51246] ---- -Label : 1 -Position : [74.5684, 432.482] -Measurements : [1827.99, 720857, -0.278373, -1.50905] ---- -Label : 1 -Position : [737.864, 435.2] -Measurements : [1140.51, 105335, -0.643868, 0.011529] ---- -Label : 1 -Position : [672.865, 435.417] -Measurements : [1248.64, 112865, -0.6497, -0.0570891] ---- -Label : 1 -Position : [682.741, 436.392] -Measurements : [898.573, 104883, 0.0898886, -1.54981] ---- -Label : 1 -Position : [656.46, 436.438] -Measurements : [1432.53, 206091, 0.0160037, -0.296242] ---- -Label : 1 -Position : [937.347, 437.214] -Measurements : [1049.51, 321651, 0.84056, -0.508625] ---- -Label : 1 -Position : [658.622, 437.368] -Measurements : [1482.82, 215613, -0.027055, -0.532193] ---- -Label : 1 -Position : [640.604, 437.684] -Measurements : [1082.08, 153135, -0.222277, -0.77468] ---- -Label : 1 -Position : [734.722, 437.912] -Measurements : [1299.21, 171901, 0.266516, -0.402334] ---- -Label : 1 -Position : [937.457, 437.972] -Measurements : [1049.51, 321651, 0.84056, -0.508625] ---- -Label : 1 -Position : [939.144, 438.272] -Measurements : [942.2, 368227, 0.999028, -0.387843] ---- -Label : 1 -Position : [672.84, 439.808] -Measurements : [1341.3, 50934.4, -0.237102, -0.109797] ---- -Label : 1 -Position : [731.47, 440.295] -Measurements : [1543.35, 192591, -0.541051, -0.550148] ---- -Label : 1 -Position : [680.008, 440.832] -Measurements : [1002.36, 81505.6, -0.463097, -0.845906] ---- -Label : 1 -Position : [648.203, 441.225] -Measurements : [1456.05, 76576, -0.301807, -0.307563] ---- -Label : 1 -Position : [653.384, 441.344] -Measurements : [1440.78, 201937, 0.232302, -0.554821] ---- -Label : 1 -Position : [663.112, 441.344] -Measurements : [1519.93, 156782, -0.36463, -0.306364] ---- -Label : 1 -Position : [731.351, 441.687] -Measurements : [1609.03, 156861, -0.587035, -0.233024] ---- -Label : 1 -Position : [645.192, 442.368] -Measurements : [1377.53, 56943.5, -0.341322, -0.169495] ---- -Label : 1 -Position : [669.538, 443.666] -Measurements : [1487.23, 111575, -0.186545, 0.397046] ---- -Label : 1 -Position : [735.304, 443.904] -Measurements : [1497.63, 133602, -0.206007, -0.360222] ---- -Label : 1 -Position : [664.384, 444.177] -Measurements : [1439.95, 157756, -0.514591, -0.0999737] ---- -Label : 1 -Position : [110.414, 444.201] -Measurements : [1226.8, 349611, 0.349913, -1.02005] ---- -Label : 1 -Position : [952.316, 444.335] -Measurements : [1743.24, 866919, -0.137912, -1.48944] ---- -Label : 1 -Position : [951.3, 444.617] -Measurements : [1778.24, 853610, -0.223107, -1.43039] ---- -Label : 1 -Position : [676.492, 444.813] -Measurements : [1270.74, 99444.8, -0.00502241, 0.149872] ---- -Label : 1 -Position : [656.548, 445.354] -Measurements : [1301.54, 217731, 0.0955151, -0.488249] ---- -Label : 1 -Position : [947.848, 445.952] -Measurements : [1813.38, 783301, -0.345384, -1.33575] ---- -Label : 1 -Position : [223.344, 446.637] -Measurements : [1469.86, 350234, 0.777706, -1.01709] ---- -Label : 1 -Position : [726.6, 446.976] -Measurements : [1447.13, 333995, -0.618639, -0.924742] ---- -Label : 1 -Position : [639.048, 448] -Measurements : [1447.78, 182699, -0.258972, -0.39761] ---- -Label : 1 -Position : [721.647, 448.221] -Measurements : [759.222, 356559, 1.21082, -0.230607] ---- -Label : 1 -Position : [12.6462, 448.44] -Measurements : [590.987, 157505, 2.89706, 8.34738] ---- -Label : 1 -Position : [107.496, 448.512] -Measurements : [1167.97, 385140, 0.626117, -1.09912] ---- -Label : 1 -Position : [5.97659, 448.64] -Measurements : [843.677, 310246, 1.22992, 0.562628] ---- -Label : 1 -Position : [725.176, 448.99] -Measurements : [1152.06, 457489, 0.0494439, -1.71895] ---- -Label : 1 -Position : [527.264, 449.024] -Measurements : [1501.23, 430478, 0.240216, -1.26203] ---- -Label : 1 -Position : [635.034, 449.472] -Measurements : [1528.93, 243575, -0.072693, -0.587377] ---- -Label : 1 -Position : [126.56, 449.935] -Measurements : [1001.15, 259217, 0.90875, 0.120479] ---- -Label : 1 -Position : [136.162, 450.295] -Measurements : [1408.87, 289870, 0.156769, -0.651482] ---- -Label : 1 -Position : [642.2, 450.737] -Measurements : [1339.4, 246355, -0.00699209, -1.06775] ---- -Label : 1 -Position : [134.958, 451.037] -Measurements : [1556.1, 207411, 0.488355, -0.699886] ---- -Label : 1 -Position : [532.103, 451.064] -Measurements : [938.794, 438279, 1.3906, 0.723337] ---- -Label : 1 -Position : [8.168, 451.072] -Measurements : [891.489, 271182, 1.42058, 0.888739] ---- -Label : 1 -Position : [132.373, 451.389] -Measurements : [1369.93, 246994, 0.291618, -0.402372] ---- -Label : 1 -Position : [528.146, 451.419] -Measurements : [1457.72, 515785, 0.180012, -1.46798] ---- -Label : 1 -Position : [227.304, 451.584] -Measurements : [1723.93, 415019, -0.421554, -1.04184] ---- -Label : 1 -Position : [172.324, 451.762] -Measurements : [1071.59, 153993, 0.0261246, -1.32803] ---- -Label : 1 -Position : [159.783, 451.861] -Measurements : [1174.08, 384040, 0.389188, -1.10244] ---- -Label : 1 -Position : [117.508, 452.061] -Measurements : [1065.74, 455476, 0.451643, -1.24023] ---- -Label : 1 -Position : [120.296, 452.096] -Measurements : [1142.42, 390763, 0.390965, -1.10479] ---- -Label : 1 -Position : [630.835, 452.729] -Measurements : [1712.56, 204054, -0.083229, -0.749053] ---- -Label : 1 -Position : [160.598, 452.779] -Measurements : [1340.07, 411914, 0.162113, -1.07011] ---- -Label : 1 -Position : [103.578, 452.943] -Measurements : [863.427, 322920, 1.41546, 0.647504] ---- -Label : 1 -Position : [130.536, 453.12] -Measurements : [1207.1, 343233, 0.392211, -0.873326] ---- -Label : 1 -Position : [632.392, 453.12] -Measurements : [1630.88, 310333, -0.208692, -0.798324] ---- -Label : 1 -Position : [137.192, 453.632] -Measurements : [1410.34, 390508, 0.0476933, -1.17026] ---- -Label : 1 -Position : [165.352, 454.144] -Measurements : [1377.33, 358512, 0.106841, -0.794038] ---- -Label : 1 -Position : [159.72, 454.656] -Measurements : [1135.01, 412079, 0.458963, -1.18434] ---- -Label : 1 -Position : [627.266, 454.69] -Measurements : [1813.18, 123260, -0.451422, 0.66334] ---- -Label : 1 -Position : [119.219, 454.966] -Measurements : [1070.43, 393972, 0.613021, -0.87558] ---- -Label : 1 -Position : [632.88, 454.968] -Measurements : [1620.44, 333709, -0.26508, -0.871962] ---- -Label : 1 -Position : [170.984, 455.168] -Measurements : [1154.49, 335000, 0.541179, -0.5096] ---- -Label : 1 -Position : [230.572, 455.458] -Measurements : [1297.81, 720899, 0.302012, -1.66048] ---- -Label : 1 -Position : [524.704, 455.68] -Measurements : [1461.43, 275397, -0.0221619, -1.24211] ---- -Label : 1 -Position : [733.529, 456.156] -Measurements : [985.235, 354557, 1.02509, -0.035532] ---- -Label : 1 -Position : [178.399, 456.568] -Measurements : [901.986, 90239.4, 0.228443, -1.02427] ---- -Label : 1 -Position : [168.29, 456.615] -Measurements : [1219.06, 354372, 0.442171, -0.583136] ---- -Label : 1 -Position : [523.599, 456.697] -Measurements : [1456.96, 276360, -0.184469, -1.43522] ---- -Label : 1 -Position : [625.736, 456.704] -Measurements : [1781.29, 137156, -0.409457, 0.828819] ---- -Label : 1 -Position : [158.219, 456.753] -Measurements : [908.059, 332555, 1.08846, -0.280884] ---- -Label : 1 -Position : [167.416, 456.84] -Measurements : [1223.36, 356828, 0.394666, -0.591263] ---- -Label : 1 -Position : [201.192, 457.216] -Measurements : [933.378, 107552, 0.155343, -1.21194] ---- -Label : 1 -Position : [273.116, 457.427] -Measurements : [848.93, 83433.7, 0.295688, -1.00214] ---- -Label : 1 -Position : [629.339, 457.918] -Measurements : [1686.46, 275729, -0.613071, -0.069262] ---- -Label : 1 -Position : [180.712, 458.24] -Measurements : [876.781, 102409, 0.452063, -1.0902] ---- -Label : 1 -Position : [735.922, 459.682] -Measurements : [1071.95, 321085, 0.857073, -0.0962083] ---- -Label : 1 -Position : [526.677, 460.001] -Measurements : [966.999, 314004, 0.947694, -0.537469] ---- -Label : 1 -Position : [205.748, 460.103] -Measurements : [642.427, 130680, 1.36858, 0.481237] ---- -Label : 1 -Position : [625.038, 460.253] -Measurements : [1676.56, 259427, -0.406202, -0.472816] ---- -Label : 1 -Position : [734.28, 460.8] -Measurements : [1112.77, 301639, 0.829453, -0.103574] ---- -Label : 1 -Position : [611.928, 461.373] -Measurements : [2567.36, 214202, -0.566806, -0.227441] ---- -Label : 1 -Position : [271.776, 461.824] -Measurements : [759.403, 126917, 0.834422, -0.716463] ---- -Label : 1 -Position : [518.56, 461.824] -Measurements : [1307.04, 323766, 0.306164, -1.28303] ---- -Label : 1 -Position : [620.616, 461.824] -Measurements : [2111.78, 217234, -0.248365, -0.0132417] ---- -Label : 1 -Position : [659.702, 462.007] -Measurements : [1248.87, 212375, 0.401319, -0.193886] ---- -Label : 1 -Position : [199.358, 462.094] -Measurements : [748.954, 113780, 0.730454, -0.77978] ---- -Label : 1 -Position : [649.759, 462.286] -Measurements : [1453.68, 237955, 0.186743, -0.814412] ---- -Label : 1 -Position : [183.715, 462.562] -Measurements : [759.815, 116531, 0.787376, -0.591159] ---- -Label : 1 -Position : [516.198, 462.776] -Measurements : [1390.06, 307902, 0.0886769, -1.32882] ---- -Label : 1 -Position : [624.499, 462.86] -Measurements : [1735.56, 265981, -0.143995, -0.538694] ---- -Label : 1 -Position : [672.438, 463.223] -Measurements : [1531.3, 222375, -0.446837, -0.585857] ---- -Label : 1 -Position : [667.841, 463.359] -Measurements : [1589.94, 159504, -0.554411, 0.397613] ---- -Label : 1 -Position : [612.936, 463.36] -Measurements : [2598.89, 156365, -0.283363, -0.214999] ---- -Label : 1 -Position : [390.699, 463.9] -Measurements : [953.982, 240329, 0.61246, -0.859345] ---- -Label : 1 -Position : [523.006, 464.194] -Measurements : [841.746, 288683, 1.57323, 1.47777] ---- -Label : 1 -Position : [515.643, 464.224] -Measurements : [1451.89, 324658, -0.165424, -1.29347] ---- -Label : 1 -Position : [281.805, 464.821] -Measurements : [928.544, 152499, 1.37436, 1.32432] ---- -Label : 1 -Position : [653.937, 465.168] -Measurements : [1389.95, 285490, 0.214694, -0.895179] ---- -Label : 1 -Position : [653.384, 465.408] -Measurements : [1389.95, 285490, 0.214694, -0.895179] ---- -Label : 1 -Position : [274.286, 465.806] -Measurements : [857.849, 226369, 1.49462, 1.87932] ---- -Label : 1 -Position : [287.268, 465.866] -Measurements : [1078.32, 153800, 0.57181, -0.646066] ---- -Label : 1 -Position : [611.021, 465.919] -Measurements : [2485.31, 306380, -0.760804, 0.243711] ---- -Label : 1 -Position : [667.72, 465.92] -Measurements : [1564.51, 137936, -0.497085, 0.0519529] ---- -Label : 1 -Position : [674.725, 466.001] -Measurements : [1530.88, 140729, -0.636649, -0.152479] ---- -Label : 1 -Position : [678.056, 466.002] -Measurements : [1532.06, 83942.1, -0.180043, -0.455521] ---- -Label : 1 -Position : [276.016, 466.205] -Measurements : [952.3, 291512, 1.1692, 0.491303] ---- -Label : 1 -Position : [384.456, 466.368] -Measurements : [1200, 607760, 0.80133, -0.41372] ---- -Label : 1 -Position : [386.464, 466.432] -Measurements : [1125.23, 479432, 1.04214, 0.507311] ---- -Label : 1 -Position : [513.44, 466.432] -Measurements : [1369.01, 301165, -0.0199302, -1.17659] ---- -Label : 1 -Position : [661.064, 466.432] -Measurements : [1260.88, 161930, -0.404024, -1.03649] ---- -Label : 1 -Position : [648.776, 466.944] -Measurements : [1512.77, 152713, -0.139271, -0.353782] ---- -Label : 1 -Position : [600.963, 466.963] -Measurements : [1834.42, 313683, -0.532998, -0.841125] ---- -Label : 1 -Position : [684.599, 467.37] -Measurements : [1694.71, 253093, 0.878805, 0.87761] ---- -Label : 1 -Position : [673.864, 467.968] -Measurements : [1509.78, 182834, -0.878857, -0.121597] ---- -Label : 1 -Position : [509.795, 468.69] -Measurements : [1027.48, 320735, 0.417012, -1.27672] ---- -Label : 1 -Position : [286.624, 468.992] -Measurements : [1206.55, 227639, 0.507718, -0.884645] ---- -Label : 1 -Position : [681.544, 468.992] -Measurements : [1587.81, 80805.8, -0.0797492, -0.512911] ---- -Label : 1 -Position : [691.784, 468.992] -Measurements : [1775.09, 688022, 0.0733174, -1.31853] ---- -Label : 1 -Position : [295.159, 469.076] -Measurements : [1028.37, 293475, 0.537221, -0.974873] ---- -Label : 1 -Position : [653.331, 469.441] -Measurements : [1216.76, 326841, 0.399981, -1.069] ---- -Label : 1 -Position : [279.456, 470.016] -Measurements : [1403.17, 443849, 0.320208, -1.12955] ---- -Label : 1 -Position : [696.435, 470.087] -Measurements : [1156.01, 810201, 0.965591, -0.669568] ---- -Label : 1 -Position : [652.34, 470.298] -Measurements : [1258.21, 328927, 0.285839, -1.17462] ---- -Label : 1 -Position : [688.477, 470.455] -Measurements : [2075.94, 403218, -0.0546087, -0.871039] ---- -Label : 1 -Position : [291.232, 470.528] -Measurements : [1168.67, 287214, 0.341977, -1.23997] ---- -Label : 1 -Position : [605.768, 470.528] -Measurements : [2008.97, 370555, -0.237468, -1.17684] ---- -Label : 1 -Position : [946.824, 470.528] -Measurements : [1182.53, 452263, 0.410711, -1.08387] ---- -Label : 1 -Position : [979.08, 470.528] -Measurements : [1124.51, 172228, 0.00631101, -0.495241] ---- -Label : 1 -Position : [663.943, 470.916] -Measurements : [980.862, 272147, 0.507777, -1.19139] ---- -Label : 1 -Position : [278.716, 470.972] -Measurements : [1345.94, 451075, 0.424035, -1.01057] ---- -Label : 1 -Position : [646.216, 471.552] -Measurements : [1416.11, 135173, -0.516086, 0.147008] ---- -Label : 1 -Position : [287.53, 471.65] -Measurements : [1266.02, 291761, 0.181795, -1.20823] ---- -Label : 1 -Position : [305.483, 472.232] -Measurements : [851.741, 145638, 0.614204, -0.549991] ---- -Label : 1 -Position : [942.072, 472.475] -Measurements : [1080.61, 259532, 0.906377, 0.00731661] ---- -Label : 1 -Position : [595.016, 472.576] -Measurements : [1733.34, 258212, -0.923884, 0.41868] ---- -Label : 1 -Position : [674.557, 472.772] -Measurements : [1178.34, 323354, -0.0910261, -1.57363] ---- -Label : 1 -Position : [603.635, 473.302] -Measurements : [1828.64, 345464, -0.149438, -1.21791] ---- -Label : 1 -Position : [596.698, 473.35] -Measurements : [1801.51, 234249, -0.893691, 0.772139] ---- -Label : 1 -Position : [302.496, 473.6] -Measurements : [770.137, 141844, 0.831649, -0.042973] ---- -Label : 1 -Position : [975.604, 473.764] -Measurements : [734.778, 229011, 1.4425, 0.677822] ---- -Label : 1 -Position : [945.652, 474.193] -Measurements : [1086.58, 408459, 0.865398, -0.512015] ---- -Label : 1 -Position : [393.54, 474.219] -Measurements : [889.456, 175725, 0.398089, -1.348] ---- -Label : 1 -Position : [595.621, 474.305] -Measurements : [1634.54, 332590, -0.780356, -0.443124] ---- -Label : 1 -Position : [642.405, 474.507] -Measurements : [1119.84, 193572, 0.0912902, -1.22246] ---- -Label : 1 -Position : [984.041, 474.739] -Measurements : [1030.24, 67486.9, 1.69136, 5.19346] ---- -Label : 1 -Position : [640.473, 475.355] -Measurements : [1203.43, 284781, 0.363382, -0.937126] ---- -Label : 1 -Position : [645.391, 475.639] -Measurements : [1151.9, 217534, 0.0959684, -1.21377] ---- -Label : 1 -Position : [301.851, 477.024] -Measurements : [618.76, 127621, 1.36534, 0.804601] ---- -Label : 1 -Position : [585.007, 477.305] -Measurements : [1752.69, 854804, -0.271332, -1.66488] ---- -Label : 1 -Position : [394.656, 477.696] -Measurements : [962.181, 163602, 0.16848, -1.41959] ---- -Label : 1 -Position : [638.536, 477.696] -Measurements : [1442.73, 359236, -0.160607, -1.18064] ---- -Label : 1 -Position : [637.067, 478.758] -Measurements : [1573.2, 297211, -0.494839, -0.696645] ---- -Label : 1 -Position : [394.519, 478.865] -Measurements : [949.41, 168507, 0.222663, -1.45861] ---- -Label : 1 -Position : [630.498, 479.245] -Measurements : [1458.34, 210081, -0.662255, -0.293045] ---- -Label : 1 -Position : [951.158, 479.53] -Measurements : [937.038, 530658, 1.27414, 0.101329] ---- -Label : 1 -Position : [641.352, 480.053] -Measurements : [1197.5, 391696, 0.488033, -1.12034] ---- -Label : 1 -Position : [731.162, 480.868] -Measurements : [1263.68, 481731, -0.0628712, -1.36047] ---- -Label : 1 -Position : [586.312, 482.304] -Measurements : [2034.1, 656355, -0.712533, -0.891031] ---- -Label : 1 -Position : [632.904, 482.304] -Measurements : [1578.34, 145295, -0.733559, 0.759693] ---- -Label : 1 -Position : [735.304, 482.304] -Measurements : [1440.9, 344893, -0.171774, -1.07776] ---- -Label : 1 -Position : [734.321, 482.861] -Measurements : [1441.99, 353070, -0.218023, -1.07339] ---- -Label : 1 -Position : [585.111, 483.776] -Measurements : [2245.78, 457103, -0.922618, 0.179196] ---- -Label : 1 -Position : [947.848, 484.352] -Measurements : [1574.49, 715859, -0.0598153, -1.51141] ---- -Label : 1 -Position : [8.51251, 485.431] -Measurements : [1805.83, 466518, -0.142368, -1.41604] ---- -Label : 1 -Position : [12.5016, 485.884] -Measurements : [1478.71, 579231, 0.23233, -1.4544] ---- -Label : 1 -Position : [10.216, 486.4] -Measurements : [1634.46, 592205, 0.0274422, -1.53076] ---- -Label : 1 -Position : [499.616, 486.4] -Measurements : [1222.39, 408170, 1.03882, 0.510449] ---- -Label : 1 -Position : [579.144, 486.912] -Measurements : [2287.17, 292801, -0.0577149, -0.856645] ---- -Label : 1 -Position : [583.259, 488.644] -Measurements : [2202.24, 423646, -0.324615, -0.814626] ---- -Label : 1 -Position : [949.453, 488.933] -Measurements : [1459.24, 867769, 0.210254, -1.74431] ---- -Label : 1 -Position : [503.87, 489.373] -Measurements : [1535.91, 816763, 0.397311, -1.28715] ---- -Label : 1 -Position : [576.907, 489.936] -Measurements : [2092.3, 380156, 0.0469166, -0.749972] ---- -Label : 1 -Position : [501.263, 490.444] -Measurements : [1553.88, 831211, 0.334438, -1.26877] ---- -Label : 1 -Position : [623.688, 490.496] -Measurements : [1385.06, 196047, -0.0627731, -0.31764] ---- -Label : 1 -Position : [623.287, 490.496] -Measurements : [1385.06, 196047, -0.0627731, -0.31764] ---- -Label : 1 -Position : [576.157, 490.778] -Measurements : [2061.91, 415334, -0.00792183, -0.74725] ---- -Label : 1 -Position : [572.488, 492.544] -Measurements : [2011.88, 208174, -0.153713, -0.797107] ---- -Label : 1 -Position : [732.061, 492.682] -Measurements : [1602.18, 476941, -0.00997003, -1.05825] ---- -Label : 1 -Position : [618.056, 493.056] -Measurements : [1788.18, 306689, -0.0969786, -0.420362] ---- -Label : 1 -Position : [734.28, 493.056] -Measurements : [1634.44, 455847, -0.015764, -1.15104] ---- -Label : 1 -Position : [603.847, 494.106] -Measurements : [1298.54, 224126, -0.259836, -1.18882] ---- -Label : 1 -Position : [575.65, 494.291] -Measurements : [1782.06, 330329, -0.130985, -1.03466] ---- -Label : 1 -Position : [729.907, 494.373] -Measurements : [1390.16, 495869, 0.302212, -1.06107] ---- -Label : 1 -Position : [611.4, 494.592] -Measurements : [1885.62, 259295, 0.309637, -0.253785] ---- -Label : 1 -Position : [622.606, 494.642] -Measurements : [1490.11, 334726, 0.188528, -0.605431] ---- -Label : 1 -Position : [609.133, 494.79] -Measurements : [1800.15, 307297, 0.0990803, 0.0708499] ---- -Label : 1 -Position : [567.368, 495.104] -Measurements : [2071.38, 169363, -0.596077, 0.0499229] ---- -Label : 1 -Position : [626.27, 495.425] -Measurements : [906.501, 202015, 0.58991, -1.14779] ---- -Label : 1 -Position : [615.016, 496.026] -Measurements : [2092.95, 284510, -0.48603, -0.207901] ---- -Label : 1 -Position : [605.256, 496.64] -Measurements : [1603.12, 156612, -0.369224, -0.457503] ---- -Label : 1 -Position : [563.805, 496.676] -Measurements : [1945.84, 180293, -0.344369, -0.709229] ---- -Label : 1 -Position : [571.648, 497.294] -Measurements : [1779.53, 314936, -0.102267, -0.873214] ---- -Label : 1 -Position : [486.816, 497.664] -Measurements : [1242.64, 518903, 0.413495, -1.22599] ---- -Label : 1 -Position : [618.792, 498.021] -Measurements : [1743.46, 597174, -0.165338, -1.41454] ---- -Label : 1 -Position : [568.863, 498.375] -Measurements : [1800.74, 318115, -0.2904, -0.817692] ---- -Label : 1 -Position : [616.193, 498.896] -Measurements : [1975.23, 473384, -0.484713, -0.981863] ---- -Label : 1 -Position : [561.736, 499.2] -Measurements : [2045.06, 243167, -0.346029, -0.381696] ---- -Label : 1 -Position : [486.047, 500.458] -Measurements : [1458.84, 576927, -0.040075, -1.43101] ---- -Label : 1 -Position : [159.843, 500.629] -Measurements : [1140.23, 393318, 0.157327, -1.44197] ---- -Label : 1 -Position : [483.806, 501.158] -Measurements : [1033.09, 541746, 0.559267, -1.25066] ---- -Label : 1 -Position : [560.411, 502.687] -Measurements : [2057.6, 381052, -0.540689, -0.812765] ---- -Label : 1 -Position : [158.184, 503.416] -Measurements : [1210.1, 336723, 0.189294, -1.42545] ---- -Label : 1 -Position : [157.188, 503.548] -Measurements : [1223.15, 338510, 0.135225, -1.44452] ---- -Label : 1 -Position : [589.887, 507.44] -Measurements : [1018.12, 368438, 0.551036, -1.37301] ---- -Label : 1 -Position : [586.888, 507.744] -Measurements : [1334.74, 371569, 8.25283e-05, -1.29959] ---- -Label : 1 -Position : [547.464, 510.816] -Measurements : [814.369, 223260, 1.06843, -0.165695] ---- -Label : 1 -Position : [584.15, 511.687] -Measurements : [1687.62, 311475, -0.320604, -0.882119] ---- -Label : 1 -Position : [104.747, 511.999] -Measurements : [1525.06, 391382, -0.381421, -1.1031] ---- -Label : 1 -Position : [590.953, 512.092] -Measurements : [914.364, 335495, 0.938643, -0.64015] ---- -Label : 1 -Position : [106.456, 512.57] -Measurements : [1743.35, 288541, -0.483654, -0.858208] ---- -Label : 1 -Position : [581.768, 512.864] -Measurements : [1607.66, 357197, -0.180509, -1.06948] ---- -Label : 1 -Position : [552.257, 512.972] -Measurements : [945.685, 241239, 1.12092, 1.00038] ---- -Label : 1 -Position : [121.482, 513.271] -Measurements : [1005.89, 316069, 0.404876, -1.07252] ---- -Label : 1 -Position : [548.961, 513.526] -Measurements : [894.349, 216036, 0.758409, -0.657154] ---- -Label : 1 -Position : [689.131, 514.299] -Measurements : [1452.15, 587562, 0.242572, -1.3598] ---- -Label : 1 -Position : [356.936, 514.651] -Measurements : [484.692, 28252.9, 1.48956, 1.46586] ---- -Label : 1 -Position : [938.241, 515.137] -Measurements : [1253.94, 661102, 0.320473, -1.27212] ---- -Label : 1 -Position : [96.3726, 515.228] -Measurements : [1099, 329868, 0.0967388, -1.48977] ---- -Label : 1 -Position : [583.944, 516.097] -Measurements : [1250.48, 528501, 0.63992, -1.22281] ---- -Label : 1 -Position : [689.146, 516.399] -Measurements : [1480.8, 583600, 0.238853, -1.28642] ---- -Label : 1 -Position : [575.112, 516.448] -Measurements : [1470.05, 338931, -0.235598, -1.41402] ---- -Label : 1 -Position : [104.424, 516.728] -Measurements : [1812.31, 242021, -0.118784, -1.00816] ---- -Label : 1 -Position : [141.104, 516.996] -Measurements : [903.29, 272847, 0.848775, -0.00361943] ---- -Label : 1 -Position : [115.573, 517.463] -Measurements : [1559.22, 330148, -0.253316, -0.737935] ---- -Label : 1 -Position : [685.886, 517.899] -Measurements : [2086.71, 401218, -0.515338, -0.744113] ---- -Label : 1 -Position : [571.016, 517.984] -Measurements : [1774.74, 199647, -1.0021, 0.287335] ---- -Label : 1 -Position : [98.792, 518.264] -Measurements : [1252.79, 377801, 0.0753794, -1.02657] ---- -Label : 1 -Position : [111.08, 518.264] -Measurements : [1541.59, 286974, 0.201137, -0.922379] ---- -Label : 1 -Position : [122.344, 518.264] -Measurements : [1257.91, 325551, -0.0265268, -1.46217] ---- -Label : 1 -Position : [96.5051, 518.298] -Measurements : [1002.74, 321256, 0.344161, -1.38253] ---- -Label : 1 -Position : [113.021, 518.435] -Measurements : [1499.71, 270976, 0.198964, -0.59934] ---- -Label : 1 -Position : [560.923, 518.462] -Measurements : [1441.46, 205320, 0.0966524, -0.866899] ---- -Label : 1 -Position : [936.288, 518.872] -Measurements : [1437.21, 480694, 0.251076, -1.00875] ---- -Label : 1 -Position : [688.264, 519.008] -Measurements : [1620.6, 483499, -0.105316, -1.08265] ---- -Label : 1 -Position : [570.85, 519.23] -Measurements : [1756.46, 313467, -0.75002, -0.419572] ---- -Label : 1 -Position : [355.264, 519.32] -Measurements : [503.265, 25277, 1.48944, 1.75196] ---- -Label : 1 -Position : [575.022, 519.364] -Measurements : [1277.05, 407981, 0.283681, -1.59171] ---- -Label : 1 -Position : [113.401, 519.512] -Measurements : [1459.1, 249996, 0.430455, -0.532729] ---- -Label : 1 -Position : [674.083, 519.722] -Measurements : [2350.35, 467233, 0.128373, -0.580424] ---- -Label : 1 -Position : [116.712, 519.8] -Measurements : [1630.29, 236205, -0.106491, -0.682769] ---- -Label : 1 -Position : [121.085, 519.846] -Measurements : [1371.5, 328759, -0.174011, -1.29959] ---- -Label : 1 -Position : [574.771, 519.928] -Measurements : [1365.02, 398939, 0.0656178, -1.66324] ---- -Label : 1 -Position : [675.446, 520.461] -Measurements : [2364.69, 420460, 0.0850419, -0.324506] ---- -Label : 1 -Position : [681.096, 520.544] -Measurements : [2077.24, 277552, -0.133201, -0.951526] ---- -Label : 1 -Position : [119.524, 521.265] -Measurements : [1547.95, 334549, -0.173422, -1.1656] ---- -Label : 1 -Position : [671.88, 521.568] -Measurements : [2196.3, 643005, 0.129993, -1.06851] ---- -Label : 1 -Position : [569.104, 521.638] -Measurements : [1644.6, 400594, -0.341815, -1.17246] ---- -Label : 1 -Position : [139.24, 521.848] -Measurements : [1330.17, 212572, 0.565509, -0.446046] ---- -Label : 1 -Position : [358.245, 522.281] -Measurements : [484.339, 20957.1, 1.95807, 3.62854] ---- -Label : 1 -Position : [575.842, 522.293] -Measurements : [1018.99, 397500, 0.960803, -0.702018] ---- -Label : 1 -Position : [932.217, 522.472] -Measurements : [1170.02, 516493, 0.668956, -0.663862] ---- -Label : 1 -Position : [564.872, 522.592] -Measurements : [1806.28, 211491, -0.39852, -0.0913888] ---- -Label : 1 -Position : [82.6851, 522.857] -Measurements : [1113.26, 218590, 0.076288, -1.28177] ---- -Label : 1 -Position : [82.408, 522.872] -Measurements : [1113.26, 218590, 0.076288, -1.28177] ---- -Label : 1 -Position : [73.2248, 523.267] -Measurements : [1424.03, 296586, -0.29191, -0.568026] ---- -Label : 1 -Position : [685.084, 523.582] -Measurements : [1843.59, 518391, -0.108008, -1.2111] ---- -Label : 1 -Position : [668.946, 523.587] -Measurements : [1680.36, 608905, 0.627474, -0.892091] ---- -Label : 1 -Position : [666.248, 524.64] -Measurements : [1291.07, 555317, 1.14039, 0.50806] ---- -Label : 1 -Position : [137.199, 524.875] -Measurements : [1281.35, 240553, 0.277879, -0.246804] ---- -Label : 1 -Position : [555, 524.933] -Measurements : [1755.88, 349913, -0.0863422, -0.396929] ---- -Label : 1 -Position : [561.8, 525.664] -Measurements : [1811.89, 270634, -0.40539, -0.0551912] ---- -Label : 1 -Position : [74.216, 525.944] -Measurements : [1402.89, 270133, -0.103743, -0.461858] ---- -Label : 1 -Position : [76.8979, 526.203] -Measurements : [1397.18, 224316, 0.126265, -0.257325] ---- -Label : 1 -Position : [145.384, 526.456] -Measurements : [1591.45, 574618, 0.269258, -1.27814] ---- -Label : 1 -Position : [555.289, 526.476] -Measurements : [1992.2, 316911, -0.10351, -0.286562] ---- -Label : 1 -Position : [552.298, 526.695] -Measurements : [2046.1, 402442, -0.394638, -0.639538] ---- -Label : 1 -Position : [668.937, 527.078] -Measurements : [1372.07, 450753, 0.543306, -0.851504] ---- -Label : 1 -Position : [79.7832, 527.152] -Measurements : [1259.84, 186494, 0.798769, 0.262099] ---- -Label : 1 -Position : [143.417, 527.593] -Measurements : [1671.51, 518053, 0.173787, -1.27215] ---- -Label : 1 -Position : [561.084, 528.195] -Measurements : [1596.5, 460391, -0.0946448, -1.12658] ---- -Label : 1 -Position : [640.274, 528.224] -Measurements : [998.217, 148805, 0.513197, -0.15954] ---- -Label : 1 -Position : [562.383, 528.385] -Measurements : [1532.77, 485423, -0.00953177, -1.26468] ---- -Label : 1 -Position : [552.584, 528.736] -Measurements : [2238.68, 247271, -0.482622, 0.00651976] ---- -Label : 1 -Position : [555.656, 528.736] -Measurements : [2080.56, 306242, -0.367825, 0.026926] ---- -Label : 1 -Position : [143.943, 529.013] -Measurements : [1456.08, 638703, 0.444392, -1.24277] ---- -Label : 1 -Position : [548.488, 530.784] -Measurements : [1994.98, 443247, -0.199228, -1.0123] ---- -Label : 1 -Position : [549.047, 530.799] -Measurements : [2049.62, 413702, -0.410612, -0.646898] ---- -Label : 1 -Position : [552.159, 531.462] -Measurements : [1991.5, 603721, -0.622387, -0.859583] ---- -Label : 1 -Position : [158.215, 531.896] -Measurements : [1517.91, 573203, 0.035411, -1.40464] ---- -Label : 1 -Position : [859.597, 532.098] -Measurements : [897.279, 397788, 1.08328, -0.132882] ---- -Label : 1 -Position : [856.416, 532.184] -Measurements : [1075.53, 457210, 0.670769, -1.10685] ---- -Label : 1 -Position : [650.888, 532.32] -Measurements : [1206.69, 211731, -0.230262, -1.15974] ---- -Label : 1 -Position : [642.696, 532.832] -Measurements : [1109.7, 101368, -0.0213611, -1.14778] ---- -Label : 1 -Position : [559.738, 532.941] -Measurements : [1306.38, 586416, 0.431628, -1.36615] ---- -Label : 1 -Position : [857.559, 533.069] -Measurements : [993.012, 443832, 0.896378, -0.736828] ---- -Label : 1 -Position : [155.112, 533.112] -Measurements : [1708.82, 409969, -0.266895, -0.903948] ---- -Label : 1 -Position : [632.794, 533.126] -Measurements : [1260.26, 164790, -0.0556231, -0.775306] ---- -Label : 1 -Position : [155.888, 534.121] -Measurements : [1713.74, 370551, -0.212855, -0.781483] ---- -Label : 1 -Position : [653.29, 534.833] -Measurements : [962.62, 266794, 0.507258, -1.28953] ---- -Label : 1 -Position : [652.171, 535.158] -Measurements : [965.637, 220720, 0.468729, -1.27748] ---- -Label : 1 -Position : [634.504, 535.392] -Measurements : [1224.84, 140926, 0.172546, -0.799324] ---- -Label : 1 -Position : [629.701, 535.862] -Measurements : [1250.58, 117243, 0.0808624, -0.748968] ---- -Label : 1 -Position : [638.105, 536.373] -Measurements : [1177.01, 152568, 0.217958, -0.751288] ---- -Label : 1 -Position : [845.715, 536.895] -Measurements : [972.932, 247036, 0.664486, -0.780894] ---- -Label : 1 -Position : [630.584, 537.125] -Measurements : [1221.53, 145059, 0.291194, -0.854623] ---- -Label : 1 -Position : [626.536, 537.176] -Measurements : [1151.67, 111131, 0.261392, -0.655329] ---- -Label : 1 -Position : [154.961, 537.412] -Measurements : [1580.2, 286988, 0.0357721, -0.632949] ---- -Label : 1 -Position : [159.208, 537.72] -Measurements : [1307.54, 402378, 0.336769, -0.940364] ---- -Label : 1 -Position : [739.604, 538.335] -Measurements : [1008.33, 313859, 0.109282, -1.58644] ---- -Label : 1 -Position : [628.36, 538.464] -Measurements : [1161.36, 122119, 0.38234, -0.75588] ---- -Label : 1 -Position : [685.754, 538.863] -Measurements : [1286.44, 209253, 0.0299302, -0.67024] ---- -Label : 1 -Position : [969.568, 539.352] -Measurements : [1770.55, 329781, -0.214014, -0.797349] ---- -Label : 1 -Position : [154.99, 539.973] -Measurements : [1426.38, 313698, -0.00452222, -1.11009] ---- -Label : 1 -Position : [893.28, 540.376] -Measurements : [1501.89, 665187, 0.164338, -1.44047] ---- -Label : 1 -Position : [968.573, 540.837] -Measurements : [1664.59, 483957, -0.386499, -0.964287] ---- -Label : 1 -Position : [850.272, 541.4] -Measurements : [1215.94, 427054, 0.201133, -1.33611] ---- -Label : 1 -Position : [619.656, 541.536] -Measurements : [1369.65, 227500, 0.62844, 0.175853] ---- -Label : 1 -Position : [740.488, 541.536] -Measurements : [1158.46, 213541, -0.0769387, -1.35516] ---- -Label : 1 -Position : [738.541, 541.554] -Measurements : [1094.43, 228086, 0.0288894, -1.34753] ---- -Label : 1 -Position : [620.565, 541.692] -Measurements : [1301.34, 203838, 0.601099, 0.695094] ---- -Label : 1 -Position : [919.392, 541.912] -Measurements : [1076.82, 127660, -0.465827, -0.285083] ---- -Label : 1 -Position : [683.745, 542.12] -Measurements : [1400.62, 141217, 0.263412, -0.51923] ---- -Label : 1 -Position : [847.487, 542.132] -Measurements : [1152.36, 429045, 0.280138, -1.31061] ---- -Label : 1 -Position : [968.737, 542.16] -Measurements : [1560.14, 540243, -0.191867, -1.24116] ---- -Label : 1 -Position : [693.48, 542.19] -Measurements : [966.508, 423764, 0.948472, -0.766761] ---- -Label : 1 -Position : [916.057, 543.093] -Measurements : [1316.77, 71402.8, 0.0575627, 0.692385] ---- -Label : 1 -Position : [897.54, 543.251] -Measurements : [733.187, 484756, 2.10572, 3.03883] ---- -Label : 1 -Position : [689.288, 543.584] -Measurements : [1394.32, 344312, -0.167991, -1.38606] ---- -Label : 1 -Position : [613.512, 544.096] -Measurements : [1888.24, 314658, -0.583711, -0.672326] ---- -Label : 1 -Position : [619.007, 544.412] -Measurements : [1341.67, 276825, 0.49454, -0.3906] ---- -Label : 1 -Position : [68.6158, 545.038] -Measurements : [988.67, 256931, 1.21836, 0.677322] ---- -Label : 1 -Position : [892.053, 545.25] -Measurements : [996.108, 714571, 1.17468, -0.247991] ---- -Label : 1 -Position : [602.542, 545.255] -Measurements : [1098.34, 463152, 0.443857, -1.44794] ---- -Label : 1 -Position : [372.869, 545.29] -Measurements : [647.698, 162205, 1.54662, 1.56244] ---- -Label : 1 -Position : [368.064, 545.432] -Measurements : [889.225, 194181, 0.667855, -0.706854] ---- -Label : 1 -Position : [167.649, 545.473] -Measurements : [1166.57, 771684, 0.433882, -1.53255] ---- -Label : 1 -Position : [171.602, 545.671] -Measurements : [1186.39, 748694, 0.458735, -1.48851] ---- -Label : 1 -Position : [612.092, 545.756] -Measurements : [1971.11, 274734, -0.802306, -0.182576] ---- -Label : 1 -Position : [922.904, 546.419] -Measurements : [731.19, 136447, 0.710832, -1.14612] ---- -Label : 1 -Position : [912.736, 546.52] -Measurements : [1229.94, 213367, -0.0924437, -0.877466] ---- -Label : 1 -Position : [605.257, 546.527] -Measurements : [1570.41, 602172, -0.372313, -1.4091] ---- -Label : 1 -Position : [681.608, 546.656] -Measurements : [1296.6, 121584, -0.0814027, -0.254927] ---- -Label : 1 -Position : [606.856, 547.168] -Measurements : [1653.51, 567992, -0.466753, -1.22783] ---- -Label : 1 -Position : [915.447, 547.538] -Measurements : [1292.9, 196033, -0.286121, -0.742374] ---- -Label : 1 -Position : [674.991, 548.364] -Measurements : [1440.87, 101237, 0.445724, 2.17182] ---- -Label : 1 -Position : [836.785, 548.445] -Measurements : [847.022, 121326, 0.374717, -0.940934] ---- -Label : 1 -Position : [677.95, 548.448] -Measurements : [1383.8, 90159.1, -0.820815, 0.505858] ---- -Label : 1 -Position : [368.574, 548.632] -Measurements : [897.774, 171249, 0.848018, -0.299431] ---- -Label : 1 -Position : [610.801, 548.665] -Measurements : [1890.6, 333818, -0.660998, -0.598264] ---- -Label : 1 -Position : [839.198, 548.815] -Measurements : [747.295, 157001, 0.689483, -1.03939] ---- -Label : 1 -Position : [66.536, 548.984] -Measurements : [1204.27, 331009, 0.518502, -0.763793] ---- -Label : 1 -Position : [585.897, 549.025] -Measurements : [1470.37, 254436, -0.550692, -0.452917] ---- -Label : 1 -Position : [842.535, 549.101] -Measurements : [630.592, 146847, 1.24269, 0.0450036] ---- -Label : 1 -Position : [168.936, 549.496] -Measurements : [1453.63, 641926, -0.0154559, -1.6177] ---- -Label : 1 -Position : [837.472, 549.592] -Measurements : [832.63, 139672, 0.380043, -1.20935] ---- -Label : 1 -Position : [910.551, 549.666] -Measurements : [1068.28, 361318, 0.116333, -1.5643] ---- -Label : 1 -Position : [662.29, 549.743] -Measurements : [1588.06, 253787, 0.272125, -0.706776] ---- -Label : 1 -Position : [685.762, 549.883] -Measurements : [1281.77, 292865, 0.131181, -1.09337] ---- -Label : 1 -Position : [842.293, 549.984] -Measurements : [630.592, 146847, 1.24269, 0.0450036] ---- -Label : 1 -Position : [596.061, 550.501] -Measurements : [953.189, 151523, -0.126436, -1.40287] ---- -Label : 1 -Position : [595.737, 550.569] -Measurements : [1034.29, 139565, -0.365157, -1.10216] ---- -Label : 1 -Position : [595.592, 550.752] -Measurements : [1034.29, 139565, -0.365157, -1.10216] ---- -Label : 1 -Position : [675.464, 550.752] -Measurements : [1380.79, 112696, -0.562892, 0.967104] ---- -Label : 1 -Position : [657.811, 551.747] -Measurements : [1093.01, 204903, -0.127794, -1.09142] ---- -Label : 1 -Position : [68.4228, 552.116] -Measurements : [1406.42, 258037, 0.349544, -0.802103] ---- -Label : 1 -Position : [66.024, 552.568] -Measurements : [1390.64, 292310, 0.187832, -0.970916] ---- -Label : 1 -Position : [659.08, 553.312] -Measurements : [1192.45, 235697, -0.121543, -1.0075] ---- -Label : 1 -Position : [666.76, 553.312] -Measurements : [1736, 410110, -0.170472, -1.17004] ---- -Label : 1 -Position : [587.912, 553.428] -Measurements : [1762.04, 176261, 0.654696, -0.138235] ---- -Label : 1 -Position : [663.729, 553.605] -Measurements : [1664.34, 365946, -0.0719111, -0.932129] ---- -Label : 1 -Position : [839.008, 553.688] -Measurements : [757.783, 166356, 0.590803, -1.22261] ---- -Label : 1 -Position : [584.429, 553.752] -Measurements : [1920.63, 172586, 0.0358339, -0.551255] ---- -Label : 1 -Position : [592.358, 553.79] -Measurements : [1338.35, 131925, 0.18481, 0.00550019] ---- -Label : 1 -Position : [590.472, 553.824] -Measurements : [1510.32, 182766, 0.214998, 0.0218474] ---- -Label : 1 -Position : [662.748, 554.538] -Measurements : [1457.25, 373951, 0.127051, -0.88248] ---- -Label : 1 -Position : [63.8955, 554.694] -Measurements : [1126.88, 315603, 0.363359, -0.777913] ---- -Label : 1 -Position : [584.71, 555.181] -Measurements : [1974.39, 198851, -0.0698433, -0.841522] ---- -Label : 1 -Position : [583.304, 556.384] -Measurements : [2037.44, 206148, -0.219064, -0.843401] ---- -Label : 1 -Position : [68.6961, 557.213] -Measurements : [1536.18, 171132, 0.0439612, -0.613123] ---- -Label : 1 -Position : [580.232, 557.408] -Measurements : [2125.47, 208773, -0.644862, -0.235574] ---- -Label : 1 -Position : [174.719, 557.733] -Measurements : [898.759, 187005, 0.383145, -1.2097] ---- -Label : 1 -Position : [402.869, 557.851] -Measurements : [1334.78, 720938, 0.0307956, -1.69772] ---- -Label : 1 -Position : [384.96, 558.232] -Measurements : [1402.2, 291162, -0.572213, -0.683802] ---- -Label : 1 -Position : [557.563, 558.329] -Measurements : [1469.41, 146080, 0.0394042, -0.622513] ---- -Label : 1 -Position : [578.735, 558.744] -Measurements : [2063.1, 304911, -0.658747, -0.429547] ---- -Label : 1 -Position : [380.415, 559.509] -Measurements : [1030.78, 387391, 0.189618, -1.72118] ---- -Label : 1 -Position : [173.544, 559.608] -Measurements : [935.883, 178358, 0.323128, -1.25073] ---- -Label : 1 -Position : [404.575, 559.807] -Measurements : [1550.19, 540365, -0.248425, -1.49692] ---- -Label : 1 -Position : [574.088, 559.968] -Measurements : [1726.03, 558886, -0.134103, -1.40458] ---- -Label : 1 -Position : [265.694, 560.218] -Measurements : [1215.62, 396161, 0.385144, -1.13635] ---- -Label : 1 -Position : [628.311, 560.542] -Measurements : [1049.43, 413327, 0.593478, -0.651241] ---- -Label : 1 -Position : [560.433, 560.556] -Measurements : [1323.59, 205601, 0.216717, -0.770939] ---- -Label : 1 -Position : [561.288, 560.992] -Measurements : [1273.38, 238064, 0.245399, -0.938592] ---- -Label : 1 -Position : [65.512, 561.144] -Measurements : [1367.59, 185858, -0.232455, -0.952684] ---- -Label : 1 -Position : [833.312, 561.535] -Measurements : [748.389, 117808, 0.87673, 0.372487] ---- -Label : 1 -Position : [174.745, 562.247] -Measurements : [887.213, 182805, 0.537509, -1.18353] ---- -Label : 1 -Position : [751.027, 562.25] -Measurements : [1129.39, 160728, -0.38824, -1.14525] ---- -Label : 1 -Position : [632.968, 562.528] -Measurements : [1315.61, 443125, 0.279018, -1.09643] ---- -Label : 1 -Position : [577.494, 562.593] -Measurements : [1740.11, 515743, 0.0375038, -1.55101] ---- -Label : 1 -Position : [401.856, 562.84] -Measurements : [1858.27, 373124, -0.72865, -0.387901] ---- -Label : 1 -Position : [385.847, 562.841] -Measurements : [1493.7, 121529, -0.55157, -0.364009] ---- -Label : 1 -Position : [266.588, 562.939] -Measurements : [1385.16, 382181, 0.0929111, -1.15831] ---- -Label : 1 -Position : [746.12, 563.04] -Measurements : [1030.86, 186221, 0.0629092, -1.47482] ---- -Label : 1 -Position : [63.9099, 563.448] -Measurements : [1259.14, 220281, 0.0236837, -1.07392] ---- -Label : 1 -Position : [548.352, 563.508] -Measurements : [1621.1, 186553, -0.408011, -0.233939] ---- -Label : 1 -Position : [60.8789, 563.579] -Measurements : [961.026, 207415, 0.515273, -0.754784] ---- -Label : 1 -Position : [637.953, 563.604] -Measurements : [1077.7, 557523, 0.877909, -0.850592] ---- -Label : 1 -Position : [266.728, 563.704] -Measurements : [1443.75, 340373, -0.00392614, -1.00391] ---- -Label : 1 -Position : [511.636, 563.716] -Measurements : [741.791, 48736.9, 0.0456055, -0.831354] ---- -Label : 1 -Position : [389.056, 564.376] -Measurements : [1552.88, 219631, -0.046529, -0.744055] ---- -Label : 1 -Position : [271.17, 564.402] -Measurements : [1011.81, 458750, 0.876486, -0.545166] ---- -Label : 1 -Position : [569.686, 564.755] -Measurements : [955.968, 348778, 2.13753, 3.77168] ---- -Label : 1 -Position : [61.986, 564.807] -Measurements : [1071.06, 226942, 0.344579, -0.963342] ---- -Label : 1 -Position : [835.426, 565.056] -Measurements : [826.632, 174667, 1.04292, 0.201201] ---- -Label : 1 -Position : [543.368, 565.088] -Measurements : [1550.01, 275781, -0.0652288, -1.07195] ---- -Label : 1 -Position : [386.036, 565.286] -Measurements : [1426.85, 142805, -0.0853821, -0.743422] ---- -Label : 1 -Position : [531.431, 566.444] -Measurements : [1161.49, 436970, 0.42866, -1.35793] ---- -Label : 1 -Position : [837.984, 566.488] -Measurements : [853.543, 217003, 0.844863, -0.525593] ---- -Label : 1 -Position : [514.506, 567.217] -Measurements : [811.119, 30515, 0.131191, -0.529126] ---- -Label : 1 -Position : [261.608, 567.288] -Measurements : [1396.15, 162422, 0.333017, 0.678383] ---- -Label : 1 -Position : [514.696, 567.648] -Measurements : [811.119, 30515, 0.131191, -0.529126] ---- -Label : 1 -Position : [388.104, 567.705] -Measurements : [1402.95, 215284, 0.331956, -0.933168] ---- -Label : 1 -Position : [750.551, 567.846] -Measurements : [783.311, 226485, 0.698776, -0.987802] ---- -Label : 1 -Position : [68.072, 568.312] -Measurements : [1101.56, 234792, 0.320168, -1.23589] ---- -Label : 1 -Position : [546.841, 568.539] -Measurements : [1359.75, 295609, 0.10771, -1.13195] ---- -Label : 1 -Position : [977.56, 568.583] -Measurements : [1460.08, 168090, 0.305359, -1.12439] ---- -Label : 1 -Position : [403.547, 568.903] -Measurements : [1802.22, 320711, -0.394287, -0.573665] ---- -Label : 1 -Position : [543.272, 569.248] -Measurements : [1208.41, 233405, 0.537796, -0.647323] ---- -Label : 1 -Position : [261.948, 569.404] -Measurements : [1237.46, 196129, 0.0414693, -0.258032] ---- -Label : 1 -Position : [406.517, 570.499] -Measurements : [1690.69, 354578, -0.217451, -0.722075] ---- -Label : 1 -Position : [530.568, 570.72] -Measurements : [1551.89, 430978, -0.344007, -1.19749] ---- -Label : 1 -Position : [254.952, 570.872] -Measurements : [854.434, 197704, 0.815986, -0.783936] ---- -Label : 1 -Position : [404.416, 571.032] -Measurements : [1914.2, 278546, -0.454741, -0.0690502] ---- -Label : 1 -Position : [505.448, 571.474] -Measurements : [763.208, 95622.2, 0.199647, -1.07823] ---- -Label : 1 -Position : [635.94, 571.514] -Measurements : [888.983, 142813, 0.347177, -1.11481] ---- -Label : 1 -Position : [184.542, 571.529] -Measurements : [882.651, 320351, 0.668785, -0.916971] ---- -Label : 1 -Position : [251.019, 572.145] -Measurements : [785.131, 188297, 1.19931, 0.112167] ---- -Label : 1 -Position : [639.624, 572.256] -Measurements : [962.002, 145217, 0.253866, -1.05929] ---- -Label : 1 -Position : [529.055, 572.424] -Measurements : [1712.57, 324797, -0.422305, -0.685713] ---- -Label : 1 -Position : [254.04, 572.445] -Measurements : [822.708, 169408, 1.04385, -0.219536] ---- -Label : 1 -Position : [978.824, 572.481] -Measurements : [1556.71, 170622, -0.350726, -0.666874] ---- -Label : 1 -Position : [70.6349, 572.587] -Measurements : [1135.09, 370077, 0.336241, -1.53432] ---- -Label : 1 -Position : [978.272, 572.632] -Measurements : [1556.71, 170622, -0.350726, -0.666874] ---- -Label : 1 -Position : [521.382, 572.646] -Measurements : [1156.46, 187809, 1.03322, 0.140461] ---- -Label : 1 -Position : [523.4, 572.768] -Measurements : [1343.39, 253992, 0.636051, -0.690359] ---- -Label : 1 -Position : [539.784, 572.768] -Measurements : [870.082, 95191, 0.968062, 1.2117] ---- -Label : 1 -Position : [509.064, 573.28] -Measurements : [873.357, 71712.8, 0.234021, -0.551763] ---- -Label : 1 -Position : [642.027, 573.887] -Measurements : [961.326, 156466, 0.453651, -1.2085] ---- -Label : 1 -Position : [409.875, 573.926] -Measurements : [1744.69, 639076, -0.23923, -1.33732] ---- -Label : 1 -Position : [542.833, 574.579] -Measurements : [1007.82, 131515, 1.04116, 1.11113] ---- -Label : 1 -Position : [511.082, 574.72] -Measurements : [884.891, 72490.3, 0.188584, -0.699274] ---- -Label : 1 -Position : [179.688, 574.968] -Measurements : [1170.41, 239662, 0.36655, -0.867454] ---- -Label : 1 -Position : [527.026, 575.482] -Measurements : [1650.04, 269915, 0.116529, -0.938832] ---- -Label : 1 -Position : [183.561, 576.483] -Measurements : [1111.18, 237710, 0.605415, -0.878042] ---- -Label : 1 -Position : [406.976, 577.688] -Measurements : [1732.12, 616186, -0.158667, -1.44916] ---- -Label : 1 -Position : [71.3052, 578.356] -Measurements : [1130.47, 277750, 0.555065, -1.03163] ---- -Label : 1 -Position : [71.144, 578.552] -Measurements : [1130.47, 277750, 0.555065, -1.03163] ---- -Label : 1 -Position : [248.241, 578.62] -Measurements : [1304.08, 408362, 0.135407, -1.33895] ---- -Label : 1 -Position : [746.632, 578.912] -Measurements : [1120.32, 386986, 0.13633, -1.36769] ---- -Label : 1 -Position : [245.736, 579.576] -Measurements : [1616.03, 309322, -0.36443, -0.641314] ---- -Label : 1 -Position : [743.621, 579.768] -Measurements : [1033.71, 372602, 0.40827, -1.20577] ---- -Label : 1 -Position : [748.2, 579.824] -Measurements : [1138.5, 313170, 0.228065, -1.0469] ---- -Label : 1 -Position : [493.349, 580.168] -Measurements : [988.673, 372587, 0.660684, -0.886268] ---- -Label : 1 -Position : [926.194, 580.478] -Measurements : [1023.71, 465297, 0.468546, -1.3932] ---- -Label : 1 -Position : [244.925, 580.944] -Measurements : [1678.39, 316686, -0.375423, -0.631309] ---- -Label : 1 -Position : [405.149, 581.285] -Measurements : [1317.17, 655870, 0.565245, -1.24558] ---- -Label : 1 -Position : [839.447, 581.833] -Measurements : [802.678, 295910, 1.09132, -0.000274494] ---- -Label : 1 -Position : [243.287, 582.179] -Measurements : [1631.35, 381332, -0.294742, -0.978722] ---- -Label : 1 -Position : [68.3426, 582.724] -Measurements : [842.06, 258088, 0.941284, -0.285413] ---- -Label : 1 -Position : [495.24, 583.008] -Measurements : [1205.29, 379650, 0.294275, -1.22413] ---- -Label : 1 -Position : [495.224, 583.154] -Measurements : [1205.29, 379650, 0.294275, -1.22413] ---- -Label : 1 -Position : [743.721, 583.698] -Measurements : [1251.07, 298139, -0.0894589, -1.02486] ---- -Label : 1 -Position : [853.971, 583.894] -Measurements : [710.569, 284400, 1.45034, 0.705734] ---- -Label : 1 -Position : [924.738, 584.356] -Measurements : [1500.64, 279100, -0.714514, -0.373187] ---- -Label : 1 -Position : [841.056, 584.408] -Measurements : [848.275, 265194, 1.14014, 0.165961] ---- -Label : 1 -Position : [925.536, 584.408] -Measurements : [1457.3, 291992, -0.708653, -0.483691] ---- -Label : 1 -Position : [837.943, 584.962] -Measurements : [918.6, 205224, 0.986566, 0.719513] ---- -Label : 1 -Position : [246.76, 585.208] -Measurements : [1561.69, 395193, 0.0846826, -1.27315] ---- -Label : 1 -Position : [11.24, 585.72] -Measurements : [1143.59, 408355, 0.749213, -0.760661] ---- -Label : 1 -Position : [11.7226, 585.96] -Measurements : [1143.59, 408355, 0.749213, -0.760661] ---- -Label : 1 -Position : [898.592, 587.811] -Measurements : [579.844, 176294, 1.89768, 2.30228] ---- -Label : 1 -Position : [747.656, 588.128] -Measurements : [1010.54, 216731, 0.348892, -0.96938] ---- -Label : 1 -Position : [851.296, 588.504] -Measurements : [1151.27, 422687, 0.338834, -1.46978] ---- -Label : 1 -Position : [715.921, 588.879] -Measurements : [701.596, 152342, 1.35382, 0.642622] ---- -Label : 1 -Position : [904.458, 589.052] -Measurements : [1162.55, 285568, -0.31184, -1.37231] ---- -Label : 1 -Position : [462.229, 589.187] -Measurements : [839.65, 121406, 0.483044, -0.0888554] ---- -Label : 1 -Position : [233.563, 589.361] -Measurements : [1622.14, 727175, -0.0163402, -1.34372] ---- -Label : 1 -Position : [11.6735, 589.581] -Measurements : [1086.43, 414430, 0.918486, -0.546414] ---- -Label : 1 -Position : [244.748, 589.826] -Measurements : [1313.36, 449772, 0.537817, -1.04497] ---- -Label : 1 -Position : [711.128, 590.216] -Measurements : [1057.7, 176709, 0.229219, -0.86216] ---- -Label : 1 -Position : [749.165, 590.339] -Measurements : [1017.2, 222417, 0.32214, -1.06224] ---- -Label : 1 -Position : [478.928, 590.672] -Measurements : [1262.51, 320258, 0.0130173, -1.19643] ---- -Label : 1 -Position : [902.496, 591.576] -Measurements : [1277.2, 270413, -0.623602, -0.924674] ---- -Label : 1 -Position : [757.32, 591.865] -Measurements : [843.647, 68779.1, 1.13773, 0.714861] ---- -Label : 1 -Position : [461.887, 592.259] -Measurements : [933.14, 145461, 0.280867, -0.367128] ---- -Label : 1 -Position : [463.056, 592.72] -Measurements : [972.805, 136255, 0.208593, -0.39157] ---- -Label : 1 -Position : [854.326, 592.743] -Measurements : [1046.82, 399715, 0.715332, -1.05331] ---- -Label : 1 -Position : [480.773, 593.01] -Measurements : [1091.26, 361036, 0.615515, -1.08109] ---- -Label : 1 -Position : [862.585, 593.05] -Measurements : [1039.14, 445840, 0.434074, -1.31525] ---- -Label : 1 -Position : [482.201, 593.436] -Measurements : [946.43, 338296, 1.09066, -0.272114] ---- -Label : 1 -Position : [237.544, 593.912] -Measurements : [1775.91, 505416, -0.189363, -0.979268] ---- -Label : 1 -Position : [76.7464, 593.912] -Measurements : [660.127, 151778, 1.05948, -0.202266] ---- -Label : 1 -Position : [711.567, 594.355] -Measurements : [1274.37, 277809, 0.320062, -0.780299] ---- -Label : 1 -Position : [72.471, 595.219] -Measurements : [828.364, 245901, 0.451359, -1.33849] ---- -Label : 1 -Position : [754.136, 595.336] -Measurements : [878.371, 154193, 0.857089, -0.0780638] ---- -Label : 1 -Position : [757.393, 596.246] -Measurements : [981.482, 152651, 0.989848, -0.00492299] ---- -Label : 1 -Position : [860.168, 597.073] -Measurements : [1137.38, 272944, 0.225, -1.17512] ---- -Label : 1 -Position : [866.144, 597.208] -Measurements : [1257.32, 360017, 0.16117, -1.37078] ---- -Label : 1 -Position : [647.128, 597.384] -Measurements : [1561.71, 168324, 0.318716, -1.08179] ---- -Label : 1 -Position : [878.693, 597.435] -Measurements : [550.549, 81253.4, 1.04893, 0.0897637] ---- -Label : 1 -Position : [233.886, 597.516] -Measurements : [1708.33, 525824, 0.250936, -1.02923] ---- -Label : 1 -Position : [231.503, 597.681] -Measurements : [1726.27, 622316, 0.0226395, -1.30381] ---- -Label : 1 -Position : [860, 597.72] -Measurements : [1137.38, 272944, 0.225, -1.17512] ---- -Label : 1 -Position : [870.141, 598.328] -Measurements : [939.392, 446753, 0.893889, -0.854915] ---- -Label : 1 -Position : [653.09, 598.483] -Measurements : [1777.2, 431892, -0.418814, -0.77937] ---- -Label : 1 -Position : [74.728, 598.52] -Measurements : [913.674, 181069, 0.425305, -1.0491] ---- -Label : 1 -Position : [402.401, 598.682] -Measurements : [744.985, 140465, 1.07279, -0.0605856] ---- -Label : 1 -Position : [882.528, 598.744] -Measurements : [582.059, 75458.8, 1.03263, -0.020056] ---- -Label : 1 -Position : [650.528, 598.905] -Measurements : [1828.76, 266579, -0.150144, -0.455498] ---- -Label : 1 -Position : [864.829, 599.396] -Measurements : [1304.75, 320838, 0.0112484, -1.25766] ---- -Label : 1 -Position : [643.57, 600.182] -Measurements : [1354.87, 205802, 0.35983, -0.804705] ---- -Label : 1 -Position : [236.008, 600.568] -Measurements : [1416.61, 340729, 0.36803, -0.68806] ---- -Label : 1 -Position : [879.16, 601.397] -Measurements : [539.633, 67361.4, 1.39999, 1.17747] ---- -Label : 1 -Position : [400.08, 601.424] -Measurements : [928.427, 131395, 0.287644, -1.10852] ---- -Label : 1 -Position : [756.696, 601.992] -Measurements : [965.798, 199167, 0.818095, -0.442147] ---- -Label : 1 -Position : [650.2, 602.504] -Measurements : [1923.79, 198597, 0.00330806, -0.807094] ---- -Label : 1 -Position : [757.708, 603.448] -Measurements : [944.493, 208444, 0.831763, -0.455454] ---- -Label : 1 -Position : [956.679, 603.612] -Measurements : [970.499, 684615, 1.1671, -0.159297] ---- -Label : 1 -Position : [401.375, 603.957] -Measurements : [995.404, 183760, 0.236748, -1.2496] ---- -Label : 1 -Position : [461.393, 604.89] -Measurements : [1021.32, 155816, 0.027004, -1.36898] ---- -Label : 1 -Position : [237.863, 604.999] -Measurements : [1170.57, 213156, 0.0315384, -1.42252] ---- -Label : 1 -Position : [459.427, 605.004] -Measurements : [1051.56, 154372, -0.196236, -1.22849] ---- -Label : 1 -Position : [228.235, 605.075] -Measurements : [941.204, 142612, 0.534915, -0.338781] ---- -Label : 1 -Position : [228.844, 605.703] -Measurements : [941.204, 142612, 0.534915, -0.338781] ---- -Label : 1 -Position : [460.496, 606.032] -Measurements : [1040.11, 157960, -0.139297, -1.28395] ---- -Label : 1 -Position : [647.393, 606.296] -Measurements : [1589.79, 156739, 0.454352, -1.17883] ---- -Label : 1 -Position : [952.672, 606.424] -Measurements : [1622.38, 532442, -0.0479366, -1.22267] ---- -Label : 0 -Position : [557.598, 606.698] -Measurements : [996.762, 12374.8, 1.36408, 1.58708] ---- -Label : 1 -Position : [752.5, 606.756] -Measurements : [644.077, 199924, 1.64222, 1.51838] ---- -Label : 1 -Position : [954.957, 607.045] -Measurements : [1493.77, 706392, 0.0411678, -1.52663] ---- -Label : 1 -Position : [402.128, 608.592] -Measurements : [1131, 191411, -0.0195369, -1.19049] ---- -Label : 1 -Position : [625.624, 608.648] -Measurements : [1661.4, 34736.2, 0.660168, 1.94285] ---- -Label : 1 -Position : [687.576, 608.648] -Measurements : [1257.51, 75274.1, -0.399507, -0.759956] ---- -Label : 1 -Position : [231.912, 609.272] -Measurements : [1164.12, 111774, -0.0561663, -0.94059] ---- -Label : 1 -Position : [690.292, 609.977] -Measurements : [1167.77, 132603, -0.383219, -1.08329] ---- -Label : 1 -Position : [400.974, 610.01] -Measurements : [1307.3, 117289, -0.332864, -0.470128] ---- -Label : 1 -Position : [682.408, 610.606] -Measurements : [1357.08, 104314, 0.429524, 0.249075] ---- -Label : 1 -Position : [406.029, 611.106] -Measurements : [855.939, 211554, 0.773161, -0.739853] ---- -Label : 1 -Position : [622.078, 611.881] -Measurements : [1593.51, 53048.9, -0.411448, 2.05418] ---- -Label : 1 -Position : [407.019, 611.953] -Measurements : [769.182, 192695, 1.10807, -0.0263169] ---- -Label : 1 -Position : [627.24, 612.058] -Measurements : [1469.08, 94869.6, -0.14857, 0.0954542] ---- -Label : 1 -Position : [691.021, 612.203] -Measurements : [1174.15, 157046, 0.0377585, -0.761364] ---- -Label : 1 -Position : [618.968, 612.232] -Measurements : [1518.66, 43584.4, -0.902702, 0.764844] ---- -Label : 0 -Position : [553.348, 612.359] -Measurements : [908.398, 1915.39, -0.588395, 2.46765] ---- -Label : 1 -Position : [621.214, 612.44] -Measurements : [1553.12, 51804.4, -0.32645, 0.803664] ---- -Label : 1 -Position : [22.504, 612.856] -Measurements : [1574.99, 469838, -0.564517, -0.977363] ---- -Label : 1 -Position : [677.848, 613.256] -Measurements : [1339.91, 129476, 0.817102, -0.41253] ---- -Label : 1 -Position : [165.443, 614.299] -Measurements : [914.874, 374348, 1.26298, 0.189669] ---- -Label : 1 -Position : [229.864, 614.392] -Measurements : [1399.63, 94221.3, -0.461732, 0.0481431] ---- -Label : 1 -Position : [397.52, 614.736] -Measurements : [1155.51, 195162, -0.211604, -1.331] ---- -Label : 1 -Position : [399.149, 615.156] -Measurements : [1028.56, 215820, 0.159365, -1.44649] ---- -Label : 1 -Position : [160.928, 615.23] -Measurements : [1209.76, 251965, 0.825494, -0.131135] ---- -Label : 1 -Position : [27.0727, 615.61] -Measurements : [1730.59, 507650, -0.412145, -1.16127] ---- -Label : 1 -Position : [162.792, 615.928] -Measurements : [1132.84, 305035, 0.799962, -0.431372] ---- -Label : 1 -Position : [24.9003, 616.489] -Measurements : [1884.29, 338993, -0.572864, -0.677153] ---- -Label : 1 -Position : [620.246, 616.856] -Measurements : [1399.81, 79414.4, -0.494323, 0.0157049] ---- -Label : 1 -Position : [25.064, 617.464] -Measurements : [1740.64, 474181, -0.301654, -1.28318] ---- -Label : 1 -Position : [679.078, 617.517] -Measurements : [1228.53, 118710, 1.39538, 0.899681] ---- -Label : 1 -Position : [763.626, 617.551] -Measurements : [904.116, 171680, 0.285781, -0.837869] ---- -Label : 1 -Position : [449.464, 617.587] -Measurements : [1007.73, 429732, 0.754016, -0.924057] ---- -Label : 1 -Position : [757.66, 617.863] -Measurements : [715.401, 195274, 0.866902, -0.585923] ---- -Label : 1 -Position : [225.465, 618.122] -Measurements : [1576.52, 140558, -0.51971, 0.515011] ---- -Label : 0 -Position : [517.259, 618.376] -Measurements : [905.346, 10356.9, 1.09423, 6.74397] ---- -Label : 1 -Position : [226.963, 619.391] -Measurements : [1593.66, 122213, -0.346648, -0.566329] ---- -Label : 1 -Position : [27.9968, 620.279] -Measurements : [1347.66, 633807, 0.486464, -1.41245] ---- -Label : 1 -Position : [22.8439, 620.437] -Measurements : [1362.71, 527984, 0.241686, -1.31979] ---- -Label : 1 -Position : [227.304, 621.048] -Measurements : [1500.74, 182489, -0.265723, -1.05499] ---- -Label : 1 -Position : [397.74, 621.228] -Measurements : [1294.33, 608484, 0.435371, -1.35002] ---- -Label : 1 -Position : [224.9, 621.331] -Measurements : [1588.34, 212879, 0.0994024, -0.55914] ---- -Label : 0 -Position : [547.315, 621.367] -Measurements : [858.335, 12813.8, -1.24825, 2.37543] ---- -Label : 1 -Position : [630.232, 621.448] -Measurements : [1653.59, 243765, 0.166521, -0.863138] ---- -Label : 1 -Position : [445.648, 621.904] -Measurements : [1793.47, 249477, -0.341991, -0.941242] ---- -Label : 1 -Position : [1005.62, 622.247] -Measurements : [1290, 558674, 0.089665, -1.45355] ---- -Label : 1 -Position : [760.28, 622.472] -Measurements : [1312.64, 200230, 0.0510056, -1.0254] ---- -Label : 0 -Position : [503.897, 622.593] -Measurements : [1289.92, 77478, 0.527279, -0.703087] ---- -Label : 1 -Position : [394.96, 622.928] -Measurements : [1422.88, 538847, 0.183259, -1.32484] ---- -Label : 1 -Position : [438.111, 623.097] -Measurements : [1093.15, 381161, 0.882787, -0.0819444] ---- -Label : 1 -Position : [966.471, 623.478] -Measurements : [1008.86, 339500, 0.264693, -1.43376] ---- -Label : 1 -Position : [1008.55, 623.648] -Measurements : [1514.1, 375138, -0.128177, -0.92859] ---- -Label : 1 -Position : [223.525, 623.759] -Measurements : [1628.24, 297663, 0.401837, -0.302095] ---- -Label : 1 -Position : [393.035, 623.839] -Measurements : [1374.65, 553140, 0.235271, -1.24485] ---- -Label : 0 -Position : [547.771, 624.497] -Measurements : [838.306, 16471.2, -0.594663, 0.551508] ---- -Label : 1 -Position : [634.282, 624.588] -Measurements : [1429.07, 187364, 0.614137, -0.202062] ---- -Label : 1 -Position : [439.392, 624.681] -Measurements : [1146.97, 307115, 0.7285, -0.0404627] ---- -Label : 1 -Position : [1012.4, 624.732] -Measurements : [1424.75, 329039, 0.62268, -0.974572] ---- -Label : 1 -Position : [449.939, 624.807] -Measurements : [1480.06, 291421, -0.161697, -1.38779] ---- -Label : 1 -Position : [225.674, 624.859] -Measurements : [1495.61, 236804, 0.610501, 0.709149] ---- -Label : 1 -Position : [632.719, 625.139] -Measurements : [1538.43, 244454, 0.493099, -0.61549] ---- -Label : 1 -Position : [225.969, 625.226] -Measurements : [1448.69, 236898, 0.744014, 0.995808] ---- -Label : 1 -Position : [78.7339, 625.981] -Measurements : [1050.8, 606251, 0.572999, -1.08684] ---- -Label : 1 -Position : [87.1652, 625.993] -Measurements : [862.626, 242984, 2.05207, 4.50996] ---- -Label : 1 -Position : [83.432, 626.68] -Measurements : [1136.01, 516264, 0.740574, -0.643966] ---- -Label : 1 -Position : [963.496, 626.72] -Measurements : [1209.7, 261596, 0.0189527, -1.39528] ---- -Label : 1 -Position : [635.963, 626.817] -Measurements : [1394.26, 175477, 0.622809, -0.210303] ---- -Label : 1 -Position : [761.875, 626.825] -Measurements : [1599.66, 226034, -0.28443, -0.746557] ---- -Label : 1 -Position : [224.232, 627.192] -Measurements : [1511.04, 270670, 0.76139, 0.454238] ---- -Label : 1 -Position : [966.576, 627.42] -Measurements : [1038.25, 308571, 0.312293, -1.42961] ---- -Label : 0 -Position : [515.403, 628.015] -Measurements : [879.467, 5137.89, 1.44959, 7.48975] ---- -Label : 1 -Position : [442.576, 628.048] -Measurements : [1210.42, 127373, 0.50762, 0.935571] ---- -Label : 1 -Position : [650.696, 628.182] -Measurements : [1123.87, 49497.6, -0.17434, -0.770055] ---- -Label : 1 -Position : [652.76, 628.616] -Measurements : [1155.73, 53051.8, -0.286533, -0.816427] ---- -Label : 0 -Position : [515.568, 628.895] -Measurements : [879.467, 5137.89, 1.44959, 7.48975] ---- -Label : 1 -Position : [759.256, 629.128] -Measurements : [1422.45, 342307, 0.0222468, -1.29925] ---- -Label : 1 -Position : [657.442, 629.734] -Measurements : [1198.25, 50291.5, -0.26236, -0.802717] ---- -Label : 1 -Position : [80.3839, 629.97] -Measurements : [1577.12, 441700, -0.0447074, -1.22484] ---- -Label : 1 -Position : [80.36, 630.264] -Measurements : [1578.59, 429767, 0.0344501, -1.3347] ---- -Label : 1 -Position : [79.8048, 630.576] -Measurements : [1586.45, 443481, -0.0441499, -1.3246] ---- -Label : 0 -Position : [527.556, 630.69] -Measurements : [838.26, 11052.5, -0.579509, 0.0756377] ---- -Label : 1 -Position : [635.352, 631.688] -Measurements : [1494.18, 177045, 0.113623, -0.553691] ---- -Label : 1 -Position : [763.164, 631.767] -Measurements : [1168.13, 466586, 0.570538, -1.34331] ---- -Label : 1 -Position : [18.92, 631.8] -Measurements : [991.241, 285977, 0.742128, -0.833555] ---- -Label : 1 -Position : [220.508, 632.123] -Measurements : [1796.79, 199863, -0.200005, 0.62394] ---- -Label : 1 -Position : [20.5197, 632.497] -Measurements : [933.061, 287088, 0.961963, -0.518892] ---- -Label : 1 -Position : [959.4, 633.376] -Measurements : [899.198, 208629, 0.690542, -0.496948] ---- -Label : 1 -Position : [719.32, 633.736] -Measurements : [1354.96, 147443, -0.106377, -0.998034] ---- -Label : 0 -Position : [527.043, 633.867] -Measurements : [809.132, 12263.1, -0.249287, -0.605208] ---- -Label : 1 -Position : [963.67, 633.894] -Measurements : [683.155, 178853, 1.46831, 1.35291] ---- -Label : 1 -Position : [19.7224, 634.069] -Measurements : [900.164, 311706, 0.949301, -0.563988] ---- -Label : 1 -Position : [718.006, 634.517] -Measurements : [1284.63, 177830, -0.0829044, -1.11961] ---- -Label : 0 -Position : [540.648, 634.618] -Measurements : [953.967, 12861.9, 0.655317, -0.783391] ---- -Label : 1 -Position : [689.461, 635.13] -Measurements : [962.756, 73066.3, 1.23401, 1.33694] ---- -Label : 1 -Position : [636.717, 635.378] -Measurements : [1767.92, 224343, -0.00251318, -0.939323] ---- -Label : 1 -Position : [220.136, 635.896] -Measurements : [1851.48, 216171, -1.1947, 1.02695] ---- -Label : 1 -Position : [638.717, 636.163] -Measurements : [1830.87, 257753, -0.200122, -1.08728] ---- -Label : 1 -Position : [693.72, 636.296] -Measurements : [1169.43, 154007, 0.853101, -0.184185] ---- -Label : 1 -Position : [78.312, 636.408] -Measurements : [1254.12, 337591, 0.914237, -0.500015] ---- -Label : 1 -Position : [716.984, 636.418] -Measurements : [1056.63, 183055, 0.551762, -0.683357] ---- -Label : 1 -Position : [691.927, 636.819] -Measurements : [1062.01, 102471, 0.95495, -0.0353323] ---- -Label : 1 -Position : [79.7674, 636.826] -Measurements : [1269.06, 357447, 0.850762, -0.718324] ---- -Label : 1 -Position : [638.936, 637.832] -Measurements : [1840.86, 258591, -0.283776, -1.00201] ---- -Label : 1 -Position : [658.176, 637.861] -Measurements : [1511.8, 191555, -0.180277, -1.022] ---- -Label : 1 -Position : [955.556, 637.937] -Measurements : [736.643, 96568.3, 0.53228, -0.945341] ---- -Label : 1 -Position : [224.634, 638.018] -Measurements : [1553.21, 383484, -0.176531, -1.49962] ---- -Label : 1 -Position : [660.782, 638.093] -Measurements : [1584.1, 160129, -0.305115, -0.649177] ---- -Label : 1 -Position : [78.7125, 638.388] -Measurements : [1077.97, 164820, 1.10866, 0.606104] ---- -Label : 1 -Position : [661.464, 638.856] -Measurements : [1571.78, 150928, -0.285468, -0.612174] ---- -Label : 1 -Position : [367.348, 639.047] -Measurements : [969.606, 336796, 0.849322, 0.144531] ---- -Label : 1 -Position : [639.406, 639.134] -Measurements : [1864.95, 246250, -0.0962476, -0.97583] ---- -Label : 1 -Position : [215.9, 640.49] -Measurements : [891.219, 491725, 1.09034, -0.512876] ---- -Label : 1 -Position : [217.138, 640.535] -Measurements : [1124.14, 627990, 0.534546, -1.48007] ---- -Label : 1 -Position : [719.32, 641.416] -Measurements : [1052.48, 162883, 0.627541, -0.31508] ---- -Label : 1 -Position : [220.648, 641.528] -Measurements : [1223.89, 581861, 0.3473, -1.58541] ---- -Label : 1 -Position : [371.92, 641.872] -Measurements : [1371.47, 628345, 0.335862, -1.28753] ---- -Label : 1 -Position : [164.925, 642.383] -Measurements : [997.215, 332672, 0.447158, -1.20729] ---- -Label : 0 -Position : [487.669, 643.062] -Measurements : [872.865, 130906, 0.678553, -0.488235] ---- -Label : 1 -Position : [72.68, 643.064] -Measurements : [1370.61, 174143, 0.412515, -0.152904] ---- -Label : 1 -Position : [71.1286, 643.487] -Measurements : [1363.65, 159548, 0.516921, 0.155043] ---- -Label : 1 -Position : [721.987, 643.529] -Measurements : [1151.98, 186851, 0.602096, -0.273056] ---- -Label : 0 -Position : [481.56, 643.934] -Measurements : [1278.77, 75714.6, 0.499343, -0.533136] ---- -Label : 1 -Position : [345.932, 643.965] -Measurements : [898.039, 109657, 0.293744, -0.800513] ---- -Label : 0 -Position : [526.188, 644.129] -Measurements : [800.554, 7117.08, -1.27835, 1.38297] ---- -Label : 1 -Position : [17.5728, 644.171] -Measurements : [784.825, 151363, 0.590761, -0.902371] ---- -Label : 1 -Position : [14.824, 644.6] -Measurements : [887.17, 130667, 0.193671, -0.962131] ---- -Label : 1 -Position : [68.6911, 644.736] -Measurements : [1438.19, 306986, 0.809448, 0.131956] ---- -Label : 1 -Position : [375.677, 646.253] -Measurements : [1160.14, 710975, 0.786928, -1.10194] ---- -Label : 1 -Position : [715.046, 646.263] -Measurements : [1019.72, 75845.4, 0.954942, 2.73266] ---- -Label : 1 -Position : [68.3374, 646.365] -Measurements : [1720.93, 455144, 0.476677, -0.793437] ---- -Label : 1 -Position : [646.903, 646.556] -Measurements : [2221.57, 434222, -0.264716, -0.912646] ---- -Label : 1 -Position : [666.584, 647.048] -Measurements : [1246.22, 122547, 0.136985, -0.769833] ---- -Label : 1 -Position : [767.949, 647.067] -Measurements : [743.155, 147586, 1.46344, 2.33072] ---- -Label : 1 -Position : [167.912, 647.16] -Measurements : [1545.59, 352033, 0.124075, -0.683738] ---- -Label : 1 -Position : [646.616, 647.56] -Measurements : [2209.56, 442573, -0.202485, -1.07395] ---- -Label : 1 -Position : [19.2643, 647.622] -Measurements : [725.527, 126482, 1.09316, -0.0232116] ---- -Label : 1 -Position : [425.173, 647.85] -Measurements : [1161.71, 463657, 0.197698, -1.6399] ---- -Label : 1 -Position : [350.928, 648.528] -Measurements : [982.83, 225073, 0.652522, -0.376124] ---- -Label : 1 -Position : [667.803, 648.61] -Measurements : [1294.38, 127354, 0.258762, -0.450068] ---- -Label : 1 -Position : [348.665, 649.488] -Measurements : [906.754, 267424, 0.902725, -0.104222] ---- -Label : 1 -Position : [646.31, 649.623] -Measurements : [2089.38, 509254, 0.0794223, -1.32463] ---- -Label : 1 -Position : [666.352, 649.786] -Measurements : [1253.58, 111373, 0.299511, -0.699559] ---- -Label : 1 -Position : [428.24, 650.576] -Measurements : [1481.36, 351115, -0.356533, -1.06592] ---- -Label : 1 -Position : [166.567, 650.653] -Measurements : [1549.69, 340416, -0.105348, -0.760685] ---- -Label : 1 -Position : [71.656, 650.744] -Measurements : [1988.6, 427646, 0.196713, -1.2895] ---- -Label : 1 -Position : [69.8398, 650.968] -Measurements : [1962.14, 468000, 0.119201, -1.24634] ---- -Label : 1 -Position : [764.888, 651.144] -Measurements : [1163.79, 318225, 0.551722, -0.860368] ---- -Label : 1 -Position : [424.362, 652.544] -Measurements : [1749.67, 347800, -0.614633, -0.673145] ---- -Label : 1 -Position : [760.961, 652.765] -Measurements : [1084.96, 348471, 0.60671, -0.862569] ---- -Label : 1 -Position : [337.464, 653.225] -Measurements : [1154.71, 184391, -0.160176, -0.523177] ---- -Label : 1 -Position : [968.483, 654.121] -Measurements : [761.38, 227911, 0.923138, -0.448279] ---- -Label : 1 -Position : [726.114, 654.151] -Measurements : [1745.4, 689909, 0.0751936, -1.6574] ---- -Label : 1 -Position : [336.08, 654.16] -Measurements : [1144.03, 180941, -0.409782, -0.920301] ---- -Label : 1 -Position : [1017.77, 654.368] -Measurements : [1214.95, 241826, -0.380885, -0.958212] ---- -Label : 1 -Position : [335.701, 654.57] -Measurements : [1115.77, 188132, -0.314346, -1.09653] ---- -Label : 1 -Position : [162.28, 654.84] -Measurements : [1295.62, 216478, 0.161164, -1.08242] ---- -Label : 1 -Position : [665.715, 654.854] -Measurements : [1262.22, 90788.8, 0.0866523, -0.832344] ---- -Label : 1 -Position : [1020.47, 654.876] -Measurements : [1352.78, 96442.4, 0.458003, -0.821514] ---- -Label : 1 -Position : [651.771, 655.597] -Measurements : [1336.6, 52841.8, -0.173577, -0.896528] ---- -Label : 1 -Position : [722.657, 655.597] -Measurements : [1649.8, 515605, 0.0252072, -1.561] ---- -Label : 1 -Position : [70.3483, 655.777] -Measurements : [1849.38, 489910, 0.204139, -0.945411] ---- -Label : 1 -Position : [645.958, 655.794] -Measurements : [1404.18, 94598.8, 1.04068, 1.87631] ---- -Label : 0 -Position : [538.063, 656.278] -Measurements : [877.367, 68801.9, 1.44427, 3.37491] ---- -Label : 0 -Position : [556.593, 656.368] -Measurements : [795.135, 39279.8, 1.82693, 7.55009] ---- -Label : 1 -Position : [1021.26, 656.547] -Measurements : [1240.64, 137130, 0.375484, -0.4541] ---- -Label : 1 -Position : [961.58, 657.077] -Measurements : [921.766, 190029, 0.170197, -1.06815] ---- -Label : 1 -Position : [766.413, 657.165] -Measurements : [1197.69, 410140, 0.437892, -1.31718] ---- -Label : 1 -Position : [665.048, 657.288] -Measurements : [1204.65, 67675.6, 0.879421, -0.115793] ---- -Label : 1 -Position : [422.608, 657.744] -Measurements : [1596.29, 549647, -0.345803, -1.2793] ---- -Label : 1 -Position : [162.151, 657.783] -Measurements : [1068.91, 340271, 0.452176, -1.23948] ---- -Label : 1 -Position : [649.176, 657.8] -Measurements : [1294.57, 60500.7, -0.229286, -1.02879] ---- -Label : 1 -Position : [769.496, 657.8] -Measurements : [1112.1, 356364, 0.716973, -1.06177] ---- -Label : 1 -Position : [72.168, 657.912] -Measurements : [1648.33, 355796, 0.463576, -0.237449] ---- -Label : 1 -Position : [965.032, 657.952] -Measurements : [922.708, 217739, 0.337217, -1.14451] ---- -Label : 0 -Position : [483.084, 658.044] -Measurements : [854.813, 3977.18, -0.266403, -0.294176] ---- -Label : 1 -Position : [327.57, 658.195] -Measurements : [837.054, 108616, 0.42112, -0.807673] ---- -Label : 1 -Position : [764.587, 658.316] -Measurements : [1001.37, 406383, 0.71888, -1.00224] ---- -Label : 1 -Position : [422.673, 658.76] -Measurements : [1481.02, 644628, -0.112398, -1.5576] ---- -Label : 1 -Position : [724.952, 658.824] -Measurements : [2079.1, 431633, -0.646768, -0.357068] ---- -Label : 1 -Position : [167.184, 659.083] -Measurements : [627.541, 154888, 1.80979, 2.8991] ---- -Label : 1 -Position : [205.567, 659.474] -Measurements : [651.925, 146220, 1.19523, 0.194839] ---- -Label : 0 -Position : [518.574, 660.945] -Measurements : [783.345, 17212.2, -0.228475, -1.30841] ---- -Label : 1 -Position : [72.7293, 661.025] -Measurements : [1441.44, 331111, 0.107511, -1.00881] ---- -Label : 1 -Position : [421.074, 661.214] -Measurements : [957.763, 588225, 1.00047, -0.617813] ---- -Label : 1 -Position : [668.466, 661.664] -Measurements : [1138.64, 63929.5, 1.33893, 0.921879] ---- -Label : 0 -Position : [537.113, 661.682] -Measurements : [790.204, 19786, -0.135555, 0.571849] ---- -Label : 1 -Position : [325.84, 662.352] -Measurements : [985.124, 93874.5, -0.279558, -0.827325] ---- -Label : 0 -Position : [536.07, 662.384] -Measurements : [797.187, 14836.7, -0.85645, 0.644137] ---- -Label : 1 -Position : [209.384, 663.032] -Measurements : [772.789, 133137, 0.821945, -0.533571] ---- -Label : 1 -Position : [213.506, 663.095] -Measurements : [689.269, 115301, 1.32993, 0.721288] ---- -Label : 1 -Position : [73.192, 664.056] -Measurements : [1245.63, 312267, 0.50745, -0.608178] ---- -Label : 1 -Position : [655.963, 664.085] -Measurements : [1458.53, 143172, 0.548294, 0.220907] ---- -Label : 1 -Position : [77.8493, 665.478] -Measurements : [1116.62, 214089, 1.50817, 1.70207] ---- -Label : 1 -Position : [621.528, 665.992] -Measurements : [1799.15, 149477, 0.423776, -0.610854] ---- -Label : 1 -Position : [651.224, 666.504] -Measurements : [1556.11, 163002, 0.247162, -0.496522] ---- -Label : 1 -Position : [618.79, 666.802] -Measurements : [1766.73, 195275, 0.604378, -0.214534] ---- -Label : 1 -Position : [321.858, 666.888] -Measurements : [655.148, 144978, 0.794163, -0.989915] ---- -Label : 1 -Position : [1016.38, 667.902] -Measurements : [1286.93, 587223, 0.282382, -1.19698] ---- -Label : 1 -Position : [410.125, 668.006] -Measurements : [1083.49, 320184, 0.43898, -1.02464] ---- -Label : 1 -Position : [77.7727, 668.073] -Measurements : [1009.71, 241215, 1.43994, 1.92425] ---- -Label : 1 -Position : [653.23, 668.291] -Measurements : [1681.02, 206143, 0.176655, -0.784201] ---- -Label : 0 -Position : [515.781, 668.499] -Measurements : [883.445, 8828.79, -0.8104, -0.0532019] ---- -Label : 1 -Position : [616.685, 668.705] -Measurements : [1728.95, 215951, 0.392863, -0.847413] ---- -Label : 1 -Position : [968.773, 669.793] -Measurements : [934.552, 257789, 0.524287, -1.14392] ---- -Label : 1 -Position : [1013.61, 670.298] -Measurements : [1234.39, 684096, 0.306861, -1.45858] ---- -Label : 0 -Position : [588.996, 670.617] -Measurements : [1422.8, 29963.7, 2.69111, 11.7876] ---- -Label : 1 -Position : [973.736, 670.752] -Measurements : [1520.1, 278319, -0.516057, -0.285793] ---- -Label : 0 -Position : [579.748, 671.414] -Measurements : [1431.96, 106078, 2.46061, 6.13458] ---- -Label : 1 -Position : [972.275, 671.734] -Measurements : [1490.81, 277405, -0.266265, -0.31192] ---- -Label : 0 -Position : [547.265, 672.059] -Measurements : [778.818, 37190.3, -0.0268415, -0.167969] ---- -Label : 1 -Position : [655.444, 672.47] -Measurements : [1908.63, 351348, -0.181535, -1.13199] ---- -Label : 1 -Position : [622.04, 672.648] -Measurements : [2141.65, 148466, 0.248506, -0.988989] ---- -Label : 1 -Position : [413.272, 672.656] -Measurements : [1135.69, 307467, 0.510597, -0.642238] ---- -Label : 1 -Position : [1018.28, 672.8] -Measurements : [1856.35, 259595, 0.156641, -1.14678] ---- -Label : 1 -Position : [620.299, 673.163] -Measurements : [2093.52, 175901, 0.0830093, -0.786095] ---- -Label : 1 -Position : [622.065, 673.247] -Measurements : [2112.96, 147719, 0.390355, -0.875959] ---- -Label : 1 -Position : [688.381, 673.909] -Measurements : [1205.05, 119376, 0.00799213, -1.24933] ---- -Label : 0 -Position : [534.536, 674.111] -Measurements : [919.752, 4337.91, 0.87782, 2.11114] ---- -Label : 0 -Position : [527.383, 674.5] -Measurements : [1096.82, 117395, 1.82919, 2.56327] ---- -Label : 1 -Position : [653.784, 675.208] -Measurements : [1890.34, 311800, 0.0807829, -1.1148] ---- -Label : 1 -Position : [690.648, 675.208] -Measurements : [1286.24, 100594, -0.176539, -0.686918] ---- -Label : 1 -Position : [693.533, 675.27] -Measurements : [1304.31, 78387.3, 0.229361, -0.822617] ---- -Label : 1 -Position : [975.774, 675.582] -Measurements : [1929.67, 134623, 0.0651155, -0.819899] ---- -Label : 0 -Position : [515.307, 675.665] -Measurements : [943.436, 54382.4, 2.37623, 6.52189] ---- -Label : 1 -Position : [407.64, 675.728] -Measurements : [1320.52, 304427, 0.147623, -1.17011] ---- -Label : 1 -Position : [622.12, 675.976] -Measurements : [2115.05, 146358, 0.425116, -0.960373] ---- -Label : 0 -Position : [534.066, 676.051] -Measurements : [936.045, 5261.81, 0.805183, 1.68575] ---- -Label : 1 -Position : [406.791, 676.117] -Measurements : [1314.99, 364777, 0.149226, -1.20072] ---- -Label : 0 -Position : [517.311, 676.278] -Measurements : [1079.21, 166704, 1.74736, 2.69667] ---- -Label : 1 -Position : [649.626, 676.426] -Measurements : [1551.55, 277559, 0.683601, -0.796943] ---- -Label : 1 -Position : [416.29, 677.167] -Measurements : [950.588, 113002, 0.397363, -0.430585] ---- -Label : 1 -Position : [977.832, 677.408] -Measurements : [2012.3, 168949, 0.0242875, -0.752349] ---- -Label : 1 -Position : [405.518, 677.462] -Measurements : [1348.23, 425943, 0.170571, -1.16512] ---- -Label : 1 -Position : [621.528, 678.792] -Measurements : [1901.38, 149894, 0.692104, -0.182475] ---- -Label : 0 -Position : [574.408, 679.108] -Measurements : [1168.51, 40995.7, -0.122898, -0.763841] ---- -Label : 0 -Position : [576.008, 679.187] -Measurements : [1225.92, 27986.3, 0.01316, -1.15928] ---- -Label : 1 -Position : [616.812, 679.71] -Measurements : [1531.25, 168993, 1.15595, 0.159621] ---- -Label : 1 -Position : [407.84, 680.184] -Measurements : [1199.85, 485625, 0.779406, -0.83389] ---- -Label : 1 -Position : [982.286, 680.676] -Measurements : [1718.36, 187728, -0.105281, -0.680188] ---- -Label : 0 -Position : [487.025, 680.714] -Measurements : [906.276, 4556.15, -0.882028, 0.577918] ---- -Label : 1 -Position : [650.951, 680.747] -Measurements : [1500.31, 229516, 1.0241, 0.26796] ---- -Label : 1 -Position : [402.038, 680.978] -Measurements : [1215.16, 449075, 0.66182, -0.729854] ---- -Label : 1 -Position : [978.217, 681.305] -Measurements : [1859.57, 134594, 0.480071, -0.713095] ---- -Label : 1 -Position : [402.52, 681.36] -Measurements : [1196.93, 425444, 0.760612, -0.485687] ---- -Label : 1 -Position : [725.531, 681.621] -Measurements : [1202.61, 67219.6, -0.122566, -0.647671] ---- -Label : 1 -Position : [658.167, 682.413] -Measurements : [1695.73, 147622, 0.607021, -0.154088] ---- -Label : 1 -Position : [980.904, 682.528] -Measurements : [1767.16, 144774, -0.0258514, -0.405201] ---- -Label : 1 -Position : [390.15, 684.46] -Measurements : [1117.16, 507760, 0.367595, -1.535] ---- -Label : 1 -Position : [737.24, 684.936] -Measurements : [1320.38, 42841.3, -0.2018, -0.224263] ---- -Label : 1 -Position : [387.16, 684.944] -Measurements : [1321.3, 447000, -0.0174756, -1.54706] ---- -Label : 1 -Position : [736.083, 685.06] -Measurements : [1356.46, 37994.9, -0.310419, -0.145552] ---- -Label : 1 -Position : [739.274, 685.082] -Measurements : [1299.13, 47068.5, -0.184465, -0.579972] ---- -Label : 1 -Position : [654.296, 685.448] -Measurements : [1673.69, 194879, 0.246342, -0.327918] ---- -Label : 1 -Position : [55.272, 685.536] -Measurements : [838.736, 170550, 0.679353, -0.423567] ---- -Label : 1 -Position : [49.5741, 685.626] -Measurements : [901.655, 111832, 0.557721, 0.103901] ---- -Label : 1 -Position : [56.8424, 685.661] -Measurements : [807.758, 161795, 0.781385, -0.132215] ---- -Label : 0 -Position : [548.86, 685.866] -Measurements : [980.933, 42147.1, 1.13393, 3.13981] ---- -Label : 1 -Position : [49.64, 686.048] -Measurements : [928.037, 101081, 0.61425, 0.203384] ---- -Label : 0 -Position : [485.44, 686.102] -Measurements : [887.81, 19268.9, 0.995044, 2.67467] ---- -Label : 0 -Position : [543.41, 686.241] -Measurements : [1041.13, 52347.5, 1.95783, 4.51984] ---- -Label : 0 -Position : [524.397, 686.464] -Measurements : [1162.19, 101653, 2.18648, 6.96006] ---- -Label : 1 -Position : [682.968, 686.472] -Measurements : [1222.65, 98592.7, 0.160611, -0.661722] ---- -Label : 1 -Position : [727, 686.472] -Measurements : [1356.1, 57905.2, -0.57116, -0.0947079] ---- -Label : 1 -Position : [978.983, 686.91] -Measurements : [1613.2, 163208, -0.22867, 0.642146] ---- -Label : 1 -Position : [713.863, 687.646] -Measurements : [1451.33, 140160, 0.00523052, -1.12502] ---- -Label : 1 -Position : [206.972, 687.695] -Measurements : [983.275, 355616, 0.789767, -0.482866] ---- -Label : 1 -Position : [206.566, 687.709] -Measurements : [983.275, 355616, 0.789767, -0.482866] ---- -Label : 1 -Position : [723.544, 687.898] -Measurements : [1297.93, 69015.3, 0.276871, -0.616712] ---- -Label : 1 -Position : [686.711, 688.307] -Measurements : [1377.23, 77359.3, 0.895343, 1.77447] ---- -Label : 0 -Position : [571.043, 688.738] -Measurements : [901.792, 4547.6, -0.731337, 1.4039] ---- -Label : 1 -Position : [719.579, 688.845] -Measurements : [1393.49, 144740, 0.696712, -0.663996] ---- -Label : 1 -Position : [164.969, 688.965] -Measurements : [715.536, 325148, 1.52069, 0.96285] ---- -Label : 1 -Position : [715.736, 689.032] -Measurements : [1542.32, 151163, 0.153088, -0.905249] ---- -Label : 1 -Position : [54.8825, 689.621] -Measurements : [1011.74, 114194, 0.406325, -0.163878] ---- -Label : 1 -Position : [391.765, 689.631] -Measurements : [1081.16, 376163, 0.707204, -0.953504] ---- -Label : 0 -Position : [551.418, 689.811] -Measurements : [884.593, 30976, 1.06188, 3.67884] ---- -Label : 1 -Position : [708.545, 690.159] -Measurements : [1726.49, 235613, 0.0238457, -1.00875] ---- -Label : 1 -Position : [983.464, 690.208] -Measurements : [1331.81, 367534, -0.0399181, -1.23515] ---- -Label : 1 -Position : [47.6013, 690.502] -Measurements : [856.738, 146734, 0.692348, -0.287713] ---- -Label : 1 -Position : [703.96, 690.568] -Measurements : [1779.34, 256063, -0.276257, -1.10143] ---- -Label : 0 -Position : [477.421, 690.616] -Measurements : [798.826, 8898.81, 0.203135, 0.557101] ---- -Label : 0 -Position : [490.179, 690.819] -Measurements : [989.34, 15028.7, 0.0997386, 1.83382] ---- -Label : 0 -Position : [524.779, 690.85] -Measurements : [1113.43, 104904, 2.49195, 7.80539] ---- -Label : 1 -Position : [206.824, 691.168] -Measurements : [1355.14, 281065, 0.155999, -0.747438] ---- -Label : 1 -Position : [685.015, 691.303] -Measurements : [1412.51, 70869.9, 0.99385, 1.72712] ---- -Label : 0 -Position : [469.71, 691.368] -Measurements : [856.655, 9324.99, -1.14346, 0.142251] ---- -Label : 0 -Position : [505.637, 691.796] -Measurements : [1017.56, 93842.1, 3.18601, 10.3167] ---- -Label : 0 -Position : [448.147, 691.965] -Measurements : [1044.07, 17306.6, 0.694973, -0.20513] ---- -Label : 1 -Position : [701.035, 692.544] -Measurements : [1724.98, 298547, -0.054249, -1.47061] ---- -Label : 1 -Position : [630.264, 693.2] -Measurements : [1801.23, 94509.7, 0.18025, -0.41504] ---- -Label : 1 -Position : [163.816, 693.216] -Measurements : [1430.95, 600693, 0.0389097, -1.39027] ---- -Label : 1 -Position : [983.618, 693.519] -Measurements : [1098.45, 345384, 0.535119, -0.963905] ---- -Label : 0 -Position : [503.696, 693.567] -Measurements : [956.55, 54666.3, 3.53276, 13.4114] ---- -Label : 1 -Position : [982.624, 693.645] -Measurements : [1145.16, 334227, 0.389084, -1.02992] ---- -Label : 1 -Position : [47.3356, 693.752] -Measurements : [886.538, 138820, 0.746525, -0.023753] ---- -Label : 1 -Position : [46.8316, 693.921] -Measurements : [861.162, 136460, 0.719406, -0.0108743] ---- -Label : 1 -Position : [165.907, 695.516] -Measurements : [1514.23, 699505, 0.108439, -1.49279] ---- -Label : 1 -Position : [30.5928, 696.046] -Measurements : [812.548, 105313, 0.29701, -1.10928] ---- -Label : 1 -Position : [42.984, 696.288] -Measurements : [720.49, 107204, 1.23598, 1.21211] ---- -Label : 1 -Position : [633.507, 696.501] -Measurements : [1730.11, 73242.4, 1.22178, 0.729323] ---- -Label : 1 -Position : [211.513, 696.641] -Measurements : [1484.06, 184561, -0.0754644, -1.38894] ---- -Label : 0 -Position : [440.551, 697.159] -Measurements : [1089.97, 25064.2, 0.78966, -0.1101] ---- -Label : 1 -Position : [299.608, 697.232] -Measurements : [794.254, 213956, 1.26757, 0.359448] ---- -Label : 0 -Position : [490.757, 697.281] -Measurements : [1123.08, 113316, 1.94013, 3.9328] ---- -Label : 1 -Position : [30.696, 697.312] -Measurements : [855.093, 101910, 0.396883, -0.694619] ---- -Label : 1 -Position : [364.632, 697.744] -Measurements : [989.14, 197569, 0.23462, -1.34218] ---- -Label : 1 -Position : [634.847, 697.976] -Measurements : [1628.92, 74376.4, 0.984118, 1.91579] ---- -Label : 1 -Position : [161.256, 698.336] -Measurements : [2052.31, 332781, -0.612827, -0.186191] ---- -Label : 1 -Position : [164.181, 698.869] -Measurements : [1811.12, 580326, -0.282066, -1.27242] ---- -Label : 1 -Position : [158.924, 698.901] -Measurements : [2032.69, 246344, -0.385655, 0.209423] ---- -Label : 1 -Position : [299.17, 698.99] -Measurements : [837.191, 227512, 1.06925, -0.197763] ---- -Label : 1 -Position : [164.612, 699.103] -Measurements : [1729.77, 648245, -0.137421, -1.44267] ---- -Label : 0 -Position : [488.985, 699.288] -Measurements : [1108.09, 122490, 1.81843, 3.34549] ---- -Label : 1 -Position : [367.681, 699.56] -Measurements : [987.821, 191059, 0.243993, -1.24114] ---- -Label : 1 -Position : [205.788, 699.67] -Measurements : [1275.03, 447995, 0.21942, -1.51897] ---- -Label : 1 -Position : [209.384, 699.872] -Measurements : [1357.6, 398827, -0.00553489, -1.47772] ---- -Label : 1 -Position : [349.034, 700.386] -Measurements : [708.733, 135316, 0.638928, -1.19979] ---- -Label : 1 -Position : [981.928, 700.448] -Measurements : [949.902, 103593, 0.402101, 0.0802957] ---- -Label : 1 -Position : [979.481, 700.679] -Measurements : [995.192, 101721, 0.236388, -0.0629493] ---- -Label : 1 -Position : [360.412, 700.9] -Measurements : [853.195, 166116, 0.566104, -0.899401] ---- -Label : 1 -Position : [353.368, 701.328] -Measurements : [819.785, 124189, 0.12974, -1.48596] ---- -Label : 1 -Position : [300.57, 701.388] -Measurements : [1008.2, 441653, 0.94759, -0.383009] ---- -Label : 1 -Position : [154.947, 701.613] -Measurements : [1868.02, 288631, -0.285888, -0.699148] ---- -Label : 1 -Position : [32.7158, 701.613] -Measurements : [815.192, 74028.6, 0.59833, -0.330883] ---- -Label : 0 -Position : [498.827, 701.643] -Measurements : [868.608, 8156.59, 0.150489, -0.898373] ---- -Label : 1 -Position : [24.5461, 701.854] -Measurements : [1030.43, 225769, 0.325376, -1.01796] ---- -Label : 0 -Position : [574.13, 702.349] -Measurements : [905.362, 28444.8, 3.08757, 9.50173] ---- -Label : 1 -Position : [25.576, 703.456] -Measurements : [1099.73, 182046, 0.412705, -0.961149] ---- -Label : 1 -Position : [155.112, 703.456] -Measurements : [1785.8, 404679, -0.276363, -0.775961] ---- -Label : 1 -Position : [978.969, 703.885] -Measurements : [1095.63, 44329.1, 0.997515, 2.32127] ---- -Label : 1 -Position : [299.717, 704.649] -Measurements : [1367.15, 628364, 0.342345, -1.0069] ---- -Label : 0 -Position : [520.946, 705.086] -Measurements : [871.161, 8660.73, -0.560863, 0.205994] ---- -Label : 0 -Position : [519.869, 705.272] -Measurements : [873.83, 8245.93, -0.699065, 0.38047] ---- -Label : 1 -Position : [150.78, 705.75] -Measurements : [1483.63, 272587, 0.280781, -0.730247] ---- -Label : 1 -Position : [299.096, 705.936] -Measurements : [1483.34, 557034, 0.114789, -0.854361] ---- -Label : 1 -Position : [350.728, 706.152] -Measurements : [500.694, 68732.8, 2.36473, 4.51725] ---- -Label : 1 -Position : [21.8929, 706.172] -Measurements : [808.934, 280206, 0.923856, -0.651785] ---- -Label : 0 -Position : [546.041, 707.56] -Measurements : [927.314, 878.759, 0.900077, 0.942395] ---- -Label : 0 -Position : [542.421, 708.379] -Measurements : [955.462, 8109.82, 3.30465, 15.8433] ---- -Label : 1 -Position : [153.064, 710.112] -Measurements : [1490.61, 162933, -0.374763, -0.439229] ---- -Label : 1 -Position : [157.228, 710.235] -Measurements : [1216.04, 314988, 0.162348, -1.26141] ---- -Label : 1 -Position : [302.798, 710.389] -Measurements : [1823.33, 579270, -0.287856, -0.998621] ---- -Label : 1 -Position : [294.963, 710.607] -Measurements : [1455.99, 239799, -0.230773, -0.575386] ---- -Label : 0 -Position : [536.318, 710.642] -Measurements : [1029.55, 50313.8, 1.05986, 2.76013] ---- -Label : 0 -Position : [533.06, 710.674] -Measurements : [1010.07, 54411.4, 1.10119, 2.35511] ---- -Label : 0 -Position : [546.055, 711.866] -Measurements : [912.763, 631.624, 0.515326, 0.425384] ---- -Label : 0 -Position : [510.557, 712.676] -Measurements : [951.179, 9523.27, 0.350709, 1.27443] ---- -Label : 1 -Position : [297.56, 713.104] -Measurements : [1457.39, 438392, -0.0212596, -1.09904] ---- -Label : 1 -Position : [18.916, 714.461] -Measurements : [876.194, 266915, 0.718832, -1.08181] ---- -Label : 1 -Position : [14.7209, 715.368] -Measurements : [1370.26, 497980, 0.5686, -0.134113] ---- -Label : 0 -Position : [452.911, 715.449] -Measurements : [1007.5, 3226.47, -0.743682, 6.73847] ---- -Label : 1 -Position : [149.48, 715.744] -Measurements : [1520.04, 119428, 0.040345, -1.16042] ---- -Label : 1 -Position : [148.225, 715.854] -Measurements : [1474.07, 113152, 0.106992, -1.10525] ---- -Label : 0 -Position : [463.798, 716.417] -Measurements : [917.118, 6401.58, -2.20401, 5.22719] ---- -Label : 1 -Position : [300.191, 716.606] -Measurements : [1025.55, 487672, 1.02716, -0.499084] ---- -Label : 1 -Position : [16.872, 717.28] -Measurements : [1305.97, 363071, 0.378194, -0.247805] ---- -Label : 0 -Position : [479.692, 717.48] -Measurements : [887.859, 3070.38, 0.126614, -0.179796] ---- -Label : 1 -Position : [144.227, 717.49] -Measurements : [1216.61, 99596, -0.1486, 0.192024] ---- -Label : 1 -Position : [14.807, 717.57] -Measurements : [1564.15, 447249, 0.4224, -0.257984] ---- -Label : 0 -Position : [398.984, 718.227] -Measurements : [1079.88, 9404.83, -0.785823, 3.18214] ---- -Label : 0 -Position : [435.373, 718.349] -Measurements : [946.567, 4530.59, 0.241578, 0.757157] ---- -Label : 0 -Position : [479.643, 718.359] -Measurements : [888.926, 3277.37, 0.109919, -0.451952] ---- -Label : 1 -Position : [150.555, 719.225] -Measurements : [1350.55, 203038, -0.398947, -0.835851] ---- -Label : 1 -Position : [143.848, 719.84] -Measurements : [1126.2, 105042, -0.601984, -0.0887272] ---- -Label : 1 -Position : [149.746, 720.238] -Measurements : [1288.84, 217938, -0.18522, -1.0689] ---- -Label : 0 -Position : [483.335, 720.341] -Measurements : [864.603, 4307.41, 0.452438, -0.605493] ---- -Label : 1 -Position : [10.728, 720.352] -Measurements : [1959.16, 289383, 0.202743, -0.765113] ---- -Label : 1 -Position : [6.76788, 720.422] -Measurements : [1990.33, 305216, -0.220494, -0.268993] ---- -Label : 0 -Position : [426.593, 720.486] -Measurements : [902.532, 3949.37, 0.506826, 2.43821] ---- -Label : 0 -Position : [516.346, 721.2] -Measurements : [919.769, 1646.43, -4.1801, 19.9773] ---- -Label : 0 -Position : [407.554, 722.727] -Measurements : [1074.67, 14572.7, 0.539467, 0.894414] ---- -Label : 0 -Position : [396.521, 722.912] -Measurements : [1089.46, 18536.5, 1.01886, 5.31848] ---- -Label : 1 -Position : [301.133, 723.324] -Measurements : [1082.89, 452901, 0.630436, -1.28609] ---- -Label : 1 -Position : [208.593, 723.495] -Measurements : [792.26, 264020, 1.46991, 1.21366] ---- -Label : 0 -Position : [400.205, 723.766] -Measurements : [1081.19, 16669.1, 0.725756, 4.98747] ---- -Label : 0 -Position : [539.691, 723.831] -Measurements : [883.911, 3124.93, -0.836513, 1.71221] ---- -Label : 1 -Position : [343.64, 724.368] -Measurements : [1363.48, 319999, 0.0557857, -0.395136] ---- -Label : 0 -Position : [554.138, 725.039] -Measurements : [837.309, 7230.07, -1.25863, 1.34441] ---- -Label : 0 -Position : [466.075, 725.567] -Measurements : [877.945, 9238.56, -0.168896, 1.45514] ---- -Label : 1 -Position : [296.536, 725.904] -Measurements : [1303.35, 326101, 0.119228, -1.40762] ---- -Label : 1 -Position : [340.171, 725.939] -Measurements : [1436.62, 265703, 0.131347, -0.25] ---- -Label : 1 -Position : [205.288, 726.496] -Measurements : [1142.84, 346413, 0.331069, -1.15071] ---- -Label : 1 -Position : [340.615, 726.943] -Measurements : [1450.16, 258917, 0.131909, -0.263018] ---- -Label : 1 -Position : [200.867, 727.247] -Measurements : [1373.48, 291841, 0.0125284, -0.975884] ---- -Label : 0 -Position : [581.972, 727.627] -Measurements : [923.717, 56879, 2.01018, 4.93828] ---- -Label : 1 -Position : [339.315, 727.777] -Measurements : [1387.39, 306196, 0.0890325, -0.480073] ---- -Label : 0 -Position : [402.263, 727.829] -Measurements : [1049.48, 22114.9, 0.479931, 0.00627351] ---- -Label : 0 -Position : [472.937, 727.956] -Measurements : [887.559, 14798.6, 1.63847, 4.70775] ---- -Label : 0 -Position : [567.791, 728.593] -Measurements : [821.142, 12877.4, -0.094109, 0.473949] ---- -Label : 0 -Position : [610.329, 728.81] -Measurements : [1068.94, 9102.36, 0.0778781, -0.422164] ---- -Label : 1 -Position : [131.786, 730.118] -Measurements : [645.702, 136877, 1.89997, 2.78578] ---- -Label : 1 -Position : [296.239, 730.356] -Measurements : [933.382, 413438, 0.865803, -0.800469] ---- -Label : 0 -Position : [404.326, 730.402] -Measurements : [987.636, 11928.6, 1.2798, 1.84055] ---- -Label : 1 -Position : [125.004, 731.019] -Measurements : [948.202, 145777, 1.04496, 0.252978] ---- -Label : 1 -Position : [339.032, 732.56] -Measurements : [1107.89, 243406, -0.151434, -1.39355] ---- -Label : 1 -Position : [126.952, 733.152] -Measurements : [932.05, 182010, 0.897258, -0.44654] ---- -Label : 0 -Position : [441.692, 733.191] -Measurements : [917.017, 7418.56, -1.11122, 1.63796] ---- -Label : 1 -Position : [340.749, 733.652] -Measurements : [1075.76, 262199, -0.110577, -1.50152] ---- -Label : 1 -Position : [200.13, 734.259] -Measurements : [1648.39, 145918, -0.613778, -0.147282] ---- -Label : 1 -Position : [202.216, 734.688] -Measurements : [1646.15, 127933, -0.421052, -0.373464] ---- -Label : 0 -Position : [449.489, 735.474] -Measurements : [785.06, 7171.23, 1.24803, 1.18435] ---- -Label : 0 -Position : [404.214, 736.317] -Measurements : [934.788, 2440.22, 0.395013, 2.19353] ---- -Label : 1 -Position : [197.596, 736.869] -Measurements : [1530.75, 371290, -0.359357, -0.891723] ---- -Label : 1 -Position : [128.925, 737.457] -Measurements : [880.94, 293498, 1.08283, -0.349099] ---- -Label : 0 -Position : [566.236, 739.33] -Measurements : [756.121, 8821.46, 0.228477, 0.574167] ---- -Label : 1 -Position : [204.4, 740.441] -Measurements : [1680.24, 279485, -0.341007, -0.554946] ---- -Label : 0 -Position : [527.65, 741.596] -Measurements : [770.698, 8427.35, 0.645325, -0.762257] ---- -Label : 0 -Position : [555.308, 741.75] -Measurements : [745.614, 14617.6, -0.559165, -0.338662] ---- -Label : 0 -Position : [406.845, 741.877] -Measurements : [951.874, 1633.05, -0.336642, 0.0556783] ---- -Label : 1 -Position : [207.293, 741.999] -Measurements : [1367.88, 267306, 0.347429, -0.853305] ---- -Label : 1 -Position : [124.904, 742.368] -Measurements : [1436.05, 245284, -0.0935654, -0.463012] ---- -Label : 1 -Position : [202.728, 742.368] -Measurements : [1941.4, 210551, -0.477076, -0.338577] ---- -Label : 0 -Position : [436.442, 742.88] -Measurements : [929.375, 3476.89, -2.89425, 9.90368] ---- -Label : 0 -Position : [608.333, 743.344] -Measurements : [676.344, 20690.8, 1.16242, 1.8409] ---- -Label : 0 -Position : [377.893, 744.509] -Measurements : [795.482, 8235.47, 0.619007, 0.212924] ---- -Label : 0 -Position : [448.467, 744.899] -Measurements : [916.978, 55301.6, 3.14786, 11.2395] ---- -Label : 1 -Position : [126.058, 745.517] -Measurements : [1303.37, 299609, 0.267953, -0.787432] ---- -Label : 1 -Position : [124.491, 746.281] -Measurements : [1358.46, 230129, 0.481434, -0.372796] ---- -Label : 0 -Position : [409.131, 746.994] -Measurements : [965.738, 13623.5, 0.15015, 7.06839] ---- -Label : 0 -Position : [405.584, 747.124] -Measurements : [968.589, 828.08, -0.212032, 0.319205] ---- -Label : 1 -Position : [123.368, 747.488] -Measurements : [1268.68, 236351, 0.613354, -0.0155157] ---- -Label : 1 -Position : [202.531, 749.362] -Measurements : [1550.72, 538206, -0.17467, -1.50601] ---- -Label : 1 -Position : [202.216, 749.536] -Measurements : [1550.72, 538206, -0.17467, -1.50601] ---- -Label : 1 -Position : [126.543, 750.378] -Measurements : [870.957, 174961, 0.776442, -0.0393626] ---- -Label : 1 -Position : [206.858, 750.895] -Measurements : [1323.48, 374871, 0.666633, -0.960716] ---- -Label : 0 -Position : [572.392, 751.168] -Measurements : [868.874, 42944, -0.252169, -1.00631] ---- -Label : 1 -Position : [111.08, 756.704] -Measurements : [682.166, 115105, 1.50987, 1.34086] ---- -Label : 1 -Position : [112.859, 758.152] -Measurements : [637.038, 116498, 1.7813, 2.06441] ---- -Label : 1 -Position : [190.72, 760.326] -Measurements : [1756.4, 804807, -0.336199, -1.44325] ---- -Label : 1 -Position : [109.278, 761.408] -Measurements : [518.056, 47028.6, 2.73031, 7.31028] ---- -Label : 1 -Position : [191.976, 762.848] -Measurements : [1929.87, 611779, -0.689289, -0.802071] ---- -Label : 1 -Position : [184.296, 765.408] -Measurements : [1980.57, 434789, -0.789138, -0.09661] ---- -Label : 0 -Position : [453.542, 765.888] -Measurements : [770.904, 4723.78, 1.27278, 0.867494] ---- -Label : 1 -Position : [182.834, 767.159] -Measurements : [1517.09, 731151, 0.0485414, -1.54421] ---- -Label : 1 -Position : [194.997, 767.624] -Measurements : [1576.76, 503234, 0.35626, -1.25176] ---- -Label : 0 -Position : [430.101, 767.938] -Measurements : [891.728, 9875.54, 0.0311174, -1.52266] ---- -Label : 1 -Position : [101.864, 768.48] -Measurements : [1253.94, 214279, -0.156842, -0.85546] ---- -Label : 1 -Position : [183.079, 770.282] -Measurements : [1145.28, 603485, 0.708353, -0.974022] ---- -Label : 0 -Position : [411.914, 770.36] -Measurements : [816.374, 7840.96, -0.848821, 0.660832] ---- -Label : 1 -Position : [103.579, 770.97] -Measurements : [1180.54, 197496, -0.144821, -1.14796] ---- -Label : 1 -Position : [98.8285, 771.336] -Measurements : [1330.28, 228535, -0.0586775, -0.898468] ---- -Label : 0 -Position : [398.203, 773.414] -Measurements : [891.812, 4488.79, -0.721596, -0.157861] ---- -Label : 1 -Position : [175.723, 774.71] -Measurements : [1351.99, 448310, -0.114202, -1.65025] ---- -Label : 1 -Position : [727.647, 776.137] -Measurements : [1361.34, 220402, 0.453899, -0.274435] ---- -Label : 1 -Position : [177.128, 777.184] -Measurements : [1542.77, 366358, -0.648092, -0.983654] ---- -Label : 1 -Position : [688.828, 778.215] -Measurements : [993.332, 69085.1, -0.464187, -0.403541] ---- -Label : 0 -Position : [423.556, 778.671] -Measurements : [873.206, 9689.22, 0.719962, -0.391072] ---- -Label : 1 -Position : [702.725, 780.122] -Measurements : [987.145, 235863, 0.622212, -0.818241] ---- -Label : 1 -Position : [725.208, 780.552] -Measurements : [1177.82, 331716, 0.617446, -0.759791] ---- -Label : 1 -Position : [178.707, 781.444] -Measurements : [1406.65, 350074, -0.116546, -1.37383] ---- -Label : 1 -Position : [643.8, 782.6] -Measurements : [837.502, 131171, 0.876622, 0.412439] ---- -Label : 1 -Position : [687.832, 782.6] -Measurements : [747.243, 106233, 0.728561, -0.706801] ---- -Label : 1 -Position : [647.243, 782.658] -Measurements : [894.672, 147214, 0.50246, -0.537846] ---- -Label : 0 -Position : [398.736, 782.81] -Measurements : [750.757, 3018.91, -0.243828, 3.54585] ---- -Label : 1 -Position : [173.429, 783.826] -Measurements : [1151.13, 361522, 0.388328, -1.18903] ---- -Label : 1 -Position : [728.049, 784.078] -Measurements : [776.553, 355639, 1.67998, 1.40744] ---- -Label : 1 -Position : [702.168, 784.136] -Measurements : [1045.13, 293026, 0.516226, -1.16655] ---- -Label : 1 -Position : [685.987, 784.181] -Measurements : [630.937, 107448, 1.47644, 0.762472] ---- -Label : 1 -Position : [698.181, 784.234] -Measurements : [915.99, 278636, 0.744965, -0.898467] ---- -Label : 1 -Position : [715.132, 785.009] -Measurements : [917.661, 246715, 0.828443, -0.633303] ---- -Label : 1 -Position : [753.989, 785.83] -Measurements : [953.973, 291075, 0.731503, -0.970358] ---- -Label : 1 -Position : [716.054, 786.124] -Measurements : [769.879, 190007, 1.34962, 0.560458] ---- -Label : 1 -Position : [755.699, 786.407] -Measurements : [828.681, 273702, 1.13027, -0.261738] ---- -Label : 1 -Position : [647.418, 786.811] -Measurements : [626.344, 124163, 1.98432, 3.64173] ---- -Label : 1 -Position : [167.663, 787.376] -Measurements : [1214.17, 374087, 0.247525, -1.3402] ---- -Label : 1 -Position : [711.384, 788.232] -Measurements : [1246.33, 514960, 0.692925, -0.79513] ---- -Label : 1 -Position : [169.448, 788.448] -Measurements : [1175.54, 368199, 0.390895, -1.21202] ---- -Label : 1 -Position : [87.2985, 788.683] -Measurements : [1396.07, 335246, -0.33232, -1.00375] ---- -Label : 1 -Position : [750.808, 788.744] -Measurements : [1078.01, 292720, 0.235907, -1.35835] ---- -Label : 1 -Position : [839.488, 788.81] -Measurements : [1014.05, 248274, 0.000140983, -1.46939] ---- -Label : 1 -Position : [92.136, 789.984] -Measurements : [1610.89, 669868, -0.161827, -1.0152] ---- -Label : 1 -Position : [841.374, 790.788] -Measurements : [934.327, 255970, 0.326117, -1.42665] ---- -Label : 1 -Position : [95.5657, 791.06] -Measurements : [2041.53, 828238, -0.326321, -0.996807] ---- -Label : 1 -Position : [842.968, 791.304] -Measurements : [871.098, 238724, 0.528133, -1.28029] ---- -Label : 1 -Position : [92.5887, 791.677] -Measurements : [2049.67, 547736, -0.181618, -0.257574] ---- -Label : 1 -Position : [600.916, 794.077] -Measurements : [660.541, 98200, 1.48347, 1.53605] ---- -Label : 1 -Position : [93.16, 795.104] -Measurements : [2123.82, 623187, -0.254688, -0.876846] ---- -Label : 1 -Position : [94.588, 795.95] -Measurements : [2146.49, 678407, -0.344582, -0.953312] ---- -Label : 1 -Position : [600.792, 796.424] -Measurements : [683.142, 117605, 1.41414, 1.15] ---- -Label : 1 -Position : [157.36, 799.948] -Measurements : [628.692, 221438, 2.03286, 2.85365] ---- -Label : 1 -Position : [598.809, 800.246] -Measurements : [651.803, 100101, 1.8684, 2.77073] ---- -Label : 1 -Position : [153.064, 803.8] -Measurements : [1235.38, 347266, -0.0708498, -1.4657] ---- -Label : 1 -Position : [582.033, 803.973] -Measurements : [1541.09, 669227, -0.189835, -1.27048] ---- -Label : 1 -Position : [583.896, 804.616] -Measurements : [1716.45, 635471, -0.308924, -1.05274] ---- -Label : 1 -Position : [583.731, 808.164] -Measurements : [1896.01, 789177, -0.135868, -1.35621] ---- -Label : 1 -Position : [153.003, 808.514] -Measurements : [1008.08, 348311, 0.510919, -1.24226] ---- -Label : 1 -Position : [1121.2, 809.614] -Measurements : [1393.42, 631285, 1.06351, -0.317079] ---- -Label : 1 -Position : [927.864, 810.944] -Measurements : [922.958, 219204, 0.729247, -0.639748] ---- -Label : 1 -Position : [1124.02, 814.52] -Measurements : [2098.79, 779215, -0.205201, -1.42675] ---- -Label : 1 -Position : [983.643, 814.68] -Measurements : [1406.45, 349006, 0.0679644, -0.7236] ---- -Label : 1 -Position : [504.817, 815.373] -Measurements : [1010.51, 273922, 0.254172, -1.4478] ---- -Label : 1 -Position : [927.928, 815.544] -Measurements : [1004.66, 237640, 0.332741, -1.12483] ---- -Label : 1 -Position : [526.689, 815.604] -Measurements : [1760.95, 600355, -0.540524, -0.951703] ---- -Label : 1 -Position : [923.869, 815.796] -Measurements : [852.063, 252255, 0.626028, -0.878785] ---- -Label : 1 -Position : [980.005, 815.833] -Measurements : [1171.83, 429539, 0.40623, -0.989969] ---- -Label : 1 -Position : [984.76, 816.568] -Measurements : [1251.43, 490108, 0.220337, -1.26225] ---- -Label : 1 -Position : [508.696, 818.136] -Measurements : [1017.42, 245081, 0.400866, -1.30747] ---- -Label : 1 -Position : [1126.45, 818.502] -Measurements : [1594.38, 1.16569e+06, 0.369868, -1.59389] ---- -Label : 1 -Position : [525.592, 819.16] -Measurements : [1939.86, 697908, -0.499201, -1.08774] ---- -Label : 1 -Position : [1011.67, 820.962] -Measurements : [699.013, 81657.6, 0.551357, -1.1875] ---- -Label : 1 -Position : [1091.68, 821.026] -Measurements : [1000.83, 398136, 1.14559, -0.118122] ---- -Label : 1 -Position : [522.719, 821.123] -Measurements : [1917.55, 882256, -0.451932, -1.08717] ---- -Label : 1 -Position : [508.462, 822.044] -Measurements : [839.852, 222281, 0.979814, -0.367721] ---- -Label : 1 -Position : [1010.62, 822.244] -Measurements : [693.392, 87487, 0.535667, -1.30036] ---- -Label : 1 -Position : [1012.41, 822.712] -Measurements : [706.398, 81647, 0.553716, -1.28203] ---- -Label : 1 -Position : [1096.6, 823.242] -Measurements : [1166.25, 478414, 0.61613, -1.1612] ---- -Label : 1 -Position : [1076.83, 824.726] -Measurements : [1101, 481090, 0.364083, -1.35838] ---- -Label : 1 -Position : [1096.72, 824.918] -Measurements : [1122.23, 469781, 0.733959, -1.00201] ---- -Label : 1 -Position : [1078.97, 827.32] -Measurements : [1418.91, 502602, 0.0250882, -1.28341] ---- -Label : 1 -Position : [1392.91, 829.002] -Measurements : [1066.29, 262211, 0.601476, -0.641817] ---- -Label : 1 -Position : [1390.94, 829.202] -Measurements : [1005.35, 265933, 0.610088, -0.575108] ---- -Label : 1 -Position : [1390.7, 829.344] -Measurements : [1005.35, 265933, 0.610088, -0.575108] ---- -Label : 1 -Position : [488.216, 829.912] -Measurements : [1675.12, 615787, -0.00773813, -1.42912] ---- -Label : 1 -Position : [486.43, 830.311] -Measurements : [1635.72, 765951, -0.15554, -1.46854] ---- -Label : 1 -Position : [1075.93, 831.578] -Measurements : [1252.62, 648251, 0.284949, -1.4399] ---- -Label : 1 -Position : [1389.76, 832.043] -Measurements : [944.15, 382907, 0.950516, -0.234103] ---- -Label : 1 -Position : [656.414, 832.214] -Measurements : [1014.19, 216866, 0.193605, -1.22599] ---- -Label : 1 -Position : [661.203, 832.696] -Measurements : [934.508, 187096, 0.403865, -1.17238] ---- -Label : 1 -Position : [657.112, 833.8] -Measurements : [1131.95, 224355, 0.191712, -1.08847] ---- -Label : 1 -Position : [1394.55, 834.327] -Measurements : [1207.62, 339921, 0.450709, -0.80088] ---- -Label : 1 -Position : [465.381, 834.549] -Measurements : [1269.39, 560439, 0.483274, -1.30411] ---- -Label : 1 -Position : [486.064, 834.81] -Measurements : [1472.21, 840553, 0.180824, -1.56869] ---- -Label : 1 -Position : [682.025, 836.066] -Measurements : [831.306, 369037, 1.16729, 0.119046] ---- -Label : 1 -Position : [461.08, 838.616] -Measurements : [1540.14, 621071, 0.0158363, -1.6649] ---- -Label : 1 -Position : [1393.74, 838.732] -Measurements : [1243.49, 422273, 0.134774, -1.22674] ---- -Label : 1 -Position : [745.941, 839.601] -Measurements : [721.25, 148263, 0.476498, -1.29222] ---- -Label : 1 -Position : [750.808, 839.944] -Measurements : [876.858, 171370, 0.0564525, -1.37813] ---- -Label : 1 -Position : [460.526, 840.057] -Measurements : [1461.23, 614667, 0.236308, -1.59414] ---- -Label : 1 -Position : [706.264, 840.456] -Measurements : [1518.17, 235134, 0.357997, -0.361697] ---- -Label : 1 -Position : [685.272, 840.968] -Measurements : [1410.48, 351858, -0.15485, -1.17376] ---- -Label : 1 -Position : [751.871, 841.211] -Measurements : [961.414, 123696, 0.00551949, -1.07051] ---- -Label : 1 -Position : [662.744, 841.48] -Measurements : [1760.19, 362517, -0.253148, -0.549244] ---- -Label : 1 -Position : [659.618, 841.535] -Measurements : [1759.12, 386165, -0.341652, -0.636809] ---- -Label : 1 -Position : [1394.55, 841.7] -Measurements : [1318.22, 289341, -0.0578254, -0.768137] ---- -Label : 1 -Position : [1393.92, 843.227] -Measurements : [1114.5, 316590, 0.0662469, -1.37404] ---- -Label : 1 -Position : [689.976, 844.064] -Measurements : [1713.82, 213085, -0.192337, -0.0320576] ---- -Label : 1 -Position : [664.721, 844.966] -Measurements : [1639.19, 328917, 0.0605871, -1.04421] ---- -Label : 1 -Position : [707.341, 845.123] -Measurements : [1566.02, 156165, 0.552855, -0.00697981] ---- -Label : 1 -Position : [1396.99, 845.125] -Measurements : [1255.95, 271208, -0.0655448, -0.837552] ---- -Label : 1 -Position : [706.142, 845.203] -Measurements : [1592.19, 147406, 0.544595, 0.237633] ---- -Label : 1 -Position : [13.5127, 847.721] -Measurements : [1584.98, 367069, -0.152733, -1.35335] ---- -Label : 1 -Position : [590.132, 847.762] -Measurements : [1044.98, 643190, 0.355244, -1.64142] ---- -Label : 1 -Position : [8.68, 848.856] -Measurements : [1711.14, 345707, -0.859543, -0.394889] ---- -Label : 1 -Position : [110.354, 849.309] -Measurements : [853.596, 335338, 1.12422, -0.017195] ---- -Label : 1 -Position : [595.049, 849.98] -Measurements : [1348, 508362, -0.109955, -1.45194] ---- -Label : 1 -Position : [993.792, 850.122] -Measurements : [915.718, 401442, 0.637145, -0.859409] ---- -Label : 1 -Position : [12.6837, 851.051] -Measurements : [2003.24, 168964, -1.29156, 1.49374] ---- -Label : 1 -Position : [593.112, 851.208] -Measurements : [1606.55, 308071, -0.57708, -0.623877] ---- -Label : 1 -Position : [104.202, 851.349] -Measurements : [1353.46, 410771, 0.113735, -0.935532] ---- -Label : 1 -Position : [11.2482, 852.281] -Measurements : [2060.85, 120579, -1.17542, 1.54768] ---- -Label : 1 -Position : [990.073, 852.401] -Measurements : [934.613, 391474, 0.823001, -0.501332] ---- -Label : 1 -Position : [106.984, 852.44] -Measurements : [1316.43, 304185, -0.13726, -1.05284] ---- -Label : 1 -Position : [421.144, 852.952] -Measurements : [779.29, 192547, 1.11826, -0.228148] ---- -Label : 1 -Position : [420.158, 853.031] -Measurements : [727.772, 192207, 1.28991, 0.219668] ---- -Label : 1 -Position : [993.976, 853.432] -Measurements : [959.583, 355747, 0.700384, -0.692653] ---- -Label : 1 -Position : [90.1196, 854.567] -Measurements : [1225.8, 242224, -0.00433429, -1.09973] ---- -Label : 1 -Position : [403.868, 854.704] -Measurements : [1012.63, 294462, 1.27885, 0.230693] ---- -Label : 1 -Position : [417.957, 855.686] -Measurements : [592.937, 187145, 1.79708, 1.78397] ---- -Label : 1 -Position : [14.312, 856.024] -Measurements : [1516.56, 502317, -0.10657, -1.62387] ---- -Label : 1 -Position : [94.696, 858.072] -Measurements : [1256.24, 233511, -0.0519922, -1.26718] ---- -Label : 1 -Position : [402.712, 858.584] -Measurements : [1140.94, 365857, 0.646759, -1.17146] ---- -Label : 1 -Position : [1088.95, 858.617] -Measurements : [639.46, 320670, 1.53932, 0.754779] ---- -Label : 1 -Position : [9.61627, 858.619] -Measurements : [1362.01, 538862, 0.0774656, -1.71921] ---- -Label : 1 -Position : [407.178, 858.736] -Measurements : [813.824, 358104, 1.40807, 0.538078] ---- -Label : 1 -Position : [86.9959, 859.599] -Measurements : [1315.49, 208442, -0.100612, -1.31077] ---- -Label : 1 -Position : [1350.27, 860.121] -Measurements : [1360.53, 466743, 0.31565, -1.10715] ---- -Label : 1 -Position : [87.528, 861.144] -Measurements : [1347.13, 190787, -0.0978204, -1.34031] ---- -Label : 1 -Position : [398.699, 861.411] -Measurements : [1127.94, 390716, 0.556052, -1.20021] ---- -Label : 1 -Position : [90.8185, 862.803] -Measurements : [1308.74, 218087, 0.116613, -1.41721] ---- -Label : 1 -Position : [84.8054, 863.139] -Measurements : [1304.88, 270682, -0.0658039, -1.12477] ---- -Label : 1 -Position : [1092.28, 863.16] -Measurements : [1103.4, 429164, 0.566091, -1.0663] ---- -Label : 1 -Position : [1351.54, 863.777] -Measurements : [1657.46, 491844, -0.343795, -1.09062] ---- -Label : 1 -Position : [536.344, 864.216] -Measurements : [1392.48, 504212, 0.0501853, -1.06102] ---- -Label : 1 -Position : [539.136, 864.336] -Measurements : [1301.44, 342270, 0.253072, -0.751042] ---- -Label : 1 -Position : [394.52, 865.24] -Measurements : [813.826, 242964, 1.46898, 1.19216] ---- -Label : 1 -Position : [536.249, 865.286] -Measurements : [1466.3, 423626, 0.0638285, -0.940062] ---- -Label : 1 -Position : [1351.97, 865.334] -Measurements : [1792.51, 366586, -0.637944, -0.320197] ---- -Label : 1 -Position : [1352.46, 866.495] -Measurements : [1969.74, 227778, -0.660137, 0.632833] ---- -Label : 1 -Position : [1089.01, 866.649] -Measurements : [915.721, 348570, 0.910774, -0.729368] ---- -Label : 1 -Position : [378.455, 867.208] -Measurements : [797.688, 131558, 0.693292, -0.00532097] ---- -Label : 1 -Position : [390.851, 867.792] -Measurements : [739.163, 253963, 1.71448, 1.76073] ---- -Label : 1 -Position : [1354.82, 868.282] -Measurements : [2085.98, 96248.3, -0.541486, 0.804039] ---- -Label : 1 -Position : [374.459, 869.947] -Measurements : [601.646, 103520, 1.39887, 1.23019] ---- -Label : 1 -Position : [1357.82, 870.712] -Measurements : [1951.38, 255655, -0.930187, 0.0135338] ---- -Label : 1 -Position : [1356.31, 871.223] -Measurements : [1937.93, 217556, -0.733659, -0.458504] ---- -Label : 1 -Position : [378.648, 871.384] -Measurements : [913.122, 213766, 0.454937, -0.925105] ---- -Label : 1 -Position : [1357.28, 874.426] -Measurements : [1755.66, 243534, -0.137658, -1.21485] ---- -Label : 1 -Position : [1359.45, 874.506] -Measurements : [1714.99, 247016, -0.354065, -0.706264] ---- -Label : 1 -Position : [1335.43, 876.67] -Measurements : [977.106, 190180, 0.805482, -0.0668259] ---- -Label : 1 -Position : [1331.47, 878.522] -Measurements : [1113.42, 217978, 0.398027, -0.938594] ---- -Label : 1 -Position : [1360.14, 879.342] -Measurements : [1504.3, 286266, -0.261859, -0.748138] ---- -Label : 1 -Position : [1360.6, 881.598] -Measurements : [1308.77, 363854, -0.0981414, -1.35151] ---- -Label : 1 -Position : [1327.44, 882.36] -Measurements : [1021.71, 186068, 0.622267, -0.562923] ---- -Label : 1 -Position : [1358.69, 884.162] -Measurements : [1018.02, 366700, 0.663221, -0.834437] ---- -Label : 1 -Position : [1323.72, 885.397] -Measurements : [987.997, 131056, 0.672591, 0.258901] ---- -Label : 1 -Position : [1370.23, 887.491] -Measurements : [1196.16, 483304, 0.395851, -1.30308] ---- -Label : 1 -Position : [1321.64, 889.991] -Measurements : [952.203, 119131, 0.526279, -0.42824] ---- -Label : 1 -Position : [1367.11, 891.22] -Measurements : [1581.9, 379109, -0.371943, -0.742567] ---- -Label : 1 -Position : [1370.21, 892.802] -Measurements : [1749.54, 333167, -0.436785, -0.755464] ---- -Label : 1 -Position : [1317.4, 894.677] -Measurements : [987.684, 163583, 0.974074, 0.672006] ---- -Label : 1 -Position : [441.28, 896.605] -Measurements : [754.039, 266570, 1.07992, -0.415476] ---- -Label : 1 -Position : [1338.58, 897.148] -Measurements : [844.142, 370783, 0.866646, -0.887677] ---- -Label : 1 -Position : [310.051, 897.317] -Measurements : [1642.91, 450312, 0.431277, -1.30074] ---- -Label : 1 -Position : [443.73, 897.595] -Measurements : [970.346, 372047, 0.597941, -0.922058] ---- -Label : 1 -Position : [1370.38, 897.774] -Measurements : [1736.55, 252793, -0.153219, -0.612233] ---- -Label : 1 -Position : [1338.95, 899.334] -Measurements : [929.947, 377326, 0.609126, -1.17868] ---- -Label : 1 -Position : [1372.53, 899.488] -Measurements : [1617.85, 327265, -0.166481, -0.959381] ---- -Label : 1 -Position : [311.118, 899.598] -Measurements : [1694.55, 458203, 0.145349, -1.2514] ---- -Label : 1 -Position : [311.576, 900.056] -Measurements : [1649.26, 509218, 0.147253, -1.31435] ---- -Label : 1 -Position : [1340.89, 900.231] -Measurements : [1210.14, 396268, 0.0399636, -1.22353] ---- -Label : 1 -Position : [1365.84, 900.386] -Measurements : [1347.79, 226145, 0.0430409, -0.888964] ---- -Label : 1 -Position : [1370.8, 901.031] -Measurements : [1654.92, 207509, -0.217958, -0.353529] ---- -Label : 1 -Position : [444.184, 901.08] -Measurements : [1408.5, 249528, 0.00859062, -0.0444654] ---- -Label : 1 -Position : [1371.71, 901.885] -Measurements : [1669.16, 227071, -0.334292, -0.384933] ---- -Label : 1 -Position : [1313.45, 902.279] -Measurements : [1155.08, 263720, 0.734679, -0.573918] ---- -Label : 1 -Position : [1344.99, 903.918] -Measurements : [1664.24, 131069, -0.158953, -0.355933] ---- -Label : 1 -Position : [1369.98, 903.918] -Measurements : [1552.83, 228220, -0.40741, -0.663213] ---- -Label : 1 -Position : [1347.3, 904.789] -Measurements : [1647.86, 194091, -0.571519, 0.058703] ---- -Label : 1 -Position : [1312.19, 905.26] -Measurements : [1214.92, 320095, 0.599268, -0.947832] ---- -Label : 1 -Position : [1381.36, 905.843] -Measurements : [1433.63, 366810, 0.00304647, -1.13223] ---- -Label : 1 -Position : [1311.4, 906.375] -Measurements : [1288.25, 352475, 0.512827, -1.00289] ---- -Label : 1 -Position : [1317.99, 906.767] -Measurements : [802.219, 244578, 1.82594, 2.25175] ---- -Label : 1 -Position : [1377.76, 907.194] -Measurements : [1812.67, 202106, -0.490066, -0.456009] ---- -Label : 1 -Position : [1344.2, 908.08] -Measurements : [1801.69, 247778, -0.207808, -0.247204] ---- -Label : 1 -Position : [1309.77, 909.028] -Measurements : [1503.32, 365710, 0.132882, -1.26226] ---- -Label : 1 -Position : [1304.98, 909.298] -Measurements : [1114.62, 257036, 1.48359, 0.992389] ---- -Label : 1 -Position : [1349.09, 909.652] -Measurements : [1808.35, 187628, 0.409092, -0.203753] ---- -Label : 1 -Position : [1314.06, 910.128] -Measurements : [1241.28, 552366, 0.560998, -1.12998] ---- -Label : 1 -Position : [278.78, 910.639] -Measurements : [1052.43, 198290, 0.709195, -0.44075] ---- -Label : 1 -Position : [1377.47, 910.662] -Measurements : [1805.52, 205937, -0.4432, -0.489332] ---- -Label : 1 -Position : [1310.99, 910.881] -Measurements : [1555.26, 428401, 0.0515261, -1.12426] ---- -Label : 1 -Position : [1344.38, 911.067] -Measurements : [1705.3, 348722, -0.280617, -0.572913] ---- -Label : 1 -Position : [1355.08, 911.266] -Measurements : [1334.08, 178895, 0.38702, -0.0808079] ---- -Label : 1 -Position : [1308.34, 912.263] -Measurements : [1651.1, 417759, -0.106689, -1.06493] ---- -Label : 1 -Position : [1380.88, 912.322] -Measurements : [1863.7, 217354, 0.09701, -0.801904] ---- -Label : 1 -Position : [1313.28, 912.39] -Measurements : [1374.87, 603493, 0.303465, -1.39198] ---- -Label : 1 -Position : [1379.81, 912.929] -Measurements : [1826.95, 207047, -0.0182558, -0.835847] ---- -Label : 1 -Position : [1315.99, 912.974] -Measurements : [1089.22, 523414, 0.905834, -0.723987] ---- -Label : 1 -Position : [1345.1, 913.112] -Measurements : [1656.43, 375478, -0.134821, -0.708498] ---- -Label : 1 -Position : [1309.8, 913.827] -Measurements : [1653.29, 424036, -0.168739, -0.998167] ---- -Label : 1 -Position : [1378.64, 914.07] -Measurements : [1754.65, 315330, -0.149315, -0.606496] ---- -Label : 1 -Position : [1347.47, 914.105] -Measurements : [1662.43, 324659, 0.123628, -0.606828] ---- -Label : 1 -Position : [1307.72, 914.158] -Measurements : [1562.79, 476833, 0.0181253, -1.19859] ---- -Label : 1 -Position : [279.009, 914.3] -Measurements : [1366.56, 388548, 0.0890594, -0.935212] ---- -Label : 1 -Position : [282.6, 915.312] -Measurements : [1487.31, 361021, -0.119785, -0.958643] ---- -Label : 1 -Position : [1350.72, 916.206] -Measurements : [1543.63, 247092, 0.268943, 0.293164] ---- -Label : 1 -Position : [1304.13, 916.83] -Measurements : [1185.31, 464956, 0.684796, -0.723125] ---- -Label : 1 -Position : [1384.22, 917.527] -Measurements : [2022.49, 317242, -0.743431, 0.0562226] ---- -Label : 1 -Position : [1380.29, 917.839] -Measurements : [1892.03, 310838, -0.269586, -0.727556] ---- -Label : 1 -Position : [9.704, 917.872] -Measurements : [1677.17, 344801, -0.0800956, -0.979602] ---- -Label : 1 -Position : [1306.08, 918.254] -Measurements : [1153.55, 579639, 0.70006, -0.88961] ---- -Label : 1 -Position : [1382.67, 918.254] -Measurements : [2033.86, 258517, -0.378087, -0.504246] ---- -Label : 1 -Position : [254.44, 918.896] -Measurements : [981.842, 225045, 1.12517, 0.722067] ---- -Label : 1 -Position : [1357.82, 919.479] -Measurements : [1411.59, 169269, 0.291539, -0.443166] ---- -Label : 1 -Position : [14.2546, 919.735] -Measurements : [1422.03, 435005, 0.445337, -1.21085] ---- -Label : 1 -Position : [258.811, 920.619] -Measurements : [755.978, 264977, 1.76497, 2.00019] ---- -Label : 1 -Position : [13.3561, 920.786] -Measurements : [1410.39, 378258, 0.446486, -1.14964] ---- -Label : 1 -Position : [396.701, 921.349] -Measurements : [851.464, 159996, 0.111258, -1.57735] ---- -Label : 1 -Position : [1386.77, 921.53] -Measurements : [1922.41, 233572, -0.216135, -0.277221] ---- -Label : 1 -Position : [250.275, 922.04] -Measurements : [749.487, 219285, 1.70187, 2.12975] ---- -Label : 1 -Position : [1388.03, 923.141] -Measurements : [1829.97, 211304, -0.81067, 0.407732] ---- -Label : 1 -Position : [396.742, 923.556] -Measurements : [975.906, 122734, -0.467624, -1.0378] ---- -Label : 1 -Position : [1358.51, 923.596] -Measurements : [1653.38, 168150, -0.316608, -0.74935] ---- -Label : 1 -Position : [1382.68, 923.698] -Measurements : [1621.07, 399783, -0.189171, -0.914576] ---- -Label : 1 -Position : [229.496, 924.766] -Measurements : [1467.21, 151784, 0.642844, 0.124609] ---- -Label : 1 -Position : [11.752, 926.064] -Measurements : [1088.83, 195833, 0.53577, -0.345884] ---- -Label : 1 -Position : [399.622, 926.262] -Measurements : [1108.24, 36530.4, -0.225094, 1.15346] ---- -Label : 1 -Position : [1362.37, 926.38] -Measurements : [1777.85, 323361, -0.187217, -0.537177] ---- -Label : 1 -Position : [11.9413, 926.939] -Measurements : [1088.83, 195833, 0.53577, -0.345884] ---- -Label : 1 -Position : [1360.68, 926.962] -Measurements : [1885.33, 225604, -0.252562, 0.534732] ---- -Label : 1 -Position : [1391.23, 928.576] -Measurements : [1614.94, 223249, -0.809094, -0.155135] ---- -Label : 1 -Position : [233.448, 928.624] -Measurements : [1379.28, 368824, 0.168835, -0.869992] ---- -Label : 1 -Position : [1388.41, 928.903] -Measurements : [1734.74, 137741, -0.727034, 0.556726] ---- -Label : 1 -Position : [387.983, 929.422] -Measurements : [1005.45, 195362, 0.856133, 0.591008] ---- -Label : 1 -Position : [383.225, 929.7] -Measurements : [1030.51, 271277, 0.571568, -0.601491] ---- -Label : 1 -Position : [15.453, 930.93] -Measurements : [597.419, 50386.3, 1.79512, 2.64196] ---- -Label : 1 -Position : [1385.97, 930.933] -Measurements : [1451.7, 250329, -0.40493, -0.896998] ---- -Label : 1 -Position : [1297.31, 930.943] -Measurements : [1085.54, 297588, 0.51451, -0.775278] ---- -Label : 1 -Position : [1359.33, 930.969] -Measurements : [2006.63, 187830, 0.129712, -0.113602] ---- -Label : 1 -Position : [383.201, 931.922] -Measurements : [1073.06, 230781, 0.71069, -0.323576] ---- -Label : 1 -Position : [1298.97, 932.232] -Measurements : [1287.64, 316610, 0.190588, -1.00842] ---- -Label : 1 -Position : [1392.48, 932.37] -Measurements : [1624.03, 205862, -0.994572, 0.209212] ---- -Label : 1 -Position : [231.717, 933.143] -Measurements : [788.692, 261960, 1.41576, 0.912168] ---- -Label : 1 -Position : [1392.09, 933.409] -Measurements : [1553.88, 228873, -0.832886, -0.297996] ---- -Label : 1 -Position : [1299.93, 933.836] -Measurements : [1336.81, 307293, 0.193923, -1.00883] ---- -Label : 1 -Position : [1364.15, 934.026] -Measurements : [1727.94, 239776, 0.582757, 0.0616711] ---- -Label : 1 -Position : [1358.67, 935.089] -Measurements : [1746.49, 301812, 0.425325, -0.322816] ---- -Label : 1 -Position : [1363.01, 936.294] -Measurements : [1740.47, 206841, 0.742914, 0.547904] ---- -Label : 1 -Position : [1367.89, 936.402] -Measurements : [1474.94, 214456, 0.291324, -0.240963] ---- -Label : 1 -Position : [1364.93, 936.909] -Measurements : [1681.28, 189985, 0.793199, 0.552424] ---- -Label : 1 -Position : [1295.84, 937.113] -Measurements : [1744.59, 254166, -0.655035, -0.0659341] ---- -Label : 1 -Position : [238.568, 937.328] -Measurements : [1752.95, 727925, -0.113518, -1.42252] ---- -Label : 1 -Position : [1395.21, 937.415] -Measurements : [960.416, 374398, 0.723517, -1.18658] ---- -Label : 1 -Position : [1292.5, 937.881] -Measurements : [1576.62, 342358, -0.162155, -1.15955] ---- -Label : 1 -Position : [1296.9, 937.911] -Measurements : [1757.45, 240680, -0.642067, -0.0605149] ---- -Label : 1 -Position : [1291.66, 939.699] -Measurements : [1655.87, 350009, -0.244849, -1.13558] ---- -Label : 1 -Position : [241.941, 940.249] -Measurements : [1421.3, 1.00111e+06, 0.39758, -1.49566] ---- -Label : 1 -Position : [1297.07, 940.39] -Measurements : [1764.71, 371315, -0.408776, -0.837409] ---- -Label : 1 -Position : [1290.94, 940.608] -Measurements : [1631.15, 359476, 0.051328, -1.16273] ---- -Label : 1 -Position : [235.818, 940.667] -Measurements : [1632.58, 957543, -0.0286218, -1.57044] ---- -Label : 1 -Position : [1293.96, 941.008] -Measurements : [1935.94, 255872, -0.38041, -0.147309] ---- -Label : 1 -Position : [1366.7, 941.209] -Measurements : [1621, 164736, 0.254338, -0.470992] ---- -Label : 1 -Position : [1368.61, 944.387] -Measurements : [1918.95, 264503, -0.491088, -0.661444] ---- -Label : 1 -Position : [1292.15, 944.486] -Measurements : [1936.13, 239531, -0.431684, 0.297378] ---- -Label : 1 -Position : [208.076, 945.005] -Measurements : [1776.23, 544390, -0.392976, -1.29132] ---- -Label : 1 -Position : [207.848, 946.032] -Measurements : [1730.32, 584975, -0.313938, -1.3991] ---- -Label : 1 -Position : [1369.11, 946.276] -Measurements : [2064.8, 199610, -0.540836, -0.163299] ---- -Label : 1 -Position : [1296.95, 946.402] -Measurements : [1611.98, 575976, -0.136454, -1.35887] ---- -Label : 1 -Position : [203.292, 947] -Measurements : [1529.59, 464873, 0.166712, -1.19976] ---- -Label : 1 -Position : [1369.16, 947.353] -Measurements : [2093.44, 168690, -0.366583, -0.451855] ---- -Label : 1 -Position : [195.048, 947.568] -Measurements : [1291.4, 320011, 0.34542, -0.736432] ---- -Label : 1 -Position : [1371.11, 947.7] -Measurements : [1976.45, 191598, -0.399862, -0.502816] ---- -Label : 1 -Position : [1290.92, 948.582] -Measurements : [1703.03, 435514, -0.361576, -0.8701] ---- -Label : 1 -Position : [196.05, 950.246] -Measurements : [1044.09, 406448, 0.725438, -0.619105] ---- -Label : 1 -Position : [1295.56, 950.571] -Measurements : [1245.72, 645404, 0.651453, -1.13169] ---- -Label : 1 -Position : [1372.97, 951.201] -Measurements : [1922.69, 219277, -0.27453, -0.934681] ---- -Label : 1 -Position : [1372.43, 951.858] -Measurements : [1922.69, 219277, -0.27453, -0.934681] ---- -Label : 1 -Position : [191.506, 951.889] -Measurements : [878.1, 319047, 1.26602, 0.503631] ---- -Label : 1 -Position : [1287.53, 952.088] -Measurements : [1048.82, 407059, 0.767239, -0.977461] ---- -Label : 1 -Position : [1376.4, 954.064] -Measurements : [1582.31, 246184, 0.125043, -0.313266] ---- -Label : 1 -Position : [888.663, 954.188] -Measurements : [1159.73, 23273.9, -1.05327, 2.42529] ---- -Label : 1 -Position : [841.554, 954.816] -Measurements : [979.789, 365070, 0.734822, -1.08396] ---- -Label : 1 -Position : [840.209, 956.297] -Measurements : [1253.09, 441696, 0.242059, -1.40154] ---- -Label : 1 -Position : [885.606, 956.63] -Measurements : [1239.21, 116137, 1.15831, 2.26557] ---- -Label : 1 -Position : [839.67, 957.321] -Measurements : [1475.47, 409509, -0.0776988, -1.14681] ---- -Label : 1 -Position : [1374.89, 957.593] -Measurements : [1540.92, 273953, 0.168189, -0.634327] ---- -Label : 1 -Position : [839.73, 957.858] -Measurements : [1475.47, 409509, -0.0776988, -1.14681] ---- -Label : 1 -Position : [883.191, 958.106] -Measurements : [1226.58, 281657, 0.36399, -0.120447] ---- -Label : 1 -Position : [1287.83, 958.414] -Measurements : [1188.42, 392427, 0.451114, -1.15636] ---- -Label : 1 -Position : [1285.41, 958.77] -Measurements : [1244.06, 390274, 0.293909, -1.26782] ---- -Label : 1 -Position : [1379.02, 958.919] -Measurements : [1452.55, 212764, -0.0662891, -0.542317] ---- -Label : 1 -Position : [887.32, 959.206] -Measurements : [1289.12, 175148, 1.253, 1.39717] ---- -Label : 1 -Position : [178.678, 959.246] -Measurements : [727.864, 115788, 0.698264, -0.893239] ---- -Label : 1 -Position : [834.72, 959.368] -Measurements : [1473.53, 282455, 0.17718, -0.792214] ---- -Label : 1 -Position : [281.167, 959.472] -Measurements : [1384.4, 574360, 0.148977, -1.39461] ---- -Label : 1 -Position : [1287.24, 960.05] -Measurements : [1363.4, 399184, 0.197987, -1.29322] ---- -Label : 1 -Position : [180.867, 960.145] -Measurements : [811.565, 147067, 0.572313, -0.79385] ---- -Label : 1 -Position : [1375.51, 960.314] -Measurements : [1477.23, 297461, 0.16776, -0.117573] ---- -Label : 1 -Position : [836.454, 960.316] -Measurements : [1604.09, 255789, 0.0548937, -0.684292] ---- -Label : 1 -Position : [883.967, 960.726] -Measurements : [1184.06, 320393, 0.364136, -0.490117] ---- -Label : 1 -Position : [1372.55, 960.819] -Measurements : [1213.1, 317284, 0.225814, -0.76732] ---- -Label : 1 -Position : [181.736, 960.88] -Measurements : [821.101, 138823, 0.610745, -0.6679] ---- -Label : 1 -Position : [287.251, 961.625] -Measurements : [1045.38, 721053, 0.987592, -0.6074] ---- -Label : 1 -Position : [839.617, 962.3] -Measurements : [1505.98, 347870, -0.10427, -0.87655] ---- -Label : 1 -Position : [880.215, 962.714] -Measurements : [917.971, 314032, 0.904646, -0.121773] ---- -Label : 1 -Position : [1377.76, 962.918] -Measurements : [1717.5, 287861, -0.0890835, -0.53074] ---- -Label : 1 -Position : [897.49, 963.068] -Measurements : [992.493, 123270, 0.677473, 0.387253] ---- -Label : 1 -Position : [1282.73, 963.327] -Measurements : [1352.54, 433273, -0.0321354, -1.3333] ---- -Label : 1 -Position : [283.624, 963.44] -Measurements : [1629.07, 593929, -0.104435, -1.32794] ---- -Label : 1 -Position : [1289.06, 964.131] -Measurements : [1147.7, 498800, 0.581777, -1.20601] ---- -Label : 1 -Position : [1382.68, 964.62] -Measurements : [1762.07, 247023, -0.242182, -0.021285] ---- -Label : 1 -Position : [281.159, 964.684] -Measurements : [1806.79, 393250, -0.267757, -0.7197] ---- -Label : 1 -Position : [885.074, 965.368] -Measurements : [1194.36, 303639, 0.605657, -0.551981] ---- -Label : 1 -Position : [267.288, 965.647] -Measurements : [1212.79, 606103, 0.615202, -1.18908] ---- -Label : 1 -Position : [1385.18, 966.271] -Measurements : [1618.88, 280590, -0.349398, -0.812694] ---- -Label : 1 -Position : [834.815, 966.46] -Measurements : [1318.66, 255139, 0.780854, 0.11283] ---- -Label : 1 -Position : [906.39, 966.591] -Measurements : [927.715, 215368, 0.761438, -0.607984] ---- -Label : 1 -Position : [279.652, 966.659] -Measurements : [1697.84, 399210, 0.00594428, -0.716991] ---- -Label : 1 -Position : [1280.94, 966.849] -Measurements : [1116.31, 445566, 0.535014, -1.16033] ---- -Label : 1 -Position : [1380.52, 967.415] -Measurements : [1941.89, 153684, -0.157177, 0.0782797] ---- -Label : 1 -Position : [901.58, 967.689] -Measurements : [1237.3, 315334, -0.00845597, -1.41541] ---- -Label : 1 -Position : [277.992, 968.56] -Measurements : [1393.87, 376511, 0.354448, -0.664421] ---- -Label : 1 -Position : [881.1, 968.918] -Measurements : [990.499, 202267, 0.648434, -0.236861] ---- -Label : 1 -Position : [834.601, 968.95] -Measurements : [1321.05, 194508, 0.335078, -0.528258] ---- -Label : 1 -Position : [1381.85, 969.062] -Measurements : [1861.88, 218240, -0.470967, 0.388907] ---- -Label : 1 -Position : [832.242, 969.803] -Measurements : [1405.66, 195558, 0.164312, -0.749677] ---- -Label : 1 -Position : [1390.21, 969.824] -Measurements : [1251.35, 199288, 0.139184, -0.902565] ---- -Label : 1 -Position : [881.902, 969.851] -Measurements : [993.101, 152971, 0.309769, -0.891556] ---- -Label : 1 -Position : [1279.41, 970.221] -Measurements : [1112.48, 367915, 0.449666, -1.15283] ---- -Label : 1 -Position : [266.216, 970.608] -Measurements : [1597.04, 574038, -0.0380824, -1.50985] ---- -Label : 1 -Position : [1381.49, 970.79] -Measurements : [1810.97, 259356, -0.737676, 0.505784] ---- -Label : 1 -Position : [834.041, 970.855] -Measurements : [1349.53, 218768, 0.114165, -0.795617] ---- -Label : 1 -Position : [832.358, 971.375] -Measurements : [1525.59, 227676, -0.0261145, -0.698119] ---- -Label : 1 -Position : [899.122, 971.785] -Measurements : [1452.86, 159947, -0.238656, -0.489898] ---- -Label : 1 -Position : [829.576, 972.77] -Measurements : [1547.52, 250192, 0.311495, -0.308267] ---- -Label : 1 -Position : [1282.32, 973.977] -Measurements : [1526.38, 469876, -0.0336208, -0.84676] ---- -Label : 1 -Position : [896.581, 974.116] -Measurements : [1309.6, 196984, 0.247839, -0.938235] ---- -Label : 1 -Position : [1385.54, 974.386] -Measurements : [1645.3, 162172, -0.0592037, -0.591863] ---- -Label : 1 -Position : [270.791, 974.484] -Measurements : [1152.94, 508081, 0.989463, -0.385044] ---- -Label : 1 -Position : [253.969, 974.856] -Measurements : [1318.6, 512263, 0.413012, -1.39054] ---- -Label : 1 -Position : [831.129, 975.062] -Measurements : [1679.04, 241175, 0.0265257, -0.246265] ---- -Label : 1 -Position : [897.535, 976.112] -Measurements : [1358.78, 196563, 0.12645, -0.830182] ---- -Label : 1 -Position : [901.227, 976.191] -Measurements : [1295.93, 264711, -0.0760443, -0.968626] ---- -Label : 1 -Position : [877.004, 976.29] -Measurements : [1116.66, 225062, 0.377058, -0.670743] ---- -Label : 1 -Position : [826.286, 976.862] -Measurements : [1351.26, 220933, 0.177212, -0.944346] ---- -Label : 1 -Position : [1284.15, 977.551] -Measurements : [1821.92, 280682, 0.200975, -0.625485] ---- -Label : 1 -Position : [248.008, 978.166] -Measurements : [1499.06, 699766, -0.0514878, -1.65725] ---- -Label : 1 -Position : [251.88, 978.288] -Measurements : [1656.71, 488833, -0.117968, -1.45545] ---- -Label : 1 -Position : [876.193, 978.927] -Measurements : [1149.59, 303422, 0.32204, -1.08348] ---- -Label : 1 -Position : [881.111, 979.819] -Measurements : [1152.07, 218253, 1.06564, 0.74056] ---- -Label : 1 -Position : [897.484, 979.977] -Measurements : [1162.16, 247030, 0.114829, -1.09992] ---- -Label : 1 -Position : [1386.36, 980.121] -Measurements : [1369.07, 133664, 0.511641, 0.451447] ---- -Label : 1 -Position : [827.852, 980.386] -Measurements : [1476.57, 191894, 0.0869782, -0.389603] ---- -Label : 1 -Position : [897.272, 980.399] -Measurements : [1101.28, 259293, 0.35185, -1.09649] ---- -Label : 1 -Position : [955.127, 980.592] -Measurements : [1214.9, 107748, 0.988645, 1.16339] ---- -Label : 1 -Position : [1281.46, 981.162] -Measurements : [1485.92, 231315, 0.493536, 0.599135] ---- -Label : 1 -Position : [1392.4, 981.27] -Measurements : [1260.96, 204932, 0.415416, 0.168656] ---- -Label : 1 -Position : [828.196, 981.294] -Measurements : [1546.73, 213615, 0.311081, -0.251995] ---- -Label : 1 -Position : [1280.27, 981.759] -Measurements : [1411.94, 194601, 0.310734, 0.383798] ---- -Label : 1 -Position : [1284.51, 982.712] -Measurements : [1447.79, 338113, 0.547702, 0.110556] ---- -Label : 1 -Position : [1385.26, 983.696] -Measurements : [1180.72, 177156, 0.0379326, -0.378221] ---- -Label : 1 -Position : [955.177, 983.774] -Measurements : [1075.65, 180390, 0.709784, -0.102524] ---- -Label : 1 -Position : [829.41, 983.858] -Measurements : [1389.14, 227555, -0.177149, -0.992502] ---- -Label : 1 -Position : [875.366, 984.073] -Measurements : [1417.13, 539295, 0.154007, -1.31158] ---- -Label : 1 -Position : [897.658, 984.445] -Measurements : [1169.97, 385368, 0.303398, -1.46837] ---- -Label : 1 -Position : [1384.29, 984.45] -Measurements : [1051.99, 197370, 0.288829, -0.769384] ---- -Label : 1 -Position : [1392.5, 984.626] -Measurements : [1346.61, 203993, 0.329467, -0.366172] ---- -Label : 1 -Position : [953.055, 984.735] -Measurements : [1021.22, 203614, 0.831625, -0.242744] ---- -Label : 1 -Position : [820.918, 984.776] -Measurements : [987.366, 151414, 0.459284, -0.507995] ---- -Label : 1 -Position : [831.953, 985.012] -Measurements : [1129.68, 334292, 0.341506, -1.41518] ---- -Label : 1 -Position : [1400.35, 985.37] -Measurements : [1050.77, 156916, 0.13651, -1.14777] ---- -Label : 1 -Position : [825.394, 985.711] -Measurements : [1158.59, 302558, 0.171643, -1.38353] ---- -Label : 1 -Position : [1390.67, 986.844] -Measurements : [1335.72, 231852, 0.10142, -0.421343] ---- -Label : 1 -Position : [874.373, 986.901] -Measurements : [1497.22, 455005, 0.125584, -1.17985] ---- -Label : 1 -Position : [235.056, 987.666] -Measurements : [823.383, 260125, 1.37442, 0.455146] ---- -Label : 1 -Position : [928.821, 987.682] -Measurements : [864.292, 283639, 1.0375, -0.290745] ---- -Label : 1 -Position : [875.401, 988.633] -Measurements : [1458.98, 484773, 0.172421, -1.21011] ---- -Label : 1 -Position : [876.574, 988.663] -Measurements : [1443.8, 471873, 0.304372, -1.19915] ---- -Label : 1 -Position : [892.875, 988.736] -Measurements : [1313.69, 352399, 0.0736347, -1.20572] ---- -Label : 1 -Position : [873.727, 988.988] -Measurements : [1417.67, 548627, 0.119971, -1.31317] ---- -Label : 1 -Position : [895.436, 988.988] -Measurements : [1323.42, 403326, -0.0106431, -1.40192] ---- -Label : 1 -Position : [1400.65, 988.995] -Measurements : [1094.77, 157604, 0.125781, -1.12968] ---- -Label : 1 -Position : [1275.77, 989.542] -Measurements : [957.331, 78178.5, 0.979546, 0.153178] ---- -Label : 1 -Position : [931.077, 989.802] -Measurements : [976.837, 240082, 0.840538, -0.420916] ---- -Label : 1 -Position : [931.071, 989.807] -Measurements : [976.837, 240082, 0.840538, -0.420916] ---- -Label : 1 -Position : [950.401, 990.117] -Measurements : [1090.42, 340565, 0.620222, -1.06339] ---- -Label : 1 -Position : [1395.78, 990.361] -Measurements : [1336.31, 173508, 0.508083, -0.226791] ---- -Label : 1 -Position : [823.788, 990.474] -Measurements : [947.459, 263002, 0.662846, -0.981008] ---- -Label : 1 -Position : [877.057, 991.052] -Measurements : [1147.23, 351626, 0.910869, -0.253719] ---- -Label : 1 -Position : [894.207, 991.446] -Measurements : [1506.11, 233771, -0.0437177, -0.863989] ---- -Label : 1 -Position : [1271.75, 991.563] -Measurements : [1068.1, 111909, 0.507661, -0.757213] ---- -Label : 1 -Position : [337.038, 991.959] -Measurements : [1843.31, 597338, -0.380222, -1.28537] ---- -Label : 1 -Position : [234.472, 992.112] -Measurements : [1199.61, 359850, 0.665756, -0.847942] ---- -Label : 1 -Position : [927.804, 992.513] -Measurements : [905.049, 259122, 0.880369, -0.410013] ---- -Label : 1 -Position : [953.538, 992.785] -Measurements : [1000.68, 358701, 0.877751, -0.825523] ---- -Label : 1 -Position : [890.335, 992.952] -Measurements : [1244.63, 203391, 0.478306, -0.77062] ---- -Label : 1 -Position : [336.288, 993.472] -Measurements : [1966.99, 667634, -0.431387, -1.31037] ---- -Label : 1 -Position : [228.84, 993.648] -Measurements : [888.157, 219491, 0.977918, 0.430083] ---- -Label : 1 -Position : [338.687, 993.799] -Measurements : [1777.53, 868985, -0.192584, -1.643] ---- -Label : 1 -Position : [1273.19, 993.931] -Measurements : [1297.16, 227104, 0.700475, -0.527313] ---- -Label : 1 -Position : [1275.78, 994.132] -Measurements : [1424.22, 238687, 0.447421, -0.910747] ---- -Label : 1 -Position : [822.937, 994.722] -Measurements : [1076.47, 241128, 0.311301, -1.01506] ---- -Label : 1 -Position : [894.384, 995.16] -Measurements : [1165.59, 344817, 0.441789, -1.02893] ---- -Label : 1 -Position : [899.112, 995.171] -Measurements : [874.958, 377127, 1.30061, 0.185286] ---- -Label : 1 -Position : [236.654, 995.231] -Measurements : [1108.41, 333085, 1.03938, -0.106948] ---- -Label : 1 -Position : [890.93, 995.542] -Measurements : [1033.65, 241372, 0.688002, -0.503646] ---- -Label : 1 -Position : [891.275, 995.774] -Measurements : [1090.8, 285980, 0.641451, -0.636577] ---- -Label : 1 -Position : [231.86, 996.209] -Measurements : [1120.07, 309761, 1.00491, 0.103579] ---- -Label : 1 -Position : [1271.67, 996.505] -Measurements : [1435.34, 134651, 0.466114, -0.459477] ---- -Label : 1 -Position : [950.422, 996.827] -Measurements : [896.464, 380539, 1.05439, -0.539485] ---- -Label : 1 -Position : [224.103, 996.846] -Measurements : [647.548, 91030.6, 0.941581, -0.386955] ---- -Label : 1 -Position : [931.881, 996.897] -Measurements : [1069.97, 301124, 0.975649, 0.108209] ---- -Label : 1 -Position : [929.433, 997.18] -Measurements : [1190.73, 388327, 0.616594, -0.605661] ---- -Label : 1 -Position : [1269.47, 998.164] -Measurements : [1441.64, 93522.6, 0.56024, -0.13933] ---- -Label : 1 -Position : [923.878, 998.225] -Measurements : [948.878, 366884, 0.777027, -0.704832] ---- -Label : 1 -Position : [1022.12, 999.198] -Measurements : [1219.98, 493217, 0.551643, -1.08479] ---- -Label : 1 -Position : [213.992, 999.28] -Measurements : [1030.47, 342705, 0.50527, -1.21772] ---- -Label : 1 -Position : [1392.66, 999.361] -Measurements : [987.046, 257082, 0.705102, -0.484276] ---- -Label : 1 -Position : [995.609, 999.441] -Measurements : [1377.52, 500426, 0.492417, -1.0831] ---- -Label : 1 -Position : [824.318, 999.503] -Measurements : [1141.09, 178572, 0.568994, -0.35397] ---- -Label : 1 -Position : [1394.14, 1000.19] -Measurements : [1184.25, 301255, 0.41854, -0.942255] ---- -Label : 1 -Position : [1392.1, 1000.64] -Measurements : [984.914, 275909, 0.697065, -0.681816] ---- -Label : 1 -Position : [886.747, 1000.76] -Measurements : [1089.03, 408982, 0.974528, -0.390945] ---- -Label : 1 -Position : [926.975, 1000.87] -Measurements : [1275.47, 390118, 0.353751, -0.819639] ---- -Label : 1 -Position : [1267.72, 1000.92] -Measurements : [1410.81, 161462, 0.262529, -0.405459] ---- -Label : 1 -Position : [1015.1, 1001.07] -Measurements : [1273.03, 279041, 0.329967, -0.609171] ---- -Label : 1 -Position : [888.128, 1001.33] -Measurements : [1127.05, 486644, 0.726622, -1.00996] ---- -Label : 1 -Position : [1019.48, 1001.39] -Measurements : [1442.73, 360975, 0.00625498, -0.806646] ---- -Label : 1 -Position : [216.181, 1001.43] -Measurements : [1105.2, 314518, 0.451184, -1.31583] ---- -Label : 1 -Position : [926.778, 1001.76] -Measurements : [1284.46, 379248, 0.369351, -0.787604] ---- -Label : 1 -Position : [869.934, 1002.46] -Measurements : [1390.57, 575316, 0.1615, -1.34199] ---- -Label : 1 -Position : [217.249, 1002.78] -Measurements : [1067.01, 328301, 0.513509, -1.24531] ---- -Label : 1 -Position : [992.86, 1003.43] -Measurements : [1779.6, 399661, -0.564617, -0.692851] ---- -Label : 1 -Position : [870.077, 1003.45] -Measurements : [1440.52, 504865, 0.209036, -1.25108] ---- -Label : 1 -Position : [1269.21, 1003.88] -Measurements : [1459.03, 128136, 0.663002, -0.357936] ---- -Label : 0 -Position : [282.567, 1003.91] -Measurements : [1252.8, 25843.1, -0.0383469, 0.362406] ---- -Label : 1 -Position : [703.424, 1004.03] -Measurements : [1048.61, 243968, 0.763644, -0.436417] ---- -Label : 1 -Position : [709.977, 1004.48] -Measurements : [1061.13, 206013, 0.896454, 0.163068] ---- -Label : 1 -Position : [888.882, 1004.55] -Measurements : [1141.59, 522293, 0.615074, -1.24156] ---- -Label : 1 -Position : [867.877, 1004.69] -Measurements : [1655.86, 395553, -0.341958, -0.729228] ---- -Label : 1 -Position : [868.94, 1004.78] -Measurements : [1633.78, 403401, -0.217203, -0.946224] ---- -Label : 1 -Position : [699.718, 1005.26] -Measurements : [1138.25, 139985, 0.205838, -0.342353] ---- -Label : 1 -Position : [991.52, 1005.97] -Measurements : [1882.88, 257856, -0.595033, -0.113627] ---- -Label : 1 -Position : [870.117, 1006.2] -Measurements : [1621.85, 380527, 0.147772, -1.32299] ---- -Label : 1 -Position : [696.433, 1006.28] -Measurements : [1140.91, 203703, 1.55049, 4.04098] ---- -Label : 1 -Position : [816.972, 1006.32] -Measurements : [817.865, 171304, 0.782614, -0.658862] ---- -Label : 1 -Position : [995.586, 1006.45] -Measurements : [1817.98, 382625, -0.518557, -0.947025] ---- -Label : 1 -Position : [867.066, 1006.56] -Measurements : [1794.13, 276251, -0.372612, -0.366228] ---- -Label : 1 -Position : [712.407, 1006.69] -Measurements : [1010.34, 158028, 0.929452, 0.548854] ---- -Label : 1 -Position : [696.714, 1006.9] -Measurements : [1140.91, 203703, 1.55049, 4.04098] ---- -Label : 1 -Position : [946.753, 1006.9] -Measurements : [1082.25, 462942, 0.647338, -1.08076] ---- -Label : 1 -Position : [710.077, 1007.22] -Measurements : [1227.13, 301506, 0.866963, -0.1058] ---- -Label : 1 -Position : [1019.48, 1007.53] -Measurements : [1693.31, 251576, -0.0321073, -0.569145] ---- -Label : 1 -Position : [693.992, 1007.61] -Measurements : [1565.98, 376726, 0.746471, -0.134896] ---- -Label : 1 -Position : [924.927, 1007.83] -Measurements : [1200.83, 331153, 0.368665, -0.861583] ---- -Label : 1 -Position : [704.215, 1007.92] -Measurements : [1282.04, 377201, 0.612415, -0.585596] ---- -Label : 1 -Position : [947.394, 1007.94] -Measurements : [1187.06, 489086, 0.440758, -1.25083] ---- -Label : 1 -Position : [1265.95, 1008.18] -Measurements : [1211.42, 202578, 0.746548, 0.0767465] ---- -Label : 1 -Position : [992.45, 1008.35] -Measurements : [1838.33, 274682, -0.375355, -0.516956] ---- -Label : 1 -Position : [1273.46, 1008.42] -Measurements : [1608.58, 302901, -0.015788, -1.12544] ---- -Label : 1 -Position : [824.096, 1008.47] -Measurements : [773.892, 144827, 1.03437, -0.0792007] ---- -Label : 1 -Position : [335.85, 1009.13] -Measurements : [704.709, 180870, 1.46501, 0.967326] ---- -Label : 1 -Position : [80.4177, 1009.16] -Measurements : [1237.15, 164794, 0.687169, -0.0888316] ---- -Label : 1 -Position : [987.753, 1009.31] -Measurements : [1416.1, 393782, -0.182936, -1.09392] ---- -Label : 1 -Position : [918.862, 1009.34] -Measurements : [851.816, 240039, 0.707326, -0.93859] ---- -Label : 1 -Position : [79.336, 1009.52] -Measurements : [1249.22, 159618, 0.804945, -0.0250845] ---- -Label : 1 -Position : [186.436, 1009.55] -Measurements : [1508.42, 512819, -0.437206, -1.35607] ---- -Label : 1 -Position : [1014.54, 1010.22] -Measurements : [1347.25, 325720, 0.553551, -0.607395] ---- -Label : 1 -Position : [865.651, 1010.22] -Measurements : [1790.28, 360478, -0.303782, -0.551975] ---- -Label : 1 -Position : [195.171, 1010.32] -Measurements : [1209.92, 481432, 0.606674, -0.833103] ---- -Label : 1 -Position : [689.47, 1010.38] -Measurements : [1805.01, 636897, 0.0295537, -1.13368] ---- -Label : 1 -Position : [673.432, 1010.39] -Measurements : [1336.94, 384086, 0.00522749, -1.45692] ---- -Label : 1 -Position : [699.446, 1010.49] -Measurements : [1230.52, 246358, 0.699893, 0.429139] ---- -Label : 1 -Position : [197.516, 1010.57] -Measurements : [1007.05, 491115, 1.05784, -0.0912116] ---- -Label : 0 -Position : [284.955, 1010.59] -Measurements : [1175.09, 34992.5, 0.439273, -0.52895] ---- -Label : 1 -Position : [1020.54, 1010.65] -Measurements : [1638.64, 299475, 0.0354473, -0.446996] ---- -Label : 1 -Position : [819.962, 1010.66] -Measurements : [1000.88, 192175, 0.401885, -0.845193] ---- -Label : 1 -Position : [865.838, 1010.66] -Measurements : [1790.28, 360478, -0.303782, -0.551975] ---- -Label : 1 -Position : [1019.11, 1010.79] -Measurements : [1665.97, 261209, 0.207698, -0.410138] ---- -Label : 1 -Position : [1021.94, 1010.79] -Measurements : [1572.58, 380566, -0.0685909, -0.775831] ---- -Label : 1 -Position : [667.983, 1010.87] -Measurements : [1403.72, 281906, 0.0296296, -0.897928] ---- -Label : 1 -Position : [984.209, 1011.02] -Measurements : [1070.4, 341697, 0.165734, -1.55756] ---- -Label : 1 -Position : [949.623, 1011.02] -Measurements : [1477.17, 489272, 0.202019, -1.11097] ---- -Label : 1 -Position : [925.642, 1011.05] -Measurements : [1355, 168027, -0.0345495, -0.550903] ---- -Label : 1 -Position : [672.676, 1011.2] -Measurements : [1410.35, 344015, -0.060858, -1.30959] ---- -Label : 1 -Position : [56.4424, 1011.35] -Measurements : [1359.7, 108998, 0.983302, 0.0592867] ---- -Label : 1 -Position : [1266.52, 1011.39] -Measurements : [1336.94, 247599, 1.14334, 0.649429] ---- -Label : 1 -Position : [949.78, 1011.48] -Measurements : [1477.17, 489272, 0.202019, -1.11097] ---- -Label : 1 -Position : [986.242, 1011.82] -Measurements : [1340.04, 355859, -0.313639, -1.18363] ---- -Label : 1 -Position : [1063.72, 1012.04] -Measurements : [1334.52, 218216, 0.43014, -0.821782] ---- -Label : 1 -Position : [673.82, 1012.06] -Measurements : [1313.82, 381209, 0.120558, -1.46653] ---- -Label : 1 -Position : [685.148, 1012.22] -Measurements : [1354.64, 892285, 0.370112, -1.52039] ---- -Label : 1 -Position : [331.168, 1012.42] -Measurements : [872.201, 167807, 0.808887, -0.581203] ---- -Label : 1 -Position : [186.477, 1012.43] -Measurements : [1958.34, 311656, -0.87901, 0.25566] ---- -Label : 1 -Position : [945.756, 1012.45] -Measurements : [1621.86, 332817, 0.286001, -0.772931] ---- -Label : 1 -Position : [195.048, 1012.59] -Measurements : [1341.3, 493984, 0.368361, -1.10725] ---- -Label : 1 -Position : [922.879, 1012.74] -Measurements : [1397.02, 194509, -0.394176, -0.492827] ---- -Label : 1 -Position : [927.255, 1012.75] -Measurements : [1319.35, 168888, 0.345695, -0.781819] ---- -Label : 1 -Position : [870.076, 1012.77] -Measurements : [1362.65, 346276, 0.995693, -0.378502] ---- -Label : 1 -Position : [944.969, 1012.9] -Measurements : [1553.33, 335442, 0.422129, -0.641062] ---- -Label : 1 -Position : [1268.01, 1012.91] -Measurements : [1505.08, 357987, 0.837311, -0.471997] ---- -Label : 1 -Position : [670.942, 1013.03] -Measurements : [1398.96, 363892, -0.0279529, -1.35289] ---- -Label : 1 -Position : [720.199, 1013.06] -Measurements : [2089.01, 248990, -0.384212, 0.283971] ---- -Label : 1 -Position : [721.875, 1013.18] -Measurements : [2198.27, 219843, -0.155778, -0.182142] ---- -Label : 1 -Position : [184.294, 1013.21] -Measurements : [1974.89, 352723, -0.964301, 0.507504] ---- -Label : 1 -Position : [1017.44, 1013.26] -Measurements : [1531.1, 381005, 0.247374, -0.963339] ---- -Label : 1 -Position : [1088.62, 1013.6] -Measurements : [930.082, 333463, 0.503889, -1.31492] ---- -Label : 1 -Position : [666.532, 1013.66] -Measurements : [1087.4, 355167, 0.615583, -0.850368] ---- -Label : 1 -Position : [718.961, 1013.66] -Measurements : [1858.75, 360391, -0.482358, -0.52879] ---- -Label : 1 -Position : [77.8269, 1013.67] -Measurements : [1090.83, 296080, 0.508568, -1.00207] ---- -Label : 1 -Position : [186.856, 1014.13] -Measurements : [2101.7, 221535, -0.704568, 0.395886] ---- -Label : 1 -Position : [1135.61, 1014.8] -Measurements : [1228.02, 201853, 0.404409, -0.332593] ---- -Label : 1 -Position : [59.1503, 1014.96] -Measurements : [1362.87, 193627, 0.434068, -0.849415] ---- -Label : 1 -Position : [1133.21, 1014.99] -Measurements : [1159.18, 249625, 0.367655, -0.651623] ---- -Label : 1 -Position : [182.248, 1015.15] -Measurements : [1803.83, 444958, -0.550203, -0.577508] ---- -Label : 1 -Position : [864.199, 1015.16] -Measurements : [1580.98, 309313, 0.230618, -0.634304] ---- -Label : 1 -Position : [921.54, 1015.26] -Measurements : [1374.97, 170005, -0.306728, -0.351232] ---- -Label : 0 -Position : [295.886, 1015.38] -Measurements : [942.082, 26170.4, -1.51034, 2.19124] ---- -Label : 1 -Position : [333.215, 1015.51] -Measurements : [657.631, 129639, 1.62728, 1.56926] ---- -Label : 1 -Position : [924.758, 1015.53] -Measurements : [1375.63, 122818, 0.388242, -0.525013] ---- -Label : 1 -Position : [1086.67, 1015.6] -Measurements : [1155.62, 297921, -0.082828, -1.31987] ---- -Label : 1 -Position : [55.272, 1015.66] -Measurements : [1421.39, 228913, 0.114756, -1.18742] ---- -Label : 1 -Position : [988.764, 1015.72] -Measurements : [1747, 192495, -0.70219, 0.628138] ---- -Label : 1 -Position : [916.676, 1015.95] -Measurements : [873.293, 253077, 0.619499, -1.04358] ---- -Label : 1 -Position : [814.228, 1015.98] -Measurements : [1596.2, 484646, -0.0122618, -1.15247] ---- -Label : 1 -Position : [1065.29, 1016.05] -Measurements : [1479.7, 227645, -0.0332878, -1.08239] ---- -Label : 1 -Position : [1062.34, 1016.09] -Measurements : [1544.05, 173198, -0.395395, -0.837399] ---- -Label : 1 -Position : [726.612, 1016.1] -Measurements : [2505.57, 215771, -0.443571, -1.00279] ---- -Label : 1 -Position : [863.672, 1016.26] -Measurements : [1480.3, 366424, 0.198295, -0.682477] ---- -Label : 1 -Position : [810.009, 1016.4] -Measurements : [1611.51, 482474, 0.121139, -1.10883] ---- -Label : 1 -Position : [1135.03, 1016.42] -Measurements : [1132.47, 264809, 0.479531, -0.858834] ---- -Label : 1 -Position : [882.738, 1016.43] -Measurements : [808.791, 183831, 1.08666, -0.122231] ---- -Label : 1 -Position : [1012.11, 1016.54] -Measurements : [1075.15, 284075, 0.640175, -0.200572] ---- -Label : 1 -Position : [1088.45, 1016.72] -Measurements : [1174.37, 332319, -0.0538544, -1.48596] ---- -Label : 1 -Position : [1059.02, 1016.84] -Measurements : [1415.14, 253189, -0.398233, -1.02097] ---- -Label : 1 -Position : [1007.46, 1017.03] -Measurements : [808.232, 152855, 1.05815, 1.12507] ---- -Label : 1 -Position : [946.022, 1017.22] -Measurements : [1264.41, 466567, 0.695817, -0.526606] ---- -Label : 1 -Position : [882.754, 1017.57] -Measurements : [809.583, 181378, 1.1162, -0.0656009] ---- -Label : 1 -Position : [726.009, 1017.64] -Measurements : [2507.08, 224688, -0.455013, -0.97684] ---- -Label : 1 -Position : [920.831, 1017.66] -Measurements : [1313.54, 199176, -0.484826, -0.416592] ---- -Label : 1 -Position : [941.66, 1017.77] -Measurements : [1053.78, 276813, 0.701267, -0.5894] ---- -Label : 1 -Position : [1062.49, 1017.77] -Measurements : [1555.64, 169523, -0.333063, -0.878641] ---- -Label : 1 -Position : [736.771, 1017.96] -Measurements : [2099.71, 384312, 0.314329, -0.894207] ---- -Label : 1 -Position : [738.224, 1018.28] -Measurements : [1970.34, 390868, 0.566064, -0.615688] ---- -Label : 1 -Position : [886.533, 1018.6] -Measurements : [718.274, 164740, 1.5961, 1.2792] ---- -Label : 1 -Position : [984.698, 1018.64] -Measurements : [1664.76, 442059, -0.603316, -0.580731] ---- -Label : 1 -Position : [187.35, 1018.84] -Measurements : [1859.34, 464470, -0.307346, -1.12286] ---- -Label : 1 -Position : [862.151, 1018.85] -Measurements : [1264.47, 439200, 0.571673, -0.639777] ---- -Label : 1 -Position : [989.174, 1019] -Measurements : [1744.47, 314479, -0.364403, -0.523934] ---- -Label : 1 -Position : [1264.32, 1019.05] -Measurements : [1342.94, 74487.3, 0.300554, 0.745904] ---- -Label : 1 -Position : [1087.69, 1019.52] -Measurements : [1344.85, 209870, -0.381023, -0.823602] ---- -Label : 1 -Position : [867.407, 1019.66] -Measurements : [1107.94, 285563, 1.4988, 1.83825] ---- -Label : 1 -Position : [738.195, 1019.91] -Measurements : [1991.97, 398039, 0.687494, -0.573591] ---- -Label : 1 -Position : [936.976, 1020.05] -Measurements : [1033.79, 219848, 0.759106, -0.407318] ---- -Label : 1 -Position : [721.718, 1020.26] -Measurements : [2227.96, 470670, -0.909593, -0.0630635] ---- -Label : 1 -Position : [738.533, 1020.27] -Measurements : [2003.48, 415460, 0.699372, -0.6297] ---- -Label : 1 -Position : [1085.44, 1020.51] -Measurements : [1376.22, 163704, -0.358114, -0.831619] ---- -Label : 1 -Position : [812.46, 1020.57] -Measurements : [2077.83, 216722, -0.575687, 0.558243] ---- -Label : 1 -Position : [813.409, 1020.9] -Measurements : [2067, 279280, -0.671777, 0.218464] ---- -Label : 1 -Position : [984.081, 1020.91] -Measurements : [1795.22, 411441, -0.670199, -0.264932] ---- -Label : 1 -Position : [1016.45, 1020.92] -Measurements : [854.084, 249593, 1.17708, 0.201372] ---- -Label : 1 -Position : [170.763, 1020.97] -Measurements : [734.544, 129177, 0.817929, -0.615007] ---- -Label : 1 -Position : [986.102, 1020.99] -Measurements : [1942.9, 225167, -0.391199, 0.0327143] ---- -Label : 1 -Position : [861.695, 1021.2] -Measurements : [1126.9, 344118, 0.630967, -0.611473] ---- -Label : 1 -Position : [733.575, 1021.42] -Measurements : [2325.61, 338787, 0.0441115, -1.03222] ---- -Label : 1 -Position : [741.358, 1021.42] -Measurements : [1600.48, 132763, 0.217706, 0.087064] ---- -Label : 1 -Position : [1064.32, 1022.06] -Measurements : [1382.81, 205260, 0.142206, -1.26915] ---- -Label : 1 -Position : [1268.34, 1022.33] -Measurements : [1330.16, 197968, -0.223445, -0.612095] ---- -Label : 1 -Position : [1131.8, 1022.61] -Measurements : [1085.66, 390413, 0.43084, -1.36876] ---- -Label : 1 -Position : [175.08, 1022.78] -Measurements : [1166.78, 167020, -0.319599, -0.729617] ---- -Label : 1 -Position : [986.325, 1022.91] -Measurements : [1866.08, 355468, -0.67631, -0.244939] ---- -Label : 1 -Position : [1009.93, 1022.98] -Measurements : [1031.95, 522264, 0.837611, -0.843353] ---- -Label : 1 -Position : [986.306, 1023.1] -Measurements : [1751.63, 460529, -0.473679, -0.913764] ---- -Label : 1 -Position : [1060.85, 1023.1] -Measurements : [1576.69, 157170, -0.641684, -0.343446] ---- -Label : 1 -Position : [815.865, 1023.23] -Measurements : [1805.28, 582916, -0.302783, -1.32167] ---- -Label : 1 -Position : [653.921, 1023.46] -Measurements : [1388.13, 586669, 0.153146, -1.53759] ---- -Label : 1 -Position : [655.063, 1023.49] -Measurements : [1428.91, 551402, 0.102909, -1.50477] ---- -Label : 1 -Position : [855.637, 1023.5] -Measurements : [1093.63, 423964, 0.488439, -1.04901] ---- -Label : 1 -Position : [862.968, 1023.55] -Measurements : [1119.25, 357591, 0.897059, -0.252146] ---- -Label : 1 -Position : [1267.46, 1023.56] -Measurements : [1384.85, 187349, -0.237141, -0.541418] ---- -Label : 1 -Position : [1131.76, 1023.79] -Measurements : [1121.9, 387088, 0.377765, -1.41704] ---- -Label : 1 -Position : [656.101, 1024.08] -Measurements : [1418.41, 575588, 0.154365, -1.577] ---- -Label : 1 -Position : [749.55, 1024.29] -Measurements : [2003.47, 254689, 0.190488, -0.639311] ---- -Label : 1 -Position : [1080.88, 1024.32] -Measurements : [1165.23, 164307, 0.160771, -0.914066] ---- -Label : 1 -Position : [814.771, 1024.45] -Measurements : [1751.83, 639973, -0.275082, -1.37547] ---- -Label : 1 -Position : [756.95, 1024.53] -Measurements : [1505.41, 270464, -0.0122335, -1.01706] ---- -Label : 1 -Position : [1057.35, 1024.58] -Measurements : [1583.02, 131644, -0.981531, 0.853314] ---- -Label : 1 -Position : [656.443, 1024.59] -Measurements : [1418.41, 575588, 0.154365, -1.577] ---- -Label : 1 -Position : [761.921, 1024.92] -Measurements : [1373.73, 222951, 0.158324, -0.943853] ---- -Label : 1 -Position : [1060.18, 1024.96] -Measurements : [1554.76, 156984, -0.766471, -0.197774] ---- -Label : 1 -Position : [941.525, 1025] -Measurements : [1312.09, 517932, 0.252852, -1.452] ---- -Label : 1 -Position : [940.841, 1025.14] -Measurements : [1504.59, 491499, -0.129409, -1.33678] ---- -Label : 1 -Position : [1262.27, 1025.2] -Measurements : [1701.02, 157066, -0.030413, -1.02152] ---- -Label : 1 -Position : [326.048, 1025.22] -Measurements : [980.903, 218349, 0.906212, -0.191418] ---- -Label : 1 -Position : [1133.28, 1025.3] -Measurements : [1191.19, 328797, 0.343022, -1.34542] ---- -Label : 1 -Position : [810.542, 1025.4] -Measurements : [1539.92, 573228, -0.0647194, -1.34218] ---- -Label : 1 -Position : [1082.96, 1025.52] -Measurements : [1277.9, 187131, -0.0419008, -1.03164] ---- -Label : 1 -Position : [642.366, 1025.53] -Measurements : [1360.34, 487289, 0.210597, -1.41078] ---- -Label : 1 -Position : [880.863, 1025.66] -Measurements : [1131.23, 314135, 0.380774, -1.07941] ---- -Label : 1 -Position : [762.185, 1025.69] -Measurements : [1523.17, 215515, 0.0387865, -0.51673] ---- -Label : 1 -Position : [1083.4, 1025.84] -Measurements : [1309.23, 185522, -0.123782, -1.0246] ---- -Label : 1 -Position : [177.093, 1025.86] -Measurements : [1210.52, 113802, -0.172761, -0.929843] ---- -Label : 1 -Position : [944.637, 1025.93] -Measurements : [1107.62, 572645, 0.802953, -0.963507] ---- -Label : 1 -Position : [328.101, 1026.07] -Measurements : [843.462, 252753, 1.24953, 0.263152] ---- -Label : 1 -Position : [1257.29, 1026.1] -Measurements : [1615.18, 266341, -0.198848, -1.00919] ---- -Label : 1 -Position : [858.874, 1026.22] -Measurements : [1459.64, 420848, -0.0181147, -1.26278] ---- -Label : 1 -Position : [815.491, 1026.28] -Measurements : [1355.87, 674522, 0.453067, -1.3458] ---- -Label : 1 -Position : [644.935, 1026.34] -Measurements : [1294.27, 573366, 0.480333, -1.17723] ---- -Label : 1 -Position : [1057.99, 1026.37] -Measurements : [1542.85, 137728, -0.791577, 0.323243] ---- -Label : 1 -Position : [935.254, 1026.67] -Measurements : [1476.71, 354669, 0.173339, -1.11225] ---- -Label : 1 -Position : [1007.2, 1026.78] -Measurements : [1350.49, 363882, 0.0987247, -0.793205] ---- -Label : 1 -Position : [812.409, 1026.82] -Measurements : [1430.55, 598980, 0.169515, -1.4309] ---- -Label : 0 -Position : [272.167, 1027.14] -Measurements : [1038.38, 48306.7, 0.966819, 0.267208] ---- -Label : 1 -Position : [756.103, 1027.16] -Measurements : [1731.74, 230366, -0.0394879, -0.223761] ---- -Label : 1 -Position : [1064.07, 1027.57] -Measurements : [1167.02, 145886, 0.587079, -0.65369] ---- -Label : 0 -Position : [257.6, 1027.78] -Measurements : [1244.32, 27589.8, -0.135492, -0.0876443] ---- -Label : 1 -Position : [882.117, 1027.78] -Measurements : [1285.63, 493198, 0.446053, -0.904536] ---- -Label : 1 -Position : [640.762, 1027.88] -Measurements : [1659.11, 430891, -0.0117133, -0.967989] ---- -Label : 1 -Position : [1060.53, 1028.02] -Measurements : [1464.46, 197097, -0.474405, -0.804553] ---- -Label : 1 -Position : [655.379, 1028.06] -Measurements : [1125.46, 628663, 0.801665, -1.02351] ---- -Label : 1 -Position : [749.852, 1028.2] -Measurements : [2075.55, 282163, -0.0782922, -0.504301] ---- -Label : 0 -Position : [251.691, 1028.21] -Measurements : [1301.12, 23487.7, -0.680369, 0.843609] ---- -Label : 1 -Position : [860.775, 1028.35] -Measurements : [1402.43, 398964, 0.309612, -1.18305] ---- -Label : 1 -Position : [754.064, 1028.61] -Measurements : [1832.58, 232607, -0.0412702, 0.161256] ---- -Label : 1 -Position : [1080.66, 1028.79] -Measurements : [1290.42, 163005, 0.151376, -0.800647] ---- -Label : 1 -Position : [324.001, 1028.87] -Measurements : [997.57, 206857, 0.829232, 0.116221] ---- -Label : 1 -Position : [883.836, 1028.89] -Measurements : [1301.99, 537376, 0.407466, -1.08298] ---- -Label : 1 -Position : [941.932, 1029.02] -Measurements : [1701.05, 509993, -0.448159, -1.15055] ---- -Label : 1 -Position : [856.671, 1029.06] -Measurements : [1398.6, 473694, 0.0240091, -1.35056] ---- -Label : 1 -Position : [763.886, 1029.21] -Measurements : [1895.26, 241352, 0.54383, -0.635985] ---- -Label : 1 -Position : [940.022, 1029.24] -Measurements : [1814.52, 390505, -0.638647, -0.609735] ---- -Label : 1 -Position : [880.454, 1029.34] -Measurements : [1686.67, 360723, 0.0448314, -0.593499] ---- -Label : 1 -Position : [856.826, 1029.5] -Measurements : [1398.6, 473694, 0.0240091, -1.35056] ---- -Label : 1 -Position : [1005.78, 1029.5] -Measurements : [1460.45, 253642, 0.0529343, -0.417337] ---- -Label : 1 -Position : [1260.13, 1029.62] -Measurements : [1903.15, 202993, -1.15059, 0.948008] ---- -Label : 1 -Position : [167.4, 1029.94] -Measurements : [1184.95, 299723, 0.890291, -0.132169] ---- -Label : 1 -Position : [877.518, 1029.95] -Measurements : [1681.92, 292992, 0.11127, -0.448425] ---- -Label : 0 -Position : [269.418, 1029.99] -Measurements : [1007.05, 33156.2, 1.00998, 0.401464] ---- -Label : 0 -Position : [242.957, 1030.17] -Measurements : [1255, 17424.4, 0.972226, 1.28589] ---- -Label : 1 -Position : [1085.1, 1030.21] -Measurements : [1213.74, 312211, 0.187014, -1.36812] ---- -Label : 1 -Position : [1082.17, 1030.22] -Measurements : [1386.25, 206264, -0.0311393, -0.962463] ---- -Label : 1 -Position : [857.55, 1030.27] -Measurements : [1387.95, 471130, 0.100029, -1.37031] ---- -Label : 1 -Position : [1080.94, 1030.34] -Measurements : [1387.24, 180290, 0.0585538, -0.683365] ---- -Label : 1 -Position : [935.021, 1030.51] -Measurements : [1781.97, 356160, -0.486212, -0.757765] ---- -Label : 1 -Position : [159.303, 1030.58] -Measurements : [1594.29, 338365, -0.0868325, -0.801627] ---- -Label : 1 -Position : [1265.33, 1030.69] -Measurements : [1695.76, 273317, -0.462513, -0.875079] ---- -Label : 1 -Position : [1077.03, 1031.25] -Measurements : [1282.05, 192334, 0.626232, 0.0199522] ---- -Label : 0 -Position : [238.223, 1031.41] -Measurements : [1242.49, 20201.5, 1.26403, 1.00798] ---- -Label : 1 -Position : [1133.58, 1031.57] -Measurements : [1138.15, 219688, 0.795919, -0.185524] ---- -Label : 1 -Position : [1007.2, 1031.7] -Measurements : [1587, 215822, -0.011973, -0.360132] ---- -Label : 1 -Position : [1053.89, 1031.7] -Measurements : [1632.77, 177635, -0.646424, 0.16489] ---- -Label : 1 -Position : [1261.45, 1031.75] -Measurements : [1730.4, 392720, -0.76864, -0.749569] ---- -Label : 1 -Position : [935.162, 1031.77] -Measurements : [1837.56, 326526, -0.571069, -0.575642] ---- -Label : 1 -Position : [987.652, 1031.91] -Measurements : [1094.94, 289525, 0.761332, -0.686408] ---- -Label : 0 -Position : [286.021, 1032.02] -Measurements : [809.406, 62497.4, -0.102264, -1.50675] ---- -Label : 1 -Position : [760.207, 1032.15] -Measurements : [1838.53, 420923, -0.207162, -0.858116] ---- -Label : 1 -Position : [875.645, 1032.28] -Measurements : [1668.09, 400150, -0.100869, -0.837956] ---- -Label : 1 -Position : [912.242, 1032.29] -Measurements : [1383.41, 495121, -0.0460259, -1.38845] ---- -Label : 1 -Position : [146.655, 1032.44] -Measurements : [976.944, 414042, 0.830243, -0.821906] ---- -Label : 1 -Position : [881.681, 1032.46] -Measurements : [1866.71, 517759, -0.461058, -0.74473] ---- -Label : 1 -Position : [770.849, 1032.48] -Measurements : [1482.36, 236619, -0.306471, -1.02113] ---- -Label : 1 -Position : [165.265, 1032.68] -Measurements : [1441.79, 419345, 0.471949, -1.10492] ---- -Label : 1 -Position : [1054.74, 1032.72] -Measurements : [1669.25, 137403, -0.218256, -0.588729] ---- -Label : 1 -Position : [167.408, 1032.75] -Measurements : [1186.03, 287936, 1.0184, -0.0205003] ---- -Label : 1 -Position : [983.03, 1032.93] -Measurements : [1266.25, 393476, 0.0919286, -1.56161] ---- -Label : 1 -Position : [1082.36, 1032.97] -Measurements : [1400.67, 269406, 0.146483, -0.878449] ---- -Label : 1 -Position : [160.744, 1033.02] -Measurements : [1654.36, 371864, -0.0919938, -1.01792] ---- -Label : 1 -Position : [641.956, 1033.32] -Measurements : [1798.7, 652497, -0.262156, -1.22929] ---- -Label : 1 -Position : [150.804, 1033.44] -Measurements : [1500.68, 423158, -0.400539, -0.989649] ---- -Label : 1 -Position : [913.804, 1033.56] -Measurements : [1552.28, 446671, -0.225919, -1.07268] ---- -Label : 1 -Position : [1126.38, 1033.72] -Measurements : [1046.26, 131728, -0.0776579, -1.03481] ---- -Label : 1 -Position : [915.27, 1033.85] -Measurements : [1469.71, 511551, -0.0580154, -1.31591] ---- -Label : 1 -Position : [938.285, 1033.87] -Measurements : [1870.49, 422287, -0.774424, -0.493746] ---- -Label : 1 -Position : [1129.3, 1034.03] -Measurements : [1170.67, 120077, 0.0862773, -0.443696] ---- -Label : 1 -Position : [155.112, 1034.04] -Measurements : [1866.39, 233003, -0.627476, 0.160293] ---- -Label : 1 -Position : [852.409, 1034.04] -Measurements : [896.976, 279769, 1.03476, 0.430181] ---- -Label : 1 -Position : [637.977, 1034.07] -Measurements : [1287.39, 779676, 0.484678, -1.39557] ---- -Label : 1 -Position : [1011.28, 1034.07] -Measurements : [1293.2, 338822, 0.0345925, -1.18182] ---- -Label : 1 -Position : [813.164, 1034.09] -Measurements : [975.84, 428454, 1.19036, -0.0895063] ---- -Label : 1 -Position : [1054.49, 1034.15] -Measurements : [1674.4, 160525, -0.293266, -0.353772] ---- -Label : 1 -Position : [937.974, 1034.15] -Measurements : [1875.16, 377493, -0.676508, -0.513657] ---- -Label : 1 -Position : [883.58, 1034.17] -Measurements : [1658.68, 762804, -0.0607206, -1.51013] ---- -Label : 1 -Position : [1080.12, 1034.44] -Measurements : [1502.55, 215302, -0.00869173, -0.625372] ---- -Label : 1 -Position : [1056.53, 1034.79] -Measurements : [1610.14, 153409, -0.0891148, -0.630557] ---- -Label : 1 -Position : [807.369, 1034.87] -Measurements : [1442.14, 509837, -0.0458841, -1.32057] ---- -Label : 1 -Position : [153.259, 1034.89] -Measurements : [1870.4, 198087, -0.768268, 0.704529] ---- -Label : 1 -Position : [1005.16, 1035.2] -Measurements : [1482.87, 282322, -0.213725, -0.869752] ---- -Label : 1 -Position : [929.824, 1035.22] -Measurements : [1538.04, 338878, 0.272465, -1.4371] ---- -Label : 1 -Position : [808.494, 1035.23] -Measurements : [1543.7, 523076, -0.0880556, -1.07464] ---- -Label : 1 -Position : [774.828, 1035.69] -Measurements : [969.554, 332057, 1.07781, -0.334684] ---- -Label : 1 -Position : [1260.87, 1035.75] -Measurements : [1154.42, 711934, 0.434936, -1.60446] ---- -Label : 1 -Position : [879.225, 1035.9] -Measurements : [1967.05, 492325, -0.558617, -0.502236] ---- -Label : 1 -Position : [638.094, 1035.98] -Measurements : [1348.38, 858416, 0.438947, -1.44851] ---- -Label : 1 -Position : [148.968, 1036.09] -Measurements : [1426.17, 489730, -0.176841, -1.53226] ---- -Label : 1 -Position : [912.592, 1036.42] -Measurements : [1529.38, 475893, -0.18154, -1.23275] ---- -Label : 1 -Position : [934.287, 1036.61] -Measurements : [1907.55, 314310, -0.838271, -0.0506724] ---- -Label : 1 -Position : [770.767, 1036.78] -Measurements : [1281.68, 328566, 0.208758, -1.37306] ---- -Label : 0 -Position : [239.025, 1036.85] -Measurements : [1293.66, 16028.4, 1.08529, 0.360448] ---- -Label : 1 -Position : [911.26, 1037.02] -Measurements : [1361.74, 564362, 0.162223, -1.46272] ---- -Label : 1 -Position : [913.631, 1037.12] -Measurements : [1528.85, 468633, -0.0826088, -1.29753] ---- -Label : 1 -Position : [983.695, 1037.27] -Measurements : [1497.89, 280322, -0.229051, -1.21935] ---- -Label : 1 -Position : [854.778, 1037.28] -Measurements : [795.104, 129969, 0.519423, -1.2366] ---- -Label : 1 -Position : [158.596, 1037.38] -Measurements : [1512.37, 464476, 0.205104, -1.25934] ---- -Label : 1 -Position : [627.62, 1037.41] -Measurements : [1154.03, 300318, -0.0207254, -1.47387] ---- -Label : 1 -Position : [981.554, 1037.71] -Measurements : [1611.52, 221362, -0.560527, -0.604136] ---- -Label : 1 -Position : [631.524, 1037.74] -Measurements : [1015.36, 333822, 0.481501, -1.47823] ---- -Label : 1 -Position : [979.753, 1037.84] -Measurements : [1644.13, 214514, -0.536419, -0.433746] ---- -Label : 1 -Position : [1055.53, 1038.25] -Measurements : [1397.33, 349448, -0.0910156, -1.19059] ---- -Label : 1 -Position : [155.898, 1038.33] -Measurements : [1628.8, 421966, -0.151455, -1.27603] ---- -Label : 1 -Position : [322.976, 1038.53] -Measurements : [1139.71, 247121, 0.663428, -0.28784] ---- -Label : 1 -Position : [1080.92, 1038.65] -Measurements : [1707.92, 285089, -0.225023, -0.595941] ---- -Label : 0 -Position : [289.017, 1038.73] -Measurements : [1082.72, 22752.4, -2.76782, 7.6198] ---- -Label : 1 -Position : [1007.61, 1039.07] -Measurements : [1363.53, 271353, 0.377418, -0.884089] ---- -Label : 1 -Position : [125.861, 1039.14] -Measurements : [651.268, 187701, 2.35487, 4.8285] ---- -Label : 1 -Position : [321.93, 1039.41] -Measurements : [1155.02, 217567, 0.711923, 0.0246444] ---- -Label : 1 -Position : [321.633, 1039.68] -Measurements : [1155.02, 217567, 0.711923, 0.0246444] ---- -Label : 1 -Position : [622.903, 1040.3] -Measurements : [713.301, 212250, 1.3097, 0.285215] ---- -Label : 1 -Position : [135.026, 1040.52] -Measurements : [1656.79, 358402, -0.325768, -0.925886] ---- -Label : 1 -Position : [806.446, 1040.97] -Measurements : [1907.42, 332193, 0.273794, -0.395531] ---- -Label : 1 -Position : [1079.3, 1040.99] -Measurements : [1769.55, 232067, -0.216072, -0.34918] ---- -Label : 1 -Position : [1129.3, 1040.99] -Measurements : [1334.24, 161281, 0.198236, -0.875272] ---- -Label : 1 -Position : [976.563, 1041.09] -Measurements : [1606.62, 295623, -0.690447, -0.437781] ---- -Label : 1 -Position : [1051.44, 1041.11] -Measurements : [1048.97, 312331, 0.602824, -0.978273] ---- -Label : 1 -Position : [1131.81, 1041.21] -Measurements : [1272.24, 167795, 0.541475, -0.911862] ---- -Label : 1 -Position : [853.113, 1041.47] -Measurements : [695.979, 130009, 0.928513, -0.739818] ---- -Label : 1 -Position : [138.728, 1041.72] -Measurements : [1528.77, 400717, -0.0632972, -1.30892] ---- -Label : 1 -Position : [932.269, 1041.78] -Measurements : [1658.61, 355829, -0.0486442, -0.947067] ---- -Label : 1 -Position : [1082.81, 1042.25] -Measurements : [1521.01, 459423, -0.109999, -1.35876] ---- -Label : 1 -Position : [617.439, 1042.25] -Measurements : [683.637, 107433, 1.58998, 3.88638] ---- -Label : 1 -Position : [1050.53, 1042.3] -Measurements : [1041.54, 326445, 0.664316, -0.842964] ---- -Label : 1 -Position : [805.073, 1042.66] -Measurements : [1821.69, 329339, 0.399071, -0.209585] ---- -Label : 1 -Position : [1003.57, 1042.9] -Measurements : [1194.3, 219613, 0.969682, 0.253967] ---- -Label : 1 -Position : [1006.7, 1042.96] -Measurements : [1234.41, 231249, 0.697452, -0.182632] ---- -Label : 1 -Position : [905.134, 1043.02] -Measurements : [855.489, 273619, 0.9507, -0.646299] ---- -Label : 1 -Position : [1126.51, 1043.19] -Measurements : [1514.7, 189144, -0.227025, -0.440306] ---- -Label : 1 -Position : [978.948, 1043.45] -Measurements : [1564.47, 298323, -0.429589, -0.908748] ---- -Label : 1 -Position : [1258.19, 1043.57] -Measurements : [867.112, 505976, 1.11019, -0.0693125] ---- -Label : 1 -Position : [129, 1043.77] -Measurements : [813.898, 180564, 0.982528, -0.177614] ---- -Label : 1 -Position : [800.931, 1043.81] -Measurements : [1365.89, 243373, 0.684081, 0.0443715] ---- -Label : 1 -Position : [809.213, 1044.01] -Measurements : [1440.64, 670291, 0.518934, -0.90807] ---- -Label : 1 -Position : [872.671, 1044.09] -Measurements : [1045.58, 211320, 0.219806, -0.887694] ---- -Label : 1 -Position : [1074.61, 1044.52] -Measurements : [1560.07, 251991, -0.761766, -0.360482] ---- -Label : 1 -Position : [865.912, 1044.84] -Measurements : [968.715, 60020.7, 0.143519, 0.358597] ---- -Label : 1 -Position : [1077.25, 1045.09] -Measurements : [1772.23, 238859, -0.522419, -0.0823446] ---- -Label : 1 -Position : [617.38, 1045.19] -Measurements : [954.533, 398827, 1.36306, 0.764816] ---- -Label : 1 -Position : [870.265, 1045.34] -Measurements : [1098.49, 168294, 0.155758, -0.537022] ---- -Label : 1 -Position : [907.724, 1045.44] -Measurements : [1015.01, 282826, 0.536376, -1.17681] ---- -Label : 1 -Position : [932.663, 1045.5] -Measurements : [1180.45, 349897, 0.663551, -0.326637] ---- -Label : 1 -Position : [1127.43, 1045.54] -Measurements : [1517.45, 179369, 0.137356, -0.868399] ---- -Label : 1 -Position : [982.624, 1045.68] -Measurements : [1229.86, 235079, 0.368175, -1.04298] ---- -Label : 1 -Position : [909.126, 1045.73] -Measurements : [1056.16, 263460, 0.519544, -1.18938] ---- -Label : 1 -Position : [134.316, 1045.82] -Measurements : [1433.67, 392368, 0.120719, -1.12437] ---- -Label : 1 -Position : [803.169, 1045.88] -Measurements : [1528.5, 261624, 0.239072, 0.147247] ---- -Label : 1 -Position : [871.946, 1045.89] -Measurements : [1121.3, 183930, 0.051699, -0.663256] ---- -Label : 1 -Position : [1126.84, 1045.91] -Measurements : [1542.98, 183047, 0.00208728, -0.749214] ---- -Label : 1 -Position : [937.331, 1046] -Measurements : [842.393, 271272, 1.59062, 1.84349] ---- -Label : 1 -Position : [1007.36, 1046.25] -Measurements : [1027.95, 126471, 0.395127, 0.0841846] ---- -Label : 1 -Position : [129.758, 1046.26] -Measurements : [835.443, 191020, 0.735665, -0.829876] ---- -Label : 1 -Position : [1050.22, 1046.32] -Measurements : [1166.11, 280870, 0.366481, -0.873089] ---- -Label : 1 -Position : [977.763, 1046.59] -Measurements : [1381.23, 416021, 0.00481041, -1.44734] ---- -Label : 1 -Position : [1051.71, 1046.62] -Measurements : [1128.98, 271536, 0.485715, -0.689879] ---- -Label : 1 -Position : [617.04, 1046.74] -Measurements : [1071.1, 491430, 1.08382, -0.103324] ---- -Label : 1 -Position : [317.32, 1047.15] -Measurements : [1051.57, 119132, 1.19844, 2.23283] ---- -Label : 1 -Position : [1079.83, 1047.45] -Measurements : [1709.19, 330201, -0.498402, -0.741726] ---- -Label : 1 -Position : [316.186, 1047.52] -Measurements : [1088.32, 93810.7, 1.79004, 3.65468] ---- -Label : 1 -Position : [1003.52, 1047.54] -Measurements : [1304.44, 198918, 0.956867, 0.606773] ---- -Label : 1 -Position : [615.033, 1047.83] -Measurements : [1035.56, 387285, 1.27463, 0.513677] ---- -Label : 1 -Position : [1256.13, 1048.14] -Measurements : [1293.1, 506495, 0.514867, -0.861389] ---- -Label : 1 -Position : [870.214, 1048.59] -Measurements : [1022.73, 216333, 0.219913, -0.987739] ---- -Label : 1 -Position : [1008.35, 1048.69] -Measurements : [957.903, 178701, 0.957115, 1.44583] ---- -Label : 1 -Position : [1046.83, 1049.01] -Measurements : [1520.06, 183308, -0.391479, -0.4481] ---- -Label : 1 -Position : [1079.76, 1049.24] -Measurements : [1565.78, 348606, -0.172452, -1.18587] ---- -Label : 1 -Position : [925.042, 1049.38] -Measurements : [987.199, 173607, 0.761037, -0.00246961] ---- -Label : 1 -Position : [997.141, 1049.77] -Measurements : [1508.23, 214924, 0.0442669, -0.34706] ---- -Label : 1 -Position : [1121.95, 1050.21] -Measurements : [1586.91, 392851, -0.360307, -0.806532] ---- -Label : 1 -Position : [910.547, 1050.22] -Measurements : [1105.9, 189706, 0.586327, -0.596418] ---- -Label : 1 -Position : [318.88, 1050.3] -Measurements : [952.444, 145415, 1.00934, 1.53209] ---- -Label : 1 -Position : [975.208, 1050.47] -Measurements : [1533.34, 656235, 0.105515, -1.41531] ---- -Label : 1 -Position : [798.224, 1050.5] -Measurements : [1153.53, 233636, 0.770138, -0.127555] ---- -Label : 0 -Position : [258.748, 1050.65] -Measurements : [1095.94, 8304.45, -0.799745, 0.674058] ---- -Label : 1 -Position : [803.218, 1050.67] -Measurements : [1384.5, 329222, 0.187012, -1.15357] ---- -Label : 1 -Position : [797.255, 1050.72] -Measurements : [1074.87, 174195, 0.767915, -0.0886368] ---- -Label : 1 -Position : [1121.3, 1050.76] -Measurements : [1586.91, 392851, -0.360307, -0.806532] ---- -Label : 1 -Position : [801.53, 1051.21] -Measurements : [1281.85, 334847, 0.510889, -0.923391] ---- -Label : 1 -Position : [1048.99, 1051.23] -Measurements : [1639.05, 160186, -0.186034, -0.907807] ---- -Label : 1 -Position : [1075.2, 1051.23] -Measurements : [1777.11, 225173, -0.42666, -0.343258] ---- -Label : 1 -Position : [1125.61, 1051.23] -Measurements : [1680.33, 256829, 0.313642, -0.747994] ---- -Label : 0 -Position : [288.453, 1051.36] -Measurements : [1109.3, 5293.05, -0.468844, -0.386417] ---- -Label : 1 -Position : [998.609, 1051.64] -Measurements : [1716.58, 219349, -0.309246, 0.065714] ---- -Label : 1 -Position : [115.87, 1051.99] -Measurements : [799.408, 133161, 0.768401, -0.92898] ---- -Label : 1 -Position : [610.417, 1052.16] -Measurements : [1142.33, 363484, 0.792953, -0.683519] ---- -Label : 1 -Position : [930.143, 1052.23] -Measurements : [1134.03, 277817, 0.422687, -1.06236] ---- -Label : 1 -Position : [906.668, 1052.28] -Measurements : [1341.53, 402028, 0.576998, -0.385132] ---- -Label : 1 -Position : [111.592, 1052.47] -Measurements : [1077.79, 205038, 0.550374, -0.120052] ---- -Label : 1 -Position : [1076.54, 1052.6] -Measurements : [1719.44, 267034, -0.481618, -0.39879] ---- -Label : 1 -Position : [928.127, 1052.67] -Measurements : [1100.97, 257146, 0.569195, -0.773579] ---- -Label : 1 -Position : [846.177, 1052.84] -Measurements : [964.73, 380438, 0.969626, -0.105411] ---- -Label : 1 -Position : [974.442, 1052.87] -Measurements : [1697.81, 604654, -0.248171, -1.27509] ---- -Label : 1 -Position : [865.223, 1052.9] -Measurements : [732.874, 61694.9, 0.568375, -0.298471] ---- -Label : 1 -Position : [1256.8, 1052.9] -Measurements : [1059.92, 589559, 0.929202, -0.525249] ---- -Label : 1 -Position : [972.573, 1053.33] -Measurements : [1837.58, 448769, -0.418098, -0.807762] ---- -Label : 1 -Position : [905.387, 1053.35] -Measurements : [1505.94, 495612, 0.458989, -0.72498] ---- -Label : 1 -Position : [972.479, 1053.35] -Measurements : [1837.58, 448769, -0.418098, -0.807762] ---- -Label : 1 -Position : [1070.35, 1053.57] -Measurements : [1412.66, 299370, 0.0755788, -1.06022] ---- -Label : 1 -Position : [1001.8, 1053.9] -Measurements : [1623.29, 318967, -0.107101, -0.908495] ---- -Label : 1 -Position : [1046.03, 1053.96] -Measurements : [1738.85, 193868, -0.540937, -0.185425] ---- -Label : 1 -Position : [929.796, 1054.1] -Measurements : [1217.79, 261489, 0.358849, -1.12273] ---- -Label : 1 -Position : [337.332, 1054.88] -Measurements : [850.507, 324075, 1.46102, 1.45049] ---- -Label : 1 -Position : [844.012, 1055] -Measurements : [1419.14, 510664, 0.266561, -1.12152] ---- -Label : 1 -Position : [105.448, 1055.03] -Measurements : [1094.18, 181039, 1.02743, 0.853446] ---- -Label : 1 -Position : [1127.23, 1055.08] -Measurements : [1594.68, 350975, 0.602476, -1.09504] ---- -Label : 1 -Position : [106.684, 1055.2] -Measurements : [1111.09, 176408, 0.994577, 0.791618] ---- -Label : 1 -Position : [1117.07, 1055.26] -Measurements : [1654.44, 484840, -0.658031, -0.876579] ---- -Label : 1 -Position : [1072.75, 1055.33] -Measurements : [1546.28, 313498, -0.0150045, -0.962835] ---- -Label : 1 -Position : [611.919, 1055.36] -Measurements : [1528.36, 490826, 0.133547, -1.3979] ---- -Label : 1 -Position : [850.808, 1055.79] -Measurements : [1153.16, 505734, 1.02158, -0.149594] ---- -Label : 1 -Position : [1049, 1055.81] -Measurements : [1702.35, 225970, -0.417514, -0.487913] ---- -Label : 0 -Position : [289.116, 1055.85] -Measurements : [1135.28, 5788.38, -0.00519308, -0.0597098] ---- -Label : 1 -Position : [1046.3, 1055.85] -Measurements : [1659.61, 300955, -0.571582, -0.577136] ---- -Label : 1 -Position : [997.856, 1055.89] -Measurements : [1727.6, 268656, -0.353362, -0.680182] ---- -Label : 1 -Position : [1048.17, 1056.15] -Measurements : [1632.04, 305645, -0.488434, -0.701371] ---- -Label : 1 -Position : [1068.69, 1056.52] -Measurements : [1336.91, 292278, 0.0955927, -1.21503] ---- -Label : 1 -Position : [997.79, 1056.56] -Measurements : [1748.74, 289518, -0.449271, -0.697178] ---- -Label : 1 -Position : [105.819, 1056.7] -Measurements : [1066.3, 142990, 1.07015, 1.20709] ---- -Label : 1 -Position : [98.792, 1057.08] -Measurements : [802.419, 177501, 1.07965, 0.648146] ---- -Label : 1 -Position : [904.654, 1057.1] -Measurements : [2022.07, 438824, -0.296728, -1.06199] ---- -Label : 1 -Position : [101.372, 1057.14] -Measurements : [974.655, 130285, 0.97067, 0.635444] ---- -Label : 1 -Position : [906.668, 1057.19] -Measurements : [1966.3, 443170, -0.0517302, -1.31557] ---- -Label : 1 -Position : [976.976, 1057.22] -Measurements : [1785.62, 347067, 0.0505175, -0.760573] ---- -Label : 1 -Position : [911.113, 1057.25] -Measurements : [1420.77, 441843, 1.32058, 0.458534] ---- -Label : 1 -Position : [926.929, 1057.38] -Measurements : [1042.01, 234798, 0.758304, -0.471581] ---- -Label : 1 -Position : [973.214, 1057.38] -Measurements : [2010.68, 228552, -0.293219, -0.0684569] ---- -Label : 1 -Position : [1121.93, 1057.38] -Measurements : [2000.37, 242978, -0.753109, -0.0060464] ---- -Label : 1 -Position : [339.872, 1057.47] -Measurements : [1148.04, 340716, 1.04136, 0.425993] ---- -Label : 1 -Position : [868.985, 1057.6] -Measurements : [784.432, 182482, 1.81052, 2.81234] ---- -Label : 1 -Position : [102.221, 1057.61] -Measurements : [1025.33, 125675, 0.91573, 0.506751] ---- -Label : 1 -Position : [841.688, 1057.8] -Measurements : [1294.57, 649347, 0.262355, -1.28919] ---- -Label : 1 -Position : [1126.57, 1057.87] -Measurements : [1595.36, 347265, 0.588473, -1.04231] ---- -Label : 1 -Position : [607.171, 1057.95] -Measurements : [1565.33, 337078, 0.124421, -0.827565] ---- -Label : 1 -Position : [868.796, 1058.07] -Measurements : [845.924, 203528, 1.6002, 1.73355] ---- -Label : 1 -Position : [993.941, 1058.13] -Measurements : [1508.46, 327185, 0.0190726, -1.05082] ---- -Label : 1 -Position : [924.641, 1058.15] -Measurements : [925.107, 153068, 1.08353, 0.886399] ---- -Label : 0 -Position : [207.424, 1058.21] -Measurements : [962.915, 7884.55, 0.396345, 0.364765] ---- -Label : 1 -Position : [340.703, 1058.28] -Measurements : [1207.9, 284350, 1.29453, 0.898262] ---- -Label : 1 -Position : [1069.29, 1058.31] -Measurements : [1519.54, 322567, -0.203577, -1.13118] ---- -Label : 1 -Position : [846.059, 1058.41] -Measurements : [1712.39, 476106, -0.0555056, -1.10709] ---- -Label : 1 -Position : [905.675, 1058.44] -Measurements : [2100.28, 379834, -0.342308, -1.08011] ---- -Label : 1 -Position : [800.302, 1058.58] -Measurements : [1219.53, 356753, 0.833432, -0.54805] ---- -Label : 1 -Position : [846.996, 1058.58] -Measurements : [1712.39, 476106, -0.0555056, -1.10709] ---- -Label : 1 -Position : [1121.44, 1058.67] -Measurements : [1911.98, 346773, -0.678545, -0.581628] ---- -Label : 1 -Position : [103.624, 1059.05] -Measurements : [994.706, 129850, 1.05942, 0.690652] ---- -Label : 1 -Position : [606.321, 1059.12] -Measurements : [1773.98, 283211, 0.150544, -0.804767] ---- -Label : 1 -Position : [996.486, 1059.13] -Measurements : [1671.17, 282950, -0.0334571, -0.997012] ---- -Label : 1 -Position : [968.705, 1059.56] -Measurements : [1725.68, 370500, -0.532943, -0.693264] ---- -Label : 1 -Position : [1119.06, 1059.83] -Measurements : [1708.38, 483007, -0.4506, -1.11343] ---- -Label : 1 -Position : [866.25, 1059.97] -Measurements : [867.421, 177349, 1.68383, 2.31091] ---- -Label : 1 -Position : [804.462, 1059.99] -Measurements : [1359.06, 438861, 0.542758, -1.20987] ---- -Label : 1 -Position : [999.118, 1060.01] -Measurements : [1454.32, 434362, 0.182151, -1.27538] ---- -Label : 1 -Position : [924.319, 1060.19] -Measurements : [970.069, 166881, 0.714521, -0.267998] ---- -Label : 1 -Position : [1071.11, 1060.24] -Measurements : [1524.65, 352321, -0.203653, -1.27576] ---- -Label : 1 -Position : [863.633, 1060.45] -Measurements : [780.231, 91256.6, 2.29349, 7.20465] ---- -Label : 1 -Position : [1069.23, 1060.56] -Measurements : [1477.95, 387995, -0.225492, -1.27019] ---- -Label : 1 -Position : [921.279, 1060.58] -Measurements : [885.65, 105641, 0.800119, 0.599259] ---- -Label : 1 -Position : [312.71, 1060.64] -Measurements : [1365.12, 221263, 0.879898, -0.505644] ---- -Label : 1 -Position : [849.731, 1060.8] -Measurements : [1515.81, 526526, 0.576047, -1.1026] ---- -Label : 1 -Position : [866.118, 1060.88] -Measurements : [864.166, 178458, 1.68781, 2.29674] ---- -Label : 1 -Position : [995.332, 1061.06] -Measurements : [1497.22, 291500, 0.422557, -0.754634] ---- -Label : 1 -Position : [903.559, 1061.06] -Measurements : [2125.98, 400561, -0.77346, -0.27881] ---- -Label : 1 -Position : [319.267, 1061.85] -Measurements : [971.91, 434783, 0.907669, -0.7131] ---- -Label : 1 -Position : [605.555, 1061.85] -Measurements : [1930.81, 240604, 0.0233634, -0.761725] ---- -Label : 1 -Position : [314.784, 1062.08] -Measurements : [1351.44, 315591, 0.322096, -1.01958] ---- -Label : 1 -Position : [799.932, 1062.09] -Measurements : [1679.64, 467193, 0.090277, -1.34986] ---- -Label : 1 -Position : [1119.52, 1062.16] -Measurements : [1320.5, 535895, 0.262037, -1.4792] ---- -Label : 0 -Position : [264.919, 1062.22] -Measurements : [947.521, 9754.69, -2.22606, 6.17138] ---- -Label : 1 -Position : [845.358, 1062.26] -Measurements : [1857.4, 361084, -0.216791, -0.73041] ---- -Label : 1 -Position : [610.995, 1062.44] -Measurements : [1566.65, 553475, 0.164027, -1.41697] ---- -Label : 1 -Position : [971.166, 1063.11] -Measurements : [1648.51, 277050, -0.0587585, -0.892408] ---- -Label : 1 -Position : [903.391, 1063.34] -Measurements : [2034.85, 437816, -0.604398, -0.73877] ---- -Label : 1 -Position : [1259.12, 1063.4] -Measurements : [1408, 480784, 0.0517758, -0.955122] ---- -Label : 1 -Position : [869.884, 1063.41] -Measurements : [859.995, 206160, 1.54423, 1.43863] ---- -Label : 1 -Position : [600.996, 1063.63] -Measurements : [1561.85, 299040, -0.108586, -0.62191] ---- -Label : 1 -Position : [792.851, 1063.67] -Measurements : [1300.18, 343930, 0.587613, -0.640732] ---- -Label : 1 -Position : [905.344, 1063.86] -Measurements : [1980.23, 477944, -0.338716, -1.22766] ---- -Label : 1 -Position : [866.677, 1064.28] -Measurements : [925.403, 225097, 1.11015, 0.174159] ---- -Label : 1 -Position : [925.29, 1064.75] -Measurements : [1024.01, 258943, 0.593828, -0.984644] ---- -Label : 1 -Position : [796.615, 1065.13] -Measurements : [1758.95, 279434, 0.159316, -0.738881] ---- -Label : 1 -Position : [845.523, 1065.26] -Measurements : [1644.56, 338287, 0.065939, -0.726038] ---- -Label : 1 -Position : [1260.22, 1065.34] -Measurements : [1726.87, 382837, 0.238911, -0.796858] ---- -Label : 1 -Position : [966.954, 1065.73] -Measurements : [1330.81, 283578, 0.341488, -0.602699] ---- -Label : 1 -Position : [1116.6, 1065.83] -Measurements : [1212.69, 517389, 0.32524, -1.53127] ---- -Label : 1 -Position : [994.103, 1065.98] -Measurements : [1482.39, 234906, 0.460918, -0.489004] ---- -Label : 0 -Position : [231.642, 1066.08] -Measurements : [848.298, 35588, 0.140787, -0.506194] ---- -Label : 1 -Position : [1264.43, 1066.37] -Measurements : [1894.16, 431908, -0.152023, -1.14118] ---- -Label : 1 -Position : [992.488, 1066.51] -Measurements : [1469.24, 246718, 0.326009, -0.548977] ---- -Label : 1 -Position : [902.572, 1066.62] -Measurements : [1937.24, 395620, -0.648701, -0.727676] ---- -Label : 1 -Position : [842.49, 1066.77] -Measurements : [1637.13, 347456, -0.126214, -0.368328] ---- -Label : 0 -Position : [289.664, 1066.88] -Measurements : [1471.52, 60326.6, 0.474587, -1.09782] ---- -Label : 1 -Position : [602.315, 1067] -Measurements : [1699.82, 300423, -0.113697, -0.517193] ---- -Label : 1 -Position : [998.833, 1067.04] -Measurements : [1295.64, 399196, 0.467405, -0.87565] ---- -Label : 1 -Position : [1068.52, 1067.27] -Measurements : [1026.09, 352227, 0.795086, -0.529614] ---- -Label : 1 -Position : [335.48, 1067.6] -Measurements : [1001.06, 223427, 0.538648, -0.846757] ---- -Label : 1 -Position : [898.804, 1067.67] -Measurements : [1749.79, 509874, -0.613197, -0.866149] ---- -Label : 1 -Position : [844.011, 1067.84] -Measurements : [1588.18, 319056, 0.176613, -0.452007] ---- -Label : 1 -Position : [968.298, 1068.02] -Measurements : [1186.48, 319544, 0.971109, 0.500699] ---- -Label : 1 -Position : [794.383, 1068.1] -Measurements : [1531.21, 369563, -0.146678, -0.79932] ---- -Label : 1 -Position : [862.431, 1068.25] -Measurements : [1164.19, 327143, 0.40999, -0.918946] ---- -Label : 1 -Position : [790.878, 1068.61] -Measurements : [1062.67, 268315, 0.437988, -0.950832] ---- -Label : 0 -Position : [180.523, 1068.69] -Measurements : [1071.55, 18919.2, 0.469124, -0.0707115] ---- -Label : 1 -Position : [844.631, 1068.79] -Measurements : [1465.66, 323926, 0.0957246, -0.738181] ---- -Label : 1 -Position : [600.989, 1069.08] -Measurements : [1365.89, 411326, 0.227273, -1.10557] ---- -Label : 1 -Position : [995.106, 1069.22] -Measurements : [1603.19, 308413, 0.183582, -1.20052] ---- -Label : 1 -Position : [860.674, 1069.33] -Measurements : [1285.42, 343648, 0.320842, -0.878393] ---- -Label : 1 -Position : [600.586, 1069.36] -Measurements : [1365.89, 411326, 0.227273, -1.10557] ---- -Label : 0 -Position : [276.915, 1069.5] -Measurements : [1030.63, 44566, -1.1906, 0.792699] ---- -Label : 1 -Position : [1116.19, 1069.66] -Measurements : [1524.84, 521870, -0.300372, -1.50815] ---- -Label : 1 -Position : [332.784, 1069.77] -Measurements : [857.081, 262337, 0.870197, -0.727657] ---- -Label : 1 -Position : [900.114, 1069.89] -Measurements : [1881.1, 263231, -0.563128, -0.26125] ---- -Label : 1 -Position : [794.567, 1070.05] -Measurements : [1281.75, 396428, 0.132021, -1.19865] ---- -Label : 1 -Position : [922.189, 1070.08] -Measurements : [1289, 453605, 0.249878, -1.479] ---- -Label : 1 -Position : [1112.63, 1070.3] -Measurements : [1687.14, 348641, -0.606228, -0.744031] ---- -Label : 1 -Position : [1114.23, 1070.35] -Measurements : [1746.72, 349510, -0.801723, -0.467484] ---- -Label : 1 -Position : [1114.58, 1070.41] -Measurements : [1746.72, 349510, -0.801723, -0.467484] ---- -Label : 1 -Position : [896.297, 1070.56] -Measurements : [1574.03, 471911, -0.441687, -1.05252] ---- -Label : 1 -Position : [843.719, 1070.87] -Measurements : [1229.55, 349929, 0.214774, -1.21616] ---- -Label : 1 -Position : [1040.39, 1070.89] -Measurements : [1013.16, 322562, 0.523158, -0.729431] ---- -Label : 1 -Position : [1066.19, 1070.89] -Measurements : [931.271, 200962, 0.558388, -1.13704] ---- -Label : 1 -Position : [967.427, 1071.23] -Measurements : [941.259, 131265, -0.0610348, -1.39455] ---- -Label : 1 -Position : [842.918, 1071.57] -Measurements : [1110.06, 378066, 0.457115, -1.1367] ---- -Label : 1 -Position : [338.822, 1071.67] -Measurements : [1018.08, 119680, 1.3749, 0.611555] ---- -Label : 1 -Position : [1253.36, 1071.74] -Measurements : [1539.84, 421758, -0.0912068, -1.44408] ---- -Label : 1 -Position : [1068.76, 1071.76] -Measurements : [830.833, 161066, 0.85298, -0.748251] ---- -Label : 1 -Position : [596.732, 1072.26] -Measurements : [1088.59, 238493, 0.256296, -1.36753] ---- -Label : 1 -Position : [970.785, 1072.27] -Measurements : [894.876, 123202, 0.502103, -0.646614] ---- -Label : 1 -Position : [994.922, 1072.53] -Measurements : [1782.24, 231276, -0.343096, -0.735451] ---- -Label : 1 -Position : [895.714, 1072.61] -Measurements : [1489.41, 469906, -0.35282, -1.16363] ---- -Label : 1 -Position : [866.36, 1072.77] -Measurements : [1229.22, 471682, 0.455838, -1.23022] ---- -Label : 1 -Position : [916.774, 1072.95] -Measurements : [1281.79, 415539, 0.486748, -1.14991] ---- -Label : 0 -Position : [286.474, 1073.27] -Measurements : [1494.5, 107251, 0.528237, -1.1887] ---- -Label : 1 -Position : [921.604, 1073.35] -Measurements : [1560.31, 507638, -0.086204, -1.25262] ---- -Label : 1 -Position : [960.695, 1073.5] -Measurements : [857.156, 267104, 0.795523, -0.712916] ---- -Label : 1 -Position : [842.382, 1073.51] -Measurements : [901.878, 272405, 0.770158, -0.837331] ---- -Label : 1 -Position : [861.612, 1073.58] -Measurements : [1770.69, 275464, -0.415215, -0.684394] ---- -Label : 1 -Position : [1257.74, 1073.64] -Measurements : [1933.22, 374694, -0.434486, -0.630972] ---- -Label : 1 -Position : [899.759, 1073.76] -Measurements : [1838.89, 257462, -0.325163, -0.402379] ---- -Label : 1 -Position : [1044.41, 1073.9] -Measurements : [1175.24, 465016, 0.940931, 0.0780993] ---- -Label : 1 -Position : [600.686, 1074.13] -Measurements : [1241.33, 275759, 0.0843598, -1.2792] ---- -Label : 1 -Position : [991.703, 1074.41] -Measurements : [1747.47, 203351, -0.254667, -0.48618] ---- -Label : 1 -Position : [1113.74, 1074.58] -Measurements : [1940.71, 182133, -1.0065, 0.714931] ---- -Label : 1 -Position : [792.051, 1074.67] -Measurements : [715.469, 228424, 1.44681, 0.596601] ---- -Label : 1 -Position : [899.295, 1074.81] -Measurements : [1835.52, 268824, -0.262589, -0.454564] ---- -Label : 1 -Position : [599.746, 1074.88] -Measurements : [1220.5, 269013, 0.0416882, -1.30075] ---- -Label : 1 -Position : [1038.78, 1075.17] -Measurements : [1631.37, 426967, 0.0229473, -0.664653] ---- -Label : 1 -Position : [966.322, 1075.34] -Measurements : [1158.12, 439663, 0.487083, -1.21011] ---- -Label : 1 -Position : [1037.3, 1075.37] -Measurements : [1547.85, 496089, 0.0398388, -0.83847] ---- -Label : 1 -Position : [1042.74, 1075.57] -Measurements : [1506.97, 438894, 0.491883, -0.674477] ---- -Label : 1 -Position : [1256.57, 1075.64] -Measurements : [1985.18, 305919, -0.749865, -0.148024] ---- -Label : 1 -Position : [315.651, 1075.87] -Measurements : [596.397, 101244, 2.07012, 3.22618] ---- -Label : 1 -Position : [77.8, 1076.02] -Measurements : [1929.62, 458453, -0.111483, -1.18215] ---- -Label : 1 -Position : [896.631, 1076.25] -Measurements : [1699.78, 271108, -0.550469, 0.140458] ---- -Label : 1 -Position : [916.334, 1076.8] -Measurements : [1403.13, 391279, 0.346963, -1.17856] ---- -Label : 1 -Position : [894.636, 1076.99] -Measurements : [1412.66, 425870, -0.290103, -1.1361] ---- -Label : 1 -Position : [965.431, 1077.04] -Measurements : [1439.73, 533332, -0.0946199, -1.43516] ---- -Label : 1 -Position : [993.069, 1077.31] -Measurements : [1643.59, 327515, -0.463382, -0.770623] ---- -Label : 1 -Position : [310.904, 1077.33] -Measurements : [927.341, 162883, 0.594919, -0.649925] ---- -Label : 1 -Position : [77.286, 1077.38] -Measurements : [1945.15, 439803, -0.099796, -1.20879] ---- -Label : 1 -Position : [333.001, 1077.42] -Measurements : [1039.98, 270648, 0.813768, -0.396275] ---- -Label : 1 -Position : [991.236, 1077.45] -Measurements : [1650.33, 249390, -0.382364, -0.559288] ---- -Label : 1 -Position : [987.44, 1077.69] -Measurements : [1573.01, 233269, -0.163239, -0.518413] ---- -Label : 1 -Position : [73.2249, 1077.84] -Measurements : [1438.74, 626886, 0.307536, -1.11043] ---- -Label : 1 -Position : [920.375, 1077.86] -Measurements : [1738.94, 342593, -0.0267431, -0.827248] ---- -Label : 1 -Position : [1039.16, 1077.86] -Measurements : [1547.48, 514159, 0.0941747, -1.05196] ---- -Label : 1 -Position : [920.966, 1077.86] -Measurements : [1738.94, 342593, -0.0267431, -0.827248] ---- -Label : 1 -Position : [599.358, 1077.96] -Measurements : [966.224, 232590, 0.643817, -1.08672] ---- -Label : 0 -Position : [214.447, 1078.07] -Measurements : [721.977, 29834.3, -0.0459263, -1.38373] ---- -Label : 1 -Position : [311.36, 1078.2] -Measurements : [866.952, 197828, 0.939155, -0.265792] ---- -Label : 1 -Position : [967.904, 1078.26] -Measurements : [1397.09, 541304, 0.181655, -1.38845] ---- -Label : 1 -Position : [860.383, 1078.49] -Measurements : [1567.44, 521605, -0.154939, -1.54392] ---- -Label : 1 -Position : [861.111, 1078.54] -Measurements : [1595.14, 513244, -0.210322, -1.52303] ---- -Label : 1 -Position : [894.835, 1078.89] -Measurements : [1437.07, 431862, -0.355293, -1.14035] ---- -Label : 1 -Position : [896.018, 1078.9] -Measurements : [1690.76, 263301, -0.484804, -0.0525624] ---- -Label : 1 -Position : [1257.2, 1078.93] -Measurements : [2076.1, 359988, -0.501825, -0.368702] ---- -Label : 1 -Position : [840.602, 1079.54] -Measurements : [755.837, 189173, 1.54833, 1.52975] ---- -Label : 1 -Position : [920.037, 1079.92] -Measurements : [1582.08, 431210, 0.214176, -1.04835] ---- -Label : 1 -Position : [331.896, 1080.4] -Measurements : [1079.64, 292382, 0.545597, -0.813138] ---- -Label : 1 -Position : [837.166, 1080.7] -Measurements : [869.584, 259128, 1.00008, -0.32103] ---- -Label : 1 -Position : [917.098, 1080.72] -Measurements : [1234.31, 458614, 0.707147, -0.681752] ---- -Label : 1 -Position : [858.3, 1081.12] -Measurements : [1244.4, 442540, 0.652034, -0.968102] ---- -Label : 1 -Position : [1111.28, 1081.13] -Measurements : [1994.06, 277345, -0.218568, -0.189735] ---- -Label : 1 -Position : [857.654, 1081.17] -Measurements : [1188.35, 401978, 0.80195, -0.655809] ---- -Label : 1 -Position : [987.55, 1081.54] -Measurements : [1686.29, 203534, -0.465899, -0.140304] ---- -Label : 1 -Position : [920.487, 1082.01] -Measurements : [1183.15, 471970, 1.06077, 0.191637] ---- -Label : 0 -Position : [257.478, 1082.03] -Measurements : [1124.28, 24691.8, -0.74802, 1.9546] ---- -Label : 1 -Position : [1258.56, 1082.25] -Measurements : [1682.68, 660515, 0.225929, -1.26408] ---- -Label : 1 -Position : [987.201, 1082.33] -Measurements : [1754.46, 190202, -0.0437528, -0.751095] ---- -Label : 1 -Position : [1114.23, 1082.56] -Measurements : [1754.38, 495281, -0.0284473, -1.2201] ---- -Label : 1 -Position : [990.889, 1082.89] -Measurements : [1656.11, 317262, -0.523784, -0.681794] ---- -Label : 1 -Position : [896.428, 1083] -Measurements : [1336.07, 490480, 0.171446, -1.22902] ---- -Label : 1 -Position : [963.383, 1083.18] -Measurements : [2234.85, 198235, -0.567996, 0.269718] ---- -Label : 1 -Position : [894.069, 1083.46] -Measurements : [1033.45, 480487, 0.688529, -0.967521] ---- -Label : 1 -Position : [900.901, 1083.68] -Measurements : [1317.95, 372376, 0.568797, -0.575312] ---- -Label : 1 -Position : [1254.56, 1083.89] -Measurements : [1192.77, 386288, 0.857423, -0.620612] ---- -Label : 1 -Position : [331.163, 1084.4] -Measurements : [1143.3, 249384, 0.579623, -0.684709] ---- -Label : 1 -Position : [967.159, 1084.82] -Measurements : [1895.45, 510439, -0.0225459, -1.42963] ---- -Label : 1 -Position : [963.393, 1084.97] -Measurements : [2306.45, 209188, -0.657404, 0.575012] ---- -Label : 1 -Position : [1110.05, 1085.23] -Measurements : [1925.52, 361631, -0.28424, -0.484604] ---- -Label : 1 -Position : [839.129, 1085.34] -Measurements : [863.717, 179706, 1.10735, 0.620948] ---- -Label : 1 -Position : [1115.81, 1085.36] -Measurements : [1520.48, 515730, 0.589413, -1.0736] ---- -Label : 0 -Position : [219.044, 1085.89] -Measurements : [1206.72, 30036.2, -0.773169, -0.764504] ---- -Label : 1 -Position : [1105.82, 1085.89] -Measurements : [1409.69, 559898, 0.0741824, -1.21507] ---- -Label : 1 -Position : [858.335, 1086.28] -Measurements : [1309.72, 398950, 0.703431, -0.444962] ---- -Label : 1 -Position : [914.356, 1086.63] -Measurements : [1140.36, 355302, 0.590514, -0.980791] ---- -Label : 1 -Position : [1111.94, 1086.98] -Measurements : [1880.54, 396975, -0.210773, -0.79487] ---- -Label : 1 -Position : [310.231, 1087.07] -Measurements : [1009.42, 515162, 1.00145, -0.545091] ---- -Label : 1 -Position : [1105, 1087.36] -Measurements : [1260.09, 549398, 0.27972, -1.21554] ---- -Label : 1 -Position : [307.832, 1087.57] -Measurements : [1279.73, 432804, 0.57088, -0.97877] ---- -Label : 1 -Position : [989.188, 1087.69] -Measurements : [1723.64, 349520, -0.349601, -0.572529] ---- -Label : 1 -Position : [962.154, 1088.1] -Measurements : [2283.52, 271865, -0.59973, -0.166411] ---- -Label : 0 -Position : [192.306, 1088.22] -Measurements : [928.518, 48296.5, 0.110534, -0.0699811] ---- -Label : 1 -Position : [1027.18, 1088.36] -Measurements : [775.299, 246501, 0.794162, -0.850706] ---- -Label : 1 -Position : [856.069, 1088.57] -Measurements : [1638.53, 389914, 0.132686, -0.915477] ---- -Label : 1 -Position : [913.822, 1089.32] -Measurements : [1025.2, 385520, 0.833213, -0.806066] ---- -Label : 1 -Position : [994.122, 1089.91] -Measurements : [1095.31, 549862, 0.982881, -0.422543] ---- -Label : 1 -Position : [988.788, 1089.99] -Measurements : [1689.6, 319573, -0.0963518, -0.663632] ---- -Label : 1 -Position : [309.636, 1090.01] -Measurements : [1036.69, 511944, 1.00362, -0.492388] ---- -Label : 1 -Position : [957.325, 1090.26] -Measurements : [1818.3, 586214, -0.51928, -0.803871] ---- -Label : 1 -Position : [861.099, 1090.5] -Measurements : [1317.37, 630893, 0.594882, -1.03761] ---- -Label : 1 -Position : [856.483, 1090.61] -Measurements : [1793.77, 390805, -0.0429731, -0.853561] ---- -Label : 1 -Position : [1032.9, 1090.67] -Measurements : [900.749, 498700, 1.15203, -0.130886] ---- -Label : 1 -Position : [3.83146, 1091.01] -Measurements : [1331.57, 196835, 1.24546, 0.672271] ---- -Label : 1 -Position : [1028.51, 1091.37] -Measurements : [1172.9, 513420, 0.428752, -1.01562] ---- -Label : 1 -Position : [1108.41, 1091.37] -Measurements : [1351.51, 535827, 0.399753, -0.853249] ---- -Label : 0 -Position : [142.98, 1091.38] -Measurements : [1070, 9078.42, -0.88087, 0.923298] ---- -Label : 1 -Position : [856.697, 1091.6] -Measurements : [1807.37, 393397, -0.0973794, -0.900549] ---- -Label : 1 -Position : [985.092, 1091.78] -Measurements : [1734.76, 265564, -0.221991, -0.595334] ---- -Label : 1 -Position : [607.864, 1091.89] -Measurements : [880.579, 542044, 0.951025, -0.64557] ---- -Label : 1 -Position : [1262.18, 1091.98] -Measurements : [548.588, 93782.4, 1.38609, 1.61379] ---- -Label : 1 -Position : [1055.57, 1092.17] -Measurements : [1272.1, 344471, 0.139039, -1.47984] ---- -Label : 1 -Position : [991.827, 1092.28] -Measurements : [1418.46, 580540, 0.232185, -1.37755] ---- -Label : 1 -Position : [964.894, 1093.12] -Measurements : [1877.96, 578463, 0.104338, -1.51049] ---- -Label : 1 -Position : [960.106, 1093.42] -Measurements : [2092.33, 391258, -0.450804, -0.445903] ---- -Label : 1 -Position : [916.242, 1093.78] -Measurements : [1121.09, 348810, 0.533025, -1.0389] ---- -Label : 1 -Position : [854.581, 1093.88] -Measurements : [1592.07, 604030, 0.00240911, -1.34817] ---- -Label : 1 -Position : [958.886, 1094.17] -Measurements : [2009.72, 343332, -0.533888, -0.0558652] ---- -Label : 1 -Position : [892.169, 1094.2] -Measurements : [1186.33, 351057, 0.134356, -1.35697] ---- -Label : 1 -Position : [985.902, 1094.38] -Measurements : [1843.62, 222345, -0.128628, -0.414821] ---- -Label : 0 -Position : [259.044, 1094.82] -Measurements : [753.567, 68497.3, 0.272122, -1.48026] ---- -Label : 1 -Position : [853.83, 1094.88] -Measurements : [1409.6, 714758, 0.297433, -1.47687] ---- -Label : 1 -Position : [1269.54, 1094.96] -Measurements : [976.922, 240002, 0.417818, -0.905896] ---- -Label : 1 -Position : [7.656, 1094.97] -Measurements : [1485.79, 395766, 0.0283435, -1.18202] ---- -Label : 1 -Position : [855.503, 1095.08] -Measurements : [1441.48, 743631, 0.256967, -1.49925] ---- -Label : 1 -Position : [1107.51, 1095.19] -Measurements : [814.851, 377390, 1.44917, 0.534495] ---- -Label : 1 -Position : [888.779, 1095.35] -Measurements : [1335.52, 308509, -0.323976, -1.03263] ---- -Label : 1 -Position : [1267.17, 1095.35] -Measurements : [967.295, 218363, 0.461424, -0.676289] ---- -Label : 1 -Position : [613.408, 1095.48] -Measurements : [1703.96, 613294, -0.213562, -1.43754] ---- -Label : 1 -Position : [1058.41, 1095.88] -Measurements : [1524.43, 347279, -0.191113, -1.3013] ---- -Label : 0 -Position : [96.7612, 1096.08] -Measurements : [1269.01, 17415.6, 0.752649, 1.23866] ---- -Label : 1 -Position : [986.304, 1096.55] -Measurements : [1694.49, 375471, -0.272519, -0.83505] ---- -Label : 1 -Position : [609.918, 1096.6] -Measurements : [1610.28, 542468, -0.270672, -1.13973] ---- -Label : 0 -Position : [247.757, 1096.94] -Measurements : [1293.76, 71110.3, 0.607419, -0.764484] ---- -Label : 1 -Position : [327, 1097] -Measurements : [784.893, 157105, 1.30623, 1.11276] ---- -Label : 1 -Position : [1030.27, 1097.32] -Measurements : [1681.5, 376593, -0.320268, -1.04321] ---- -Label : 1 -Position : [984.682, 1097.52] -Measurements : [1761.07, 329786, -0.474931, -0.382438] ---- -Label : 1 -Position : [6.47254, 1097.54] -Measurements : [1484.49, 401640, 0.00481478, -1.20688] ---- -Label : 1 -Position : [326.734, 1097.57] -Measurements : [750.509, 165709, 1.39889, 1.17512] ---- -Label : 1 -Position : [912.622, 1097.71] -Measurements : [1143.47, 359919, 0.249579, -1.42336] ---- -Label : 1 -Position : [889.055, 1097.74] -Measurements : [1456.72, 196778, -0.348067, -0.47207] ---- -Label : 1 -Position : [303.904, 1097.82] -Measurements : [1087.77, 189526, 0.66936, -0.24755] ---- -Label : 0 -Position : [253.41, 1098.11] -Measurements : [895.033, 67286.7, -0.435044, -1.11304] ---- -Label : 1 -Position : [956.83, 1098.34] -Measurements : [1539.5, 616414, 0.00355931, -1.40037] ---- -Label : 0 -Position : [168.583, 1098.67] -Measurements : [752.491, 43880, 0.0205883, -1.39981] ---- -Label : 1 -Position : [985.723, 1098.98] -Measurements : [1657.69, 404132, -0.281057, -0.918316] ---- -Label : 1 -Position : [913.822, 1099.15] -Measurements : [1163.75, 338017, 0.246734, -1.38487] ---- -Label : 0 -Position : [270.11, 1099.24] -Measurements : [1096.86, 10493.4, 0.281709, 0.572445] ---- -Label : 1 -Position : [858.791, 1099.45] -Measurements : [787.524, 428708, 2.04554, 3.10989] ---- -Label : 1 -Position : [1060.11, 1099.56] -Measurements : [1514.94, 429286, -0.074932, -1.28052] ---- -Label : 0 -Position : [134.613, 1099.81] -Measurements : [973.458, 6331.39, -0.52856, -0.335983] ---- -Label : 1 -Position : [917.793, 1100.11] -Measurements : [1094.8, 299121, 0.518578, -1.10227] ---- -Label : 1 -Position : [890.983, 1100.11] -Measurements : [1400.35, 161844, 0.074681, -0.84253] ---- -Label : 1 -Position : [1359.6, 1100.5] -Measurements : [1774.64, 377057, -0.788745, -0.456058] ---- -Label : 1 -Position : [309.43, 1100.51] -Measurements : [559.242, 82491, 2.59435, 6.89053] ---- -Label : 1 -Position : [975.45, 1100.52] -Measurements : [1073.3, 233622, 0.609561, -0.584929] ---- -Label : 1 -Position : [324.58, 1100.56] -Measurements : [537.909, 48414.5, 2.28277, 5.78213] ---- -Label : 1 -Position : [978.538, 1100.79] -Measurements : [1282.55, 392357, 0.334611, -0.943155] ---- -Label : 1 -Position : [1029.74, 1100.79] -Measurements : [1784.61, 332989, -0.481679, -0.8367] ---- -Label : 1 -Position : [1055.13, 1100.79] -Measurements : [1793.87, 165248, -0.0695641, -0.163157] ---- -Label : 1 -Position : [958.643, 1101.01] -Measurements : [1300.85, 551935, 0.485265, -1.15511] ---- -Label : 1 -Position : [1374.05, 1101.19] -Measurements : [1659.42, 357622, -0.350888, -0.380255] ---- -Label : 1 -Position : [304.76, 1101.39] -Measurements : [1006.51, 251423, 0.519497, -1.10284] ---- -Label : 1 -Position : [887.826, 1101.43] -Measurements : [1458.54, 187384, -0.414354, -0.208829] ---- -Label : 1 -Position : [1366.24, 1101.9] -Measurements : [1712.72, 299374, -0.212772, -0.633687] ---- -Label : 1 -Position : [974.083, 1101.96] -Measurements : [959.43, 184929, 0.758253, -0.131308] ---- -Label : 1 -Position : [1370.64, 1101.99] -Measurements : [1396.58, 248339, -0.316641, -0.334658] ---- -Label : 1 -Position : [1058.75, 1102.49] -Measurements : [1628.46, 302853, -0.188964, -0.753754] ---- -Label : 1 -Position : [1.57639, 1102.61] -Measurements : [1601.33, 289616, -0.219549, -0.721911] ---- -Label : 1 -Position : [1351.91, 1102.71] -Measurements : [1484.21, 352827, -0.0893716, -0.946487] ---- -Label : 1 -Position : [1374.8, 1102.88] -Measurements : [1738.75, 288032, -0.372391, -0.0228555] ---- -Label : 1 -Position : [953.439, 1103.15] -Measurements : [984.832, 346054, 0.856744, -0.588939] ---- -Label : 0 -Position : [160.971, 1103.19] -Measurements : [724.351, 44779.5, -0.059758, -1.40541] ---- -Label : 0 -Position : [207.841, 1103.28] -Measurements : [1796.71, 54799.9, -0.671429, -0.369486] ---- -Label : 0 -Position : [108.015, 1103.47] -Measurements : [1269.7, 112492, 1.16842, 0.816407] ---- -Label : 0 -Position : [107.22, 1103.59] -Measurements : [1285.44, 109878, 1.12114, 0.730062] ---- -Label : 1 -Position : [1026.96, 1103.87] -Measurements : [1777.23, 320502, -0.294373, -0.329193] ---- -Label : 1 -Position : [890.33, 1104.27] -Measurements : [1299.04, 187758, 0.438932, -0.610869] ---- -Label : 1 -Position : [1362.6, 1104.36] -Measurements : [1950.16, 219665, -0.46113, -0.819057] ---- -Label : 1 -Position : [1383.49, 1104.36] -Measurements : [1244.92, 331576, 1.1062, 0.490336] ---- -Label : 1 -Position : [1382.66, 1104.39] -Measurements : [1401.5, 352386, 0.886507, -0.481211] ---- -Label : 1 -Position : [1354.91, 1104.62] -Measurements : [1682.52, 273612, -0.373785, -0.51851] ---- -Label : 1 -Position : [1059.7, 1104.76] -Measurements : [1350.82, 406200, 0.37374, -1.02033] ---- -Label : 1 -Position : [1368.34, 1104.77] -Measurements : [1691.7, 200827, 0.368456, -0.26652] ---- -Label : 1 -Position : [1023.87, 1104.96] -Measurements : [1458, 389818, -0.209666, -0.829614] ---- -Label : 1 -Position : [1025.89, 1105.49] -Measurements : [1756.79, 279987, -0.117236, -0.0488144] ---- -Label : 1 -Position : [8.95123, 1105.63] -Measurements : [1303.79, 454884, 0.291148, -1.36364] ---- -Label : 1 -Position : [1358.7, 1105.7] -Measurements : [2031.7, 158278, -0.423964, -0.477682] ---- -Label : 1 -Position : [5.096, 1105.72] -Measurements : [1570.48, 340261, -0.103748, -1.17403] ---- -Label : 1 -Position : [906.602, 1105.98] -Measurements : [964.055, 268656, 0.725827, -0.919944] ---- -Label : 1 -Position : [1376.12, 1106] -Measurements : [1828.25, 224641, -0.0527603, -0.740408] ---- -Label : 1 -Position : [1027.23, 1106.06] -Measurements : [1864.37, 211691, 0.211352, -0.57113] ---- -Label : 1 -Position : [1054.68, 1106.47] -Measurements : [1572.47, 307838, -0.072663, -0.763482] ---- -Label : 1 -Position : [1343.89, 1106.63] -Measurements : [981.832, 344030, 0.488675, -1.10683] ---- -Label : 1 -Position : [1347.04, 1106.82] -Measurements : [1366.16, 267692, -0.259933, -0.695874] ---- -Label : 1 -Position : [1101.96, 1107.06] -Measurements : [693.533, 246960, 1.72661, 1.89091] ---- -Label : 1 -Position : [1297.39, 1107.21] -Measurements : [1697.71, 187214, -0.204008, -0.379521] ---- -Label : 1 -Position : [1366.5, 1107.48] -Measurements : [1897.71, 183652, 0.0371842, -1.19696] ---- -Label : 1 -Position : [1280.99, 1107.58] -Measurements : [1486.57, 370590, -0.40729, -0.873565] ---- -Label : 1 -Position : [956.079, 1107.69] -Measurements : [1066.09, 285122, 0.601048, -0.64029] ---- -Label : 1 -Position : [1388.23, 1107.98] -Measurements : [735.539, 93974.7, 0.727868, -1.10259] ---- -Label : 1 -Position : [1286.68, 1108] -Measurements : [1931.54, 412761, -0.216404, -1.05659] ---- -Label : 1 -Position : [1278.63, 1108.05] -Measurements : [1336.12, 378464, -0.312573, -1.35284] ---- -Label : 1 -Position : [1354, 1108.05] -Measurements : [1738.64, 198563, -0.142728, -0.353238] ---- -Label : 1 -Position : [1045.38, 1108.09] -Measurements : [1177.11, 274813, 0.64846, -0.664975] ---- -Label : 1 -Position : [1286.83, 1108.46] -Measurements : [1931.06, 413266, -0.226095, -1.04297] ---- -Label : 1 -Position : [1053.66, 1108.46] -Measurements : [1422.39, 325971, 0.100455, -1.05721] ---- -Label : 1 -Position : [1104.34, 1108.46] -Measurements : [575.281, 57501.1, 1.22683, 1.04365] ---- -Label : 1 -Position : [946.603, 1108.5] -Measurements : [782.057, 193687, 1.07718, 0.646128] ---- -Label : 1 -Position : [1054.17, 1108.78] -Measurements : [1383.63, 338687, 0.129883, -1.06391] ---- -Label : 1 -Position : [1333.11, 1108.87] -Measurements : [1033.58, 287961, 0.39674, -1.13897] ---- -Label : 1 -Position : [10.8959, 1108.96] -Measurements : [1170.48, 463215, 0.493087, -1.38174] ---- -Label : 1 -Position : [1028.03, 1108.97] -Measurements : [1773.71, 216997, 0.405007, -0.17] ---- -Label : 1 -Position : [1052.52, 1109.13] -Measurements : [1367.04, 357078, 0.155066, -1.24615] ---- -Label : 1 -Position : [956.372, 1109.34] -Measurements : [1172.45, 242434, 0.337028, -0.490947] ---- -Label : 1 -Position : [1289.57, 1109.87] -Measurements : [1979.6, 404496, -0.406364, -0.864684] ---- -Label : 1 -Position : [978.567, 1109.96] -Measurements : [1150.55, 377732, 0.396928, -1.21534] ---- -Label : 1 -Position : [911.574, 1110.01] -Measurements : [845.849, 213549, 1.41013, 0.460357] ---- -Label : 1 -Position : [908.039, 1110.16] -Measurements : [945.205, 241040, 0.875315, -0.74] ---- -Label : 1 -Position : [1049.76, 1110.16] -Measurements : [1329.51, 413382, 0.208955, -1.4339] ---- -Label : 1 -Position : [1101.37, 1110.57] -Measurements : [995.652, 389863, 0.814415, -0.643937] ---- -Label : 1 -Position : [1324.85, 1110.69] -Measurements : [884.812, 314874, 1.11923, -0.151081] ---- -Label : 1 -Position : [1337.67, 1110.81] -Measurements : [957.856, 354605, 0.610579, -1.23341] ---- -Label : 1 -Position : [7.656, 1110.84] -Measurements : [1562, 411152, -0.244827, -1.25374] ---- -Label : 1 -Position : [978.49, 1110.98] -Measurements : [1232.67, 377358, 0.163689, -1.34218] ---- -Label : 1 -Position : [612.892, 1111.5] -Measurements : [864.653, 307860, 0.687751, -1.14504] ---- -Label : 1 -Position : [1096.4, 1111.57] -Measurements : [1354.82, 395499, 0.0452553, -1.24968] ---- -Label : 1 -Position : [951.457, 1111.8] -Measurements : [1278.37, 129893, 0.122527, 0.827308] ---- -Label : 1 -Position : [1025.59, 1111.8] -Measurements : [1434.87, 383222, 0.206401, -0.280155] ---- -Label : 1 -Position : [1307.06, 1112.04] -Measurements : [1687.16, 264750, 0.130994, -1.141] ---- -Label : 1 -Position : [2.80576, 1112.05] -Measurements : [1442.89, 286329, 0.0951319, -1.16083] ---- -Label : 1 -Position : [1293.79, 1112.15] -Measurements : [1753.35, 306211, -0.230339, -0.333576] ---- -Label : 1 -Position : [1280.12, 1112.24] -Measurements : [1545.92, 294644, -0.352696, -0.902354] ---- -Label : 1 -Position : [618.399, 1112.39] -Measurements : [1400.61, 378591, -0.269551, -1.18181] ---- -Label : 1 -Position : [1328.58, 1112.93] -Measurements : [796.678, 196306, 1.02998, -0.154111] ---- -Label : 1 -Position : [617.7, 1113.39] -Measurements : [1425.42, 362603, -0.337889, -1.06499] ---- -Label : 0 -Position : [130.119, 1113.8] -Measurements : [984.168, 59335, 0.30838, -1.12156] ---- -Label : 1 -Position : [8.58797, 1113.86] -Measurements : [1536.36, 404599, -0.164655, -1.29883] ---- -Label : 1 -Position : [956.635, 1113.88] -Measurements : [1268.47, 153921, 0.618902, -0.11014] ---- -Label : 1 -Position : [984.364, 1114.12] -Measurements : [1046.4, 337437, 0.667562, -0.749976] ---- -Label : 0 -Position : [248.516, 1114.17] -Measurements : [1113.12, 11579.1, -1.39855, 3.19304] ---- -Label : 1 -Position : [1101.55, 1114.5] -Measurements : [1282.52, 374272, 0.506245, -0.888592] ---- -Label : 1 -Position : [1320.41, 1114.6] -Measurements : [1032.15, 270371, 0.861253, -0.49313] ---- -Label : 1 -Position : [948.112, 1114.65] -Measurements : [1270.24, 179928, -0.104498, -0.519677] ---- -Label : 1 -Position : [891.655, 1114.67] -Measurements : [1530.64, 390562, -0.0528693, -1.10978] ---- -Label : 1 -Position : [1295.07, 1114.68] -Measurements : [1653.16, 179768, -0.267496, -0.691445] ---- -Label : 1 -Position : [1302.8, 1115.01] -Measurements : [1648.35, 236677, -0.464077, -1.00253] ---- -Label : 1 -Position : [1098.09, 1115.08] -Measurements : [1475.44, 305910, 0.0457305, -0.926588] ---- -Label : 1 -Position : [1302.74, 1115.3] -Measurements : [1648.35, 236677, -0.464077, -1.00253] ---- -Label : 1 -Position : [296.146, 1115.3] -Measurements : [1233.36, 173292, 0.214674, -0.832506] ---- -Label : 0 -Position : [260.476, 1115.4] -Measurements : [823.993, 24804.4, -0.332099, -0.353432] ---- -Label : 1 -Position : [894.226, 1115.45] -Measurements : [1443.88, 406293, 0.214301, -1.19304] ---- -Label : 1 -Position : [320.12, 1115.73] -Measurements : [1070.28, 292634, 0.670746, -0.554849] ---- -Label : 1 -Position : [1302.22, 1115.74] -Measurements : [1648.35, 236677, -0.464077, -1.00253] ---- -Label : 1 -Position : [974.292, 1115.86] -Measurements : [1336.8, 240706, -0.242379, -0.928976] ---- -Label : 1 -Position : [1310.58, 1116.24] -Measurements : [1252.35, 204340, 0.579078, -0.194194] ---- -Label : 1 -Position : [1024.84, 1116.43] -Measurements : [925.682, 275505, 0.602451, -1.18428] ---- -Label : 1 -Position : [953.459, 1116.57] -Measurements : [1343.78, 154165, 0.183803, -0.887349] ---- -Label : 1 -Position : [1315.21, 1116.59] -Measurements : [1089.48, 148798, 0.326079, -0.771989] ---- -Label : 1 -Position : [621.295, 1116.65] -Measurements : [1077.61, 392418, 0.611573, -1.22381] ---- -Label : 1 -Position : [950.638, 1116.71] -Measurements : [1398.97, 142219, -0.0764231, -0.526] ---- -Label : 1 -Position : [297.592, 1116.75] -Measurements : [1148.73, 207589, 0.288315, -1.13186] ---- -Label : 1 -Position : [7.144, 1116.98] -Measurements : [1672.28, 250227, -0.613578, -0.382394] ---- -Label : 1 -Position : [1315.69, 1117.06] -Measurements : [1052.25, 128330, 0.30612, -0.789024] ---- -Label : 1 -Position : [322.204, 1117.2] -Measurements : [1072.93, 231534, 1.07337, 0.251528] ---- -Label : 1 -Position : [976.936, 1117.26] -Measurements : [1466.07, 232995, 0.150008, -0.445359] ---- -Label : 1 -Position : [980.538, 1117.53] -Measurements : [1380.98, 200485, 0.198664, -0.4273] ---- -Label : 1 -Position : [318.379, 1117.76] -Measurements : [922.922, 330255, 0.989479, -0.28201] ---- -Label : 1 -Position : [293.031, 1118.43] -Measurements : [1183.39, 110523, 0.586584, -0.21553] ---- -Label : 1 -Position : [896.518, 1118.63] -Measurements : [1135.73, 502124, 0.773855, -0.946832] ---- -Label : 0 -Position : [162.013, 1118.89] -Measurements : [1046.11, 3723.81, -0.18434, -0.555536] ---- -Label : 1 -Position : [947.969, 1119.13] -Measurements : [1296.02, 313995, -0.281319, -1.34654] ---- -Label : 1 -Position : [1040.98, 1119.33] -Measurements : [817.424, 132441, 0.391018, -0.924471] ---- -Label : 0 -Position : [107.701, 1119.51] -Measurements : [1004.92, 15855.4, -0.504019, 1.26513] ---- -Label : 1 -Position : [617.7, 1119.53] -Measurements : [1110.42, 314501, 0.461469, -1.24448] ---- -Label : 1 -Position : [954.222, 1119.68] -Measurements : [1350.9, 197683, 0.187335, -1.30852] ---- -Label : 1 -Position : [979.157, 1120.44] -Measurements : [1218.54, 187873, 0.34507, 0.00234448] ---- -Label : 1 -Position : [1022.52, 1120.46] -Measurements : [1025.14, 321899, 0.33598, -1.43068] ---- -Label : 1 -Position : [1095.19, 1120.64] -Measurements : [1535.75, 232272, -0.142176, -0.500953] ---- -Label : 1 -Position : [1097.72, 1120.92] -Measurements : [1554.26, 258599, 0.0481866, -0.942775] ---- -Label : 0 -Position : [224.089, 1120.93] -Measurements : [1030.74, 2676.05, -2.31253, 8.00231] ---- -Label : 1 -Position : [1019.45, 1121.22] -Measurements : [1185.69, 358416, -0.0286825, -1.36273] ---- -Label : 1 -Position : [1095.64, 1121.22] -Measurements : [1529.92, 191916, -0.126115, -0.578863] ---- -Label : 1 -Position : [6.71789, 1121.62] -Measurements : [1591.16, 264087, -0.287199, -1.10858] ---- -Label : 1 -Position : [949.825, 1121.73] -Measurements : [1363.53, 299022, -0.430466, -1.25047] ---- -Label : 1 -Position : [1021.64, 1122.08] -Measurements : [1250.54, 324483, -0.13649, -1.24278] ---- -Label : 0 -Position : [230.059, 1122.35] -Measurements : [929.305, 11586.8, -0.75956, -0.103885] ---- -Label : 1 -Position : [974.394, 1123.27] -Measurements : [1524.68, 369930, 0.49282, -0.548381] ---- -Label : 1 -Position : [1044.44, 1123.27] -Measurements : [1032.55, 276660, -0.0447536, -1.51575] ---- -Label : 1 -Position : [1022.65, 1123.3] -Measurements : [1290.52, 294234, -0.0652611, -1.0898] ---- -Label : 1 -Position : [968.949, 1123.43] -Measurements : [1471.81, 415163, 0.457305, -0.784827] ---- -Label : 1 -Position : [624.191, 1124] -Measurements : [890.2, 244990, 1.03644, -0.172235] ---- -Label : 1 -Position : [621.857, 1124.07] -Measurements : [696.259, 94737.2, 2.18233, 5.84234] ---- -Label : 1 -Position : [949.818, 1124.09] -Measurements : [1065.72, 362022, 0.449653, -1.43843] ---- -Label : 1 -Position : [631.038, 1124.12] -Measurements : [1591.81, 319505, -0.41229, -0.844146] ---- -Label : 1 -Position : [9.704, 1124.15] -Measurements : [1231.3, 422557, 0.200027, -1.68301] ---- -Label : 0 -Position : [157.119, 1124.41] -Measurements : [1056.4, 38740.7, 0.247114, 1.08397] ---- -Label : 1 -Position : [626.302, 1124.45] -Measurements : [1135.07, 375979, 0.387306, -1.30277] ---- -Label : 1 -Position : [1018.56, 1124.71] -Measurements : [1454.8, 237028, -0.350559, -0.532075] ---- -Label : 1 -Position : [1018.22, 1124.91] -Measurements : [1454.8, 237028, -0.350559, -0.532075] ---- -Label : 1 -Position : [978.837, 1125.23] -Measurements : [1029.9, 317605, 1.10817, 0.583133] ---- -Label : 1 -Position : [1091.56, 1125.33] -Measurements : [1160.73, 394681, 0.120183, -1.66112] ---- -Label : 1 -Position : [10.8516, 1125.62] -Measurements : [1072.72, 420117, 0.609403, -1.38314] ---- -Label : 1 -Position : [1094, 1125.73] -Measurements : [1281.12, 329526, -0.17595, -1.51126] ---- -Label : 1 -Position : [1047.27, 1125.95] -Measurements : [1123.06, 295589, 0.135125, -1.40774] ---- -Label : 1 -Position : [744.838, 1126.11] -Measurements : [1022.72, 313192, 0.0629765, -1.35426] ---- -Label : 1 -Position : [969.889, 1126.14] -Measurements : [1628.39, 366728, 0.126048, -0.745168] ---- -Label : 1 -Position : [295.032, 1126.48] -Measurements : [1047.8, 249877, 0.483722, -1.19177] ---- -Label : 1 -Position : [291.874, 1126.57] -Measurements : [1226.69, 138531, 0.392667, -0.314183] ---- -Label : 1 -Position : [292.404, 1126.67] -Measurements : [1184.46, 174180, 0.208548, -0.657442] ---- -Label : 1 -Position : [969.433, 1126.79] -Measurements : [1628.39, 366728, 0.126048, -0.745168] ---- -Label : 0 -Position : [151.959, 1126.84] -Measurements : [1303.66, 157811, 0.0185304, -1.25052] ---- -Label : 0 -Position : [120.577, 1127.36] -Measurements : [928.118, 13857.8, -1.64526, 1.98989] ---- -Label : 1 -Position : [1039.26, 1127.91] -Measurements : [1241.12, 142161, -0.0150767, -0.759667] ---- -Label : 1 -Position : [5.30779, 1128.1] -Measurements : [944.431, 304391, 1.04353, -0.335558] ---- -Label : 1 -Position : [1044.95, 1128.21] -Measurements : [1454.37, 136002, -0.408306, -0.050401] ---- -Label : 1 -Position : [311.796, 1128.43] -Measurements : [516.136, 43139.8, 1.83871, 2.18098] ---- -Label : 1 -Position : [746.724, 1128.54] -Measurements : [1272.59, 222451, -0.216323, -0.631394] ---- -Label : 0 -Position : [100.428, 1128.93] -Measurements : [969.132, 17879.2, -1.87672, 3.23088] ---- -Label : 1 -Position : [629.988, 1128.95] -Measurements : [1700.89, 271813, -0.587899, -0.553474] ---- -Label : 1 -Position : [1086.68, 1129] -Measurements : [787.301, 243765, 0.993342, -0.472551] ---- -Label : 1 -Position : [317.693, 1129] -Measurements : [683.774, 58613.4, 0.188041, -0.887551] ---- -Label : 1 -Position : [971.558, 1129.4] -Measurements : [1583.45, 291772, 0.569015, -0.192093] ---- -Label : 1 -Position : [969.959, 1129.88] -Measurements : [1568.55, 315171, 0.451701, -0.295612] ---- -Label : 1 -Position : [1093.55, 1130.14] -Measurements : [1096.95, 319763, 0.296364, -1.56766] ---- -Label : 0 -Position : [159.72, 1130.31] -Measurements : [1085.67, 24078.9, -1.41563, 0.937455] ---- -Label : 1 -Position : [632.224, 1130.54] -Measurements : [1875.29, 224853, -0.527495, -0.187398] ---- -Label : 1 -Position : [36.0026, 1130.6] -Measurements : [1136.47, 392664, 0.141498, -1.26417] ---- -Label : 1 -Position : [1042.8, 1130.64] -Measurements : [1521.63, 124932, -0.389979, -0.22042] ---- -Label : 1 -Position : [758.59, 1130.77] -Measurements : [1512.8, 209622, -0.204781, -0.762893] ---- -Label : 1 -Position : [744.207, 1130.96] -Measurements : [1195.6, 321731, -0.103009, -1.15426] ---- -Label : 1 -Position : [972.346, 1131.46] -Measurements : [1481.66, 277398, 0.499083, 0.146027] ---- -Label : 1 -Position : [1091.02, 1131.51] -Measurements : [1122.69, 319490, 0.114157, -1.64666] ---- -Label : 0 -Position : [205.482, 1131.59] -Measurements : [1024.32, 12456.4, -2.56799, 8.61018] ---- -Label : 1 -Position : [43.844, 1131.87] -Measurements : [1165.39, 284950, 0.863729, -0.753485] ---- -Label : 1 -Position : [39.4, 1131.9] -Measurements : [1323.52, 251333, 0.317063, -1.07014] ---- -Label : 1 -Position : [314.488, 1132.62] -Measurements : [766.555, 98758.9, 0.502569, -0.347876] ---- -Label : 1 -Position : [755.735, 1132.64] -Measurements : [1504.91, 199923, 0.0839969, -1.0132] ---- -Label : 1 -Position : [631.11, 1133.04] -Measurements : [1912.48, 211997, -0.537191, -0.172032] ---- -Label : 1 -Position : [1013.17, 1133.05] -Measurements : [894.744, 184817, 0.300538, -1.50086] ---- -Label : 1 -Position : [1091.54, 1133.92] -Measurements : [1186.44, 283275, -0.077929, -1.60438] ---- -Label : 1 -Position : [636.554, 1134.26] -Measurements : [1660.44, 458292, -0.295868, -1.13566] ---- -Label : 1 -Position : [763.518, 1134.28] -Measurements : [1230.6, 175525, 0.292462, -0.451196] ---- -Label : 1 -Position : [632.855, 1134.69] -Measurements : [1893.81, 243747, -0.403782, -0.526413] ---- -Label : 0 -Position : [138.906, 1135.02] -Measurements : [853.322, 12556.1, -1.76641, 2.77119] ---- -Label : 0 -Position : [200.477, 1135.77] -Measurements : [828.799, 54698.7, -0.23034, -1.74816] ---- -Label : 0 -Position : [108.981, 1135.89] -Measurements : [983.519, 5901.38, 0.460685, -1.0713] ---- -Label : 1 -Position : [1041.57, 1135.97] -Measurements : [1251.27, 327451, -0.15749, -1.4196] ---- -Label : 1 -Position : [627.992, 1135.99] -Measurements : [1501.21, 319429, 0.354041, -1.01453] ---- -Label : 1 -Position : [291.948, 1136.01] -Measurements : [932.205, 216500, 0.937441, 0.266747] ---- -Label : 1 -Position : [1014.94, 1136.38] -Measurements : [1153.14, 210896, -0.307712, -1.17327] ---- -Label : 1 -Position : [751.069, 1136.78] -Measurements : [1308.03, 278297, 0.186299, -1.09681] ---- -Label : 1 -Position : [653.314, 1136.83] -Measurements : [1675.46, 782722, -0.111543, -1.20664] ---- -Label : 1 -Position : [964.966, 1136.94] -Measurements : [896.149, 238106, 0.953832, -0.326273] ---- -Label : 0 -Position : [132.735, 1137.13] -Measurements : [872.972, 4561.19, -0.534553, -0.715854] ---- -Label : 1 -Position : [969.07, 1137.19] -Measurements : [1169.75, 268077, 0.0518946, -1.35931] ---- -Label : 1 -Position : [756.638, 1137.43] -Measurements : [1260.57, 167288, 0.543398, -0.0136713] ---- -Label : 0 -Position : [141.091, 1137.53] -Measurements : [1042.07, 130453, 0.966673, -0.26523] ---- -Label : 1 -Position : [636.132, 1137.97] -Measurements : [1670.41, 480113, -0.268542, -1.1685] ---- -Label : 1 -Position : [1042.9, 1138.02] -Measurements : [1005.13, 312595, 0.562031, -1.28514] ---- -Label : 1 -Position : [289.4, 1138.26] -Measurements : [1010.6, 192603, 0.756089, 0.267923] ---- -Label : 1 -Position : [634.692, 1138.36] -Measurements : [1785.04, 378250, -0.29383, -1.0051] ---- -Label : 1 -Position : [637.73, 1138.36] -Measurements : [1490.32, 572827, -0.012165, -1.43545] ---- -Label : 1 -Position : [767.328, 1138.98] -Measurements : [714.19, 180572, 1.65842, 1.85807] ---- -Label : 1 -Position : [1087.85, 1139.65] -Measurements : [1557.74, 150628, -0.833591, 0.385313] ---- -Label : 1 -Position : [1044.49, 1139.7] -Measurements : [926.791, 294133, 0.952724, -0.73062] ---- -Label : 1 -Position : [286.235, 1139.74] -Measurements : [1169.68, 114625, 0.984141, 1.90722] ---- -Label : 1 -Position : [1092.81, 1139.97] -Measurements : [1459.3, 216384, -0.329166, -1.1956] ---- -Label : 0 -Position : [228.639, 1140.23] -Measurements : [1232.22, 46859.2, 0.371178, -1.35799] ---- -Label : 1 -Position : [1017.97, 1140.42] -Measurements : [1381.77, 200423, -0.277902, -0.420345] ---- -Label : 1 -Position : [651.697, 1140.42] -Measurements : [1749.46, 814711, -0.220851, -1.42414] ---- -Label : 0 -Position : [156.826, 1140.82] -Measurements : [1283.51, 161811, 0.675848, -0.56946] ---- -Label : 1 -Position : [1013.54, 1141.32] -Measurements : [1565.07, 120026, -0.53445, 1.17169] ---- -Label : 1 -Position : [647.501, 1141.55] -Measurements : [1495.26, 867369, 0.101414, -1.50972] ---- -Label : 1 -Position : [1014.54, 1141.7] -Measurements : [1576.32, 107979, -0.135096, 0.499446] ---- -Label : 1 -Position : [721.202, 1141.72] -Measurements : [956.677, 196307, 0.142456, -0.763618] ---- -Label : 1 -Position : [964.79, 1141.74] -Measurements : [625.868, 172911, 2.54853, 5.27219] ---- -Label : 0 -Position : [169.854, 1141.85] -Measurements : [1308.13, 58658.9, 0.526328, -0.868855] ---- -Label : 0 -Position : [171.863, 1141.92] -Measurements : [1435.59, 59089.7, 0.149777, -1.40351] ---- -Label : 1 -Position : [1088.57, 1142.41] -Measurements : [1621.93, 137380, -0.648513, -0.0471067] ---- -Label : 0 -Position : [129.945, 1142.46] -Measurements : [919.733, 933.24, -0.472886, 0.434218] ---- -Label : 1 -Position : [1009.14, 1143.37] -Measurements : [1468.03, 216957, -0.476265, -0.181204] ---- -Label : 0 -Position : [240.962, 1143.41] -Measurements : [843.451, 43046.5, -0.0668802, -1.1608] ---- -Label : 1 -Position : [1088.97, 1143.47] -Measurements : [1593.35, 153600, -0.526202, -0.464171] ---- -Label : 1 -Position : [1012.99, 1144.63] -Measurements : [1660.72, 121411, -0.0882883, -0.218307] ---- -Label : 0 -Position : [126.5, 1144.64] -Measurements : [918.687, 3970.85, -0.876945, 3.51086] ---- -Label : 1 -Position : [6.632, 1144.7] -Measurements : [2221.2, 349450, -0.814199, 0.21863] ---- -Label : 1 -Position : [720.51, 1144.93] -Measurements : [1024.62, 192598, -0.0422643, -0.732742] ---- -Label : 1 -Position : [1038.29, 1145.39] -Measurements : [1146.85, 292515, 0.493896, -0.273585] ---- -Label : 0 -Position : [136.404, 1145.43] -Measurements : [905.554, 1004.83, 0.788542, -0.0894318] ---- -Label : 1 -Position : [1010.03, 1145.8] -Measurements : [1591.95, 179658, -0.444554, 0.0879009] ---- -Label : 1 -Position : [1085.4, 1145.8] -Measurements : [1588.85, 150307, -0.56307, -0.154259] ---- -Label : 1 -Position : [722.799, 1146] -Measurements : [1136.63, 106376, 0.292177, 0.284196] ---- -Label : 1 -Position : [287.199, 1146.22] -Measurements : [1101.02, 247833, 0.400411, -1.08682] ---- -Label : 1 -Position : [1088.31, 1146.43] -Measurements : [1467.95, 222410, -0.324458, -1.12877] ---- -Label : 1 -Position : [1041.03, 1146.46] -Measurements : [1114.59, 438922, 0.88341, -0.170194] ---- -Label : 0 -Position : [165.737, 1146.89] -Measurements : [1149.03, 11686.3, 0.378348, -0.73669] ---- -Label : 1 -Position : [3.14686, 1147.61] -Measurements : [2315.14, 211255, -0.643725, 0.380212] ---- -Label : 1 -Position : [1006.06, 1147.66] -Measurements : [1407.08, 273096, -0.286826, -0.823738] ---- -Label : 1 -Position : [5.76968, 1147.75] -Measurements : [2361.71, 192047, -0.574013, 0.0944329] ---- -Label : 0 -Position : [95.8535, 1148.89] -Measurements : [1043.14, 4039.13, 0.34265, -0.976442] ---- -Label : 1 -Position : [286.84, 1149.01] -Measurements : [1117.53, 249389, 0.324471, -1.20021] ---- -Label : 1 -Position : [1086.57, 1149.1] -Measurements : [1433.75, 258862, -0.295462, -1.1583] ---- -Label : 1 -Position : [314.043, 1149.17] -Measurements : [826.213, 111604, 2.41388, 5.83775] ---- -Label : 0 -Position : [192.486, 1149.6] -Measurements : [1209.73, 54018, 0.352959, -1.42971] ---- -Label : 1 -Position : [1003.13, 1149.7] -Measurements : [1219.37, 389379, 0.0325397, -1.45289] ---- -Label : 1 -Position : [1034.21, 1149.78] -Measurements : [1454.99, 245800, 0.853194, 0.595] ---- -Label : 1 -Position : [1035.42, 1149.89] -Measurements : [1502.71, 269280, 0.806998, 0.273687] ---- -Label : 1 -Position : [309.224, 1150.05] -Measurements : [953.735, 197743, 1.02165, 0.178332] ---- -Label : 0 -Position : [230.115, 1150.06] -Measurements : [1163.99, 13498.4, 0.267976, 0.623753] ---- -Label : 1 -Position : [1007.35, 1150.61] -Measurements : [1595.08, 253254, -0.341438, -0.521532] ---- -Label : 1 -Position : [1084.17, 1150.71] -Measurements : [1475.29, 253947, -0.285451, -1.11393] ---- -Label : 0 -Position : [220.38, 1150.72] -Measurements : [1406.21, 45677.3, -0.887135, -0.654873] ---- -Label : 1 -Position : [6.64686, 1150.84] -Measurements : [2067.21, 313072, -0.488555, -0.721966] ---- -Label : 1 -Position : [774.755, 1151.02] -Measurements : [905.172, 304152, 0.737353, -0.883288] ---- -Label : 0 -Position : [91.127, 1151.09] -Measurements : [1173.03, 21051.2, 1.37188, 2.70561] ---- -Label : 1 -Position : [6.12, 1151.35] -Measurements : [1990.35, 281745, -0.410493, -0.84822] ---- -Label : 1 -Position : [1037.28, 1151.55] -Measurements : [1595.3, 336847, 0.242418, -0.754099] ---- -Label : 0 -Position : [227.787, 1151.76] -Measurements : [1181.88, 21940.6, 0.713167, 0.331678] ---- -Label : 1 -Position : [666.065, 1151.78] -Measurements : [1255.1, 705566, 0.311059, -1.2594] ---- -Label : 1 -Position : [1080.88, 1152.84] -Measurements : [1460.67, 278986, -0.15895, -0.692329] ---- -Label : 1 -Position : [1110.92, 1152.98] -Measurements : [1654.6, 296910, 0.40103, -1.11604] ---- -Label : 1 -Position : [1007.16, 1153.17] -Measurements : [1409.85, 367620, 0.140601, -1.3886] ---- -Label : 0 -Position : [229.56, 1153.27] -Measurements : [1206.73, 15553.6, -0.114988, 1.07142] ---- -Label : 1 -Position : [1037.59, 1153.44] -Measurements : [1598.85, 354198, 0.19774, -0.92183] ---- -Label : 1 -Position : [288.516, 1153.69] -Measurements : [772.077, 259186, 1.52119, 0.813144] ---- -Label : 1 -Position : [776.225, 1153.75] -Measurements : [1026.53, 339644, 0.545387, -1.15853] ---- -Label : 1 -Position : [2.78325, 1153.99] -Measurements : [1864.55, 216033, -0.0864642, -1.06612] ---- -Label : 1 -Position : [1087.3, 1154.25] -Measurements : [1103.6, 225363, 0.64597, -0.747493] ---- -Label : 1 -Position : [1110.26, 1154.52] -Measurements : [1739.89, 238706, 0.335358, -0.886881] ---- -Label : 0 -Position : [174.137, 1154.67] -Measurements : [1427.73, 47665.8, -0.630245, 0.509506] ---- -Label : 0 -Position : [145.05, 1154.7] -Measurements : [1221.8, 217789, 0.157037, -1.34233] ---- -Label : 1 -Position : [308.506, 1154.71] -Measurements : [940.75, 113844, 0.931214, 0.922325] ---- -Label : 0 -Position : [146.191, 1154.85] -Measurements : [1310.59, 242056, -0.125762, -1.39595] ---- -Label : 0 -Position : [102.193, 1155.2] -Measurements : [1118.24, 13183, 2.62639, 11.1511] ---- -Label : 1 -Position : [666.852, 1155.58] -Measurements : [1504.53, 639924, 0.0798386, -1.17231] ---- -Label : 1 -Position : [1034.2, 1155.63] -Measurements : [1637.8, 254615, 0.313633, -0.432779] ---- -Label : 1 -Position : [45.6109, 1155.75] -Measurements : [950.641, 388082, 0.550202, -1.27312] ---- -Label : 1 -Position : [1037.82, 1155.83] -Measurements : [1584.5, 376728, 0.0635747, -0.84991] ---- -Label : 1 -Position : [46.8161, 1156.08] -Measurements : [1136.68, 416802, 0.115468, -1.46727] ---- -Label : 1 -Position : [1032.58, 1157.1] -Measurements : [1525.62, 196565, -0.348416, -0.261578] ---- -Label : 1 -Position : [10.4649, 1157.13] -Measurements : [1282.26, 370987, 0.432619, -0.768665] ---- -Label : 1 -Position : [775.569, 1157.18] -Measurements : [1327.56, 259850, -0.136, -1.26029] ---- -Label : 1 -Position : [1081.8, 1157.22] -Measurements : [1610.31, 315715, 0.163968, -0.849958] ---- -Label : 1 -Position : [774.257, 1157.31] -Measurements : [1382.79, 219603, -0.214492, -1.06328] ---- -Label : 1 -Position : [1105, 1157.62] -Measurements : [1425.5, 190806, 0.0835614, -0.512457] ---- -Label : 1 -Position : [1080.89, 1157.67] -Measurements : [1666.01, 289439, 0.0934961, -0.818089] ---- -Label : 0 -Position : [171.875, 1157.77] -Measurements : [1355.3, 47895.1, -0.920909, 0.891197] ---- -Label : 1 -Position : [1111.32, 1157.98] -Measurements : [1760.22, 302281, -0.161825, -0.755027] ---- -Label : 0 -Position : [115.068, 1158.51] -Measurements : [994.761, 21197.4, -1.6234, 1.83583] ---- -Label : 1 -Position : [7.656, 1159.03] -Measurements : [1305.08, 295855, -0.0831315, -1.50138] ---- -Label : 1 -Position : [774.586, 1159.08] -Measurements : [1431.5, 203821, -0.396619, -0.917594] ---- -Label : 1 -Position : [769.236, 1159.26] -Measurements : [1335.92, 164932, 0.319891, -1.04671] ---- -Label : 1 -Position : [1034.28, 1159.48] -Measurements : [1450.07, 277183, -0.222387, -1.00844] ---- -Label : 1 -Position : [44.52, 1159.54] -Measurements : [1239.65, 490685, -0.0903567, -1.46974] ---- -Label : 0 -Position : [179.332, 1159.58] -Measurements : [1205.49, 43796.6, -0.0434319, -0.203013] ---- -Label : 1 -Position : [1037.62, 1159.82] -Measurements : [1319.67, 355350, 0.0921585, -1.41574] ---- -Label : 1 -Position : [671.115, 1160.14] -Measurements : [855.894, 444276, 1.88032, 2.42662] ---- -Label : 1 -Position : [1106.98, 1160.26] -Measurements : [1417.53, 144462, 0.596014, 0.463787] ---- -Label : 1 -Position : [305.64, 1160.29] -Measurements : [914.347, 122039, 0.866925, 0.920378] ---- -Label : 1 -Position : [1032.97, 1160.95] -Measurements : [1314, 325452, -0.0550434, -1.31711] ---- -Label : 1 -Position : [50.5872, 1160.97] -Measurements : [1673.48, 106613, -0.250052, 0.330115] ---- -Label : 0 -Position : [118.672, 1161.44] -Measurements : [943.731, 18417.6, -1.08217, -0.117994] ---- -Label : 1 -Position : [1081.16, 1161.54] -Measurements : [1778.86, 359125, 0.0385953, -0.998229] ---- -Label : 1 -Position : [306.024, 1161.67] -Measurements : [957.765, 98584.5, 1.28924, 1.91503] ---- -Label : 1 -Position : [48.798, 1161.95] -Measurements : [1687.78, 173141, -0.453277, 1.15164] ---- -Label : 1 -Position : [306.365, 1162.03] -Measurements : [967.185, 101075, 1.47147, 2.27644] ---- -Label : 0 -Position : [93.0062, 1162.4] -Measurements : [1360.46, 232997, 0.935395, -0.174343] ---- -Label : 1 -Position : [12.2981, 1162.52] -Measurements : [894.349, 254483, 1.09828, -0.34333] ---- -Label : 1 -Position : [679.14, 1162.95] -Measurements : [1225.94, 277101, 0.162187, -0.65047] ---- -Label : 1 -Position : [1078.84, 1163] -Measurements : [1769.8, 333630, -0.0293483, -0.710707] ---- -Label : 1 -Position : [282.684, 1163.14] -Measurements : [1146.41, 459797, 0.384399, -1.49957] ---- -Label : 1 -Position : [281.166, 1163.16] -Measurements : [1227.07, 403801, 0.23897, -1.44882] ---- -Label : 1 -Position : [775.34, 1163.24] -Measurements : [1368.95, 322228, -0.187189, -1.3608] ---- -Label : 1 -Position : [774.177, 1163.99] -Measurements : [1458.28, 268717, -0.362289, -1.03724] ---- -Label : 1 -Position : [678.286, 1164.26] -Measurements : [1244.35, 241009, -0.0883215, -0.634315] ---- -Label : 1 -Position : [280.552, 1164.38] -Measurements : [1255.74, 352484, 0.247431, -1.28641] ---- -Label : 1 -Position : [770.095, 1164.39] -Measurements : [1449.94, 272127, -0.241911, -0.944929] ---- -Label : 1 -Position : [1082.31, 1164.49] -Measurements : [1629.05, 450304, 0.211624, -1.18485] ---- -Label : 1 -Position : [682.569, 1164.63] -Measurements : [1591.97, 263869, 0.0242676, -0.852369] ---- -Label : 1 -Position : [53.736, 1164.66] -Measurements : [1796.13, 157909, 0.450942, -0.454492] ---- -Label : 1 -Position : [707.639, 1165.03] -Measurements : [1271.67, 634350, 0.194827, -1.31768] ---- -Label : 1 -Position : [1107.74, 1165.1] -Measurements : [1294.07, 183733, -0.123783, -0.809899] ---- -Label : 1 -Position : [1080.77, 1165.63] -Measurements : [1773.51, 357820, -0.043212, -0.953411] ---- -Label : 1 -Position : [776.707, 1165.82] -Measurements : [1175.26, 343226, 0.274219, -1.43895] ---- -Label : 1 -Position : [1103.3, 1165.99] -Measurements : [1388.72, 111477, 0.094887, -0.0160851] ---- -Label : 0 -Position : [178.895, 1166.25] -Measurements : [1201.14, 27570.1, 1.00641, 1.99209] ---- -Label : 1 -Position : [302.207, 1166.63] -Measurements : [1052.22, 283675, 0.725463, -0.484432] ---- -Label : 1 -Position : [686.513, 1166.64] -Measurements : [1588.11, 374684, -0.160246, -1.22808] ---- -Label : 1 -Position : [61.2249, 1166.72] -Measurements : [1381.32, 483799, 0.404876, -1.14896] ---- -Label : 1 -Position : [1100.73, 1166.73] -Measurements : [1330.61, 135362, 0.478571, 0.565417] ---- -Label : 1 -Position : [1078.02, 1167.1] -Measurements : [1667.27, 358577, 0.223234, -0.891751] ---- -Label : 1 -Position : [689.403, 1167.11] -Measurements : [1324.63, 501103, 0.433018, -1.4523] ---- -Label : 1 -Position : [771.719, 1167.27] -Measurements : [1276.21, 392712, 0.0712801, -1.50023] ---- -Label : 1 -Position : [1073.6, 1167.6] -Measurements : [1424.16, 411550, -0.282248, -1.18686] ---- -Label : 1 -Position : [708.044, 1168] -Measurements : [1499.85, 524059, -0.165003, -0.937737] ---- -Label : 1 -Position : [709.86, 1168.28] -Measurements : [1627.81, 372373, -0.135262, -0.359293] ---- -Label : 1 -Position : [304.408, 1168.35] -Measurements : [1142.16, 211147, 1.00798, 0.0174553] ---- -Label : 1 -Position : [302.568, 1168.99] -Measurements : [1102.22, 259636, 0.694823, -0.419347] ---- -Label : 1 -Position : [689.815, 1169.03] -Measurements : [1196.13, 470720, 0.763316, -0.956375] ---- -Label : 1 -Position : [60.904, 1169.27] -Measurements : [1368.07, 562764, 0.498212, -1.17687] ---- -Label : 1 -Position : [1097.62, 1169.43] -Measurements : [1213.18, 201338, 0.523949, 0.112324] ---- -Label : 0 -Position : [166.876, 1169.93] -Measurements : [1096.64, 6676.84, 1.02148, 1.16828] ---- -Label : 1 -Position : [1104.49, 1170] -Measurements : [1626.49, 183840, -0.02518, -0.151867] ---- -Label : 1 -Position : [806.033, 1170.33] -Measurements : [1158.68, 355309, 0.0438268, -1.25804] ---- -Label : 1 -Position : [278.397, 1170.37] -Measurements : [1205.98, 347297, 0.444187, -1.05963] ---- -Label : 1 -Position : [1100.84, 1170.5] -Measurements : [1525.53, 171933, 0.236063, 0.244859] ---- -Label : 0 -Position : [139.794, 1170.86] -Measurements : [930.684, 4478.8, 0.844888, -0.191425] ---- -Label : 1 -Position : [4.93162, 1171.5] -Measurements : [1118.23, 221427, 0.238215, -1.23187] ---- -Label : 1 -Position : [771.066, 1171.65] -Measurements : [830.07, 360156, 1.38665, 0.414918] ---- -Label : 1 -Position : [808.583, 1171.77] -Measurements : [1239.92, 313375, -0.109397, -1.03812] ---- -Label : 0 -Position : [118.333, 1171.89] -Measurements : [1020.45, 12099.2, -0.818138, 1.12655] ---- -Label : 1 -Position : [55.9968, 1172.8] -Measurements : [1544.15, 681175, 0.189277, -1.53925] ---- -Label : 1 -Position : [8.68, 1172.86] -Measurements : [1303.49, 426137, 0.651849, -0.78275] ---- -Label : 1 -Position : [1076.35, 1172.94] -Measurements : [1655.4, 363428, -0.100214, -1.25256] ---- -Label : 1 -Position : [1099.97, 1173.19] -Measurements : [1568.65, 202352, -0.171849, -0.172079] ---- -Label : 1 -Position : [5.95018, 1173.32] -Measurements : [1141.07, 267697, 0.616905, -0.542866] ---- -Label : 1 -Position : [272.168, 1173.36] -Measurements : [1493.27, 200158, 0.957997, -0.386417] ---- -Label : 1 -Position : [1074.75, 1173.65] -Measurements : [1720.63, 332586, -0.233922, -1.15701] ---- -Label : 1 -Position : [809.513, 1174.98] -Measurements : [1475.58, 172448, -0.12461, -0.319519] ---- -Label : 1 -Position : [274.92, 1175.14] -Measurements : [1414.44, 313497, 0.292329, -0.810036] ---- -Label : 1 -Position : [1103.28, 1175.18] -Measurements : [1840.97, 145460, -0.709086, 0.577184] ---- -Label : 0 -Position : [147.316, 1175.59] -Measurements : [1016.22, 5487.3, -0.104575, 1.26667] ---- -Label : 1 -Position : [807.354, 1175.87] -Measurements : [1582.88, 137255, -0.126631, -0.136175] ---- -Label : 1 -Position : [808.479, 1175.91] -Measurements : [1557.25, 146285, 0.00798069, -0.47452] ---- -Label : 1 -Position : [804.68, 1176.08] -Measurements : [1436.92, 254438, -0.571786, -0.327179] ---- -Label : 0 -Position : [173.258, 1176.28] -Measurements : [1160.75, 9792.88, -0.58472, 0.246237] ---- -Label : 1 -Position : [69.4278, 1176.54] -Measurements : [1811.43, 412728, -0.200677, -0.851505] ---- -Label : 1 -Position : [1102.07, 1177.05] -Measurements : [1789.93, 141051, -0.503698, 0.21021] ---- -Label : 1 -Position : [772.021, 1177.11] -Measurements : [765.338, 332384, 1.60682, 0.936659] ---- -Label : 1 -Position : [770.353, 1177.7] -Measurements : [870.617, 395075, 1.062, -0.561307] ---- -Label : 1 -Position : [65, 1177.98] -Measurements : [1710.7, 431309, -0.195393, -0.948929] ---- -Label : 1 -Position : [1150.42, 1178.15] -Measurements : [951.68, 212839, 0.349942, -0.967092] ---- -Label : 1 -Position : [1074.22, 1178.51] -Measurements : [1714.99, 309998, -0.321104, -0.952352] ---- -Label : 1 -Position : [821.954, 1178.58] -Measurements : [897.679, 150305, 0.42116, -0.794245] ---- -Label : 1 -Position : [1150.02, 1179.53] -Measurements : [996.775, 237733, 0.377424, -0.815537] ---- -Label : 1 -Position : [90.1359, 1180.11] -Measurements : [1068.05, 45901.2, 1.80289, 5.12569] ---- -Label : 1 -Position : [804.078, 1180.38] -Measurements : [1258.64, 277823, 0.00212332, -1.18351] ---- -Label : 1 -Position : [1104.13, 1180.45] -Measurements : [1603.25, 292510, -0.584487, -1.05308] ---- -Label : 1 -Position : [1076.57, 1180.46] -Measurements : [1433.87, 379487, 0.199152, -1.22763] ---- -Label : 1 -Position : [1073.93, 1180.61] -Measurements : [1447.55, 408477, -0.0256431, -1.23079] ---- -Label : 1 -Position : [769.262, 1181.19] -Measurements : [1289.29, 436584, 0.0565775, -1.55561] ---- -Label : 1 -Position : [6.12, 1181.56] -Measurements : [1267.28, 375035, 0.517701, -0.664949] ---- -Label : 1 -Position : [803.898, 1181.71] -Measurements : [1236.23, 307134, 0.0525878, -1.33434] ---- -Label : 1 -Position : [75.335, 1181.87] -Measurements : [1552.96, 800826, 0.402943, -1.29492] ---- -Label : 1 -Position : [1074.32, 1181.9] -Measurements : [1342.13, 373976, 0.146331, -1.28879] ---- -Label : 1 -Position : [1153.68, 1181.97] -Measurements : [1207.04, 246005, 0.0483445, -1.05673] ---- -Label : 1 -Position : [762.975, 1181.97] -Measurements : [1231.07, 278627, 0.389004, -1.07186] ---- -Label : 1 -Position : [11.102, 1181.99] -Measurements : [1413.08, 486277, 0.211868, -1.29281] ---- -Label : 1 -Position : [73.192, 1182.07] -Measurements : [1802.21, 810669, 0.037417, -1.50906] ---- -Label : 1 -Position : [66.443, 1182.3] -Measurements : [2019.14, 590751, -0.524916, -0.643552] ---- -Label : 1 -Position : [1097.15, 1182.38] -Measurements : [1527.3, 221353, -0.175875, -1.04613] ---- -Label : 1 -Position : [825.786, 1182.42] -Measurements : [1182.26, 286006, -0.0928366, -1.23431] ---- -Label : 1 -Position : [4.09723, 1182.5] -Measurements : [1179.43, 295213, 0.545959, -0.490188] ---- -Label : 1 -Position : [1151, 1182.52] -Measurements : [1252.11, 257518, 0.0621691, -0.767241] ---- -Label : 1 -Position : [1102.21, 1182.96] -Measurements : [1655.51, 252755, -0.665866, -0.796063] ---- -Label : 1 -Position : [73.1307, 1182.99] -Measurements : [1802.21, 810669, 0.037417, -1.50906] ---- -Label : 1 -Position : [825.112, 1183.15] -Measurements : [1271.38, 244428, -0.315896, -0.939105] ---- -Label : 1 -Position : [1097.56, 1183.19] -Measurements : [1487.83, 213545, 0.0659557, -1.1985] ---- -Label : 1 -Position : [1154.09, 1183.6] -Measurements : [1396.51, 230610, 0.187407, -0.703307] ---- -Label : 1 -Position : [766.394, 1183.65] -Measurements : [1588.02, 251511, -0.507433, -0.756907] ---- -Label : 0 -Position : [127.434, 1183.75] -Measurements : [948.533, 20332.5, -0.523438, -0.341544] ---- -Label : 0 -Position : [232.217, 1183.76] -Measurements : [1189.62, 27441.2, 0.0170941, -0.820611] ---- -Label : 0 -Position : [185.352, 1183.84] -Measurements : [1177.2, 5451.08, -0.058732, -0.683641] ---- -Label : 1 -Position : [87.528, 1184.12] -Measurements : [958.423, 119859, 0.322424, 0.165602] ---- -Label : 1 -Position : [91.2962, 1184.46] -Measurements : [1033.72, 33959.5, -0.458446, 1.763] ---- -Label : 1 -Position : [1100.25, 1184.95] -Measurements : [1531.14, 249588, -0.248127, -1.10074] ---- -Label : 1 -Position : [1099.03, 1184.95] -Measurements : [1530.41, 219911, -0.141532, -1.06876] ---- -Label : 1 -Position : [1153.44, 1185.01] -Measurements : [1598.93, 257100, -0.155389, -1.01089] ---- -Label : 1 -Position : [762.156, 1185.34] -Measurements : [1296.5, 340204, 0.0615162, -1.40969] ---- -Label : 1 -Position : [803.97, 1185.35] -Measurements : [1256.88, 326282, 0.10677, -1.45978] ---- -Label : 1 -Position : [1092.13, 1185.7] -Measurements : [1008.44, 171793, 0.79629, -0.0759009] ---- -Label : 1 -Position : [1093.23, 1186.01] -Measurements : [1033.28, 198643, 0.819167, 0.00458842] ---- -Label : 1 -Position : [799.162, 1186.11] -Measurements : [1355, 291078, -0.416914, -1.17096] ---- -Label : 1 -Position : [824.558, 1186.11] -Measurements : [1522.09, 153982, -0.232506, -0.131787] ---- -Label : 1 -Position : [1096.06, 1186.86] -Measurements : [1291.83, 210552, 0.428369, -0.748787] ---- -Label : 1 -Position : [798.694, 1186.94] -Measurements : [1289.91, 322788, -0.271621, -1.37939] ---- -Label : 1 -Position : [819.753, 1187.13] -Measurements : [1269.05, 226137, 0.0833932, -1.1808] ---- -Label : 1 -Position : [1097.74, 1187.34] -Measurements : [1269.99, 226143, 0.560891, -0.55951] ---- -Label : 0 -Position : [107.795, 1187.46] -Measurements : [974.298, 18497, -0.1773, -0.0338076] ---- -Label : 1 -Position : [1095.11, 1187.7] -Measurements : [1131.48, 221926, 0.653684, -0.257936] ---- -Label : 1 -Position : [1095.52, 1187.7] -Measurements : [1131.48, 221926, 0.653684, -0.257936] ---- -Label : 1 -Position : [1156.24, 1188.51] -Measurements : [1640.19, 261126, -0.23606, -1.13799] ---- -Label : 1 -Position : [826.156, 1188.61] -Measurements : [1394.35, 282487, -0.236088, -0.982104] ---- -Label : 1 -Position : [9.192, 1188.73] -Measurements : [1795.61, 156376, 0.41132, -0.33843] ---- -Label : 1 -Position : [766.394, 1189.39] -Measurements : [1274.08, 326507, 0.286603, -1.30143] ---- -Label : 1 -Position : [802.198, 1189.39] -Measurements : [1440.98, 246023, -0.415642, -1.16846] ---- -Label : 1 -Position : [768.045, 1189.66] -Measurements : [1195.73, 362902, 0.465562, -1.33141] ---- -Label : 1 -Position : [1091.93, 1189.68] -Measurements : [711.534, 82232.5, 0.94323, 0.64927] ---- -Label : 1 -Position : [798.879, 1190] -Measurements : [1584.3, 188729, -1.05308, 0.550662] ---- -Label : 1 -Position : [1152.48, 1190.3] -Measurements : [1672.47, 364311, -0.511787, -1.1885] ---- -Label : 1 -Position : [820.502, 1190.42] -Measurements : [1295, 269247, 0.1181, -1.21844] ---- -Label : 1 -Position : [1152.86, 1190.57] -Measurements : [1672.47, 364311, -0.511787, -1.1885] ---- -Label : 1 -Position : [13.8267, 1190.64] -Measurements : [1710.02, 199292, -0.326539, -0.647723] ---- -Label : 1 -Position : [821.69, 1191.02] -Measurements : [1331.21, 266615, 0.0752261, -1.15059] ---- -Label : 1 -Position : [1153.84, 1191.06] -Measurements : [1622.26, 391575, -0.391323, -1.31254] ---- -Label : 1 -Position : [1149.59, 1191.23] -Measurements : [1375.61, 524379, 0.0222752, -1.71337] ---- -Label : 1 -Position : [825.051, 1191.3] -Measurements : [1306.23, 295348, 0.0187257, -1.17552] ---- -Label : 1 -Position : [859.374, 1191.84] -Measurements : [1304.06, 396412, 0.130115, -1.16986] ---- -Label : 1 -Position : [5.81273, 1191.94] -Measurements : [1492.18, 147510, 0.0304225, -0.833112] ---- -Label : 0 -Position : [196.511, 1192.22] -Measurements : [1607.13, 44011.5, 0.123893, -1.41548] ---- -Label : 1 -Position : [761.952, 1192.6] -Measurements : [1265.09, 402702, 0.0570166, -1.51692] ---- -Label : 1 -Position : [1152.86, 1192.62] -Measurements : [1521.03, 511762, -0.23247, -1.65025] ---- -Label : 1 -Position : [75.5997, 1192.84] -Measurements : [749.381, 215968, 1.15818, 0.410867] ---- -Label : 1 -Position : [857.466, 1193.25] -Measurements : [1407.08, 322798, -0.0847183, -0.998472] ---- -Label : 1 -Position : [864.373, 1193.35] -Measurements : [1257.72, 212586, 0.994952, 0.534599] ---- -Label : 1 -Position : [799.162, 1193.48] -Measurements : [1620.7, 154920, -0.801872, -0.115901] ---- -Label : 1 -Position : [795.008, 1193.6] -Measurements : [1386.23, 330501, -0.58523, -0.985151] ---- -Label : 1 -Position : [798.663, 1193.86] -Measurements : [1609.82, 167327, -0.937791, 0.320673] ---- -Label : 1 -Position : [768.778, 1194.21] -Measurements : [932.05, 300184, 1.09552, -0.281007] ---- -Label : 1 -Position : [792.253, 1195.43] -Measurements : [1055.97, 354882, 0.22741, -1.40818] ---- -Label : 0 -Position : [161.728, 1195.56] -Measurements : [1050.87, 5899.31, -0.303962, -0.044112] ---- -Label : 1 -Position : [798.343, 1195.94] -Measurements : [1594.06, 172516, -0.800125, -0.0638567] ---- -Label : 1 -Position : [761.07, 1196.35] -Measurements : [1432.35, 364425, -0.190549, -1.39131] ---- -Label : 1 -Position : [857.326, 1196.35] -Measurements : [1250.1, 385819, 0.267622, -1.1927] ---- -Label : 1 -Position : [79.336, 1196.41] -Measurements : [1180.75, 443880, 0.317155, -1.13477] ---- -Label : 1 -Position : [765.898, 1197.04] -Measurements : [1071.85, 359810, 0.723553, -1.05485] ---- -Label : 1 -Position : [801.746, 1197.09] -Measurements : [1369.86, 230534, 0.126528, -1.48602] ---- -Label : 1 -Position : [294.771, 1197.31] -Measurements : [924.689, 354266, 0.825889, -0.750758] ---- -Label : 1 -Position : [853.573, 1197.33] -Measurements : [971.671, 333839, 0.739649, -0.695533] ---- -Label : 1 -Position : [877.806, 1198.4] -Measurements : [711.088, 104285, 1.4406, 1.44004] ---- -Label : 1 -Position : [10.216, 1198.46] -Measurements : [1827.32, 240774, 0.0304515, -0.774381] ---- -Label : 1 -Position : [818.237, 1198.82] -Measurements : [1047, 371466, 0.87564, -0.519433] ---- -Label : 1 -Position : [289.835, 1199.1] -Measurements : [718.394, 255371, 1.38507, 0.540872] ---- -Label : 1 -Position : [294.376, 1199.2] -Measurements : [1001.89, 306094, 0.757925, -0.666724] ---- -Label : 1 -Position : [795.476, 1199.22] -Measurements : [1185.12, 365745, 0.0183278, -1.53179] ---- -Label : 1 -Position : [757.378, 1199.59] -Measurements : [1315.24, 408113, 0.0787407, -1.49655] ---- -Label : 1 -Position : [80.1549, 1199.7] -Measurements : [1244.74, 405225, 0.41905, -1.17794] ---- -Label : 0 -Position : [132.888, 1200.69] -Measurements : [1081.44, 27934, 0.356593, 4.06093] ---- -Label : 1 -Position : [856.943, 1200.87] -Measurements : [1099.61, 348047, 0.500254, -1.09179] ---- -Label : 1 -Position : [798.717, 1200.99] -Measurements : [1171.85, 313919, 0.174347, -1.44847] ---- -Label : 1 -Position : [8.26564, 1201.04] -Measurements : [1593.37, 238480, -0.0750373, -0.905243] ---- -Label : 1 -Position : [14.6304, 1201.25] -Measurements : [1989.93, 375142, -0.568585, -0.623087] ---- -Label : 1 -Position : [11.872, 1201.47] -Measurements : [1878.07, 283262, -0.108716, -0.884632] ---- -Label : 1 -Position : [757.383, 1201.67] -Measurements : [1203.89, 346874, 0.377234, -1.15645] ---- -Label : 1 -Position : [753.746, 1202.28] -Measurements : [1018.77, 206945, 0.724485, -0.404962] ---- -Label : 1 -Position : [874.79, 1202.42] -Measurements : [823.945, 180336, 1.15259, 0.370505] ---- -Label : 1 -Position : [816.775, 1202.49] -Measurements : [1277.91, 407298, 0.225137, -1.16466] ---- -Label : 1 -Position : [12.264, 1202.55] -Measurements : [1975.23, 295764, -0.320646, -0.838866] ---- -Label : 0 -Position : [186.377, 1202.61] -Measurements : [1372.58, 147226, -0.363546, -1.33675] ---- -Label : 1 -Position : [270.087, 1202.61] -Measurements : [731.651, 228259, 1.58597, 1.25361] ---- -Label : 1 -Position : [878.836, 1203.11] -Measurements : [848.244, 242834, 1.07867, -0.18974] ---- -Label : 1 -Position : [265.192, 1203.3] -Measurements : [1165.77, 273250, 0.505811, -0.885315] ---- -Label : 0 -Position : [162.979, 1204.42] -Measurements : [812.26, 45876.6, 0.0554185, -1.4658] ---- -Label : 1 -Position : [855.278, 1204.54] -Measurements : [922.078, 166029, 0.900278, -0.257132] ---- -Label : 0 -Position : [160.943, 1204.57] -Measurements : [808.898, 44084.3, 0.00983514, -1.36082] ---- -Label : 1 -Position : [811.336, 1204.86] -Measurements : [1218.67, 233231, 0.778767, -0.254009] ---- -Label : 1 -Position : [872.931, 1205.06] -Measurements : [880.312, 221325, 0.954574, -0.190436] ---- -Label : 1 -Position : [8.02011, 1205.07] -Measurements : [1608.5, 230530, -0.220706, -0.820422] ---- -Label : 1 -Position : [818.772, 1205.09] -Measurements : [1470.3, 357246, -0.0182837, -1.11492] ---- -Label : 1 -Position : [813.839, 1205.21] -Measurements : [1405.77, 289029, 0.283281, -0.859455] ---- -Label : 1 -Position : [859.546, 1205.65] -Measurements : [890.991, 108297, 1.24734, 1.57051] ---- -Label : 1 -Position : [11.1202, 1205.67] -Measurements : [1982.09, 188002, 0.0591524, -0.617607] ---- -Label : 0 -Position : [172.906, 1205.7] -Measurements : [701.565, 6990.93, 2.07489, 5.58847] ---- -Label : 1 -Position : [1146.87, 1206.73] -Measurements : [916.242, 277081, 0.410514, -1.41405] ---- -Label : 1 -Position : [79.1713, 1206.84] -Measurements : [911.106, 310157, 1.20421, 0.573365] ---- -Label : 1 -Position : [757.383, 1207] -Measurements : [1287.94, 379562, 0.422226, -0.753552] ---- -Label : 1 -Position : [874.529, 1207.41] -Measurements : [883.549, 250160, 0.901673, -0.566962] ---- -Label : 1 -Position : [266.636, 1207.49] -Measurements : [973.078, 346547, 0.909499, -0.593301] ---- -Label : 1 -Position : [814.727, 1207.82] -Measurements : [1486.97, 307317, 0.101435, -0.940271] ---- -Label : 1 -Position : [1151.88, 1207.93] -Measurements : [856.073, 274754, 0.639899, -1.25517] ---- -Label : 1 -Position : [854.621, 1208.13] -Measurements : [1060.52, 172373, 0.739862, -0.671865] ---- -Label : 1 -Position : [14.824, 1208.7] -Measurements : [2171.92, 155829, 0.227236, -0.919945] ---- -Label : 1 -Position : [758.404, 1208.73] -Measurements : [1359.35, 521184, 0.589396, -0.784245] ---- -Label : 1 -Position : [1146.5, 1208.96] -Measurements : [1080.61, 235520, -0.0865575, -1.38126] ---- -Label : 1 -Position : [1147.94, 1209] -Measurements : [1084.39, 240852, -0.113844, -1.41867] ---- -Label : 1 -Position : [848.343, 1209.1] -Measurements : [825.078, 217935, 0.86336, -0.354854] ---- -Label : 1 -Position : [1147.54, 1209.41] -Measurements : [1165.1, 205559, -0.350789, -1.13496] ---- -Label : 1 -Position : [1146.95, 1209.71] -Measurements : [1166.03, 199265, -0.338016, -1.08855] ---- -Label : 1 -Position : [82.408, 1209.72] -Measurements : [1303.49, 380234, 0.222019, -0.862375] ---- -Label : 1 -Position : [791.848, 1210.35] -Measurements : [1033.7, 405911, 0.534803, -1.01415] ---- -Label : 1 -Position : [759.246, 1210.7] -Measurements : [1427.21, 542382, 0.482749, -1.06428] ---- -Label : 1 -Position : [871.913, 1211.07] -Measurements : [1151.41, 386125, 0.459999, -1.05337] ---- -Label : 1 -Position : [869.578, 1211.09] -Measurements : [1068.34, 302377, 0.751652, -0.373732] ---- -Label : 1 -Position : [847.912, 1211.42] -Measurements : [742.205, 183218, 1.13478, 0.276318] ---- -Label : 1 -Position : [15.8737, 1211.89] -Measurements : [2343.75, 165428, 0.0743857, -1.45722] ---- -Label : 1 -Position : [755.745, 1211.91] -Measurements : [1817.41, 357409, -0.036646, -0.721701] ---- -Label : 1 -Position : [751.627, 1211.99] -Measurements : [1516.84, 466227, 0.366788, -0.83318] ---- -Label : 1 -Position : [871.766, 1212.2] -Measurements : [1215.53, 441193, 0.350756, -1.28659] ---- -Label : 1 -Position : [814.318, 1212.73] -Measurements : [1191.83, 406019, 0.391043, -1.12124] ---- -Label : 1 -Position : [852.001, 1212.73] -Measurements : [958.28, 155298, 0.944017, 0.0482365] ---- -Label : 1 -Position : [909.531, 1212.96] -Measurements : [884.748, 342927, 0.886771, -0.582627] ---- -Label : 1 -Position : [260.584, 1213.02] -Measurements : [1077.25, 312499, 0.623861, -0.982408] ---- -Label : 1 -Position : [284.136, 1213.02] -Measurements : [1371.41, 329253, -0.091794, -1.14797] ---- -Label : 1 -Position : [86.8254, 1213.03] -Measurements : [1458.97, 325044, 0.0850041, -1.01114] ---- -Label : 1 -Position : [9.87187, 1213.4] -Measurements : [1711.85, 417815, 0.0331565, -0.88982] ---- -Label : 1 -Position : [792.199, 1213.55] -Measurements : [1462.62, 450200, 0.148354, -0.833265] ---- -Label : 1 -Position : [871.662, 1213.55] -Measurements : [1271.39, 476000, 0.308982, -1.25782] ---- -Label : 1 -Position : [82.5704, 1213.6] -Measurements : [1698.48, 184574, 0.0132581, -0.401171] ---- -Label : 1 -Position : [282.796, 1213.68] -Measurements : [1230.26, 412366, 0.164402, -1.39135] ---- -Label : 1 -Position : [793.948, 1213.96] -Measurements : [1421.52, 469665, 0.21813, -0.831042] ---- -Label : 1 -Position : [1143.74, 1214.11] -Measurements : [1133.24, 213930, -0.226796, -1.28842] ---- -Label : 1 -Position : [905.413, 1214.14] -Measurements : [1207.88, 461935, 0.0915895, -1.5239] ---- -Label : 0 -Position : [178.36, 1214.28] -Measurements : [766.149, 4079.33, 1.56613, 1.86491] ---- -Label : 1 -Position : [15.336, 1214.33] -Measurements : [2423.45, 183125, 0.0486293, -1.10514] ---- -Label : 0 -Position : [131.742, 1214.34] -Measurements : [936.518, 20172.8, -0.304679, 1.13836] ---- -Label : 1 -Position : [756.203, 1214.35] -Measurements : [1799.29, 481028, -0.197371, -0.988624] ---- -Label : 1 -Position : [1142.67, 1214.61] -Measurements : [1034.69, 228523, 0.0839063, -1.38911] ---- -Label : 1 -Position : [909.78, 1214.87] -Measurements : [1117.69, 418789, 0.380851, -1.31459] ---- -Label : 1 -Position : [258.906, 1214.98] -Measurements : [1078.44, 277833, 0.53751, -0.890986] ---- -Label : 1 -Position : [280.156, 1215.14] -Measurements : [1027.23, 379387, 0.612957, -1.09361] ---- -Label : 0 -Position : [119.654, 1215.16] -Measurements : [973.622, 44681.7, 0.4596, 0.253037] ---- -Label : 0 -Position : [128.804, 1215.37] -Measurements : [926.183, 28247.1, 0.260325, 2.06074] ---- -Label : 1 -Position : [755.335, 1215.6] -Measurements : [1837.2, 445531, -0.274624, -0.802054] ---- -Label : 1 -Position : [759.726, 1215.7] -Measurements : [1359.43, 705840, 0.650318, -1.11076] ---- -Label : 1 -Position : [746.562, 1216.14] -Measurements : [1225.45, 224906, 0.503518, -0.982275] ---- -Label : 1 -Position : [811.113, 1216.19] -Measurements : [730.386, 246836, 1.74971, 1.85232] ---- -Label : 1 -Position : [756.649, 1216.32] -Measurements : [1703.19, 588354, -0.048937, -1.34199] ---- -Label : 0 -Position : [131.871, 1216.33] -Measurements : [909.844, 13797, -0.984392, 1.27645] ---- -Label : 1 -Position : [253.915, 1216.33] -Measurements : [1080.04, 179154, 0.369279, -0.0178993] ---- -Label : 1 -Position : [1146.31, 1216.37] -Measurements : [1190.47, 158488, -0.554648, -1.05723] ---- -Label : 1 -Position : [791.38, 1216.42] -Measurements : [1755.74, 313424, -0.00816374, -0.518683] ---- -Label : 1 -Position : [851.948, 1216.73] -Measurements : [1177.64, 293207, 0.408663, -1.03527] ---- -Label : 1 -Position : [914.089, 1216.85] -Measurements : [972.153, 207751, 0.844733, 0.167141] ---- -Label : 1 -Position : [285.672, 1217.12] -Measurements : [1415.82, 249102, -0.0727781, -0.674173] ---- -Label : 1 -Position : [288.55, 1217.19] -Measurements : [1322.11, 280795, 0.148007, -0.88388] ---- -Label : 1 -Position : [788.228, 1217.69] -Measurements : [1601.6, 462082, -0.261452, -0.710461] ---- -Label : 1 -Position : [812.188, 1217.72] -Measurements : [701.541, 237729, 1.99031, 2.78772] ---- -Label : 1 -Position : [907.322, 1217.74] -Measurements : [1682.85, 390793, -0.0135373, -0.575758] ---- -Label : 1 -Position : [909.516, 1217.75] -Measurements : [1541, 482589, 0.239899, -0.923021] ---- -Label : 1 -Position : [80.36, 1217.91] -Measurements : [1679.26, 171675, -0.130206, -0.141252] ---- -Label : 1 -Position : [259.674, 1217.92] -Measurements : [758.745, 248822, 1.68135, 1.685] ---- -Label : 1 -Position : [17.5562, 1218.03] -Measurements : [2678.93, 191799, -1.42829, 3.37401] ---- -Label : 1 -Position : [793.29, 1218.25] -Measurements : [1656.77, 333908, 0.463085, -0.929399] ---- -Label : 1 -Position : [747.371, 1218.3] -Measurements : [1298.58, 254042, 0.325729, -1.26416] ---- -Label : 1 -Position : [249.182, 1218.5] -Measurements : [1069.04, 101005, -0.607746, -0.712342] ---- -Label : 1 -Position : [1162.5, 1218.76] -Measurements : [1505.7, 491152, 0.805507, -0.674457] ---- -Label : 1 -Position : [871.252, 1218.88] -Measurements : [1798.52, 387780, -0.338564, -0.862378] ---- -Label : 1 -Position : [904.748, 1218.97] -Measurements : [1768.93, 440880, -0.231233, -0.696289] ---- -Label : 1 -Position : [843.182, 1219.1] -Measurements : [1122.98, 588369, 0.693368, -0.763251] ---- -Label : 1 -Position : [11.4749, 1219.13] -Measurements : [2197.52, 364364, -0.729895, -0.229045] ---- -Label : 1 -Position : [287.453, 1219.31] -Measurements : [1207.18, 282762, 0.341719, -0.770938] ---- -Label : 1 -Position : [794.615, 1219.42] -Measurements : [1572.63, 372173, 0.618228, -0.934499] ---- -Label : 1 -Position : [234.885, 1219.54] -Measurements : [1162.35, 104704, 0.371147, 1.63789] ---- -Label : 1 -Position : [846.17, 1219.78] -Measurements : [1373.06, 541971, 0.217375, -1.04107] ---- -Label : 1 -Position : [868.473, 1219.85] -Measurements : [1724.47, 490118, -0.230996, -1.06146] ---- -Label : 1 -Position : [750.83, 1220.11] -Measurements : [1540.65, 326390, 0.246965, -0.853089] ---- -Label : 1 -Position : [290.28, 1220.19] -Measurements : [967.021, 301911, 0.893497, -0.0993775] ---- -Label : 1 -Position : [287.753, 1220.38] -Measurements : [1118.73, 295328, 0.530871, -0.626394] ---- -Label : 1 -Position : [847.905, 1220.52] -Measurements : [1516.89, 553376, 0.133567, -1.15221] ---- -Label : 1 -Position : [866.581, 1220.55] -Measurements : [1526.49, 467194, 0.12961, -1.24029] ---- -Label : 1 -Position : [249.832, 1220.7] -Measurements : [952.769, 145228, -0.0548567, -1.53415] ---- -Label : 1 -Position : [754.386, 1220.73] -Measurements : [1505.02, 452253, 0.229136, -0.981314] ---- -Label : 1 -Position : [790.151, 1220.93] -Measurements : [1785.59, 310558, -0.0502628, -0.763834] ---- -Label : 1 -Position : [807.622, 1221.32] -Measurements : [878.987, 168161, 0.666003, -0.491093] ---- -Label : 1 -Position : [786.966, 1221.57] -Measurements : [1433.63, 479609, -0.15224, -1.17562] ---- -Label : 1 -Position : [78.3397, 1221.58] -Measurements : [1571.64, 202256, -0.481934, -0.0621826] ---- -Label : 1 -Position : [930.767, 1221.62] -Measurements : [1282.96, 459300, 0.00763679, -1.48934] ---- -Label : 1 -Position : [864.789, 1221.62] -Measurements : [1328.81, 360256, 0.487199, -1.06278] ---- -Label : 1 -Position : [867.829, 1221.71] -Measurements : [1688.18, 461851, -0.229008, -1.0514] ---- -Label : 1 -Position : [926.704, 1221.78] -Measurements : [1113.68, 341650, 0.448803, -1.0555] ---- -Label : 1 -Position : [906.094, 1221.84] -Measurements : [1920.02, 277201, -0.0198953, -0.571137] ---- -Label : 1 -Position : [15.336, 1222.01] -Measurements : [2516.24, 202144, -0.148118, -0.0875051] ---- -Label : 1 -Position : [1172.23, 1222.03] -Measurements : [1599.01, 391892, 0.691466, 0.345097] ---- -Label : 1 -Position : [809.838, 1222.25] -Measurements : [938.059, 224223, 0.483807, -0.898122] ---- -Label : 1 -Position : [804.888, 1222.39] -Measurements : [970.848, 133092, 0.634874, 0.195407] ---- -Label : 1 -Position : [238.52, 1222.49] -Measurements : [1310.99, 195029, 0.0953162, -0.732769] ---- -Label : 0 -Position : [140.699, 1222.6] -Measurements : [967.235, 2961.46, 0.860597, 0.738803] ---- -Label : 1 -Position : [931.316, 1222.81] -Measurements : [1369.78, 434520, -0.191234, -1.43647] ---- -Label : 1 -Position : [901.789, 1222.87] -Measurements : [1458.44, 600982, -0.0139851, -1.27951] ---- -Label : 1 -Position : [928.444, 1222.91] -Measurements : [1346.44, 365050, -0.0697131, -1.29736] ---- -Label : 1 -Position : [875.049, 1223] -Measurements : [1197.35, 653274, 0.837206, -0.80181] ---- -Label : 1 -Position : [82.9643, 1223.24] -Measurements : [1803.34, 134873, 0.1435, -0.49312] ---- -Label : 1 -Position : [1164.74, 1223.74] -Measurements : [2229.77, 575814, -0.292431, -1.11282] ---- -Label : 1 -Position : [1170.06, 1223.74] -Measurements : [1868.77, 549650, 0.385324, -0.908998] ---- -Label : 1 -Position : [239.592, 1223.78] -Measurements : [1251.76, 245777, 0.0664219, -1.06259] ---- -Label : 1 -Position : [846.676, 1223.79] -Measurements : [1905.05, 360387, -0.429257, -0.684733] ---- -Label : 1 -Position : [80.872, 1224.06] -Measurements : [1744.35, 155098, -0.0915156, -0.578833] ---- -Label : 1 -Position : [1162.13, 1224.16] -Measurements : [2096.91, 692154, -0.115876, -1.49859] ---- -Label : 1 -Position : [870.023, 1224.2] -Measurements : [1763.44, 413281, -0.237713, -0.871015] ---- -Label : 1 -Position : [863.664, 1224.27] -Measurements : [1290.95, 276000, 0.48197, -1.03283] ---- -Label : 1 -Position : [906.844, 1224.58] -Measurements : [1845.35, 340240, -0.0395007, -0.766385] ---- -Label : 1 -Position : [751.674, 1224.7] -Measurements : [1371.12, 288650, 0.0519448, -1.0595] ---- -Label : 1 -Position : [785.941, 1224.92] -Measurements : [1133.53, 464075, 0.493464, -1.10058] ---- -Label : 1 -Position : [294.499, 1225.02] -Measurements : [650.489, 96289.7, 1.36371, 1.16223] ---- -Label : 1 -Position : [787.284, 1225.02] -Measurements : [1233.36, 422995, 0.487997, -0.952479] ---- -Label : 1 -Position : [843.835, 1225.13] -Measurements : [1869.01, 452044, -0.751668, -0.379219] ---- -Label : 1 -Position : [17.3172, 1225.28] -Measurements : [2492.97, 143042, 0.321103, -0.0593158] ---- -Label : 1 -Position : [844.595, 1225.63] -Measurements : [1959.6, 360340, -0.785183, 0.0399021] ---- -Label : 1 -Position : [296.669, 1225.88] -Measurements : [742.942, 130932, 0.859113, -0.313118] ---- -Label : 1 -Position : [745.869, 1225.97] -Measurements : [1151.33, 226392, 0.580858, -0.701615] ---- -Label : 1 -Position : [1177.05, 1225.98] -Measurements : [1585.6, 189304, 0.0633345, -0.444408] ---- -Label : 1 -Position : [1176.21, 1226.2] -Measurements : [1633.13, 178764, 0.153143, -0.785366] ---- -Label : 1 -Position : [865.927, 1226.25] -Measurements : [1501.94, 324477, 0.166657, -0.889444] ---- -Label : 0 -Position : [150.771, 1226.62] -Measurements : [945.835, 2810.44, -1.40093, 3.20244] ---- -Label : 1 -Position : [904.865, 1226.75] -Measurements : [1784.36, 410944, -0.0403627, -0.759294] ---- -Label : 1 -Position : [748.782, 1226.83] -Measurements : [1227.29, 257607, 0.375343, -0.911056] ---- -Label : 1 -Position : [844.218, 1227.48] -Measurements : [1991.9, 331418, -0.790508, 0.0393777] ---- -Label : 1 -Position : [808.609, 1227.57] -Measurements : [1098.06, 209074, 0.144377, -1.00202] ---- -Label : 1 -Position : [928.31, 1227.76] -Measurements : [1639.48, 235764, -0.482709, -0.606112] ---- -Label : 1 -Position : [747.578, 1227.98] -Measurements : [1102.9, 237964, 0.540202, -0.77443] ---- -Label : 1 -Position : [83.1913, 1228.3] -Measurements : [1725.95, 168715, -0.143545, -0.522532] ---- -Label : 1 -Position : [926.96, 1228.37] -Measurements : [1537.55, 226853, -0.255072, -0.693078] ---- -Label : 1 -Position : [302.761, 1228.43] -Measurements : [1143.77, 133976, 0.450963, 1.17834] ---- -Label : 0 -Position : [156.879, 1228.46] -Measurements : [946.406, 18109.5, -0.191883, 0.487] ---- -Label : 1 -Position : [743.704, 1228.51] -Measurements : [960.514, 213048, 0.993258, 0.113225] ---- -Label : 1 -Position : [1172.41, 1228.64] -Measurements : [1880.01, 537214, 0.460628, -0.437212] ---- -Label : 1 -Position : [905.202, 1228.65] -Measurements : [1658.58, 325013, 0.0669244, -0.69995] ---- -Label : 1 -Position : [845.157, 1228.7] -Measurements : [1973.87, 354655, -0.675772, -0.538657] ---- -Label : 1 -Position : [902.611, 1228.71] -Measurements : [1599.41, 362335, -0.285628, -0.409707] ---- -Label : 1 -Position : [1183.99, 1229.07] -Measurements : [1416.03, 104399, 0.989837, 1.2258] ---- -Label : 1 -Position : [300.52, 1229.41] -Measurements : [1179.08, 265119, 0.927807, 0.811799] ---- -Label : 1 -Position : [1184.65, 1229.41] -Measurements : [1411.18, 125542, 0.739785, 1.45012] ---- -Label : 1 -Position : [904.496, 1229.55] -Measurements : [1655.59, 291582, -0.126127, -0.620944] ---- -Label : 1 -Position : [928.939, 1229.76] -Measurements : [1552, 222588, -0.27606, -0.609991] ---- -Label : 1 -Position : [813.407, 1229.8] -Measurements : [845.924, 211077, 1.00438, -0.36928] ---- -Label : 1 -Position : [805.472, 1229.82] -Measurements : [874.327, 213249, 0.71872, -0.841291] ---- -Label : 1 -Position : [785.645, 1229.82] -Measurements : [998.748, 287450, 0.755282, -0.432779] ---- -Label : 1 -Position : [1172.12, 1230] -Measurements : [1829.53, 606080, 0.376467, -0.610032] ---- -Label : 1 -Position : [1179.78, 1230.02] -Measurements : [1552.48, 144827, 0.708302, -0.33234] ---- -Label : 1 -Position : [294.209, 1230.04] -Measurements : [1231.29, 558679, 0.475679, -1.1597] ---- -Label : 0 -Position : [135.652, 1230.22] -Measurements : [1132.88, 24218.5, 1.04485, 0.947635] ---- -Label : 1 -Position : [871.499, 1230.59] -Measurements : [1271.54, 387666, 0.228329, -1.38369] ---- -Label : 1 -Position : [897.3, 1230.81] -Measurements : [1107.45, 483480, 0.443123, -1.11515] ---- -Label : 1 -Position : [788.412, 1230.85] -Measurements : [1006.32, 225117, 0.956939, 0.236453] ---- -Label : 0 -Position : [172.006, 1231.09] -Measurements : [764.245, 6700.82, 1.10045, 2.44211] ---- -Label : 1 -Position : [925.442, 1231.45] -Measurements : [1457.06, 201568, -0.0827904, -0.449099] ---- -Label : 1 -Position : [901.588, 1231.67] -Measurements : [1649.82, 432288, -0.393316, -0.599881] ---- -Label : 1 -Position : [837.017, 1231.98] -Measurements : [1234.63, 569450, 0.154681, -1.56023] ---- -Label : 1 -Position : [784.852, 1232.08] -Measurements : [1106.64, 287540, 0.669004, -0.199733] ---- -Label : 1 -Position : [840.967, 1232.08] -Measurements : [1762.09, 384542, -0.961169, -0.191973] ---- -Label : 1 -Position : [867.182, 1232.49] -Measurements : [1359.8, 289117, 0.286787, -0.967843] ---- -Label : 1 -Position : [927.035, 1232.5] -Measurements : [1456.32, 265473, -0.20073, -0.921721] ---- -Label : 1 -Position : [215.016, 1232.61] -Measurements : [1668.05, 361488, -0.212671, -0.527731] ---- -Label : 1 -Position : [786.979, 1233.6] -Measurements : [1154.52, 278076, 0.705189, -0.117734] ---- -Label : 1 -Position : [215.742, 1234.14] -Measurements : [1805.04, 245802, -0.257069, 0.147681] ---- -Label : 1 -Position : [863.242, 1234.26] -Measurements : [1038.03, 202727, 0.760403, -0.245087] ---- -Label : 1 -Position : [214.635, 1234.37] -Measurements : [1854.5, 185586, 0.0271868, 0.552599] ---- -Label : 1 -Position : [786.343, 1234.37] -Measurements : [1197.42, 250329, 0.709552, 0.0957804] ---- -Label : 1 -Position : [923.953, 1234.44] -Measurements : [1447.6, 208263, -0.041822, -0.701972] ---- -Label : 1 -Position : [17.896, 1234.66] -Measurements : [2239.97, 878718, -0.500571, -1.11511] ---- -Label : 1 -Position : [16.6519, 1234.82] -Measurements : [2245.42, 844234, -0.440372, -1.03476] ---- -Label : 1 -Position : [900.359, 1234.94] -Measurements : [1416.86, 551278, 0.11982, -1.18663] ---- -Label : 1 -Position : [297.448, 1235.04] -Measurements : [1814.39, 448896, -0.119873, -1.35972] ---- -Label : 1 -Position : [800.13, 1235.18] -Measurements : [915.996, 184923, 0.49921, -0.877147] ---- -Label : 1 -Position : [1184.07, 1235.45] -Measurements : [1703.55, 224413, 1.11423, 0.171697] ---- -Label : 1 -Position : [840.304, 1235.55] -Measurements : [1828.01, 310526, -1.04268, 0.33815] ---- -Label : 1 -Position : [839.32, 1235.63] -Measurements : [1739.61, 394281, -0.905096, -0.232115] ---- -Label : 1 -Position : [863.561, 1235.71] -Measurements : [1011.11, 195394, 0.886399, 0.0760186] ---- -Label : 1 -Position : [898.668, 1235.95] -Measurements : [1169.53, 518051, 0.545714, -1.00207] ---- -Label : 1 -Position : [922.985, 1235.95] -Measurements : [1329.86, 269506, 0.0793324, -0.969957] ---- -Label : 1 -Position : [79.3361, 1236.06] -Measurements : [1297.88, 329390, 0.257138, -0.939452] ---- -Label : 1 -Position : [16.3183, 1236.08] -Measurements : [1942.73, 1.2736e+06, -0.0682841, -1.64411] ---- -Label : 1 -Position : [865.543, 1236.17] -Measurements : [1090.45, 243359, 0.778857, -0.384085] ---- -Label : 1 -Position : [83.944, 1236.19] -Measurements : [1426.26, 322624, 0.0424581, -1.08061] ---- -Label : 1 -Position : [780.375, 1236.46] -Measurements : [879.165, 325633, 1.00037, 0.109566] ---- -Label : 1 -Position : [872.181, 1236.47] -Measurements : [822.466, 279109, 1.52797, 0.988733] ---- -Label : 1 -Position : [79.1963, 1236.51] -Measurements : [1297.88, 329390, 0.257138, -0.939452] ---- -Label : 1 -Position : [746.35, 1236.58] -Measurements : [1067.85, 313847, 0.780247, -0.470879] ---- -Label : 1 -Position : [784.442, 1236.58] -Measurements : [1171.59, 285270, 0.586534, -0.316596] ---- -Label : 1 -Position : [1187.42, 1236.63] -Measurements : [2030.98, 282792, 0.0142445, -1.23582] ---- -Label : 1 -Position : [1188.89, 1236.87] -Measurements : [2093.61, 240983, -0.0320629, -1.21898] ---- -Label : 1 -Position : [213.48, 1237.22] -Measurements : [1859.73, 217907, -0.13619, 0.0246956] ---- -Label : 1 -Position : [212.732, 1237.23] -Measurements : [1814.92, 211519, -0.129132, -0.14362] ---- -Label : 0 -Position : [171.098, 1237.92] -Measurements : [881.646, 10935, 0.0708465, -1.03185] ---- -Label : 1 -Position : [294.482, 1238.02] -Measurements : [1698.97, 609698, -0.128204, -1.50719] ---- -Label : 1 -Position : [841.377, 1238.22] -Measurements : [1880.89, 254191, -0.636922, -0.557618] ---- -Label : 1 -Position : [211.392, 1238.84] -Measurements : [1747.73, 190447, -0.0580938, -0.171229] ---- -Label : 1 -Position : [919.333, 1238.92] -Measurements : [923.99, 208645, 0.773501, -0.68262] ---- -Label : 1 -Position : [802.465, 1239.04] -Measurements : [1185.7, 306360, 0.16626, -1.08458] ---- -Label : 1 -Position : [781.429, 1239.41] -Measurements : [1023.85, 345005, 0.6991, -0.393158] ---- -Label : 1 -Position : [746.759, 1239.49] -Measurements : [1163.49, 299606, 0.599099, -0.744458] ---- -Label : 1 -Position : [213.229, 1239.83] -Measurements : [1824.79, 233312, -0.0712011, -0.0846081] ---- -Label : 1 -Position : [742.467, 1239.94] -Measurements : [1096.43, 288625, 0.714364, -0.380117] ---- -Label : 1 -Position : [901.974, 1240.12] -Measurements : [1125, 397928, 0.914923, -0.0284579] ---- -Label : 1 -Position : [292.84, 1240.67] -Measurements : [1346.63, 724605, 0.476662, -1.43048] ---- -Label : 1 -Position : [743.892, 1240.68] -Measurements : [1170.87, 291753, 0.547246, -0.677062] ---- -Label : 1 -Position : [747.71, 1240.9] -Measurements : [1118.82, 303959, 0.741731, -0.599327] ---- -Label : 1 -Position : [1198.72, 1240.97] -Measurements : [2259.05, 347432, -0.0445919, -1.06256] ---- -Label : 1 -Position : [1196.13, 1241.16] -Measurements : [2348.43, 326410, -0.205738, -0.877876] ---- -Label : 1 -Position : [742.604, 1241.47] -Measurements : [1123.63, 294928, 0.580539, -0.597594] ---- -Label : 1 -Position : [896.742, 1241.99] -Measurements : [1150.34, 484377, 0.670076, -0.664179] ---- -Label : 1 -Position : [806.138, 1242.01] -Measurements : [1069.13, 337481, 0.676933, -0.867978] ---- -Label : 1 -Position : [783.194, 1242.19] -Measurements : [1060.78, 232843, 0.78743, 0.361256] ---- -Label : 1 -Position : [296.008, 1242.3] -Measurements : [1188.2, 516637, 1.09348, -0.0784587] ---- -Label : 1 -Position : [863.905, 1242.32] -Measurements : [1017.85, 226619, 0.604561, -0.764185] ---- -Label : 1 -Position : [216.04, 1242.34] -Measurements : [1737.25, 425200, -0.407536, -1.10453] ---- -Label : 1 -Position : [969.394, 1242.5] -Measurements : [1244.53, 475935, 0.0207841, -1.55861] ---- -Label : 0 -Position : [131.564, 1242.59] -Measurements : [931.007, 23518.6, -0.398983, -0.302945] ---- -Label : 1 -Position : [1223, 1242.7] -Measurements : [1580.05, 303862, 0.235173, -0.588387] ---- -Label : 1 -Position : [801.236, 1242.73] -Measurements : [1436.53, 186326, -0.0495089, -0.33619] ---- -Label : 1 -Position : [898.721, 1242.73] -Measurements : [1297.07, 548093, 0.576645, -0.684907] ---- -Label : 1 -Position : [841.892, 1242.88] -Measurements : [1765.02, 276807, -0.16917, -1.11542] ---- -Label : 1 -Position : [860.555, 1243.01] -Measurements : [1137.74, 320185, 0.46322, -1.00322] ---- -Label : 1 -Position : [1204.87, 1243.02] -Measurements : [2382.69, 269984, -0.332389, -1.1192] ---- -Label : 1 -Position : [861.824, 1243.37] -Measurements : [1119, 293150, 0.472796, -0.918419] ---- -Label : 1 -Position : [1199.67, 1243.59] -Measurements : [2396.51, 406919, -0.646015, -0.766349] ---- -Label : 1 -Position : [915.992, 1243.62] -Measurements : [908.361, 145896, 0.969562, 0.714171] ---- -Label : 1 -Position : [969.679, 1243.74] -Measurements : [1263.38, 450661, 0.0245447, -1.52338] ---- -Label : 0 -Position : [134.449, 1243.89] -Measurements : [936.617, 24021.8, -0.364755, -0.597952] ---- -Label : 1 -Position : [779.527, 1243.95] -Measurements : [1065.56, 249369, 0.131148, -1.2332] ---- -Label : 1 -Position : [1222.44, 1243.99] -Measurements : [1644.93, 282358, 0.00611915, -0.867025] ---- -Label : 1 -Position : [915.266, 1244.21] -Measurements : [974.785, 182502, 0.897241, 0.38456] ---- -Label : 1 -Position : [1214.09, 1244.56] -Measurements : [2159.01, 165035, 0.208915, -0.211125] ---- -Label : 1 -Position : [1207.06, 1244.65] -Measurements : [2438.12, 240250, -0.469927, -0.684881] ---- -Label : 1 -Position : [898.311, 1244.77] -Measurements : [1520.01, 497180, 0.256235, -0.887349] ---- -Label : 1 -Position : [19.432, 1244.9] -Measurements : [1152.88, 435171, 0.743054, -0.855253] ---- -Label : 1 -Position : [863.482, 1244.97] -Measurements : [1060.45, 262489, 0.596244, -0.994629] ---- -Label : 1 -Position : [1211.42, 1245.06] -Measurements : [2318.13, 238176, -0.118575, -0.564816] ---- -Label : 1 -Position : [863.467, 1245.12] -Measurements : [1110.82, 289337, 0.466025, -1.14926] ---- -Label : 1 -Position : [212.377, 1245.14] -Measurements : [1902.8, 241339, -0.620028, -0.379369] ---- -Label : 1 -Position : [898.864, 1245.17] -Measurements : [1618.2, 435098, 0.190588, -0.806567] ---- -Label : 0 -Position : [168.186, 1245.19] -Measurements : [1064.65, 7322.56, 0.328272, 0.563073] ---- -Label : 1 -Position : [291.038, 1245.22] -Measurements : [984.714, 324931, 1.08294, -0.143452] ---- -Label : 1 -Position : [20.5982, 1245.26] -Measurements : [1322.32, 579161, 0.409905, -1.32241] ---- -Label : 1 -Position : [1221.66, 1245.47] -Measurements : [1699, 251977, -0.222801, -0.634156] ---- -Label : 1 -Position : [18.0231, 1245.57] -Measurements : [1285.78, 541081, 0.506737, -1.17024] ---- -Label : 1 -Position : [838.919, 1245.59] -Measurements : [1833.08, 177023, -0.208719, -0.387439] ---- -Label : 1 -Position : [210.799, 1245.61] -Measurements : [1781, 231927, -0.446551, -0.568587] ---- -Label : 1 -Position : [896.627, 1245.69] -Measurements : [1667.21, 434272, -0.0512293, -0.715904] ---- -Label : 1 -Position : [891.224, 1246.27] -Measurements : [1233.78, 592214, 0.220704, -1.53333] ---- -Label : 1 -Position : [776.355, 1246.29] -Measurements : [1303.16, 248183, -0.365057, -0.864135] ---- -Label : 1 -Position : [799.913, 1246.43] -Measurements : [1366.77, 296133, 0.16384, -0.815227] ---- -Label : 0 -Position : [122.155, 1246.45] -Measurements : [1202.03, 43292.8, -0.825552, 0.087116] ---- -Label : 1 -Position : [896.16, 1246.54] -Measurements : [1767.4, 382927, -0.165061, -0.543131] ---- -Label : 1 -Position : [282.127, 1246.67] -Measurements : [957.635, 257902, 0.414426, -1.20054] ---- -Label : 1 -Position : [1209.15, 1246.75] -Measurements : [2401.75, 303733, -0.453457, -0.588507] ---- -Label : 1 -Position : [967.486, 1246.95] -Measurements : [1160.41, 438712, 0.388608, -1.42383] ---- -Label : 1 -Position : [220.081, 1247.15] -Measurements : [1118.06, 571152, 0.868769, -0.823116] ---- -Label : 1 -Position : [288.463, 1247.23] -Measurements : [1111.55, 288619, 0.522288, -0.920139] ---- -Label : 1 -Position : [805.873, 1247.38] -Measurements : [1109.86, 402200, 0.783666, -0.839501] ---- -Label : 1 -Position : [285.672, 1247.46] -Measurements : [1176.35, 287250, 0.246708, -1.05309] ---- -Label : 1 -Position : [834.215, 1247.54] -Measurements : [1731.9, 256776, -0.627676, 0.146996] ---- -Label : 1 -Position : [859.809, 1247.64] -Measurements : [1383.61, 328618, -0.187224, -1.30354] ---- -Label : 1 -Position : [842.102, 1247.76] -Measurements : [1409.2, 183754, 0.568346, -0.607575] ---- -Label : 1 -Position : [742.35, 1248.15] -Measurements : [1287.64, 318864, -0.0125858, -1.46992] ---- -Label : 1 -Position : [919.708, 1248.24] -Measurements : [1483.8, 322515, -0.102679, -0.438587] ---- -Label : 1 -Position : [1228.82, 1248.27] -Measurements : [2091.18, 397670, -0.606103, -0.961399] ---- -Label : 1 -Position : [741.025, 1248.46] -Measurements : [1323.79, 311335, -0.153769, -1.37594] ---- -Label : 1 -Position : [778.298, 1248.46] -Measurements : [1579.87, 161782, 0.090404, -0.214226] ---- -Label : 1 -Position : [998.672, 1248.46] -Measurements : [684.731, 360047, 2.21223, 3.46351] ---- -Label : 1 -Position : [1215.93, 1248.51] -Measurements : [2010.97, 450985, 0.0196436, -0.435956] ---- -Label : 1 -Position : [836.871, 1248.87] -Measurements : [1821.98, 192820, -0.44287, -0.172729] ---- -Label : 1 -Position : [24.9721, 1248.94] -Measurements : [1711.89, 944472, -0.00861559, -1.56485] ---- -Label : 1 -Position : [771.471, 1248.98] -Measurements : [940.486, 461815, 0.614761, -1.26091] ---- -Label : 1 -Position : [213.992, 1248.99] -Measurements : [1884.12, 234227, -0.706126, 0.348482] ---- -Label : 1 -Position : [836.845, 1249.27] -Measurements : [1823.32, 175264, -0.429781, -0.116832] ---- -Label : 1 -Position : [798.778, 1249.28] -Measurements : [1161.2, 313868, 0.622282, -0.629611] ---- -Label : 1 -Position : [964.289, 1249.31] -Measurements : [1014.56, 301887, 0.484466, -1.17381] ---- -Label : 0 -Position : [126.196, 1249.45] -Measurements : [1154.42, 43557.8, -0.491892, -0.90433] ---- -Label : 1 -Position : [1231.46, 1249.66] -Measurements : [2185.08, 300673, -0.760805, -0.561286] ---- -Label : 1 -Position : [774.339, 1249.8] -Measurements : [1341.07, 479289, -0.206209, -1.28169] ---- -Label : 1 -Position : [835.149, 1249.82] -Measurements : [1842.2, 146143, -0.229768, -0.0816093] ---- -Label : 1 -Position : [895.854, 1250.1] -Measurements : [2043.17, 327401, -0.760018, 0.243777] ---- -Label : 1 -Position : [1227.8, 1250.39] -Measurements : [2035.41, 455928, -0.464992, -1.28888] ---- -Label : 1 -Position : [284.829, 1250.43] -Measurements : [1338.11, 234083, -0.189229, -0.730715] ---- -Label : 1 -Position : [795.306, 1250.79] -Measurements : [1001.59, 182792, 0.542941, -0.786473] ---- -Label : 1 -Position : [280.41, 1251.08] -Measurements : [1279.93, 289634, -0.283567, -1.04502] ---- -Label : 1 -Position : [889.134, 1251.5] -Measurements : [1403.17, 689504, 0.0846717, -1.49233] ---- -Label : 1 -Position : [213.231, 1251.51] -Measurements : [1898.26, 227479, -0.818888, 0.673467] ---- -Label : 0 -Position : [131.08, 1251.59] -Measurements : [1068.91, 54518.2, -0.125231, -1.21105] ---- -Label : 1 -Position : [1255.21, 1251.62] -Measurements : [809.48, 216319, 1.37975, 0.787938] ---- -Label : 1 -Position : [741.171, 1251.74] -Measurements : [1498.39, 164459, -0.205465, -0.77866] ---- -Label : 1 -Position : [994.255, 1251.93] -Measurements : [1353.6, 769906, 0.203548, -1.54386] ---- -Label : 1 -Position : [1247.06, 1252.03] -Measurements : [1352.12, 470873, 0.42204, -1.19798] ---- -Label : 1 -Position : [858.17, 1252.15] -Measurements : [1239.63, 361798, 0.137347, -1.48773] ---- -Label : 1 -Position : [739.716, 1252.19] -Measurements : [1419.02, 171493, 0.0461638, -0.749297] ---- -Label : 1 -Position : [20.968, 1252.58] -Measurements : [2323.47, 397117, -0.570539, -0.34185] ---- -Label : 1 -Position : [282.088, 1252.58] -Measurements : [1425.74, 250745, 0.0803986, -0.622793] ---- -Label : 1 -Position : [1245.1, 1252.62] -Measurements : [1564.4, 393715, -0.0302333, -1.18573] ---- -Label : 1 -Position : [776.25, 1252.97] -Measurements : [1415.54, 343092, 0.00101286, -1.12996] ---- -Label : 1 -Position : [796.754, 1253.13] -Measurements : [1099.52, 346600, 0.669797, -0.738685] ---- -Label : 1 -Position : [919.298, 1253.16] -Measurements : [1740.04, 272901, -0.244013, -0.188017] ---- -Label : 1 -Position : [964.764, 1253.16] -Measurements : [1164.82, 196364, -0.221582, -1.12304] ---- -Label : 1 -Position : [800.747, 1253.32] -Measurements : [1167.87, 386391, 0.685791, -0.814127] ---- -Label : 1 -Position : [834.004, 1253.38] -Measurements : [1808.95, 254158, -0.475557, -0.350112] ---- -Label : 1 -Position : [284.78, 1253.45] -Measurements : [1418.34, 297475, 0.377753, -0.491705] ---- -Label : 1 -Position : [212.456, 1253.6] -Measurements : [1871.4, 149892, -0.658298, 0.660001] ---- -Label : 1 -Position : [993.956, 1253.99] -Measurements : [1546.86, 560871, -0.0527651, -1.22589] ---- -Label : 1 -Position : [893.396, 1254.19] -Measurements : [1960.99, 295063, -0.904191, 0.359902] ---- -Label : 1 -Position : [967.939, 1254.24] -Measurements : [1039.92, 203228, 0.276857, -1.13304] ---- -Label : 1 -Position : [855.455, 1254.29] -Measurements : [1065.32, 284217, 0.395776, -1.15303] ---- -Label : 1 -Position : [17.6999, 1254.29] -Measurements : [2124.75, 311027, -0.0198567, -0.888139] ---- -Label : 1 -Position : [963.952, 1254.34] -Measurements : [1306.4, 168288, -0.21038, -0.309538] ---- -Label : 1 -Position : [1397.09, 1254.5] -Measurements : [1978.58, 475627, 0.527454, -0.552366] ---- -Label : 1 -Position : [1253.25, 1254.53] -Measurements : [873.655, 271370, 1.1682, 0.100972] ---- -Label : 1 -Position : [741.025, 1254.6] -Measurements : [1370.28, 136539, 0.535164, -0.577723] ---- -Label : 1 -Position : [894.181, 1254.72] -Measurements : [1959.17, 293305, -0.815807, -0.0205787] ---- -Label : 1 -Position : [994.717, 1254.97] -Measurements : [1589.52, 539948, -0.0692888, -1.27923] ---- -Label : 1 -Position : [280.04, 1255.14] -Measurements : [1682.6, 238647, -0.393966, 0.256378] ---- -Label : 1 -Position : [210.648, 1255.19] -Measurements : [1632.35, 236906, -0.626587, -0.657645] ---- -Label : 1 -Position : [1258.11, 1255.3] -Measurements : [1033.28, 283631, 0.526914, -0.785717] ---- -Label : 1 -Position : [796.73, 1255.42] -Measurements : [1028.65, 347205, 0.882684, -0.458077] ---- -Label : 1 -Position : [215.983, 1255.56] -Measurements : [1635.83, 315763, -0.599883, -0.900548] ---- -Label : 1 -Position : [889.5, 1255.63] -Measurements : [1567.75, 597446, -0.241598, -1.30015] ---- -Label : 1 -Position : [285.139, 1255.73] -Measurements : [1351.31, 301722, 0.529562, -0.337382] ---- -Label : 1 -Position : [861.634, 1255.74] -Measurements : [865.982, 264823, 1.15112, -0.097197] ---- -Label : 1 -Position : [832.775, 1255.83] -Measurements : [1465.58, 523468, -0.11953, -1.45124] ---- -Label : 1 -Position : [1248.58, 1255.88] -Measurements : [1093.55, 523795, 1.05032, -0.464598] ---- -Label : 1 -Position : [834.79, 1255.9] -Measurements : [1568.81, 441889, -0.295195, -1.21334] ---- -Label : 1 -Position : [914.679, 1256.1] -Measurements : [1550.43, 256988, 0.0884644, -0.328219] ---- -Label : 1 -Position : [836.937, 1256.11] -Measurements : [1464.72, 485482, 0.0467023, -1.49397] ---- -Label : 1 -Position : [920.038, 1256.6] -Measurements : [1415.53, 358529, 0.116888, -0.869241] ---- -Label : 1 -Position : [859.898, 1256.64] -Measurements : [950.642, 273064, 0.700891, -1.03008] ---- -Label : 1 -Position : [83.844, 1256.91] -Measurements : [1098.37, 678677, 0.587056, -1.24661] ---- -Label : 1 -Position : [834.932, 1257.2] -Measurements : [1358.13, 509395, 0.241541, -1.41618] ---- -Label : 1 -Position : [916.022, 1257.25] -Measurements : [1577.41, 261326, -0.104453, -0.318685] ---- -Label : 1 -Position : [909.325, 1257.4] -Measurements : [1132.17, 169953, 0.697982, -0.296762] ---- -Label : 1 -Position : [801.6, 1257.46] -Measurements : [901.677, 294916, 1.53917, 1.18786] ---- -Label : 1 -Position : [28.304, 1257.56] -Measurements : [1911.88, 1.06338e+06, -0.0284124, -1.69962] ---- -Label : 1 -Position : [920.38, 1257.56] -Measurements : [1400.48, 395022, 0.0962397, -1.07264] ---- -Label : 1 -Position : [211.47, 1257.56] -Measurements : [1739.01, 246583, -0.455685, -0.510702] ---- -Label : 1 -Position : [778.193, 1257.82] -Measurements : [1205.55, 300699, 0.847396, -0.256126] ---- -Label : 1 -Position : [910.534, 1257.97] -Measurements : [1227.3, 220119, 0.523979, -0.567578] ---- -Label : 1 -Position : [963.535, 1258.07] -Measurements : [1405.6, 195275, 0.400352, -0.38213] ---- -Label : 1 -Position : [1236.49, 1258.13] -Measurements : [2336.81, 692175, -0.529384, -0.758764] ---- -Label : 1 -Position : [85.2091, 1258.16] -Measurements : [1513.75, 682946, -0.195229, -1.50802] ---- -Label : 1 -Position : [916.107, 1258.22] -Measurements : [1581.97, 261065, -0.121111, -0.336849] ---- -Label : 1 -Position : [1272.41, 1258.46] -Measurements : [1451.77, 342337, 0.413854, -0.932567] ---- -Label : 1 -Position : [737.402, 1258.5] -Measurements : [1069.23, 25067.2, 2.09175, 5.49735] ---- -Label : 1 -Position : [831.051, 1258.51] -Measurements : [1173.1, 472178, 0.526862, -1.06173] ---- -Label : 1 -Position : [1392.5, 1258.63] -Measurements : [2228.93, 326304, -0.0816162, -1.40713] ---- -Label : 1 -Position : [890.529, 1258.7] -Measurements : [1567.02, 604066, -0.162801, -1.3794] ---- -Label : 1 -Position : [990.159, 1258.89] -Measurements : [1689.43, 227558, 0.210985, -0.182801] ---- -Label : 1 -Position : [87.528, 1259.23] -Measurements : [1741.37, 558693, -0.657493, -0.935365] ---- -Label : 1 -Position : [212.968, 1259.23] -Measurements : [1827.59, 242623, -0.094315, -0.435854] ---- -Label : 1 -Position : [774.202, 1259.52] -Measurements : [1064.08, 182308, 0.759521, 0.732401] ---- -Label : 1 -Position : [831.235, 1259.84] -Measurements : [1144.36, 430027, 0.581452, -0.885287] ---- -Label : 1 -Position : [770.459, 1259.88] -Measurements : [948.922, 177271, 0.150379, -0.978193] ---- -Label : 1 -Position : [855.713, 1259.93] -Measurements : [1089.67, 243019, 0.050132, -1.38737] ---- -Label : 1 -Position : [961.46, 1259.93] -Measurements : [1488.74, 245611, 0.335207, -0.882394] ---- -Label : 1 -Position : [1277.75, 1259.95] -Measurements : [1462.48, 212929, 0.561237, -0.302647] ---- -Label : 1 -Position : [777.782, 1259.98] -Measurements : [1052.17, 173258, 1.03168, 1.08609] ---- -Label : 0 -Position : [141.864, 1260.11] -Measurements : [1161.23, 14197.5, -0.856282, 0.146767] ---- -Label : 1 -Position : [891.858, 1260.53] -Measurements : [1371.03, 571419, 0.068168, -1.55675] ---- -Label : 1 -Position : [988.008, 1260.63] -Measurements : [1698.91, 161983, 0.0458537, -0.200945] ---- -Label : 1 -Position : [968.25, 1260.74] -Measurements : [1026.67, 104432, 0.823349, 0.608202] ---- -Label : 1 -Position : [24.552, 1260.77] -Measurements : [1878.79, 902667, -0.0910636, -1.56025] ---- -Label : 1 -Position : [1389.15, 1260.93] -Measurements : [2280.33, 312004, -0.255748, -1.20516] ---- -Label : 1 -Position : [776.543, 1260.97] -Measurements : [1019.25, 122517, 0.488638, -0.334487] ---- -Label : 1 -Position : [1262.19, 1261.26] -Measurements : [1470.99, 306118, 0.474048, -0.398873] ---- -Label : 1 -Position : [1233.54, 1261.45] -Measurements : [2478.92, 755106, -0.435004, -0.86253] ---- -Label : 0 -Position : [162.204, 1261.46] -Measurements : [1024.62, 8851.47, -0.999245, 1.00363] ---- -Label : 1 -Position : [962.306, 1261.76] -Measurements : [1402.54, 251502, 0.618139, -0.659768] ---- -Label : 1 -Position : [913.154, 1262.17] -Measurements : [1471.81, 204942, 0.467327, 0.333337] ---- -Label : 1 -Position : [277.992, 1262.3] -Measurements : [1786.09, 274001, -0.495025, -0.336688] ---- -Label : 1 -Position : [276.954, 1262.42] -Measurements : [1723.27, 321413, -0.710078, -0.23199] ---- -Label : 1 -Position : [858.017, 1262.64] -Measurements : [966.708, 250361, 0.555003, -1.2046] ---- -Label : 1 -Position : [1380.62, 1262.73] -Measurements : [2367.41, 208529, -0.250931, -0.146135] ---- -Label : 1 -Position : [279.011, 1262.75] -Measurements : [1799.52, 301108, -0.466854, -0.633814] ---- -Label : 1 -Position : [855.162, 1262.77] -Measurements : [1215.53, 195811, -0.28758, -1.0922] ---- -Label : 1 -Position : [851.069, 1262.93] -Measurements : [1289.93, 135313, -0.328325, -0.593033] ---- -Label : 1 -Position : [961.328, 1263.05] -Measurements : [1442.31, 229359, 0.425861, -0.617068] ---- -Label : 1 -Position : [1261.39, 1263.09] -Measurements : [1538.63, 348359, 0.114679, -0.898842] ---- -Label : 1 -Position : [1276.14, 1263.09] -Measurements : [1463.62, 225533, 0.491045, -0.586498] ---- -Label : 1 -Position : [853.255, 1263.21] -Measurements : [1320.13, 154674, -0.552602, -0.596894] ---- -Label : 1 -Position : [990.159, 1263.4] -Measurements : [1870.1, 236787, -0.295546, -0.301379] ---- -Label : 1 -Position : [22.5714, 1263.57] -Measurements : [1545.46, 740838, 0.522742, -1.02236] ---- -Label : 1 -Position : [1355.8, 1263.8] -Measurements : [797.289, 65883.1, 0.258388, -1.07459] ---- -Label : 1 -Position : [1232.42, 1263.89] -Measurements : [2440.02, 718967, -0.320991, -0.893494] ---- -Label : 1 -Position : [19.8285, 1264.15] -Measurements : [1283.39, 460026, 0.786823, -0.271953] ---- -Label : 1 -Position : [1263.39, 1264.22] -Measurements : [1746.48, 399371, -0.0778575, -0.905062] ---- -Label : 1 -Position : [957.556, 1264.33] -Measurements : [1537.36, 233231, -0.280746, -0.0402842] ---- -Label : 1 -Position : [831.956, 1264.43] -Measurements : [1095.41, 217123, 0.113882, -1.11371] ---- -Label : 1 -Position : [794.669, 1264.59] -Measurements : [852.248, 248790, 1.14469, -0.174633] ---- -Label : 1 -Position : [1358.51, 1264.77] -Measurements : [927.305, 51318.3, -0.117746, -0.782376] ---- -Label : 1 -Position : [770.926, 1264.84] -Measurements : [1140.39, 125648, -0.177019, 0.274811] ---- -Label : 1 -Position : [215.528, 1264.86] -Measurements : [1940.97, 284119, -0.253913, -0.144384] ---- -Label : 1 -Position : [836.597, 1265.02] -Measurements : [981.066, 140089, 0.629907, -0.361248] ---- -Label : 1 -Position : [1372.02, 1265.18] -Measurements : [1255.18, 275730, 0.221153, -1.24464] ---- -Label : 1 -Position : [1374.9, 1265.41] -Measurements : [1407.62, 410678, 0.292982, -1.04976] ---- -Label : 1 -Position : [1267.13, 1265.54] -Measurements : [1797.68, 347339, -0.0682253, -0.648295] ---- -Label : 1 -Position : [909.892, 1265.66] -Measurements : [1262.16, 190904, -0.236929, -0.991898] ---- -Label : 1 -Position : [1356.12, 1265.76] -Measurements : [828.752, 64321.5, 0.126462, -1.15868] ---- -Label : 1 -Position : [848.874, 1265.89] -Measurements : [1281.12, 148392, -0.17597, -0.815121] ---- -Label : 1 -Position : [87.2103, 1266.14] -Measurements : [1816.03, 371552, -0.583664, -0.689621] ---- -Label : 1 -Position : [211.147, 1266.16] -Measurements : [1463.62, 447437, 0.0565107, -1.24945] ---- -Label : 1 -Position : [1371, 1266.57] -Measurements : [1125.29, 237328, 0.411838, -1.31055] ---- -Label : 1 -Position : [911.516, 1266.67] -Measurements : [1438.42, 170534, -0.275625, -0.264899] ---- -Label : 1 -Position : [1384.73, 1266.8] -Measurements : [2255.6, 452318, -0.187656, -1.04375] ---- -Label : 1 -Position : [1326.89, 1266.96] -Measurements : [1422.6, 356425, 0.90661, 0.245215] ---- -Label : 1 -Position : [988.032, 1267.02] -Measurements : [1720.89, 294120, -0.213187, -0.818371] ---- -Label : 0 -Position : [143.171, 1267.03] -Measurements : [1126.34, 5577.71, 0.00119126, 0.066821] ---- -Label : 1 -Position : [276.633, 1267.24] -Measurements : [1697.35, 293153, -0.316405, -0.794437] ---- -Label : 1 -Position : [989.911, 1267.25] -Measurements : [1739.56, 333620, -0.227823, -0.951713] ---- -Label : 1 -Position : [792.634, 1267.3] -Measurements : [993.373, 277716, 0.672034, -1.04451] ---- -Label : 1 -Position : [956.782, 1267.39] -Measurements : [1493.11, 185979, -0.553917, 0.497812] ---- -Label : 1 -Position : [88.04, 1267.42] -Measurements : [1767.38, 342539, -0.683385, -0.662016] ---- -Label : 1 -Position : [276.968, 1267.42] -Measurements : [1697.35, 293153, -0.316405, -0.794437] ---- -Label : 1 -Position : [218.741, 1267.62] -Measurements : [1396.54, 642949, 0.314594, -1.38164] ---- -Label : 1 -Position : [852.026, 1267.71] -Measurements : [1427.76, 232056, -0.322138, -0.29812] ---- -Label : 1 -Position : [1375.94, 1267.72] -Measurements : [1520.37, 421227, 0.245601, -0.843611] ---- -Label : 1 -Position : [851.033, 1267.74] -Measurements : [1478.78, 203214, -0.30586, -0.020615] ---- -Label : 1 -Position : [1264.87, 1267.85] -Measurements : [1902.4, 311784, -0.272121, -0.387927] ---- -Label : 1 -Position : [1337.96, 1267.87] -Measurements : [1371.52, 495454, 0.828779, -0.641853] ---- -Label : 1 -Position : [959.439, 1267.9] -Measurements : [1518.89, 144257, -0.116293, 0.122405] ---- -Label : 1 -Position : [20.968, 1267.94] -Measurements : [1305.88, 421491, 0.425273, -1.34135] ---- -Label : 1 -Position : [770.269, 1268.25] -Measurements : [1154.15, 61894.7, 0.79354, 3.19206] ---- -Label : 1 -Position : [87.3082, 1268.27] -Measurements : [1643.83, 371150, -0.583751, -0.957718] ---- -Label : 1 -Position : [985.029, 1268.52] -Measurements : [1510.67, 231324, -0.040573, -0.65032] ---- -Label : 1 -Position : [831.137, 1268.53] -Measurements : [1289.83, 128331, -0.0455321, -0.354233] ---- -Label : 1 -Position : [829.7, 1268.6] -Measurements : [1309.19, 144735, -0.394333, -0.229632] ---- -Label : 1 -Position : [1318.33, 1268.66] -Measurements : [1489.87, 430070, 0.558454, -0.690285] ---- -Label : 1 -Position : [215.349, 1269.55] -Measurements : [1348.37, 436328, 0.158105, -1.3495] ---- -Label : 1 -Position : [276.067, 1269.73] -Measurements : [1634.96, 259204, -0.250051, -1.31033] ---- -Label : 1 -Position : [913.98, 1269.74] -Measurements : [1590.94, 303890, 0.268524, -0.436501] ---- -Label : 1 -Position : [916.012, 1269.89] -Measurements : [1322.41, 455273, 0.481862, -0.874612] ---- -Label : 1 -Position : [830.664, 1269.9] -Measurements : [1300.54, 128599, -0.0110866, -0.485615] ---- -Label : 1 -Position : [984.425, 1269.95] -Measurements : [1354.8, 267468, 0.051039, -0.875478] ---- -Label : 1 -Position : [274.408, 1269.98] -Measurements : [1710.64, 220996, -0.607287, -0.680576] ---- -Label : 1 -Position : [790.909, 1270.03] -Measurements : [1009.64, 228475, 0.790661, -0.702848] ---- -Label : 1 -Position : [829.089, 1270.17] -Measurements : [1260.05, 157168, -0.221084, -0.576477] ---- -Label : 1 -Position : [1266.47, 1270.31] -Measurements : [1528.04, 463861, 0.0818214, -0.944515] ---- -Label : 1 -Position : [216.552, 1270.5] -Measurements : [1292.89, 435018, 0.341703, -1.29119] ---- -Label : 1 -Position : [980.25, 1270.53] -Measurements : [971.972, 183987, 0.463825, -0.904142] ---- -Label : 1 -Position : [850.388, 1270.58] -Measurements : [1791.48, 305852, 0.236115, -0.435699] ---- -Label : 1 -Position : [272.602, 1270.59] -Measurements : [1709.99, 221587, -0.83505, 0.0882693] ---- -Label : 1 -Position : [1341.51, 1270.61] -Measurements : [1636.54, 876339, 0.406497, -1.34153] ---- -Label : 1 -Position : [1339.22, 1270.87] -Measurements : [1672.11, 821933, 0.411704, -1.28192] ---- -Label : 1 -Position : [882.049, 1270.97] -Measurements : [730.39, 291352, 1.49659, 0.77032] ---- -Label : 1 -Position : [915.274, 1271.38] -Measurements : [1415.48, 483783, 0.322776, -1.11401] ---- -Label : 1 -Position : [1330.2, 1271.69] -Measurements : [1883.21, 734004, 0.20238, -1.38058] ---- -Label : 1 -Position : [87.8088, 1271.74] -Measurements : [1409.39, 485721, -0.0731958, -1.42397] ---- -Label : 1 -Position : [849.929, 1271.89] -Measurements : [1864.68, 346751, 0.145787, -0.555148] ---- -Label : 1 -Position : [843.19, 1271.93] -Measurements : [1304.97, 427993, 1.18084, 0.251304] ---- -Label : 1 -Position : [912.335, 1272] -Measurements : [1676.71, 318031, 0.0110329, -0.679424] ---- -Label : 1 -Position : [833.846, 1272.01] -Measurements : [1154.08, 111580, 0.451155, 0.0667646] ---- -Label : 1 -Position : [217.268, 1272.16] -Measurements : [1273.29, 497893, 0.610457, -1.01856] ---- -Label : 1 -Position : [20.1124, 1272.48] -Measurements : [1518.92, 434892, -0.0169752, -1.60539] ---- -Label : 1 -Position : [824.266, 1272.59] -Measurements : [843.047, 220276, 0.856368, -0.413498] ---- -Label : 0 -Position : [155.044, 1272.63] -Measurements : [998.884, 9513.87, -0.615159, -1.08871] ---- -Label : 1 -Position : [87.7067, 1272.71] -Measurements : [1258.22, 481950, 0.229136, -1.36867] ---- -Label : 1 -Position : [1321.6, 1272.92] -Measurements : [1535.69, 372124, 0.323465, -0.853967] ---- -Label : 1 -Position : [271.795, 1272.92] -Measurements : [1717.79, 191248, -0.775414, -0.0244705] ---- -Label : 1 -Position : [1319.38, 1273.82] -Measurements : [1733.55, 579491, 0.254928, -1.03958] ---- -Label : 1 -Position : [272.18, 1273.97] -Measurements : [1688.14, 207070, -0.614185, -0.601518] ---- -Label : 1 -Position : [956.982, 1274.05] -Measurements : [1401.2, 322769, -0.458076, -1.20576] ---- -Label : 1 -Position : [888.481, 1274.08] -Measurements : [938.682, 279865, 0.983311, -0.0747808] ---- -Label : 1 -Position : [1031.94, 1274.46] -Measurements : [1513.22, 286206, -0.609127, -0.540951] ---- -Label : 1 -Position : [1334.49, 1274.66] -Measurements : [1957.52, 880910, -0.112217, -1.50568] ---- -Label : 1 -Position : [847.111, 1275.08] -Measurements : [1983.82, 444925, -0.334283, -0.835614] ---- -Label : 1 -Position : [884.385, 1275.08] -Measurements : [1246.37, 323448, 0.0199728, -1.2167] ---- -Label : 1 -Position : [91.112, 1275.1] -Measurements : [1171.22, 397123, 0.631661, -0.986173] ---- -Label : 1 -Position : [855.084, 1275.5] -Measurements : [1314.45, 718846, 0.560956, -1.25662] ---- -Label : 1 -Position : [958.968, 1276.2] -Measurements : [1262.02, 393797, -0.0187911, -1.60684] ---- -Label : 1 -Position : [846.588, 1276.28] -Measurements : [1896.2, 528793, -0.199987, -1.21472] ---- -Label : 1 -Position : [1030.64, 1276.46] -Measurements : [1598.17, 156800, -0.109607, -0.760337] ---- -Label : 0 -Position : [128.04, 1276.49] -Measurements : [991.299, 7790.14, 0.064431, -0.870962] ---- -Label : 1 -Position : [270.312, 1276.64] -Measurements : [1593.83, 167078, -0.457771, -0.818316] ---- -Label : 1 -Position : [908.649, 1276.91] -Measurements : [1711.3, 353313, -0.0488718, -0.944461] ---- -Label : 1 -Position : [887.404, 1277.37] -Measurements : [1249.65, 262145, 0.185639, -0.900697] ---- -Label : 0 -Position : [129.743, 1277.84] -Measurements : [1003.63, 7396.67, -0.209893, -1.03153] ---- -Label : 1 -Position : [1030.17, 1277.91] -Measurements : [1580.75, 146128, 0.0477945, -0.799761] ---- -Label : 1 -Position : [274.75, 1277.93] -Measurements : [1297.25, 250047, 0.484192, -1.08746] ---- -Label : 1 -Position : [957.019, 1278.06] -Measurements : [1040.58, 459401, 0.576061, -1.43294] ---- -Label : 1 -Position : [1035.07, 1278.09] -Measurements : [1308.67, 237155, 0.492969, -0.964064] ---- -Label : 1 -Position : [216.04, 1278.18] -Measurements : [1466.14, 301373, 0.242406, -0.86261] ---- -Label : 1 -Position : [845.997, 1278.49] -Measurements : [1694.7, 656378, 0.0389483, -1.39865] ---- -Label : 0 -Position : [147.283, 1278.52] -Measurements : [1004.62, 10409.4, -0.395005, -0.081651] ---- -Label : 1 -Position : [1028.66, 1278.55] -Measurements : [1501.99, 134401, -0.113138, 0.0213176] ---- -Label : 1 -Position : [1312.18, 1278.65] -Measurements : [2170.1, 460425, 0.00151945, -1.37389] ---- -Label : 1 -Position : [220.876, 1279.07] -Measurements : [1343.88, 464903, 0.384356, -1.15198] ---- -Label : 1 -Position : [887.442, 1279.07] -Measurements : [1373.82, 278442, 0.461498, -0.587649] ---- -Label : 1 -Position : [885.585, 1279.15] -Measurements : [1500.34, 254637, 0.156553, -0.71584] ---- -Label : 1 -Position : [268.394, 1279.16] -Measurements : [1546.53, 177055, -0.0186647, -0.696369] ---- -Label : 1 -Position : [211.056, 1279.61] -Measurements : [1261.95, 131954, 0.423172, -0.969613] ---- -Label : 1 -Position : [903.99, 1279.7] -Measurements : [1184.96, 251650, 0.422302, -0.378776] ---- -Label : 1 -Position : [1028.73, 1279.84] -Measurements : [1498.25, 107090, 0.112483, -0.219468] ---- -Label : 1 -Position : [821.212, 1279.97] -Measurements : [584.705, 75054.7, 2.47731, 5.77632] ---- -Label : 1 -Position : [884.794, 1280] -Measurements : [1551.68, 227235, 0.0728988, -0.574533] ---- -Label : 1 -Position : [1027.8, 1280.05] -Measurements : [1496.35, 79258, -0.183097, 0.0157085] ---- -Label : 1 -Position : [1052.41, 1280.26] -Measurements : [692.831, 123755, 0.87654, -0.506265] ---- -Label : 1 -Position : [847.111, 1280.41] -Measurements : [1675.81, 718393, 0.0118482, -1.38391] ---- -Label : 1 -Position : [31.5608, 1280.81] -Measurements : [1074.84, 519498, 1.13997, -0.281376] ---- -Label : 1 -Position : [30.86, 1280.87] -Measurements : [1158.96, 534948, 0.9088, -0.781694] ---- -Label : 1 -Position : [1311.38, 1280.97] -Measurements : [2190.12, 534243, -0.0713197, -1.45898] ---- -Label : 1 -Position : [904.631, 1281.38] -Measurements : [1110.87, 311620, 0.560807, -0.429911] ---- -Label : 1 -Position : [265.704, 1281.76] -Measurements : [1605.43, 290249, -0.197736, -0.743859] ---- -Label : 1 -Position : [980.738, 1281.83] -Measurements : [1217.45, 301303, -0.0627685, -1.23875] ---- -Label : 1 -Position : [263.58, 1281.92] -Measurements : [1562.99, 354345, -0.324655, -0.787033] ---- -Label : 1 -Position : [905.633, 1281.98] -Measurements : [1198.26, 347487, 0.538262, -0.35413] ---- -Label : 0 -Position : [138.748, 1282] -Measurements : [1078.39, 4122.25, -1.31527, 2.95209] ---- -Label : 1 -Position : [845.776, 1282.08] -Measurements : [1226.5, 593189, 0.744271, -0.893227] ---- -Label : 1 -Position : [1053.11, 1282.15] -Measurements : [883.654, 208383, 0.55272, -0.935005] ---- -Label : 1 -Position : [983.482, 1282.32] -Measurements : [1189.96, 385567, 0.354785, -1.20446] ---- -Label : 1 -Position : [905.782, 1282.65] -Measurements : [1088.53, 308535, 0.641278, -0.167966] ---- -Label : 1 -Position : [267.892, 1282.85] -Measurements : [1587.21, 295656, 0.321701, -0.924107] ---- -Label : 1 -Position : [882.746, 1282.87] -Measurements : [1620.12, 270193, -0.00614568, -0.732935] ---- -Label : 1 -Position : [880.472, 1283.03] -Measurements : [1629.69, 382163, -0.283007, -0.797636] ---- -Label : 1 -Position : [979.726, 1283.3] -Measurements : [1552.01, 289379, -0.0322378, -0.50485] ---- -Label : 1 -Position : [1316.15, 1283.34] -Measurements : [2019.45, 652099, -0.119188, -1.3273] ---- -Label : 1 -Position : [1027.43, 1283.88] -Measurements : [1588.91, 142617, 0.0784781, 0.0895234] ---- -Label : 1 -Position : [1052.3, 1284.23] -Measurements : [1116.56, 250040, 0.359402, -0.953017] ---- -Label : 1 -Position : [28.648, 1284.32] -Measurements : [1369.61, 504197, 0.496128, -1.29258] ---- -Label : 1 -Position : [975.996, 1284.45] -Measurements : [1456.06, 226183, 0.106559, -0.349473] ---- -Label : 1 -Position : [824.993, 1284.5] -Measurements : [777.24, 101012, 0.645523, -0.0665529] ---- -Label : 1 -Position : [1051.27, 1284.83] -Measurements : [1097.76, 250196, 0.450734, -0.915886] ---- -Label : 1 -Position : [263.144, 1284.83] -Measurements : [1797.54, 346579, 0.00165704, -0.597132] ---- -Label : 1 -Position : [821.972, 1285.1] -Measurements : [803.352, 86063, 0.527319, 0.176368] ---- -Label : 1 -Position : [849.633, 1285.16] -Measurements : [969.021, 412674, 1.30352, 0.523496] ---- -Label : 0 -Position : [149.084, 1285.89] -Measurements : [937.225, 14747.5, 0.690499, -0.914493] ---- -Label : 1 -Position : [902.142, 1286.4] -Measurements : [764.617, 134051, 0.805115, -0.849881] ---- -Label : 1 -Position : [979.775, 1286.55] -Measurements : [1692.08, 202153, -0.222333, 0.223186] ---- -Label : 1 -Position : [1051.77, 1286.75] -Measurements : [1197.8, 211037, 0.23475, -0.806127] ---- -Label : 1 -Position : [842.606, 1286.96] -Measurements : [763.475, 108156, 1.50014, 2.19371] ---- -Label : 1 -Position : [258.976, 1287.05] -Measurements : [1336.58, 616761, 0.448759, -1.17947] ---- -Label : 1 -Position : [881.824, 1287.12] -Measurements : [1554.23, 492880, -0.103141, -1.32353] ---- -Label : 1 -Position : [1055.29, 1287.86] -Measurements : [1206.71, 259315, 0.257619, -0.948606] ---- -Label : 1 -Position : [979.22, 1288.14] -Measurements : [1734.56, 221384, -0.481802, 0.104913] ---- -Label : 1 -Position : [1052.3, 1288.29] -Measurements : [1371.44, 218768, 0.402421, -0.376686] ---- -Label : 1 -Position : [1029.72, 1288.3] -Measurements : [1321.65, 313501, 0.272091, -0.930014] ---- -Label : 1 -Position : [879.47, 1288.6] -Measurements : [1362.79, 616098, 0.193422, -1.50539] ---- -Label : 1 -Position : [1030.22, 1288.62] -Measurements : [1263.72, 288958, 0.481594, -0.715563] ---- -Label : 1 -Position : [245.326, 1288.87] -Measurements : [919.186, 242214, 0.262161, -1.57769] ---- -Label : 1 -Position : [847.105, 1289.01] -Measurements : [618.814, 67529.9, 2.39973, 5.69829] ---- -Label : 1 -Position : [1026.2, 1289.2] -Measurements : [1307.15, 419216, 0.134594, -1.27735] ---- -Label : 1 -Position : [257.613, 1289.41] -Measurements : [1213.13, 514020, 0.530758, -1.20613] ---- -Label : 1 -Position : [262.12, 1289.44] -Measurements : [1504.81, 631578, 0.177676, -1.35678] ---- -Label : 1 -Position : [1029.37, 1289.65] -Measurements : [1239.88, 342466, 0.452851, -0.882981] ---- -Label : 1 -Position : [883.894, 1291.42] -Measurements : [1113.42, 481308, 0.955155, -0.43973] ---- -Label : 1 -Position : [1050.66, 1291.57] -Measurements : [1452.92, 269077, -0.0365557, -0.611046] ---- -Label : 1 -Position : [1048, 1291.74] -Measurements : [1332.31, 239550, 0.0927713, -0.789175] ---- -Label : 1 -Position : [947.826, 1291.87] -Measurements : [1284.8, 442684, -0.045098, -1.29949] ---- -Label : 1 -Position : [247.784, 1292.51] -Measurements : [1189.18, 147835, -0.331024, -0.800488] ---- -Label : 1 -Position : [234.432, 1292.69] -Measurements : [784.546, 174269, 0.863796, -0.492083] ---- -Label : 1 -Position : [976.908, 1292.69] -Measurements : [1814.38, 105590, -0.0835875, 0.619116] ---- -Label : 1 -Position : [972.332, 1292.73] -Measurements : [1521.5, 219603, -0.555199, -0.674268] ---- -Label : 0 -Position : [129.859, 1292.76] -Measurements : [1101.52, 4788.56, -0.57896, 2.62287] ---- -Label : 1 -Position : [243.619, 1293.22] -Measurements : [1205.13, 114724, -0.496095, -0.772061] ---- -Label : 1 -Position : [952.219, 1293.29] -Measurements : [1203.54, 372327, 0.325149, -1.04675] ---- -Label : 1 -Position : [266.455, 1293.42] -Measurements : [1091.52, 342609, 1.79936, 3.39022] ---- -Label : 1 -Position : [899.823, 1293.5] -Measurements : [1230.89, 273047, 0.189006, -0.938034] ---- -Label : 1 -Position : [981.806, 1293.51] -Measurements : [1493.08, 358657, -0.161643, -1.11082] ---- -Label : 1 -Position : [241.128, 1293.54] -Measurements : [1189.55, 127694, -0.330533, -0.951602] ---- -Label : 1 -Position : [251.88, 1293.54] -Measurements : [1161.08, 224081, 0.321028, -1.06579] ---- -Label : 1 -Position : [904.409, 1293.92] -Measurements : [1270.29, 332790, 0.0623967, -1.29094] ---- -Label : 1 -Position : [1046.2, 1294.07] -Measurements : [1401.63, 352376, 0.289789, -0.802118] ---- -Label : 1 -Position : [231.646, 1294.63] -Measurements : [625.734, 84893.5, 1.40675, 0.786302] ---- -Label : 1 -Position : [242.785, 1295.22] -Measurements : [1201.73, 114580, -0.222575, -1.07302] ---- -Label : 1 -Position : [944.165, 1295.72] -Measurements : [1274.46, 297008, 0.135623, -0.748177] ---- -Label : 1 -Position : [235.496, 1296.1] -Measurements : [914.635, 160515, 0.579154, -0.723332] ---- -Label : 1 -Position : [1052.76, 1296.35] -Measurements : [1481.06, 484212, 0.189049, -1.26211] ---- -Label : 1 -Position : [1020.76, 1296.49] -Measurements : [1123.55, 275943, 0.0951406, -1.25244] ---- -Label : 1 -Position : [1017.42, 1296.52] -Measurements : [1112.06, 306191, 0.105569, -1.32919] ---- -Label : 1 -Position : [1278.33, 1296.57] -Measurements : [1080.19, 323320, 0.213425, -1.06319] ---- -Label : 1 -Position : [943.056, 1296.81] -Measurements : [1169.21, 294729, 0.372983, -0.743316] ---- -Label : 1 -Position : [903.626, 1296.95] -Measurements : [1500.36, 247677, -0.23278, -0.886629] ---- -Label : 1 -Position : [900.722, 1297.2] -Measurements : [1605.72, 253697, -0.164983, -0.436129] ---- -Label : 1 -Position : [1109.2, 1297.33] -Measurements : [664.282, 220213, 1.26221, 0.033141] ---- -Label : 1 -Position : [948.646, 1297.61] -Measurements : [1424.45, 228712, 0.262428, -0.431817] ---- -Label : 1 -Position : [1048.2, 1297.71] -Measurements : [1635.77, 363263, 0.00734187, -1.0482] ---- -Label : 1 -Position : [1024.04, 1297.85] -Measurements : [942.811, 231741, 0.602363, -1.05447] ---- -Label : 1 -Position : [902.728, 1297.86] -Measurements : [1574.79, 288975, -0.16999, -0.733606] ---- -Label : 1 -Position : [980.837, 1298.09] -Measurements : [1512.38, 290944, -0.262152, -1.09098] ---- -Label : 1 -Position : [254.458, 1298.11] -Measurements : [1016.3, 150699, 1.47541, 1.93021] ---- -Label : 1 -Position : [241.451, 1298.22] -Measurements : [1106.94, 92663.9, 0.389068, -0.54831] ---- -Label : 1 -Position : [943.898, 1298.38] -Measurements : [1312.01, 404374, 0.671227, -0.272285] ---- -Label : 1 -Position : [249.409, 1298.41] -Measurements : [1055.93, 119827, 1.20531, 1.66093] ---- -Label : 1 -Position : [876.193, 1298.43] -Measurements : [1111.02, 375501, 0.251819, -1.26465] ---- -Label : 1 -Position : [1095.77, 1298.56] -Measurements : [868.841, 522024, 1.18092, -0.100358] ---- -Label : 1 -Position : [977.318, 1299.25] -Measurements : [1659.96, 167972, -0.402616, 0.00383845] ---- -Label : 1 -Position : [1279, 1299.54] -Measurements : [1197.4, 312665, 0.201561, -1.01274] ---- -Label : 1 -Position : [1016.34, 1299.64] -Measurements : [1289.29, 259736, -0.126745, -0.912542] ---- -Label : 1 -Position : [1107.46, 1299.67] -Measurements : [973.579, 389147, 0.366617, -1.37815] ---- -Label : 1 -Position : [1017.76, 1299.76] -Measurements : [1340.19, 226188, -0.159394, -0.784173] ---- -Label : 1 -Position : [975.329, 1299.96] -Measurements : [1644.75, 117759, -0.0282118, -0.109477] ---- -Label : 1 -Position : [899.731, 1300.02] -Measurements : [1759.81, 252505, 0.264865, -0.246757] ---- -Label : 1 -Position : [876.954, 1300.08] -Measurements : [1400.31, 402736, -0.0257444, -0.864611] ---- -Label : 1 -Position : [1278.17, 1300.19] -Measurements : [1151.09, 352506, 0.229328, -1.16205] ---- -Label : 1 -Position : [1303.35, 1300.31] -Measurements : [1247.42, 364716, 0.749556, -0.406762] ---- -Label : 1 -Position : [1303.03, 1300.68] -Measurements : [1247.42, 364716, 0.749556, -0.406762] ---- -Label : 1 -Position : [873.989, 1300.86] -Measurements : [1393.78, 402490, -0.0772356, -0.855223] ---- -Label : 1 -Position : [872.429, 1301.3] -Measurements : [1463.42, 392224, -0.185586, -0.916678] ---- -Label : 1 -Position : [1106.36, 1301.81] -Measurements : [1176.02, 329423, -0.0908292, -1.18279] ---- -Label : 1 -Position : [1090.74, 1302.65] -Measurements : [1602.41, 383050, -0.500256, -0.769327] ---- -Label : 1 -Position : [978.946, 1302.68] -Measurements : [1461.16, 276998, -0.0681581, -0.901551] ---- -Label : 1 -Position : [1092.44, 1303.04] -Measurements : [1698.65, 358681, -0.764296, -0.361357] ---- -Label : 1 -Position : [901.658, 1303.49] -Measurements : [1625.82, 458929, -0.151398, -1.01566] ---- -Label : 1 -Position : [1287.62, 1303.63] -Measurements : [1594.12, 405681, -0.0167183, -1.14954] ---- -Label : 1 -Position : [1021.17, 1303.73] -Measurements : [1293.88, 184891, 0.35287, -0.836941] ---- -Label : 1 -Position : [1020.76, 1303.86] -Measurements : [1359.71, 214893, 0.371214, -0.818615] ---- -Label : 1 -Position : [64.5144, 1303.97] -Measurements : [1963.91, 250748, -0.758677, 0.0597732] ---- -Label : 1 -Position : [897.036, 1304.16] -Measurements : [1770.24, 215962, 0.413377, 0.0899878] ---- -Label : 1 -Position : [1296.11, 1304.27] -Measurements : [1932.16, 281025, -0.504242, -0.651714] ---- -Label : 1 -Position : [975.679, 1304.57] -Measurements : [1385.1, 153055, -0.225421, -0.351467] ---- -Label : 1 -Position : [1016.08, 1304.8] -Measurements : [1387.8, 255431, 0.100429, -0.956067] ---- -Label : 1 -Position : [876.146, 1304.98] -Measurements : [1843.93, 315213, 0.0379573, -0.771951] ---- -Label : 1 -Position : [69.173, 1305.07] -Measurements : [2000.06, 395692, -0.428954, -0.505336] ---- -Label : 1 -Position : [222.84, 1305.14] -Measurements : [1075.16, 146844, 0.0414129, -0.744638] ---- -Label : 1 -Position : [1307.68, 1305.28] -Measurements : [938.427, 121598, 0.816699, -0.150508] ---- -Label : 1 -Position : [1089.63, 1305.57] -Measurements : [1678.54, 410824, -0.545004, -0.940127] ---- -Label : 1 -Position : [1048.54, 1305.7] -Measurements : [1792.35, 686658, -0.0542441, -1.33292] ---- -Label : 1 -Position : [203.531, 1305.81] -Measurements : [1279.7, 191392, 0.829117, 0.359532] ---- -Label : 1 -Position : [1046.56, 1305.91] -Measurements : [1773.79, 639600, 0.0380616, -1.24927] ---- -Label : 1 -Position : [1287.42, 1306.03] -Measurements : [1612.31, 414251, 0.00757947, -1.15186] ---- -Label : 1 -Position : [898.521, 1306.13] -Measurements : [1711.11, 311933, -0.0518588, -0.231079] ---- -Label : 1 -Position : [1046.17, 1306.74] -Measurements : [1753.3, 651650, 0.0661669, -1.23661] ---- -Label : 1 -Position : [1045.45, 1307.01] -Measurements : [1700.51, 625055, 0.0962782, -1.19543] ---- -Label : 1 -Position : [942.911, 1307.03] -Measurements : [1821.26, 457168, -0.167818, -1.26576] ---- -Label : 1 -Position : [891.46, 1307.07] -Measurements : [1356.31, 180761, 0.0181037, -1.12644] ---- -Label : 1 -Position : [1115.72, 1307.13] -Measurements : [877.471, 221693, 0.31113, -1.49547] ---- -Label : 1 -Position : [1287.2, 1307.32] -Measurements : [1616.54, 417166, 0.00516001, -1.16522] ---- -Label : 1 -Position : [1297.44, 1307.32] -Measurements : [1844.23, 459064, -0.448991, -1.13823] ---- -Label : 1 -Position : [1119.08, 1307.41] -Measurements : [572.121, 122755, 1.76644, 1.57128] ---- -Label : 1 -Position : [968.716, 1307.44] -Measurements : [1122.78, 243379, -0.082707, -1.55788] ---- -Label : 1 -Position : [71.144, 1307.87] -Measurements : [1874.11, 478684, -0.0578206, -1.00147] ---- -Label : 1 -Position : [1019.94, 1307.95] -Measurements : [1437.86, 287350, 0.344329, -1.03668] ---- -Label : 1 -Position : [893.499, 1308.17] -Measurements : [1601.11, 224758, -0.0473255, -0.164566] ---- -Label : 1 -Position : [874.918, 1308.26] -Measurements : [2001.01, 269378, -0.462906, -0.385251] ---- -Label : 1 -Position : [895.398, 1308.26] -Measurements : [1702.74, 217549, -0.0173452, -0.193424] ---- -Label : 1 -Position : [63.464, 1308.38] -Measurements : [2091.74, 177450, -0.605216, -0.167407] ---- -Label : 1 -Position : [52.9436, 1308.58] -Measurements : [2396.48, 243525, -0.655844, -0.187843] ---- -Label : 1 -Position : [977.276, 1308.87] -Measurements : [947.372, 199620, 0.656709, -1.18114] ---- -Label : 1 -Position : [204.776, 1308.9] -Measurements : [1268.92, 287573, 0.5939, -0.569668] ---- -Label : 1 -Position : [205.458, 1309.39] -Measurements : [1178.51, 355079, 0.601239, -0.811588] ---- -Label : 1 -Position : [1300.06, 1309.61] -Measurements : [1547.19, 606793, 0.180677, -1.66337] ---- -Label : 1 -Position : [880.849, 1309.69] -Measurements : [1446.04, 301160, 1.12097, 0.0218886] ---- -Label : 1 -Position : [899.513, 1309.78] -Measurements : [1554.62, 436688, -0.0295516, -1.01249] ---- -Label : 1 -Position : [971.311, 1309.91] -Measurements : [1020.75, 258859, 0.25137, -1.58033] ---- -Label : 1 -Position : [52.712, 1309.92] -Measurements : [2489.45, 219399, -0.697646, -0.117475] ---- -Label : 1 -Position : [221.16, 1309.92] -Measurements : [1231.95, 319143, 0.184855, -0.929334] ---- -Label : 1 -Position : [1092.03, 1310] -Measurements : [1830.11, 182334, -0.727102, 0.373403] ---- -Label : 1 -Position : [944.084, 1310.26] -Measurements : [1611.3, 361606, 0.112868, -0.98271] ---- -Label : 1 -Position : [37.1531, 1310.74] -Measurements : [1818.07, 347091, -0.0132461, -1.35249] ---- -Label : 1 -Position : [944.37, 1311.09] -Measurements : [1468.89, 326165, 0.26123, -0.97454] ---- -Label : 1 -Position : [871.231, 1311.12] -Measurements : [1917.48, 296230, -0.537008, 0.0507425] ---- -Label : 1 -Position : [876.025, 1311.28] -Measurements : [1741.13, 411771, 0.108182, -1.38274] ---- -Label : 1 -Position : [71.9168, 1311.3] -Measurements : [1754.99, 444855, 0.343359, -0.740937] ---- -Label : 1 -Position : [970.319, 1311.52] -Measurements : [834.653, 246444, 0.989766, -0.631592] ---- -Label : 1 -Position : [38.7906, 1311.54] -Measurements : [1930.26, 331406, -0.187449, -1.26945] ---- -Label : 1 -Position : [939.61, 1311.54] -Measurements : [1132.66, 349886, 0.744953, -0.275352] ---- -Label : 1 -Position : [1041.65, 1311.64] -Measurements : [1359.79, 309708, 0.199126, -0.684238] ---- -Label : 1 -Position : [1013.51, 1311.84] -Measurements : [1400.59, 554639, 0.06974, -1.41732] ---- -Label : 1 -Position : [1016.46, 1311.9] -Measurements : [1577.26, 407891, -0.0390692, -1.13643] ---- -Label : 1 -Position : [1116.6, 1312.05] -Measurements : [1258.37, 364290, 0.0737243, -0.960195] ---- -Label : 1 -Position : [1091.4, 1312.26] -Measurements : [1807.8, 192872, -0.583877, -0.0512258] ---- -Label : 1 -Position : [219.056, 1312.27] -Measurements : [1432.78, 404600, -0.143565, -1.06002] ---- -Label : 1 -Position : [870.611, 1312.33] -Measurements : [1814.56, 390739, -0.452088, -0.499928] ---- -Label : 1 -Position : [893.759, 1312.35] -Measurements : [1780.37, 197400, -0.0722917, 0.448701] ---- -Label : 1 -Position : [877.092, 1312.56] -Measurements : [1562.26, 413992, 0.588014, -1.01357] ---- -Label : 1 -Position : [224.568, 1312.62] -Measurements : [1348.31, 227152, 0.51743, -0.564394] ---- -Label : 1 -Position : [60.9692, 1312.65] -Measurements : [2092.48, 268651, -0.18664, -0.315039] ---- -Label : 1 -Position : [1015.43, 1312.87] -Measurements : [1481.93, 489326, 0.0581409, -1.31392] ---- -Label : 1 -Position : [47.6352, 1313.1] -Measurements : [2422.46, 310526, -1.00005, 0.241473] ---- -Label : 1 -Position : [220.108, 1313.97] -Measurements : [1521.66, 352754, -0.0880711, -0.960449] ---- -Label : 1 -Position : [52.4728, 1314.26] -Measurements : [2257.54, 555768, -0.656299, -0.82843] ---- -Label : 1 -Position : [873.182, 1314.51] -Measurements : [1635.64, 347752, -0.0966372, -1.25582] ---- -Label : 1 -Position : [1090.8, 1314.51] -Measurements : [1759.43, 230099, -0.601054, -0.174954] ---- -Label : 1 -Position : [44.52, 1314.53] -Measurements : [2294.61, 290795, -0.731813, -0.0650435] ---- -Label : 1 -Position : [875.18, 1314.79] -Measurements : [1564.48, 364534, 0.178236, -1.3786] ---- -Label : 1 -Position : [941.682, 1314.81] -Measurements : [981.848, 178299, 0.344346, -1.13886] ---- -Label : 1 -Position : [1089.79, 1314.94] -Measurements : [1709.32, 233326, -0.579034, -0.312489] ---- -Label : 1 -Position : [37.352, 1315.04] -Measurements : [1717.94, 356852, 0.294923, -1.27952] ---- -Label : 1 -Position : [220.136, 1315.04] -Measurements : [1596.44, 320048, -0.0372491, -1.14698] ---- -Label : 1 -Position : [892.448, 1315.17] -Measurements : [1693.19, 281184, -0.209503, -0.33508] ---- -Label : 1 -Position : [44.5377, 1315.27] -Measurements : [2193.27, 419334, -0.689739, -0.504618] ---- -Label : 1 -Position : [890.586, 1315.32] -Measurements : [1556, 302679, -0.00125402, -0.758852] ---- -Label : 1 -Position : [1036.08, 1315.38] -Measurements : [1274.77, 330210, 0.294655, -1.02092] ---- -Label : 1 -Position : [870.822, 1315.63] -Measurements : [1511.51, 445933, -0.225569, -1.3706] ---- -Label : 1 -Position : [946.35, 1316] -Measurements : [914.94, 139810, 0.637199, -0.743085] ---- -Label : 1 -Position : [1090.58, 1316.25] -Measurements : [1717.1, 188884, -0.713842, 0.0164106] ---- -Label : 1 -Position : [1042.99, 1316.36] -Measurements : [1589.96, 257704, -0.350439, -0.670034] ---- -Label : 1 -Position : [215.102, 1317.07] -Measurements : [1697.26, 456729, -0.453818, -0.429782] ---- -Label : 1 -Position : [1110.03, 1317.51] -Measurements : [1078.43, 231753, 0.526966, -0.899589] ---- -Label : 1 -Position : [214.016, 1317.56] -Measurements : [1622, 506725, -0.301859, -0.772521] ---- -Label : 1 -Position : [891.302, 1317.68] -Measurements : [1559.72, 365709, 0.0457323, -0.988123] ---- -Label : 1 -Position : [1086.98, 1317.8] -Measurements : [1552.81, 266504, -0.531659, -0.428131] ---- -Label : 1 -Position : [887.466, 1318.56] -Measurements : [1208.13, 216550, 0.710414, -0.443342] ---- -Label : 1 -Position : [1039.6, 1318.6] -Measurements : [1651.32, 248948, -0.404652, -0.645923] ---- -Label : 1 -Position : [941.802, 1318.71] -Measurements : [913.476, 193404, 0.511469, -1.267] ---- -Label : 1 -Position : [941.932, 1319.08] -Measurements : [924.102, 220751, 0.724954, -0.684596] ---- -Label : 1 -Position : [217.576, 1319.65] -Measurements : [1823.71, 417133, 0.127804, -0.86612] ---- -Label : 1 -Position : [869.549, 1319.83] -Measurements : [1080.1, 369406, 0.874968, -0.571578] ---- -Label : 1 -Position : [1087.52, 1320.24] -Measurements : [1698.86, 201962, -0.15985, -0.337135] ---- -Label : 1 -Position : [1043.74, 1320.38] -Measurements : [1497.44, 401010, -0.21268, -1.3805] ---- -Label : 1 -Position : [1114.14, 1321.06] -Measurements : [1350.95, 181017, -0.14243, -1.10173] ---- -Label : 1 -Position : [212.968, 1321.7] -Measurements : [1776.1, 616859, -0.309671, -0.945149] ---- -Label : 1 -Position : [1085.11, 1322.19] -Measurements : [1645.56, 314442, -0.450896, -0.564527] ---- -Label : 1 -Position : [937.586, 1322.59] -Measurements : [1119.32, 256289, 0.264803, -1.19099] ---- -Label : 1 -Position : [220.624, 1322.68] -Measurements : [1333.74, 331630, 1.023, -0.422394] ---- -Label : 1 -Position : [1113.23, 1322.78] -Measurements : [1356.74, 187156, -0.277567, -1.1924] ---- -Label : 1 -Position : [1084.08, 1323.55] -Measurements : [1543.34, 396985, -0.24635, -1.02168] ---- -Label : 1 -Position : [1034.64, 1323.62] -Measurements : [1247.68, 232300, 0.158599, -0.886861] ---- -Label : 1 -Position : [1040.78, 1324.01] -Measurements : [1646.53, 275005, -0.254766, -0.755246] ---- -Label : 1 -Position : [962.501, 1324.12] -Measurements : [1188.32, 418831, 0.295935, -0.90213] ---- -Label : 1 -Position : [885.503, 1324.22] -Measurements : [1339.04, 335668, 0.646289, -1.07745] ---- -Label : 1 -Position : [1036.66, 1324.26] -Measurements : [1521.52, 249289, 0.155506, -0.6279] ---- -Label : 1 -Position : [1038.78, 1324.34] -Measurements : [1648.71, 228938, 0.0062626, -0.786374] ---- -Label : 1 -Position : [1085.06, 1324.34] -Measurements : [1577.87, 336021, -0.145536, -0.915619] ---- -Label : 1 -Position : [1108.77, 1324.37] -Measurements : [1188.77, 195140, 0.0129395, -1.20501] ---- -Label : 1 -Position : [212.055, 1324.41] -Measurements : [1869.87, 502797, -0.228788, -0.763631] ---- -Label : 1 -Position : [1109.74, 1324.93] -Measurements : [1241.67, 204417, -0.089655, -1.11295] ---- -Label : 1 -Position : [959.621, 1325.05] -Measurements : [1160.3, 227966, -0.113435, -1.1584] ---- -Label : 1 -Position : [1109.23, 1325.16] -Measurements : [1253, 197803, -0.122267, -1.04868] ---- -Label : 1 -Position : [212.572, 1325.19] -Measurements : [1867.71, 479306, -0.119474, -0.837442] ---- -Label : 1 -Position : [1082.65, 1325.2] -Measurements : [1355.99, 379338, 0.252832, -0.797388] ---- -Label : 1 -Position : [962.572, 1325.46] -Measurements : [1301.02, 382402, 0.0394973, -0.819866] ---- -Label : 1 -Position : [888.025, 1326.28] -Measurements : [1691.27, 420564, 0.235849, -0.969007] ---- -Label : 1 -Position : [1041.87, 1326.64] -Measurements : [1583.87, 375788, -0.235487, -1.00124] ---- -Label : 1 -Position : [1005.87, 1326.64] -Measurements : [767.13, 196445, 0.773894, -0.989564] ---- -Label : 1 -Position : [890.448, 1327.09] -Measurements : [1776.79, 420014, 0.15671, -1.06311] ---- -Label : 1 -Position : [1010.11, 1328.02] -Measurements : [1034.87, 208061, -0.161357, -1.38112] ---- -Label : 1 -Position : [962.021, 1328.41] -Measurements : [1687.99, 234360, 0.0141727, -0.411767] ---- -Label : 1 -Position : [1036.73, 1328.43] -Measurements : [1750.04, 259453, 0.0946967, -0.883668] ---- -Label : 1 -Position : [203.632, 1328.66] -Measurements : [1066.95, 434547, 0.302328, -1.57838] ---- -Label : 1 -Position : [1005.66, 1328.82] -Measurements : [927.061, 251058, 0.274468, -1.52142] ---- -Label : 1 -Position : [1083.83, 1328.84] -Measurements : [1453.46, 235202, 0.428073, -0.185369] ---- -Label : 1 -Position : [1083.83, 1329.25] -Measurements : [1472.37, 186843, 0.336424, -0.325738] ---- -Label : 1 -Position : [202.951, 1329.32] -Measurements : [1031.45, 417980, 0.38989, -1.47656] ---- -Label : 1 -Position : [210.92, 1329.38] -Measurements : [1682.02, 403155, 0.0554528, -0.913074] ---- -Label : 1 -Position : [205.732, 1329.62] -Measurements : [1392.06, 421998, -0.342022, -1.27645] ---- -Label : 1 -Position : [936.019, 1329.95] -Measurements : [1037.7, 216098, 0.598226, -0.73039] ---- -Label : 1 -Position : [200.546, 1330.55] -Measurements : [916.041, 389195, 0.73859, -1.00794] ---- -Label : 1 -Position : [930.207, 1331.09] -Measurements : [833.478, 137570, 0.680452, -0.65201] ---- -Label : 1 -Position : [961.343, 1331.6] -Measurements : [1615.36, 216538, 0.267333, -0.630965] ---- -Label : 1 -Position : [208.36, 1331.94] -Measurements : [1533.87, 383342, 0.0817045, -0.981815] ---- -Label : 1 -Position : [211.104, 1332] -Measurements : [1434.25, 382381, 0.528883, -0.908814] ---- -Label : 1 -Position : [1107.18, 1332.12] -Measurements : [1488.82, 182643, -0.128261, -0.592243] ---- -Label : 1 -Position : [1082.76, 1332.38] -Measurements : [1311.58, 166648, -0.0332113, 0.0124142] ---- -Label : 1 -Position : [1086.17, 1332.4] -Measurements : [1306.43, 134188, 0.327458, -0.299825] ---- -Label : 1 -Position : [935.129, 1332.42] -Measurements : [963.229, 116310, 0.44043, -0.954927] ---- -Label : 1 -Position : [1088.2, 1332.79] -Measurements : [1232.9, 107412, 0.599771, 0.0705997] ---- -Label : 1 -Position : [1031.61, 1332.82] -Measurements : [1411.46, 394940, 0.349675, -0.597819] ---- -Label : 1 -Position : [204.776, 1332.96] -Measurements : [1415.48, 312966, -0.393476, -1.11989] ---- -Label : 1 -Position : [1081.38, 1333.35] -Measurements : [1218.72, 202133, -0.297212, -0.809967] ---- -Label : 1 -Position : [1086.57, 1333.55] -Measurements : [1252.11, 148525, 0.174646, -0.431307] ---- -Label : 1 -Position : [1010.11, 1333.76] -Measurements : [1338.37, 142730, -0.37403, -0.740992] ---- -Label : 1 -Position : [1035.91, 1333.76] -Measurements : [1895.88, 379316, 0.0541412, -0.369077] ---- -Label : 1 -Position : [1011.92, 1333.77] -Measurements : [1294.03, 144761, -0.183736, -0.896126] ---- -Label : 1 -Position : [1007.17, 1334.09] -Measurements : [1414.44, 174034, -0.602613, -0.24203] ---- -Label : 1 -Position : [1014.34, 1334.09] -Measurements : [1101.03, 96307.8, 0.189611, -0.766939] ---- -Label : 1 -Position : [1082.31, 1334.24] -Measurements : [1155.18, 199033, -0.324596, -1.3479] ---- -Label : 1 -Position : [198.004, 1335.02] -Measurements : [1176.41, 398729, 0.00739016, -1.51755] ---- -Label : 1 -Position : [205.008, 1335.25] -Measurements : [1347.55, 267229, 0.160481, -1.42401] ---- -Label : 1 -Position : [964.443, 1335.33] -Measurements : [1415.62, 326990, 0.053222, -0.967151] ---- -Label : 1 -Position : [954.461, 1335.52] -Measurements : [1050.63, 98191.3, 0.288471, -0.468764] ---- -Label : 1 -Position : [200.68, 1335.52] -Measurements : [1305.33, 339941, -0.236251, -1.28093] ---- -Label : 1 -Position : [1080.43, 1335.71] -Measurements : [1075.66, 243875, -0.121086, -1.62054] ---- -Label : 1 -Position : [202.606, 1335.85] -Measurements : [1387.93, 284884, -0.262247, -1.21935] ---- -Label : 1 -Position : [1010.68, 1336.06] -Measurements : [1327.47, 167515, -0.237885, -0.913615] ---- -Label : 1 -Position : [1104.71, 1336.29] -Measurements : [1392.99, 213359, -0.331121, -0.548384] ---- -Label : 1 -Position : [1037.82, 1336.4] -Measurements : [1842.17, 531701, -0.167324, -0.914085] ---- -Label : 1 -Position : [1111.1, 1336.5] -Measurements : [1260.47, 387608, 0.214244, -1.4822] ---- -Label : 1 -Position : [934.956, 1336.65] -Measurements : [1130.51, 135065, 0.379975, -0.239017] ---- -Label : 1 -Position : [201.317, 1337.28] -Measurements : [1403.75, 285657, -0.101102, -1.19929] ---- -Label : 1 -Position : [1106.36, 1338.26] -Measurements : [1493.63, 187347, -0.197667, -0.594758] ---- -Label : 1 -Position : [198.12, 1338.59] -Measurements : [1371.62, 364326, -0.196164, -1.18324] ---- -Label : 1 -Position : [1007.24, 1338.67] -Measurements : [1467.74, 159950, -0.324834, -0.785349] ---- -Label : 1 -Position : [958.066, 1338.98] -Measurements : [1468.65, 156102, 0.261484, -0.727416] ---- -Label : 1 -Position : [1005.61, 1339.2] -Measurements : [1522.85, 165111, -0.490292, -0.491183] ---- -Label : 1 -Position : [934.31, 1339.39] -Measurements : [1134.29, 167900, 0.335453, -0.820453] ---- -Label : 1 -Position : [1027.08, 1339.54] -Measurements : [1254.46, 204678, 0.49336, -0.469979] ---- -Label : 1 -Position : [961.115, 1339.65] -Measurements : [1454.56, 179069, -0.115474, -0.587089] ---- -Label : 1 -Position : [1030.59, 1339.9] -Measurements : [1500.28, 282772, 0.373387, -0.581496] ---- -Label : 1 -Position : [1076.42, 1340.93] -Measurements : [1086.82, 424972, 0.495136, -1.06757] ---- -Label : 1 -Position : [1101.75, 1341.08] -Measurements : [1186.92, 234980, 0.0104893, -1.29114] ---- -Label : 1 -Position : [1006.9, 1341.49] -Measurements : [1531.96, 184549, -0.439923, -0.819245] ---- -Label : 1 -Position : [1105.19, 1341.53] -Measurements : [1417.8, 206917, -0.333818, -0.868903] ---- -Label : 1 -Position : [196.908, 1341.56] -Measurements : [1391.56, 379297, -0.315684, -1.1364] ---- -Label : 1 -Position : [928.389, 1341.71] -Measurements : [966.719, 160637, 0.114591, -1.08712] ---- -Label : 1 -Position : [931.876, 1341.75] -Measurements : [1082.87, 152359, 0.0190296, -0.952794] ---- -Label : 1 -Position : [956.528, 1341.84] -Measurements : [1475.74, 214437, -0.0808765, -0.790369] ---- -Label : 1 -Position : [958.066, 1341.84] -Measurements : [1554.55, 200191, -0.203989, -0.838431] ---- -Label : 1 -Position : [1104.72, 1342.77] -Measurements : [1312.89, 258570, -0.215759, -1.22044] ---- -Label : 1 -Position : [1003.96, 1343.18] -Measurements : [1711.76, 219450, -0.653427, 0.101185] ---- -Label : 1 -Position : [195.56, 1343.2] -Measurements : [1430.41, 420351, -0.175269, -1.10667] ---- -Label : 1 -Position : [199.066, 1343.26] -Measurements : [1308.5, 307133, 0.410709, -1.15532] ---- -Label : 1 -Position : [1077.28, 1343.59] -Measurements : [1413.36, 410465, -0.18025, -1.10319] ---- -Label : 1 -Position : [1027.78, 1343.75] -Measurements : [1474.19, 381456, 0.320688, -0.865835] ---- -Label : 1 -Position : [931.852, 1344.3] -Measurements : [1180.13, 86288, 0.300817, -0.455208] ---- -Label : 1 -Position : [1029.77, 1344.41] -Measurements : [1672.23, 368575, 0.10691, -0.97739] ---- -Label : 1 -Position : [187.798, 1344.84] -Measurements : [766.17, 380279, 1.33126, 0.25942] ---- -Label : 1 -Position : [1005.35, 1346.01] -Measurements : [1753.23, 319899, -0.373227, -0.853522] ---- -Label : 1 -Position : [1103.55, 1346.15] -Measurements : [927.715, 322546, 0.700054, -1.08091] ---- -Label : 1 -Position : [1030.78, 1346.28] -Measurements : [1642.54, 377454, 0.153002, -0.963774] ---- -Label : 1 -Position : [955.199, 1346.35] -Measurements : [1677.91, 209809, -0.144251, -0.655183] ---- -Label : 1 -Position : [193.757, 1346.38] -Measurements : [1524.22, 433222, -0.289101, -1.08446] ---- -Label : 1 -Position : [194.45, 1346.41] -Measurements : [1513.46, 423640, -0.172241, -1.20138] ---- -Label : 1 -Position : [1079.75, 1346.63] -Measurements : [1599, 250273, -0.337679, -0.25206] ---- -Label : 1 -Position : [962.652, 1346.66] -Measurements : [1301.35, 487098, 0.25086, -1.44225] ---- -Label : 1 -Position : [1026.74, 1346.72] -Measurements : [1430.11, 284626, 0.481911, -0.219725] ---- -Label : 1 -Position : [191.903, 1346.89] -Measurements : [1414.96, 511919, -0.193563, -1.28437] ---- -Label : 1 -Position : [1103.97, 1347.07] -Measurements : [837.351, 314036, 1.04937, -0.48434] ---- -Label : 1 -Position : [953.134, 1347.5] -Measurements : [1562.99, 234177, -0.184157, -0.84746] ---- -Label : 1 -Position : [951.017, 1347.61] -Measurements : [1334.72, 270887, 0.12313, -1.07814] ---- -Label : 1 -Position : [930.032, 1347.76] -Measurements : [1179.15, 62709, 0.787222, 0.379866] ---- -Label : 1 -Position : [1075.06, 1347.83] -Measurements : [1500.15, 178217, -0.185162, -0.0376738] ---- -Label : 1 -Position : [1076.46, 1348.91] -Measurements : [1552.56, 190178, 0.0781478, -0.0661939] ---- -Label : 1 -Position : [998.434, 1349.05] -Measurements : [1597.79, 478159, -0.318914, -1.16057] ---- -Label : 1 -Position : [190.764, 1349.28] -Measurements : [1468.86, 358433, -0.13488, -0.7986] ---- -Label : 1 -Position : [1002.32, 1349.32] -Measurements : [1964.24, 214191, -0.630874, -0.318155] ---- -Label : 1 -Position : [195.151, 1349.72] -Measurements : [1386.04, 372566, 0.406746, -1.24631] ---- -Label : 1 -Position : [1007.11, 1350.31] -Measurements : [1655.7, 426894, 0.0381281, -1.40369] ---- -Label : 1 -Position : [954.79, 1351.26] -Measurements : [1398.96, 381571, -0.0266855, -1.26696] ---- -Label : 1 -Position : [1026.9, 1352.19] -Measurements : [1502.91, 233766, 0.246975, -0.0219934] ---- -Label : 1 -Position : [1022.5, 1352.22] -Measurements : [1294.98, 184964, 0.0286022, -0.521713] ---- -Label : 1 -Position : [1003.58, 1352.48] -Measurements : [1881.56, 318137, -0.2688, -1.22873] ---- -Label : 1 -Position : [188.39, 1352.6] -Measurements : [1393.1, 310796, 0.168832, -0.630014] ---- -Label : 1 -Position : [1000.69, 1352.6] -Measurements : [1815.09, 350378, -0.300662, -0.902512] ---- -Label : 1 -Position : [959.379, 1353] -Measurements : [1067.63, 408215, 0.761021, -0.893085] ---- -Label : 1 -Position : [1072.81, 1353.02] -Measurements : [1366.2, 189996, -0.764581, -0.391958] ---- -Label : 1 -Position : [956.435, 1353.16] -Measurements : [1196.01, 397855, 0.382504, -1.24667] ---- -Label : 1 -Position : [1185.12, 1353.31] -Measurements : [753.949, 186336, 0.593775, -1.14592] ---- -Label : 1 -Position : [1073.18, 1353.42] -Measurements : [1411.63, 158037, -0.850258, -0.0751179] ---- -Label : 1 -Position : [1024.81, 1353.75] -Measurements : [1455.4, 176964, -0.0422201, -0.470655] ---- -Label : 1 -Position : [1149.31, 1354.14] -Measurements : [821.773, 187973, 0.612616, -0.710248] ---- -Label : 1 -Position : [1184.19, 1355.01] -Measurements : [953.618, 234215, 0.290703, -0.954065] ---- -Label : 1 -Position : [182.124, 1355.23] -Measurements : [842.557, 225318, 0.535452, -1.19607] ---- -Label : 1 -Position : [1184.71, 1355.23] -Measurements : [953.618, 234215, 0.290703, -0.954065] ---- -Label : 1 -Position : [1024.92, 1355.93] -Measurements : [1467.53, 167820, 0.0242755, -0.542963] ---- -Label : 1 -Position : [1150.25, 1356.21] -Measurements : [977.626, 172943, 0.101855, -0.931218] ---- -Label : 1 -Position : [184.21, 1356.24] -Measurements : [968.651, 188089, 0.249335, -0.922126] ---- -Label : 1 -Position : [1151.83, 1356.29] -Measurements : [973.282, 180168, 0.0667811, -0.998109] ---- -Label : 1 -Position : [1024.03, 1357.11] -Measurements : [1484.26, 172589, 0.155084, -0.827578] ---- -Label : 1 -Position : [1100.34, 1357.4] -Measurements : [1106.35, 299674, -0.0810147, -1.52512] ---- -Label : 1 -Position : [1097.35, 1357.93] -Measurements : [1131.1, 260119, -0.198241, -1.29917] ---- -Label : 1 -Position : [1075.61, 1357.95] -Measurements : [1394.87, 236344, -0.254585, -1.133] ---- -Label : 1 -Position : [1076.57, 1358.09] -Measurements : [1297.11, 289487, 0.013206, -1.44407] ---- -Label : 1 -Position : [1025.8, 1358.2] -Measurements : [1494.99, 181646, 0.10445, -0.839606] ---- -Label : 1 -Position : [1075.55, 1358.32] -Measurements : [1331.63, 282864, -0.132641, -1.38113] ---- -Label : 1 -Position : [1100.97, 1358.59] -Measurements : [1208.42, 279292, -0.244758, -1.35779] ---- -Label : 1 -Position : [1001.79, 1358.93] -Measurements : [1690.19, 297700, 0.117575, -0.952567] ---- -Label : 1 -Position : [1022.94, 1358.99] -Measurements : [1385.21, 178032, 0.304549, -0.562026] ---- -Label : 1 -Position : [993.733, 1359.47] -Measurements : [971.489, 414647, 0.842298, -0.664308] ---- -Label : 1 -Position : [999.866, 1359.56] -Measurements : [1631.14, 380547, -0.196531, -0.879983] ---- -Label : 1 -Position : [1070.94, 1359.89] -Measurements : [1100.93, 380884, 0.278185, -1.50769] ---- -Label : 1 -Position : [1153.2, 1360.6] -Measurements : [1205.67, 164683, -0.0187007, -0.817942] ---- -Label : 1 -Position : [998.862, 1360.93] -Measurements : [1607.86, 416249, -0.247642, -0.935206] ---- -Label : 1 -Position : [1153.37, 1361.04] -Measurements : [1277.85, 165326, -0.117376, -0.889717] ---- -Label : 1 -Position : [1072.78, 1361.2] -Measurements : [1088.75, 337198, 0.428055, -1.32598] ---- -Label : 1 -Position : [1184.46, 1361.65] -Measurements : [1803.66, 424299, 0.249264, -0.85302] ---- -Label : 1 -Position : [1099.1, 1361.77] -Measurements : [1505.52, 176025, -0.338427, -0.529592] ---- -Label : 1 -Position : [1025.24, 1362.2] -Measurements : [1418.88, 222432, 0.268715, -0.958194] ---- -Label : 1 -Position : [1095.71, 1362.43] -Measurements : [1481.55, 200900, -0.406638, -0.424187] ---- -Label : 1 -Position : [1021.98, 1362.8] -Measurements : [1327.14, 210877, 0.462766, -0.537684] ---- -Label : 1 -Position : [1181.32, 1364.02] -Measurements : [1878.69, 345188, 0.0477768, -0.566984] ---- -Label : 1 -Position : [996.59, 1364.07] -Measurements : [1720.79, 341476, -0.68393, -0.265323] ---- -Label : 1 -Position : [1016.23, 1364.75] -Measurements : [1096.47, 176590, 0.787439, 0.0655558] ---- -Label : 1 -Position : [1302.98, 1364.84] -Measurements : [867.585, 284755, 1.08671, 0.299825] ---- -Label : 1 -Position : [184.644, 1365.19] -Measurements : [936.212, 120838, 1.53389, 1.92177] ---- -Label : 1 -Position : [180.114, 1365.25] -Measurements : [1142.42, 296578, 0.766775, -0.0976057] ---- -Label : 1 -Position : [1149.78, 1365.25] -Measurements : [1571.08, 192387, -0.0894727, -0.575235] ---- -Label : 1 -Position : [177.998, 1365.36] -Measurements : [1160.89, 370657, 0.354042, -0.803761] ---- -Label : 1 -Position : [1017.56, 1365.38] -Measurements : [1225.36, 226767, 0.314942, -0.853632] ---- -Label : 1 -Position : [1307.82, 1365.39] -Measurements : [822.402, 232789, 1.56415, 1.74868] ---- -Label : 1 -Position : [1073.67, 1365.49] -Measurements : [946.061, 260971, 0.993882, -0.29622] ---- -Label : 1 -Position : [1092.71, 1365.8] -Measurements : [1536.53, 293731, 0.0273829, -0.65317] ---- -Label : 1 -Position : [1088.52, 1365.93] -Measurements : [1219.66, 266961, 0.722213, -0.0842241] ---- -Label : 1 -Position : [1020.76, 1366.48] -Measurements : [1430.08, 214155, -0.117515, -0.672] ---- -Label : 1 -Position : [1174, 1366.72] -Measurements : [1375.9, 345637, 0.113011, -1.06138] ---- -Label : 1 -Position : [1067.24, 1366.73] -Measurements : [965.522, 260123, 0.343479, -1.47959] ---- -Label : 1 -Position : [1183.54, 1366.8] -Measurements : [1910.46, 492821, -0.409365, -0.855105] ---- -Label : 1 -Position : [1088.67, 1367.19] -Measurements : [1173.67, 298480, 0.720606, -0.295204] ---- -Label : 1 -Position : [1153.35, 1367.19] -Measurements : [1595.63, 419111, -0.0411243, -1.09396] ---- -Label : 1 -Position : [1092.03, 1367.3] -Measurements : [1477.61, 355314, 0.013439, -0.95761] ---- -Label : 1 -Position : [1176.72, 1367.76] -Measurements : [1700, 335349, -0.390805, -0.730935] ---- -Label : 1 -Position : [1298.04, 1368.25] -Measurements : [682.765, 268536, 1.87527, 2.5242] ---- -Label : 1 -Position : [998.743, 1368.45] -Measurements : [1856.1, 239627, -0.54793, -0.789999] ---- -Label : 1 -Position : [177.657, 1368.53] -Measurements : [1355.55, 278715, 0.19252, -0.600856] ---- -Label : 1 -Position : [995.77, 1368.53] -Measurements : [1867.98, 236956, -1.04351, 0.794239] ---- -Label : 1 -Position : [1069.5, 1368.53] -Measurements : [1059.71, 255647, 0.160926, -1.54322] ---- -Label : 1 -Position : [992.358, 1368.77] -Measurements : [1571.75, 418141, -0.5873, -0.947838] ---- -Label : 1 -Position : [177.235, 1369.09] -Measurements : [1375.14, 251553, 0.306837, -0.487] ---- -Label : 1 -Position : [179.391, 1369.16] -Measurements : [1292.91, 245143, 0.803953, -0.316779] ---- -Label : 1 -Position : [179.593, 1369.62] -Measurements : [1292.91, 245143, 0.803953, -0.316779] ---- -Label : 1 -Position : [1069.21, 1369.67] -Measurements : [1150.15, 265769, 0.109308, -1.24753] ---- -Label : 1 -Position : [1178.87, 1369.76] -Measurements : [1935.54, 314627, -0.416534, -0.717754] ---- -Label : 1 -Position : [155.11, 1370.43] -Measurements : [898.497, 83665.5, 0.809224, 1.13075] ---- -Label : 1 -Position : [173.97, 1370.58] -Measurements : [1146.17, 388341, 0.421906, -0.915549] ---- -Label : 1 -Position : [1148.96, 1370.58] -Measurements : [1864.5, 251316, -0.37612, 0.161728] ---- -Label : 1 -Position : [1062.24, 1371.33] -Measurements : [1182.58, 326935, -0.0871565, -1.26764] ---- -Label : 1 -Position : [1018.3, 1371.4] -Measurements : [1652.24, 124859, -0.716329, 0.307692] ---- -Label : 1 -Position : [1022.01, 1371.63] -Measurements : [1560.68, 225751, -0.707548, -0.415069] ---- -Label : 1 -Position : [993.255, 1371.68] -Measurements : [1887.18, 233264, -0.873702, 0.621119] ---- -Label : 1 -Position : [1092.45, 1372.39] -Measurements : [1397.61, 433966, 0.199129, -1.22151] ---- -Label : 1 -Position : [998.701, 1372.75] -Measurements : [1694.68, 326766, -0.139148, -1.31076] ---- -Label : 1 -Position : [178.51, 1372.92] -Measurements : [1251.96, 241711, 1.0048, 0.00686376] ---- -Label : 1 -Position : [1066.63, 1373.04] -Measurements : [1534.44, 199772, -0.348793, 0.0111119] ---- -Label : 1 -Position : [995.662, 1373.35] -Measurements : [1861.08, 269298, -0.733931, -0.33968] ---- -Label : 1 -Position : [1147.15, 1373.51] -Measurements : [1943.46, 207606, -0.554311, 0.345599] ---- -Label : 1 -Position : [1016.76, 1373.71] -Measurements : [1636.35, 174565, -0.847295, 0.210384] ---- -Label : 1 -Position : [154.31, 1374.26] -Measurements : [851.446, 102360, 0.760562, 0.493657] ---- -Label : 1 -Position : [993.722, 1374.26] -Measurements : [1884.84, 266969, -0.844671, 0.18332] ---- -Label : 1 -Position : [1017.94, 1374.4] -Measurements : [1738.95, 127092, -0.490263, 0.0571056] ---- -Label : 1 -Position : [1088.77, 1374.71] -Measurements : [1251.6, 331486, 0.559561, -0.490234] ---- -Label : 1 -Position : [991.037, 1374.89] -Measurements : [1820.27, 310665, -0.883694, 0.196792] ---- -Label : 1 -Position : [1176, 1375.49] -Measurements : [2045.03, 230201, -0.497997, 0.0569878] ---- -Label : 1 -Position : [1147.73, 1375.9] -Measurements : [1950.53, 206992, -0.553765, 0.299728] ---- -Label : 1 -Position : [161.571, 1375.94] -Measurements : [766.396, 324712, 1.67905, 2.02554] ---- -Label : 1 -Position : [1151.55, 1376.26] -Measurements : [1900.42, 361863, -0.530857, -0.904881] ---- -Label : 1 -Position : [1089.98, 1376.31] -Measurements : [1311.23, 275586, 0.425736, -0.400587] ---- -Label : 1 -Position : [1144.68, 1376.63] -Measurements : [1704.26, 264833, -0.418202, -0.472335] ---- -Label : 1 -Position : [1015.84, 1376.72] -Measurements : [1532.33, 208836, -0.348124, -0.61448] ---- -Label : 1 -Position : [1013.24, 1377.12] -Measurements : [1358.12, 195154, -0.199751, -0.913695] ---- -Label : 1 -Position : [1178.47, 1377.19] -Measurements : [1959.73, 449950, -0.621468, -0.687523] ---- -Label : 1 -Position : [1141.49, 1377.97] -Measurements : [1333.61, 328045, -0.20812, -1.1193] ---- -Label : 1 -Position : [153.198, 1378.61] -Measurements : [656.227, 64945.2, 0.759967, -0.903768] ---- -Label : 1 -Position : [991.265, 1378.77] -Measurements : [1794.4, 276768, -0.338358, -0.845714] ---- -Label : 1 -Position : [1062.94, 1378.77] -Measurements : [1398.69, 432334, 0.0389976, -1.26124] ---- -Label : 1 -Position : [991.969, 1379.05] -Measurements : [1705.55, 317140, -0.145849, -1.05466] ---- -Label : 1 -Position : [1179.28, 1379.54] -Measurements : [1734.93, 608911, -0.139491, -1.38664] ---- -Label : 1 -Position : [989.916, 1379.6] -Measurements : [1698, 305147, -0.386229, -0.827094] ---- -Label : 1 -Position : [1173.95, 1380] -Measurements : [1726.45, 375725, -0.438284, -0.500703] ---- -Label : 1 -Position : [1090.42, 1380.25] -Measurements : [1371.35, 265996, 0.378799, -0.57978] ---- -Label : 1 -Position : [162.092, 1380.41] -Measurements : [1132.17, 434529, 0.627327, -0.659126] ---- -Label : 1 -Position : [166.188, 1380.82] -Measurements : [1172.68, 358293, 0.883996, -0.207957] ---- -Label : 1 -Position : [170.85, 1380.84] -Measurements : [964.773, 282651, 1.98103, 2.99222] ---- -Label : 1 -Position : [1170.51, 1381.17] -Measurements : [1235.98, 464100, 0.0746034, -1.71099] ---- -Label : 1 -Position : [1087.11, 1381.23] -Measurements : [1236.34, 215612, 0.658555, 0.216557] ---- -Label : 1 -Position : [159.308, 1381.58] -Measurements : [877.895, 292959, 0.844727, -0.480249] ---- -Label : 1 -Position : [1063.62, 1381.62] -Measurements : [1205.71, 492456, 0.448215, -1.263] ---- -Label : 1 -Position : [1144.86, 1381.64] -Measurements : [1889.67, 218673, -1.00638, 0.631386] ---- -Label : 1 -Position : [1063.67, 1381.69] -Measurements : [1205.71, 492456, 0.448215, -1.263] ---- -Label : 1 -Position : [1173.72, 1382.07] -Measurements : [1350.14, 457072, -0.0540226, -1.6479] ---- -Label : 1 -Position : [993.497, 1382.12] -Measurements : [1363.32, 271723, 0.570036, -0.815521] ---- -Label : 1 -Position : [164.967, 1382.53] -Measurements : [1255.64, 327034, 0.712949, -0.294942] ---- -Label : 1 -Position : [1013.38, 1383.28] -Measurements : [1136.54, 306071, 0.279356, -1.30131] ---- -Label : 1 -Position : [988.807, 1384.1] -Measurements : [1391.93, 242040, 0.735717, -0.738857] ---- -Label : 1 -Position : [158.379, 1384.11] -Measurements : [809.824, 244179, 0.914108, -0.243215] ---- -Label : 1 -Position : [1138.24, 1384.59] -Measurements : [1401.05, 546060, -0.0265815, -1.46583] ---- -Label : 1 -Position : [159.225, 1384.91] -Measurements : [878.321, 267152, 0.787482, -0.430444] ---- -Label : 1 -Position : [1010, 1384.95] -Measurements : [909.582, 225923, 0.749187, -0.903175] ---- -Label : 1 -Position : [169.118, 1385.32] -Measurements : [936.153, 208541, 2.61297, 6.13453] ---- -Label : 1 -Position : [1011.11, 1385.77] -Measurements : [871.412, 247884, 0.929244, -0.632586] ---- -Label : 1 -Position : [1147.86, 1385.85] -Measurements : [1804.06, 369755, -0.634474, -0.839687] ---- -Label : 1 -Position : [1083.74, 1385.86] -Measurements : [1039.81, 114759, -0.16334, -1.03408] ---- -Label : 1 -Position : [1089.75, 1386.58] -Measurements : [1153.2, 123729, -0.131298, -0.974438] ---- -Label : 1 -Position : [1137.8, 1387.08] -Measurements : [1129, 528683, 0.620096, -1.1659] ---- -Label : 1 -Position : [1088.97, 1387.48] -Measurements : [1192.95, 126224, -0.0182112, -0.73282] ---- -Label : 1 -Position : [1173.41, 1387.8] -Measurements : [1093.9, 308364, 0.441249, -1.20178] ---- -Label : 1 -Position : [1086.7, 1388.19] -Measurements : [1255.24, 130257, 0.343242, -0.020842] ---- -Label : 1 -Position : [1142, 1388.19] -Measurements : [1561.03, 613464, -0.202352, -1.61665] ---- -Label : 1 -Position : [1169.04, 1390.65] -Measurements : [1192.66, 242162, 0.122252, -0.982615] ---- -Label : 1 -Position : [1088.41, 1390.81] -Measurements : [1258.22, 162981, 0.174248, -0.3389] ---- -Label : 1 -Position : [137.839, 1390.99] -Measurements : [1023.5, 190082, 0.947116, 0.347867] ---- -Label : 1 -Position : [1058.01, 1391.07] -Measurements : [1080.69, 368579, 0.101656, -1.49106] ---- -Label : 1 -Position : [135.893, 1391.39] -Measurements : [1064.06, 166593, 1.02346, 0.679916] ---- -Label : 1 -Position : [1089.22, 1391.41] -Measurements : [1201.15, 206593, 0.199094, -0.71187] ---- -Label : 1 -Position : [1085.06, 1391.47] -Measurements : [1411.72, 149262, -0.205306, -0.163591] ---- -Label : 1 -Position : [1173.37, 1391.51] -Measurements : [1094.93, 221983, 0.31752, -1.22651] ---- -Label : 1 -Position : [136.697, 1391.88] -Measurements : [1031.84, 182707, 1.0036, 0.463269] ---- -Label : 1 -Position : [1059.67, 1391.88] -Measurements : [1063.22, 371497, 0.161157, -1.50979] ---- -Label : 1 -Position : [155.129, 1392.29] -Measurements : [941.025, 259222, 0.453849, -1.27346] ---- -Label : 1 -Position : [148.844, 1392.64] -Measurements : [873.434, 304059, 0.582619, -1.26325] ---- -Label : 1 -Position : [157.979, 1394.63] -Measurements : [893.001, 169323, 0.741747, -0.732229] ---- -Label : 1 -Position : [1167.46, 1394.77] -Measurements : [1595.33, 204390, -0.260359, -0.802122] ---- -Label : 1 -Position : [153.867, 1395.69] -Measurements : [1155.01, 220069, 0.0415576, -1.0836] ---- -Label : 1 -Position : [151.852, 1395.97] -Measurements : [1233.48, 261589, -0.161204, -0.906199] ---- -Label : 1 -Position : [1056.69, 1396.66] -Measurements : [1538.99, 186069, -0.567154, -0.290382] ---- -Label : 1 -Position : [1164.94, 1397.2] -Measurements : [1549.25, 162773, 0.153652, -0.686134] ---- -Label : 1 -Position : [153.418, 1397.74] -Measurements : [1189.11, 169365, 0.221753, -0.832834] ---- -Label : 1 -Position : [1160.03, 1399.1] -Measurements : [1212.64, 210005, 0.552384, -0.419835] ---- -Label : 1 -Position : [1056.39, 1399.25] -Measurements : [1558.89, 218940, -0.683988, -0.441213] diff --git a/Data/Baseline/OTB/Files/TvDescriptorsSVMModelCreation.svm b/Data/Baseline/OTB/Files/TvDescriptorsSVMModelCreation.svm deleted file mode 100644 index b557bcfbe569174f8d48c93d4d7926275540d020..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/TvDescriptorsSVMModelCreation.svm +++ /dev/null @@ -1,232 +0,0 @@ -svm_type c_svc -kernel_type linear -nr_class 2 -total_sv 224 -rho -0.898435 -label 1 0 -nr_sv 111 113 -SV -1 1:0.69109237 2:-0.20162838 3:-0.65376578 4:-0.43547766 -1 1:0.46324437 2:-0.079541522 3:-0.72899212 4:-0.45271813 -1 1:0.75094097 2:-0.19616619 3:-0.33190814 4:-0.30877904 -1 1:0.70365619 2:0.01759753 3:-0.6909989 4:-0.41240323 -1 1:-0.97853178 2:-0.42895003 3:0.48181126 4:-0.26463967 -1 1:0.372286 2:0.014274367 3:-1.1031219 4:-0.43038233 -1 1:-0.49667527 2:-0.14551467 3:0.02117055 4:-0.4017121 -1 1:-0.88133649 2:-0.035018372 3:1.7800309 4:0.74981121 -1 1:-0.84875076 2:-0.33219283 3:0.13992409 4:-0.41925118 -1 1:0.55389122 2:-0.022533338 3:-0.40316594 4:-0.45013169 -1 1:0.49940573 2:-0.23194414 3:-1.4055887 4:-0.323277 -1 1:-0.11959717 2:-0.071099793 3:-0.68969274 4:-0.53344103 -1 1:-0.78710927 2:-0.21299915 3:0.62594993 4:-0.22865958 -1 1:0.17328549 2:-0.026583638 3:-0.95232954 4:-0.48307589 -1 1:-0.60848895 2:-0.07361427 3:1.1913011 4:0.17146374 -1 1:-0.82937399 2:-0.11821296 3:1.6883694 4:0.6160756 -1 1:-0.22614497 2:-0.035118228 3:0.095960618 4:-0.39662361 -1 1:0.35976138 2:-0.26508256 3:-0.79837598 4:-0.44047181 -1 1:1.4136505 2:-0.22623662 3:-0.80293519 4:-0.37971557 -1 1:-0.057883661 2:-0.074718622 3:-0.22316161 4:-0.45417397 -1 1:0.34142508 2:-0.16644706 3:-0.89833509 4:-0.43656116 -1 1:0.20811258 2:-0.17127593 3:-0.80754391 4:-0.43693097 -1 1:0.56352464 2:-0.078147148 3:-0.73359259 4:-0.43729587 -1 1:-0.068562106 2:-0.068225633 3:-0.28849653 4:-0.38850409 -1 1:-0.86171966 2:-0.10027429 3:1.219222 4:0.19381764 -1 1:-0.77921774 2:-0.10009336 3:1.1271584 4:0.20730184 -1 1:0.33212738 2:0.009098241 3:0.98020011 4:0.13148285 -1 1:1.512446 2:-0.18200812 3:-0.88196447 4:-0.38624303 -1 1:0.48918021 2:-0.0012251123 3:-0.97430606 4:-0.46020262 -1 1:2.0860009 2:-0.0063752669 3:-0.68361571 4:-0.42379254 -1 1:-0.87208013 2:-0.4150814 3:0.50629156 4:-0.1761484 -1 1:1.7266081 2:-0.03750803 3:-0.85200042 4:-0.40133951 -1 1:1.9339253 2:0.016708231 3:-0.75966763 4:-0.41751742 -1 1:0.56523315 2:-0.1044057 3:0.65940812 4:0.20014864 -1 1:-0.92273872 2:-0.39317803 3:0.50638368 4:-0.20743168 -1 1:-0.92370021 2:-0.44687694 3:0.86164992 4:0.029039189 -1 1:1.5727291 2:0.092365881 3:-0.97327116 4:-0.36244619 -1 1:0.13733606 2:-0.073301928 3:-0.44568539 4:-0.42804072 -1 1:-0.032415082 2:-0.37652828 3:-0.52366102 4:-0.42556547 -1 1:1.1851067 2:-0.047089841 3:-0.92608619 4:-0.45080471 -1 1:2.2866981 2:-0.34545889 3:-0.12254126 4:-0.15527653 -1 1:1.8973903 2:-0.280334 3:-1.3076557 4:-0.28408126 -1 1:0.16879578 2:-0.06757977 3:-0.48014022 4:-0.44416969 -1 1:-0.2215064 2:-0.24241052 3:-0.58856 4:-0.45861151 -1 1:-0.032415082 2:-0.37652828 3:-0.52366102 4:-0.42556547 -1 1:1.5295631 2:0.062467254 3:-1.2455611 4:-0.31239908 -1 1:1.3467356 2:-0.075583702 3:-0.57949293 4:-0.29200399 -1 1:-0.77288794 2:-0.10532933 3:0.43846003 4:-0.2389637 -1 1:0.056304597 2:-0.094894655 3:0.23959198 4:-0.28954645 -1 1:1.7621595 2:0.097137499 3:-0.7358019 4:-0.35727314 -1 1:1.9913826 2:-0.21983291 3:-0.87068772 4:-0.27983657 -1 1:2.101546 2:-0.21067344 3:-0.93514116 4:-0.14310347 -1 1:1.3565879 2:-0.28580341 3:-0.77616578 4:-0.39223145 -1 1:1.4539944 2:-0.17492955 3:-1.0562497 4:-0.3780657 -1 1:1.0409292 2:-0.10301682 3:0.04371679 4:-0.38037114 -1 1:1.286188 2:-0.15582611 3:-0.79700877 4:-0.48019886 -1 1:0.90751355 2:-0.2106515 3:-0.84041874 4:-0.45697936 -1 1:2.668085 2:0.094488919 3:-0.48645964 4:-0.41309118 -1 1:-0.021307331 2:-0.056257295 3:-0.16943256 4:-0.40388938 -1 1:0.74359 2:-0.27485327 3:0.13326728 4:-0.11390012 -1 1:1.4549764 2:-0.32147401 3:-0.85853111 4:-0.38362505 -1 1:1.2986204 2:-0.2546904 3:-0.76302084 4:-0.43112508 -1 1:1.0353747 2:-0.10637342 3:-0.71608318 4:-0.43852742 -1 1:1.2953587 2:-0.093156666 3:-0.41319252 4:-0.43514228 -1 1:1.3127638 2:-0.024176066 3:-0.4492193 4:-0.45765616 -1 1:0.86088155 2:-0.13058913 3:0.39216167 4:-0.2669108 -1 1:1.1979613 2:0.067102152 3:-0.55743443 4:-0.45871979 -1 1:1.4008246 2:-0.21219721 3:-0.7547644 4:-0.46573774 -1 1:1.5851317 2:0.095144665 3:0.16600064 4:-0.16255216 -1 1:0.38117004 2:-0.063339724 3:0.31259805 4:-0.22152706 -1 1:0.53653398 2:-0.042885446 3:0.10098396 4:-0.068918142 -1 1:1.5732366 2:-0.01661684 3:-0.99798455 4:-0.36599303 -1 1:0.82059321 2:-0.23681127 3:-0.75534324 4:-0.45190902 -1 1:1.0234628 2:-0.2309679 3:-0.82208803 4:-0.45548031 -1 1:1.5116328 2:-0.031742743 3:0.055790594 4:-0.17368776 -1 1:1.6078525 2:-0.079505937 3:0.13048795 4:-0.17886508 -1 1:2.1981257 2:-0.053697485 3:0.12310795 4:-0.15823516 -1 1:2.4741225 2:-0.062043755 3:0.30332224 4:-0.28796509 -1 1:-0.8317382 2:-0.25498416 3:1.4472377 4:0.43160469 -1 1:-0.87909265 2:-0.095235953 3:1.1700185 4:0.12621143 -1 1:0.46456664 2:-0.092642951 3:-0.97513248 4:-0.41183384 -1 1:3.4447302 2:0.10728527 3:-1.0337478 4:-0.27979557 -1 1:3.376198 2:0.28636335 3:-1.514457 4:-0.19848459 -1 1:-0.61527688 2:-0.23027023 3:0.73808236 4:-0.078835402 -1 1:0.91841614 2:-0.42982468 3:-1.4218277 4:-0.10252584 -1 1:0.77797033 2:-0.33225323 3:-0.79382982 4:-0.24158934 -1 1:1.418123 2:-0.052881491 3:-0.3952341 4:-0.28615214 -1 1:0.36637428 2:-0.025712765 3:0.11964145 4:-0.35096155 -1 1:-0.24582847 2:-0.14703666 3:-0.19214692 4:-0.40034545 -1 1:0.39742377 2:-0.15935885 3:-0.51431281 4:-0.32850083 -1 1:1.6873039 2:0.087223584 3:-0.19831611 4:-0.38294477 -1 1:-0.77759166 2:-0.24478352 3:1.1078669 4:0.26451484 -1 1:-0.37974709 2:-0.1697171 3:-0.48055168 4:-0.46475615 -1 1:-0.8369749 2:-0.28360645 3:0.77113861 4:-0.12923923 -1 1:-0.67565832 2:-0.17790374 3:0.30715305 4:-0.25359594 -0.8863690227343468 1:2.319659 2:0.1835753 3:-0.81275531 4:-0.33161499 -1 1:0.57472058 2:-0.351176 3:-0.97077936 4:-0.17494202 -1 1:0.66835373 2:-0.26328208 3:0.74398001 4:0.19273866 -1 1:2.7039442 2:0.1760433 3:-0.68652624 4:-0.30001531 -1 1:0.28447999 2:-0.22341078 3:-0.7124288 4:-0.45325616 -1 1:0.67158288 2:-0.41662505 3:0.96301587 4:0.23337737 -1 1:0.90320409 2:-0.14556563 3:-0.021405682 4:-0.018686568 -1 1:-0.64995648 2:-0.048705093 3:1.255384 4:0.26387963 -1 1:-0.55692325 2:-0.10408914 3:1.1965585 4:0.2553477 -1 1:1.8365334 2:-0.017767553 3:-0.76198391 4:-0.36599264 -1 1:0.015677252 2:-0.12770387 3:-0.52724684 4:-0.49440128 -1 1:-0.070136805 2:-0.11621001 3:-0.42720804 4:-0.48520764 -1 1:0.97404423 2:0.03397514 3:-0.39503505 4:-0.4174832 -1 1:-0.45488195 2:-0.12311357 3:-0.046863915 4:-0.46652937 -1 1:0.20590504 2:0.014672613 3:-0.0095125754 4:-0.24407214 -1 1:0.97137365 2:-0.13957271 3:-0.026196808 4:-0.3261752 --1 1:0.67905954 2:-0.32198607 3:-0.10361163 4:-0.26307534 --1 1:0.40977245 2:-0.24329323 3:-1.1700738 4:-0.45960816 --1 1:0.20237853 2:-0.30559202 3:-0.54458161 4:-0.56373692 --1 1:0.063805304 2:-0.48046644 3:-0.26975819 4:-0.4274501 --1 1:0.84341609 2:-0.26485617 3:-1.1488738 4:-0.16304561 --1 1:1.0009787 2:-0.28952698 3:-0.060632821 4:-0.38263647 --1 1:0.38612517 2:-0.41797433 3:-0.43981481 4:-0.53603847 --1 1:0.22236172 2:-0.36681128 3:-0.74264232 4:-0.54649243 --1 1:0.40591592 2:-0.13843111 3:-1.0256277 4:-0.48199669 --1 1:-0.028194286 2:-0.45655737 3:-0.67568004 4:-0.45637164 --1 1:0.086757566 2:-0.44096704 3:-1.4310455 4:-0.35315115 --1 1:0.96341375 2:-0.24809227 3:0.72880266 4:0.045645918 --1 1:0.5246276 2:-0.089883916 3:0.070256213 4:-0.30750328 --1 1:0.36915589 2:-0.22653022 3:-0.62629283 4:-0.44174838 --1 1:0.40565836 2:-0.3815908 3:-1.2144396 4:-0.32684519 --1 1:0.57637087 2:-0.34075732 3:1.0465222 4:0.38072802 --1 1:0.62383165 2:-0.022326182 3:-0.17094881 4:-0.26699698 --1 1:0.49647867 2:-0.34652513 3:-1.5867846 4:-0.29243194 --1 1:0.6412277 2:-0.090061224 3:0.27456083 4:0.047593754 --1 1:0.85440682 2:-0.35026828 3:1.4090375 4:0.81042355 --1 1:0.15985446 2:-0.35801858 3:-0.47844024 4:-0.4587022 --1 1:0.75002174 2:-0.43089801 3:0.59142388 4:-0.14180762 --1 1:-0.053832104 2:-0.35684063 3:-0.56691524 4:-0.48508529 --1 1:1.107728 2:-0.35826441 3:-0.24832036 4:-0.4491882 --1 1:0.53064122 2:0.089574585 3:1.79279 4:0.76032869 --1 1:0.32847691 2:-0.20085814 3:1.1787359 4:0.34540129 --1 1:0.77755258 2:0.30043325 3:0.75576467 4:-0.0019102279 --1 1:1.2735135 2:-0.030869051 3:-0.22330967 4:-0.44458663 --1 1:0.13599429 2:0.36237528 3:-0.10859952 4:-0.42109448 --1 1:0.74681935 2:0.26293238 3:0.76392239 4:-0.087439117 --1 1:0.59492399 2:-0.2158359 3:0.86146666 4:0.12649503 --1 1:-0.089461801 2:-0.45549616 3:-0.72593266 4:-0.30518351 --1 1:0.8184493 2:0.23290742 3:0.84804676 4:0.062307258 --1 1:0.92511845 2:0.14706418 3:1.0348556 4:0.39331142 --1 1:0.7281503 2:-0.41664704 3:-0.024347992 4:-0.37974868 --1 1:1.6609121 2:0.17963063 3:1.2427246 4:0.303052 --1 1:-0.076010771 2:-0.31201704 3:0.76220674 4:0.45782572 --1 1:0.69879267 2:0.62585375 3:0.70186956 4:-0.072852815 --0.127906883094633 1:0.17675613 2:-0.45930231 3:0.1313935 4:-0.075258066 --1 1:1.0989463 2:-0.39513995 3:-0.61316319 4:-0.49446711 --1 1:-0.10816998 2:-0.47443976 3:-0.79639366 4:-0.51077326 --1 1:0.79214127 2:0.17098995 3:1.2664871 4:0.48574072 --1 1:0.14827523 2:-0.094726896 3:0.47203635 4:0.0013064268 --1 1:1.2431048 2:-0.043847913 3:-0.24449396 4:-0.42600401 --1 1:0.22462991 2:-0.39176543 3:1.7181466 4:0.67122043 --1 1:0.43074908 2:-0.29091281 3:0.23671211 4:-0.024399796 --1 1:0.16798276 2:-0.37313523 3:0.1820774 4:0.034538256 --1 1:0.94235843 2:-0.29938736 3:-0.71633522 4:-0.45122958 --1 1:-0.12051732 2:-0.32739602 3:-0.64349613 4:-0.38607614 --1 1:0.36424492 2:-0.19876865 3:2.0557255 4:1.0987078 --1 1:0.12511024 2:-0.2850475 3:-0.81436075 4:-0.4777417 --1 1:0.5102292 2:-0.20064496 3:0.21188252 4:-0.11019956 --1 1:-0.40001266 2:-0.44883638 3:0.25831088 4:-0.16642447 --1 1:0.56333716 2:-0.23080413 3:0.18054123 4:-0.06591376 --1 1:0.61769663 2:-0.43835494 3:-0.25921368 4:-0.36702427 --1 1:0.27469223 2:-0.18248259 3:0.90116534 4:0.17224712 --1 1:0.25631333 2:-0.19409265 3:1.7638615 4:0.86122914 --0.3451287109572377 1:-0.21107832 2:-0.49353693 3:-1.0471541 4:-0.40473992 --1 1:0.96032043 2:-0.34357237 3:-0.29004457 4:-0.42554627 --1 1:0.58743595 2:-0.24557672 3:0.10999064 4:-0.33849341 --1 1:-0.03708779 2:-0.14113016 3:-0.70068839 4:-0.53246066 --1 1:0.50197341 2:-0.35708826 3:0.14271648 4:-0.3238136 --1 1:0.32478169 2:-0.40850575 3:-1.7684244 4:-0.1281177 --1 1:0.055769624 2:-0.28429312 3:-0.6738572 4:-0.49463315 --1 1:2.6557568 2:-0.19778546 3:-1.1322828 4:-0.40811028 --1 1:1.8314785 2:0.18826773 3:-0.22258378 4:-0.4976845 --1 1:0.28778834 2:-0.24565165 3:-0.53932509 4:-0.37536204 --1 1:0.56630351 2:-0.27310961 3:-1.5259696 4:-0.2810355 --1 1:1.7688056 2:-0.15710732 3:-0.2632662 4:-0.48774699 --1 1:1.0465847 2:-0.38005255 3:-1.2094317 4:-0.451302 --1 1:-0.18938881 2:-0.096969262 3:-0.41679385 4:-0.52956321 --1 1:1.3109916 2:0.56040034 3:-0.60909088 4:-0.50444415 --1 1:1.2183418 2:0.22683989 3:0.26285983 4:-0.27844331 --1 1:1.2839872 2:-0.077736632 3:-0.16254052 4:-0.45129981 --1 1:1.1161328 2:-0.25623105 3:-0.34168012 4:-0.51619477 --1 1:0.59750888 2:0.35904153 3:0.10987952 4:-0.3967108 --1 1:0.068990155 2:-0.33918935 3:-0.51638461 4:-0.4230581 --1 1:1.2612796 2:0.20760424 3:0.22700797 4:-0.28788431 --1 1:0.19645885 2:-0.10587959 3:-0.95303352 4:-0.48941085 --1 1:1.6708124 2:-0.16621109 3:-0.50956753 4:-0.52117133 --1 1:1.2560159 2:0.58984576 3:-0.11065066 4:-0.42997574 --1 1:0.6365864 2:-0.3159853 3:-0.43575745 4:-0.24918789 --1 1:-0.27554846 2:-0.38153805 3:-0.65796797 4:-0.51900905 --1 1:-0.19232176 2:-0.27815867 3:-0.60753037 4:-0.52076717 --1 1:0.015804563 2:-0.19853049 3:-0.79780762 4:-0.55885602 --1 1:1.3231804 2:-0.16938208 3:-0.22403075 4:-0.4627119 --1 1:0.0026969903 2:-0.41855948 3:-0.87497128 4:-0.40635496 --1 1:0.43957179 2:-0.16440573 3:-0.38929989 4:-0.49034286 --1 1:-0.2690738 2:-0.27153781 3:-0.66845649 4:-0.52137948 --1 1:0.28141871 2:-0.3932208 3:-0.42573926 4:-0.14238624 --1 1:1.6493723 2:-0.25029374 3:-1.1010529 4:-0.31200023 --1 1:2.138692 2:-0.27719065 3:-0.52919492 4:-0.52248088 --1 1:-0.02930289 2:-0.26346287 3:-0.58111883 4:-0.5279823 --1 1:0.41080693 2:-0.27225805 3:-0.2746303 4:-0.3400428 --1 1:1.0547766 2:-0.20354031 3:-0.35549573 4:-0.52403621 --1 1:-0.038473041 2:-0.27665462 3:-0.61568444 4:-0.51650441 --1 1:1.4659046 2:1.113788 3:0.086161524 4:-0.3867731 --1 1:1.0877119 2:1.0018544 3:-0.50406188 4:-0.5144821 --1 1:1.0313572 2:-0.39820351 3:0.14001203 4:-0.14989309 --1 1:1.3298706 2:1.1804648 3:-0.71850716 4:-0.52034533 --1 1:1.5906871 2:-0.26492985 3:-1.2958511 4:-0.43931484 --1 1:0.99994562 2:-0.39915208 3:-0.61018 4:-0.4574368 --1 1:1.0432105 2:-0.27877234 3:-0.65607653 4:-0.38990796 --1 1:0.84517848 2:-0.42287191 3:0.16916266 4:-0.26409466 --1 1:0.3423789 2:-0.45147406 3:-1.020062 4:-0.40505505 --1 1:1.4989444 2:0.48249017 3:-0.89881716 4:-0.51387248 --0.4133334286824741 1:0.70487226 2:-0.39552501 3:-0.35274026 4:0.076316467 --1 1:1.4518186 2:-0.24860617 3:-1.3214617 4:-0.27026562 --1 1:0.90394036 2:-0.28053002 3:-0.99614087 4:-0.46659073 --1 1:1.0337892 2:-0.28248027 3:-1.2491535 4:-0.35818484 --1 1:0.29457572 2:-0.42802317 3:-0.92568876 4:-0.40083456 --1 1:0.30987783 2:-0.4243198 3:-0.89973376 4:-0.433091 --1 1:0.67069754 2:-0.19985884 3:-0.71810461 4:-0.50012774 diff --git a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.dbf b/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.dbf deleted file mode 100644 index c2df5113bb5e7daca9989707ac56662bf674c99d..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0998367ed4a1fea79be1a27a82f0d76d5dcba84214aa63678b660f1bc6245120 -size 365538 diff --git a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shp b/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shp deleted file mode 100644 index faedfa80a00e469dc0335ebf155879adb2577d5d..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2ead83092b50a373b6a026a6553bfdd1d5f3c5f3fde4e7a88b6a8f76c696e707 -size 126436 diff --git a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shx b/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shx deleted file mode 100644 index 3f9ded68080230718f13932438adbb2909f07d44..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fe4b9505e67c0b6c3e673e27fe9ff518641795a00339addc53de6af47aefb2dc -size 36196 diff --git a/Data/Baseline/OTB/Files/TvObjectDetectionClassifierOutput.txt b/Data/Baseline/OTB/Files/TvObjectDetectionClassifierOutput.txt deleted file mode 100644 index ebbdaef1e82f329c4a9bfcdeff19f822b2cdd682..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/TvObjectDetectionClassifierOutput.txt +++ /dev/null @@ -1,790 +0,0 @@ -[16.5, 0.5] -[18.5, 0.5] -[20.5, 0.5] -[22.5, 0.5] -[16.5, 2.5] -[18.5, 2.5] -[20.5, 2.5] -[22.5, 2.5] -[24.5, 2.5] -[28.5, 2.5] -[22.5, 4.5] -[24.5, 4.5] -[26.5, 4.5] -[28.5, 4.5] -[30.5, 4.5] -[26.5, 6.5] -[28.5, 6.5] -[30.5, 6.5] -[86.5, 6.5] -[26.5, 8.5] -[28.5, 8.5] -[30.5, 8.5] -[84.5, 8.5] -[86.5, 8.5] -[22.5, 10.5] -[24.5, 10.5] -[26.5, 10.5] -[28.5, 10.5] -[30.5, 10.5] -[50.5, 10.5] -[14.5, 12.5] -[16.5, 12.5] -[18.5, 12.5] -[20.5, 12.5] -[22.5, 12.5] -[24.5, 12.5] -[26.5, 12.5] -[28.5, 12.5] -[30.5, 12.5] -[42.5, 12.5] -[44.5, 12.5] -[48.5, 12.5] -[50.5, 12.5] -[10.5, 14.5] -[12.5, 14.5] -[14.5, 14.5] -[16.5, 14.5] -[18.5, 14.5] -[20.5, 14.5] -[22.5, 14.5] -[24.5, 14.5] -[26.5, 14.5] -[28.5, 14.5] -[30.5, 14.5] -[32.5, 14.5] -[42.5, 14.5] -[44.5, 14.5] -[46.5, 14.5] -[48.5, 14.5] -[50.5, 14.5] -[60.5, 14.5] -[10.5, 16.5] -[12.5, 16.5] -[14.5, 16.5] -[16.5, 16.5] -[18.5, 16.5] -[20.5, 16.5] -[22.5, 16.5] -[24.5, 16.5] -[26.5, 16.5] -[28.5, 16.5] -[30.5, 16.5] -[42.5, 16.5] -[44.5, 16.5] -[48.5, 16.5] -[60.5, 16.5] -[88.5, 16.5] -[90.5, 16.5] -[10.5, 18.5] -[12.5, 18.5] -[14.5, 18.5] -[16.5, 18.5] -[18.5, 18.5] -[20.5, 18.5] -[22.5, 18.5] -[24.5, 18.5] -[26.5, 18.5] -[28.5, 18.5] -[30.5, 18.5] -[32.5, 18.5] -[34.5, 18.5] -[88.5, 18.5] -[90.5, 18.5] -[10.5, 20.5] -[12.5, 20.5] -[14.5, 20.5] -[16.5, 20.5] -[18.5, 20.5] -[20.5, 20.5] -[22.5, 20.5] -[24.5, 20.5] -[26.5, 20.5] -[28.5, 20.5] -[30.5, 20.5] -[32.5, 20.5] -[34.5, 20.5] -[88.5, 20.5] -[110.5, 20.5] -[112.5, 20.5] -[10.5, 22.5] -[12.5, 22.5] -[14.5, 22.5] -[16.5, 22.5] -[18.5, 22.5] -[20.5, 22.5] -[22.5, 22.5] -[24.5, 22.5] -[26.5, 22.5] -[28.5, 22.5] -[30.5, 22.5] -[32.5, 22.5] -[34.5, 22.5] -[110.5, 22.5] -[112.5, 22.5] -[10.5, 24.5] -[12.5, 24.5] -[14.5, 24.5] -[16.5, 24.5] -[18.5, 24.5] -[20.5, 24.5] -[22.5, 24.5] -[24.5, 24.5] -[26.5, 24.5] -[28.5, 24.5] -[30.5, 24.5] -[32.5, 24.5] -[34.5, 24.5] -[10.5, 26.5] -[12.5, 26.5] -[14.5, 26.5] -[16.5, 26.5] -[18.5, 26.5] -[20.5, 26.5] -[22.5, 26.5] -[24.5, 26.5] -[26.5, 26.5] -[28.5, 26.5] -[30.5, 26.5] -[32.5, 26.5] -[34.5, 26.5] -[36.5, 26.5] -[18.5, 28.5] -[20.5, 28.5] -[22.5, 28.5] -[24.5, 28.5] -[26.5, 28.5] -[28.5, 28.5] -[30.5, 28.5] -[32.5, 28.5] -[34.5, 28.5] -[36.5, 28.5] -[20.5, 30.5] -[22.5, 30.5] -[24.5, 30.5] -[26.5, 30.5] -[28.5, 30.5] -[30.5, 30.5] -[32.5, 30.5] -[34.5, 30.5] -[36.5, 30.5] -[38.5, 30.5] -[20.5, 32.5] -[22.5, 32.5] -[24.5, 32.5] -[26.5, 32.5] -[28.5, 32.5] -[30.5, 32.5] -[32.5, 32.5] -[34.5, 32.5] -[36.5, 32.5] -[38.5, 32.5] -[40.5, 32.5] -[34.5, 34.5] -[36.5, 34.5] -[38.5, 34.5] -[40.5, 34.5] -[34.5, 36.5] -[36.5, 36.5] -[38.5, 36.5] -[28.5, 38.5] -[30.5, 38.5] -[32.5, 38.5] -[34.5, 38.5] -[36.5, 38.5] -[38.5, 38.5] -[40.5, 38.5] -[120.5, 38.5] -[20.5, 40.5] -[22.5, 40.5] -[24.5, 40.5] -[26.5, 40.5] -[28.5, 40.5] -[30.5, 40.5] -[32.5, 40.5] -[34.5, 40.5] -[36.5, 40.5] -[38.5, 40.5] -[40.5, 40.5] -[18.5, 42.5] -[20.5, 42.5] -[22.5, 42.5] -[24.5, 42.5] -[26.5, 42.5] -[28.5, 42.5] -[30.5, 42.5] -[32.5, 42.5] -[34.5, 42.5] -[36.5, 42.5] -[38.5, 42.5] -[40.5, 42.5] -[16.5, 44.5] -[18.5, 44.5] -[20.5, 44.5] -[22.5, 44.5] -[24.5, 44.5] -[26.5, 44.5] -[28.5, 44.5] -[30.5, 44.5] -[32.5, 44.5] -[34.5, 44.5] -[36.5, 44.5] -[38.5, 44.5] -[40.5, 44.5] -[16.5, 46.5] -[18.5, 46.5] -[20.5, 46.5] -[22.5, 46.5] -[24.5, 46.5] -[26.5, 46.5] -[28.5, 46.5] -[30.5, 46.5] -[32.5, 46.5] -[34.5, 46.5] -[36.5, 46.5] -[38.5, 46.5] -[40.5, 46.5] -[48.5, 46.5] -[50.5, 46.5] -[16.5, 48.5] -[18.5, 48.5] -[20.5, 48.5] -[22.5, 48.5] -[24.5, 48.5] -[26.5, 48.5] -[28.5, 48.5] -[30.5, 48.5] -[32.5, 48.5] -[34.5, 48.5] -[36.5, 48.5] -[38.5, 48.5] -[40.5, 48.5] -[48.5, 48.5] -[50.5, 48.5] -[52.5, 48.5] -[16.5, 50.5] -[18.5, 50.5] -[20.5, 50.5] -[22.5, 50.5] -[24.5, 50.5] -[26.5, 50.5] -[28.5, 50.5] -[30.5, 50.5] -[32.5, 50.5] -[34.5, 50.5] -[36.5, 50.5] -[38.5, 50.5] -[40.5, 50.5] -[42.5, 50.5] -[48.5, 50.5] -[50.5, 50.5] -[52.5, 50.5] -[18.5, 52.5] -[20.5, 52.5] -[22.5, 52.5] -[24.5, 52.5] -[26.5, 52.5] -[28.5, 52.5] -[30.5, 52.5] -[32.5, 52.5] -[34.5, 52.5] -[36.5, 52.5] -[38.5, 52.5] -[40.5, 52.5] -[42.5, 52.5] -[44.5, 52.5] -[48.5, 52.5] -[60.5, 52.5] -[62.5, 52.5] -[20.5, 54.5] -[22.5, 54.5] -[24.5, 54.5] -[26.5, 54.5] -[28.5, 54.5] -[30.5, 54.5] -[32.5, 54.5] -[34.5, 54.5] -[36.5, 54.5] -[38.5, 54.5] -[40.5, 54.5] -[42.5, 54.5] -[60.5, 54.5] -[62.5, 54.5] -[122.5, 54.5] -[38.5, 56.5] -[40.5, 56.5] -[42.5, 56.5] -[60.5, 56.5] -[62.5, 56.5] -[122.5, 56.5] -[38.5, 58.5] -[40.5, 58.5] -[42.5, 58.5] -[60.5, 58.5] -[62.5, 58.5] -[122.5, 58.5] -[36.5, 60.5] -[38.5, 60.5] -[40.5, 60.5] -[42.5, 60.5] -[60.5, 60.5] -[62.5, 60.5] -[120.5, 60.5] -[122.5, 60.5] -[0.5, 62.5] -[2.5, 62.5] -[4.5, 62.5] -[6.5, 62.5] -[36.5, 62.5] -[38.5, 62.5] -[40.5, 62.5] -[42.5, 62.5] -[62.5, 62.5] -[120.5, 62.5] -[122.5, 62.5] -[0.5, 64.5] -[2.5, 64.5] -[4.5, 64.5] -[6.5, 64.5] -[8.5, 64.5] -[36.5, 64.5] -[38.5, 64.5] -[40.5, 64.5] -[42.5, 64.5] -[62.5, 64.5] -[64.5, 64.5] -[0.5, 66.5] -[2.5, 66.5] -[4.5, 66.5] -[6.5, 66.5] -[8.5, 66.5] -[26.5, 66.5] -[28.5, 66.5] -[30.5, 66.5] -[32.5, 66.5] -[34.5, 66.5] -[36.5, 66.5] -[38.5, 66.5] -[40.5, 66.5] -[42.5, 66.5] -[0.5, 68.5] -[2.5, 68.5] -[4.5, 68.5] -[6.5, 68.5] -[8.5, 68.5] -[22.5, 68.5] -[24.5, 68.5] -[26.5, 68.5] -[28.5, 68.5] -[30.5, 68.5] -[32.5, 68.5] -[34.5, 68.5] -[36.5, 68.5] -[38.5, 68.5] -[40.5, 68.5] -[42.5, 68.5] -[44.5, 68.5] -[0.5, 70.5] -[2.5, 70.5] -[4.5, 70.5] -[6.5, 70.5] -[8.5, 70.5] -[22.5, 70.5] -[24.5, 70.5] -[26.5, 70.5] -[28.5, 70.5] -[30.5, 70.5] -[32.5, 70.5] -[34.5, 70.5] -[36.5, 70.5] -[38.5, 70.5] -[40.5, 70.5] -[42.5, 70.5] -[44.5, 70.5] -[0.5, 72.5] -[2.5, 72.5] -[4.5, 72.5] -[6.5, 72.5] -[8.5, 72.5] -[22.5, 72.5] -[24.5, 72.5] -[26.5, 72.5] -[28.5, 72.5] -[30.5, 72.5] -[32.5, 72.5] -[34.5, 72.5] -[36.5, 72.5] -[38.5, 72.5] -[40.5, 72.5] -[42.5, 72.5] -[44.5, 72.5] -[0.5, 74.5] -[2.5, 74.5] -[4.5, 74.5] -[6.5, 74.5] -[8.5, 74.5] -[22.5, 74.5] -[24.5, 74.5] -[26.5, 74.5] -[28.5, 74.5] -[30.5, 74.5] -[32.5, 74.5] -[34.5, 74.5] -[36.5, 74.5] -[38.5, 74.5] -[40.5, 74.5] -[42.5, 74.5] -[44.5, 74.5] -[46.5, 74.5] -[0.5, 76.5] -[2.5, 76.5] -[4.5, 76.5] -[6.5, 76.5] -[22.5, 76.5] -[24.5, 76.5] -[26.5, 76.5] -[28.5, 76.5] -[30.5, 76.5] -[32.5, 76.5] -[34.5, 76.5] -[36.5, 76.5] -[38.5, 76.5] -[40.5, 76.5] -[42.5, 76.5] -[44.5, 76.5] -[46.5, 76.5] -[22.5, 78.5] -[24.5, 78.5] -[26.5, 78.5] -[28.5, 78.5] -[30.5, 78.5] -[32.5, 78.5] -[34.5, 78.5] -[36.5, 78.5] -[38.5, 78.5] -[40.5, 78.5] -[42.5, 78.5] -[44.5, 78.5] -[46.5, 78.5] -[48.5, 78.5] -[24.5, 80.5] -[26.5, 80.5] -[28.5, 80.5] -[30.5, 80.5] -[32.5, 80.5] -[34.5, 80.5] -[36.5, 80.5] -[38.5, 80.5] -[40.5, 80.5] -[42.5, 80.5] -[44.5, 80.5] -[46.5, 80.5] -[48.5, 80.5] -[50.5, 80.5] -[106.5, 80.5] -[42.5, 82.5] -[44.5, 82.5] -[46.5, 82.5] -[48.5, 82.5] -[50.5, 82.5] -[106.5, 82.5] -[46.5, 84.5] -[48.5, 84.5] -[50.5, 84.5] -[106.5, 84.5] -[46.5, 86.5] -[48.5, 86.5] -[50.5, 86.5] -[98.5, 86.5] -[48.5, 88.5] -[88.5, 88.5] -[98.5, 88.5] -[100.5, 88.5] -[86.5, 90.5] -[88.5, 90.5] -[98.5, 90.5] -[86.5, 92.5] -[88.5, 92.5] -[98.5, 92.5] -[100.5, 92.5] -[124.5, 92.5] -[126.5, 92.5] -[56.5, 94.5] -[58.5, 94.5] -[60.5, 94.5] -[62.5, 94.5] -[64.5, 94.5] -[88.5, 94.5] -[98.5, 94.5] -[100.5, 94.5] -[118.5, 94.5] -[120.5, 94.5] -[122.5, 94.5] -[124.5, 94.5] -[126.5, 94.5] -[56.5, 96.5] -[58.5, 96.5] -[60.5, 96.5] -[62.5, 96.5] -[64.5, 96.5] -[100.5, 96.5] -[118.5, 96.5] -[120.5, 96.5] -[122.5, 96.5] -[124.5, 96.5] -[126.5, 96.5] -[48.5, 98.5] -[50.5, 98.5] -[56.5, 98.5] -[58.5, 98.5] -[60.5, 98.5] -[62.5, 98.5] -[64.5, 98.5] -[100.5, 98.5] -[102.5, 98.5] -[118.5, 98.5] -[120.5, 98.5] -[122.5, 98.5] -[124.5, 98.5] -[126.5, 98.5] -[48.5, 100.5] -[50.5, 100.5] -[54.5, 100.5] -[56.5, 100.5] -[58.5, 100.5] -[60.5, 100.5] -[62.5, 100.5] -[64.5, 100.5] -[102.5, 100.5] -[118.5, 100.5] -[120.5, 100.5] -[122.5, 100.5] -[124.5, 100.5] -[126.5, 100.5] -[0.5, 102.5] -[2.5, 102.5] -[4.5, 102.5] -[48.5, 102.5] -[50.5, 102.5] -[54.5, 102.5] -[56.5, 102.5] -[58.5, 102.5] -[60.5, 102.5] -[62.5, 102.5] -[64.5, 102.5] -[92.5, 102.5] -[102.5, 102.5] -[120.5, 102.5] -[122.5, 102.5] -[0.5, 104.5] -[2.5, 104.5] -[4.5, 104.5] -[6.5, 104.5] -[48.5, 104.5] -[50.5, 104.5] -[54.5, 104.5] -[56.5, 104.5] -[58.5, 104.5] -[60.5, 104.5] -[62.5, 104.5] -[64.5, 104.5] -[90.5, 104.5] -[92.5, 104.5] -[0.5, 106.5] -[2.5, 106.5] -[4.5, 106.5] -[6.5, 106.5] -[48.5, 106.5] -[50.5, 106.5] -[52.5, 106.5] -[58.5, 106.5] -[60.5, 106.5] -[62.5, 106.5] -[64.5, 106.5] -[90.5, 106.5] -[92.5, 106.5] -[94.5, 106.5] -[104.5, 106.5] -[0.5, 108.5] -[2.5, 108.5] -[4.5, 108.5] -[6.5, 108.5] -[48.5, 108.5] -[50.5, 108.5] -[52.5, 108.5] -[54.5, 108.5] -[56.5, 108.5] -[58.5, 108.5] -[60.5, 108.5] -[62.5, 108.5] -[64.5, 108.5] -[66.5, 108.5] -[92.5, 108.5] -[94.5, 108.5] -[102.5, 108.5] -[104.5, 108.5] -[118.5, 108.5] -[120.5, 108.5] -[122.5, 108.5] -[124.5, 108.5] -[0.5, 110.5] -[2.5, 110.5] -[4.5, 110.5] -[6.5, 110.5] -[48.5, 110.5] -[50.5, 110.5] -[52.5, 110.5] -[54.5, 110.5] -[56.5, 110.5] -[58.5, 110.5] -[60.5, 110.5] -[62.5, 110.5] -[64.5, 110.5] -[66.5, 110.5] -[92.5, 110.5] -[94.5, 110.5] -[102.5, 110.5] -[104.5, 110.5] -[114.5, 110.5] -[116.5, 110.5] -[118.5, 110.5] -[120.5, 110.5] -[122.5, 110.5] -[124.5, 110.5] -[126.5, 110.5] -[0.5, 112.5] -[2.5, 112.5] -[4.5, 112.5] -[6.5, 112.5] -[48.5, 112.5] -[50.5, 112.5] -[52.5, 112.5] -[54.5, 112.5] -[58.5, 112.5] -[60.5, 112.5] -[62.5, 112.5] -[64.5, 112.5] -[66.5, 112.5] -[94.5, 112.5] -[102.5, 112.5] -[104.5, 112.5] -[106.5, 112.5] -[112.5, 112.5] -[114.5, 112.5] -[116.5, 112.5] -[118.5, 112.5] -[120.5, 112.5] -[122.5, 112.5] -[124.5, 112.5] -[126.5, 112.5] -[48.5, 114.5] -[50.5, 114.5] -[52.5, 114.5] -[54.5, 114.5] -[58.5, 114.5] -[60.5, 114.5] -[62.5, 114.5] -[64.5, 114.5] -[66.5, 114.5] -[94.5, 114.5] -[102.5, 114.5] -[104.5, 114.5] -[106.5, 114.5] -[112.5, 114.5] -[114.5, 114.5] -[116.5, 114.5] -[118.5, 114.5] -[42.5, 116.5] -[44.5, 116.5] -[46.5, 116.5] -[48.5, 116.5] -[50.5, 116.5] -[52.5, 116.5] -[54.5, 116.5] -[58.5, 116.5] -[60.5, 116.5] -[62.5, 116.5] -[64.5, 116.5] -[66.5, 116.5] -[102.5, 116.5] -[104.5, 116.5] -[106.5, 116.5] -[112.5, 116.5] -[114.5, 116.5] -[116.5, 116.5] -[38.5, 118.5] -[40.5, 118.5] -[42.5, 118.5] -[44.5, 118.5] -[46.5, 118.5] -[48.5, 118.5] -[50.5, 118.5] -[52.5, 118.5] -[54.5, 118.5] -[104.5, 118.5] -[106.5, 118.5] -[112.5, 118.5] -[114.5, 118.5] -[116.5, 118.5] -[36.5, 120.5] -[38.5, 120.5] -[40.5, 120.5] -[42.5, 120.5] -[44.5, 120.5] -[46.5, 120.5] -[48.5, 120.5] -[50.5, 120.5] -[52.5, 120.5] -[54.5, 120.5] -[104.5, 120.5] -[106.5, 120.5] -[112.5, 120.5] -[114.5, 120.5] -[116.5, 120.5] -[0.5, 122.5] -[2.5, 122.5] -[4.5, 122.5] -[36.5, 122.5] -[38.5, 122.5] -[40.5, 122.5] -[42.5, 122.5] -[44.5, 122.5] -[46.5, 122.5] -[48.5, 122.5] -[50.5, 122.5] -[52.5, 122.5] -[54.5, 122.5] -[56.5, 122.5] -[106.5, 122.5] -[114.5, 122.5] -[0.5, 124.5] -[2.5, 124.5] -[4.5, 124.5] -[36.5, 124.5] -[38.5, 124.5] -[40.5, 124.5] -[42.5, 124.5] -[44.5, 124.5] -[46.5, 124.5] -[48.5, 124.5] -[50.5, 124.5] -[52.5, 124.5] -[54.5, 124.5] -[56.5, 124.5] -[106.5, 124.5] -[108.5, 124.5] -[0.5, 126.5] -[2.5, 126.5] -[4.5, 126.5] -[6.5, 126.5] -[36.5, 126.5] -[38.5, 126.5] -[40.5, 126.5] -[42.5, 126.5] -[44.5, 126.5] -[46.5, 126.5] -[48.5, 126.5] -[50.5, 126.5] -[52.5, 126.5] -[54.5, 126.5] -[56.5, 126.5] diff --git a/Data/Baseline/OTB/Files/bfBoundingRegionCalculatorOutput.txt b/Data/Baseline/OTB/Files/bfBoundingRegionCalculatorOutput.txt deleted file mode 100644 index 607b28d732cbd88ed00155282488e63c212b0ace..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfBoundingRegionCalculatorOutput.txt +++ /dev/null @@ -1,12 +0,0 @@ -Test results from otbBinaryImageBoundingRegionCalculator test. -[8, 48] [81, 39] -[7, 7] [83, 41] -[7, 9] [45, 36] -[25, 11] [47, 30] - -Testing the pad option - -[7, 47] [83, 41] -[6, 6] [85, 43] -[6, 8] [47, 38] -[24, 10] [49, 32] diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.dbf b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.dbf deleted file mode 100644 index e514113af135119bc8425acf01f592628df9b0ee..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a91a7b2a449168136030deb765d660dc0851638543eced30eb006db94bc2123 -size 6583 diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shp b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shp deleted file mode 100644 index 0e5a1e7088d245322c2dea9711dc61f0d147bbc4..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2ca53f866c1773b1ea1329e910073eb8c2c25513dca65b8e5ab21a047d31e333 -size 12860 diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shx b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shx deleted file mode 100644 index e4f82fd5c32949defffebc072ec21aab04dd54d3..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cd9270880008ed009e4e0e08ea105d91f40eb911f7c27e773348dfc74857bec2 -size 668 diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.dbf b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.dbf deleted file mode 100644 index 5c2e63d063ed9d1cb3951b1af6ae1f47ad6bdf14..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:539f3f381fe619efbf813b1f6a407f236ca577cd2f62f0d35cf8a717c30f3210 -size 6583 diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp deleted file mode 100644 index d5ff96b9922859ed04a1f8c4479c89507f6c4daa..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d0b6e77ff1d3acae9432b63b929050ed0089e9aace8a831c817b07ac02b04063 -size 18388 diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shx b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shx deleted file mode 100644 index 72bda750b8f93dbb743c133f9cdcb57e5d489314..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8e3f91df5a62beb63ba9b17a952d2673a732aa428b20861dce0c6dd986e588db -size 668 diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.dbf b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.dbf deleted file mode 100644 index 7c908dfa514d47a20b9e25bfb6e6d9b379d01ef6..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5e03911f8e9f9eecd908084083cbed86b2084a1a8ec469a0bf58296ba9ca93f4 -size 6583 diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp deleted file mode 100644 index b3adb3d3bb2ccb2ae5bfefd4abb19bd64970103a..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ff01566163097422211e31b35823cc6ede15efa3965bcc72f2e89f8b95fc2b30 -size 12860 diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shx b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shx deleted file mode 100644 index 8eb95e8e60e8cf4597630573a9dcfa4c795487fc..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b033aa81a9212511ecb13bf36bb9b92d26a2272e8fd2e7106fd938f623084664 -size 668 diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.dbf b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.dbf deleted file mode 100644 index 6cf192268251981989263ef6d65b1d2c3490290f..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2a314fb6c853dd6ed9864eb50da057c96bad6802b1d35e1c27e63f7c54ac5e6c -size 1517 diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp deleted file mode 100644 index 4df7fd5f11a76ae2d527a9be87e52e380efe6edd..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a02afbec1aac0b3b812282d4877310d5ce035b9fce9aa4d2427244a0c4404840 -size 3228 diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shx b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shx deleted file mode 100644 index e8977f2d43cf2cc9b3b6dc1bd080b67d024f7573..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce4dc76a26a8fafad2f5e083c3aea4f5494319c7a46cfa7a339a0fd48161aa1d -size 252 diff --git a/Data/Baseline/OTB/Files/bfTvPersistentVectorizationImageFilterOutput.txt b/Data/Baseline/OTB/Files/bfTvPersistentVectorizationImageFilterOutput.txt index be8d26528fdb6e53c48a6a5b67c58eb5dd40d5cb..9f0a2569d3082b2e1322feed4a06fdfc469748bd 100644 --- a/Data/Baseline/OTB/Files/bfTvPersistentVectorizationImageFilterOutput.txt +++ b/Data/Baseline/OTB/Files/bfTvPersistentVectorizationImageFilterOutput.txt @@ -1,4 +1,3 @@ -[ 55.5, 123.5] [ 57, 123.5] [ 58, 123.5] [ 59, 123.5] [ 60, 123.5] [ 61, 123.5] [ 62, 123.5] [ 63, 123.5] [ 64, 123.5] [ 65, 123.5] [ 66, 123.5] [ 67.5, 123.5] [ 68, 124.5] [ 69, 124.5] [ 70, 124.5] [ 71.5, 124.5] [ 72, 125.5] [ 73.5, 125.5] [ 74, 126.5] [ 75, 126.5] [ 76.5, 126.5] [ 77, 127.5] [ 78.5, 127.5] [ 79.5, 128.5] [ 80, 129.5] [ 81.5, 129.5] [ 82.5, 130.5] [ 83.5, 131.5] [ 84.5, 132.5] [ 85.5, 133.5] [ 86.5, 134.5] [ 87.5, 135.5] [ 88.5, 136.5] [ 89.5, 137.5] [ 90.5, 138.5] [ 91.5, 139.5] [ 91.5, 141] [ 92.5, 141.5] [ 93.5, 142.5] [ 93.5, 144] [ 94.5, 144.5] [ 94.5, 146] [ 95.5, 146.5] [ 95.5, 148] [ 96.5, 148.5] [ 96.5, 150] [ 96.5, 151] [ 97.5, 151.5] [ 97.5, 153] [ 97.5, 154] [ 98.5, 154.5] [ 98.5, 156] [ 98.5, 157] [ 99.5, 157.5] [ 99.5, 159] [ 99.5, 160] [ 99.5, 161] [ 99.5, 162] [ 99.5, 163] [ 100.5, 163.5] [ 100.5, 165] [ 100.5, 166] [ 100.5, 167] [ 100.5, 168] [ 100.5, 169] [ 100.5, 170] [ 100.5, 171] [ 100.5, 172] [ 100.5, 173] [ 100.5, 174] [ 100.5, 175] [ 100.5, 176] [ 100.5, 177] [ 100.5, 178.5] [ 99.5, 179] [ 99.5, 180] [ 99.5, 181] [ 99.5, 182] [ 99.5, 183] [ 99.5, 184.5] [ 98.5, 185] [ 98.5, 186] [ 98.5, 187.5] [ 97.5, 188] [ 97.5, 189] [ 97.5, 190.5] [ 96.5, 191] [ 96.5, 192] [ 96.5, 193.5] [ 95.5, 194] [ 95.5, 195.5] [ 94.5, 196] [ 94.5, 197.5] [ 93.5, 198] [ 93.5, 199.5] [ 92.5, 200.5] [ 91.5, 201] [ 91.5, 202.5] [ 90.5, 203.5] [ 89.5, 204.5] [ 88.5, 205.5] [ 87.5, 206.5] [ 86.5, 207.5] [ 85.5, 208.5] [ 84.5, 209.5] [ 83.5, 210.5] [ 82.5, 211.5] [ 81.5, 212.5] [ 80, 212.5] [ 79.5, 213.5] [ 78.5, 214.5] [ 77, 214.5] [ 76.5, 215.5] [ 75, 215.5] [ 74, 215.5] [ 73.5, 216.5] [ 72, 216.5] [ 71.5, 217.5] [ 70, 217.5] [ 69, 217.5] [ 68, 217.5] [ 67.5, 218.5] [ 66, 218.5] [ 65, 218.5] [ 64, 218.5] [ 63, 218.5] [ 62, 218.5] [ 61, 218.5] [ 60, 218.5] [ 59, 218.5] [ 58, 218.5] [ 57, 218.5] [ 55.5, 218.5] [ 55, 217.5] [ 54, 217.5] [ 53, 217.5] [ 51.5, 217.5] [ 51, 216.5] [ 49.5, 216.5] [ 49, 215.5] [ 48, 215.5] [ 46.5, 215.5] [ 46, 214.5] [ 44.5, 214.5] [ 43.5, 213.5] [ 43, 212.5] [ 41.5, 212.5] [ 40.5, 211.5] [ 39.5, 210.5] [ 38.5, 209.5] [ 37.5, 208.5] [ 36.5, 207.5] [ 35.5, 206.5] [ 34.5, 205.5] [ 33.5, 204.5] [ 32.5, 203.5] [ 31.5, 202.5] [ 31.5, 201] [ 30.5, 200.5] [ 29.5, 199.5] [ 29.5, 198] [ 28.5, 197.5] [ 28.5, 196] [ 27.5, 195.5] [ 27.5, 194] [ 26.5, 193.5] [ 26.5, 192] [ 26.5, 191] [ 25.5, 190.5] [ 25.5, 189] [ 25.5, 188] [ 24.5, 187.5] [ 24.5, 186] [ 24.5, 185] [ 23.5, 184.5] [ 23.5, 183] [ 23.5, 182] [ 23.5, 181] [ 23.5, 180] [ 23.5, 179] [ 22.5, 178.5] [ 22.5, 177] [ 22.5, 176] [ 22.5, 175] [ 22.5, 174] [ 22.5, 173] [ 22.5, 172] [ 22.5, 171] [ 22.5, 170] [ 22.5, 169] [ 22.5, 168] [ 22.5, 167] [ 22.5, 166] [ 22.5, 165] [ 22.5, 163.5] [ 23.5, 163] [ 23.5, 162] [ 23.5, 161] [ 23.5, 160] [ 23.5, 159] [ 23.5, 157.5] [ 24.5, 157] [ 24.5, 156] [ 24.5, 154.5] [ 25.5, 154] [ 25.5, 153] [ 25.5, 151.5] [ 26.5, 151] [ 26.5, 150] [ 26.5, 148.5] [ 27.5, 148] [ 27.5, 146.5] [ 28.5, 146] [ 28.5, 144.5] [ 29.5, 144] [ 29.5, 142.5] [ 30.5, 141.5] [ 31.5, 141] [ 31.5, 139.5] [ 32.5, 138.5] [ 33.5, 137.5] [ 34.5, 136.5] [ 35.5, 135.5] [ 36.5, 134.5] [ 37.5, 133.5] [ 38.5, 132.5] [ 39.5, 131.5] [ 40.5, 130.5] [ 41.5, 129.5] [ 43, 129.5] [ 43.5, 128.5] [ 44.5, 127.5] [ 46, 127.5] [ 46.5, 126.5] [ 48, 126.5] [ 49, 126.5] [ 49.5, 125.5] [ 51, 125.5] [ 51.5, 124.5] [ 53, 124.5] [ 54, 124.5] [ 55, 124.5] -[ 187.5, 31.5] [ 189, 31.5] [ 190, 31.5] [ 191, 31.5] [ 192, 31.5] [ 193, 31.5] [ 194, 31.5] [ 195, 31.5] [ 196, 31.5] [ 197, 31.5] [ 198, 31.5] [ 199, 31.5] [ 200, 31.5] [ 201, 31.5] [ 202, 31.5] [ 203, 31.5] [ 204, 31.5] [ 205, 31.5] [ 206, 31.5] [ 207, 31.5] [ 208, 31.5] [ 209, 31.5] [ 210, 31.5] [ 211, 31.5] [ 212, 31.5] [ 213, 31.5] [ 214, 31.5] [ 215, 31.5] [ 216, 31.5] [ 217, 31.5] [ 218, 31.5] [ 219, 31.5] [ 220, 31.5] [ 221.5, 31.5] [ 221.5, 33] [ 221.5, 34] [ 221.5, 35] [ 221.5, 36] [ 221.5, 37] [ 221.5, 38] [ 221.5, 39] [ 221.5, 40] [ 221.5, 41] [ 221.5, 42] [ 221.5, 43] [ 221.5, 44] [ 221.5, 45] [ 221.5, 46] [ 221.5, 47] [ 221.5, 48] [ 221.5, 49] [ 221.5, 50] [ 221.5, 51] [ 221.5, 52] [ 221.5, 53] [ 221.5, 54] [ 221.5, 55] [ 221.5, 56] [ 221.5, 57] [ 221.5, 58] [ 221.5, 59] [ 221.5, 60] [ 221.5, 61] [ 221.5, 62] [ 221.5, 63] [ 221.5, 64] [ 221.5, 65] [ 221.5, 66] [ 221.5, 67] [ 221.5, 68] [ 221.5, 69] [ 221.5, 70] [ 221.5, 71] [ 221.5, 72] [ 221.5, 73] [ 221.5, 74] [ 221.5, 75] [ 221.5, 76] [ 221.5, 77] [ 221.5, 78] [ 221.5, 79] [ 221.5, 80] [ 221.5, 81] [ 221.5, 82] [ 221.5, 83] [ 221.5, 84] [ 221.5, 85] [ 221.5, 86] [ 221.5, 87] [ 221.5, 88] [ 221.5, 89] [ 221.5, 90] [ 221.5, 91] [ 221.5, 92] [ 221.5, 93] [ 221.5, 94] [ 221.5, 95] [ 221.5, 96] [ 221.5, 97] [ 221.5, 98] [ 221.5, 99] [ 221.5, 100] [ 221.5, 101] [ 221.5, 102] [ 221.5, 103] [ 221.5, 104] [ 221.5, 105] [ 221.5, 106] [ 221.5, 107] [ 221.5, 108] [ 221.5, 109] [ 221.5, 110] [ 221.5, 111] [ 221.5, 112] [ 221.5, 113] [ 221.5, 114] [ 221.5, 115] [ 221.5, 116] [ 221.5, 117] [ 221.5, 118] [ 221.5, 119] [ 221.5, 120] [ 221.5, 121] [ 221.5, 122] [ 221.5, 123] [ 221.5, 124] [ 221.5, 125] [ 221.5, 126] [ 221.5, 127] [ 221.5, 128] [ 221.5, 129] [ 221.5, 130] [ 221.5, 131] [ 221.5, 132] [ 221.5, 133] [ 221.5, 134] [ 221.5, 135] [ 221.5, 136] [ 221.5, 137] [ 221.5, 138] [ 221.5, 139] [ 221.5, 140] [ 221.5, 141] [ 221.5, 142] [ 221.5, 143] [ 221.5, 144] [ 221.5, 145] [ 221.5, 146] [ 221.5, 147] [ 221.5, 148] [ 221.5, 149] [ 221.5, 150] [ 221.5, 151] [ 221.5, 152] [ 221.5, 153] [ 221.5, 154] [ 221.5, 155] [ 221.5, 156] [ 221.5, 157] [ 221.5, 158] [ 221.5, 159] [ 221.5, 160] [ 221.5, 161] [ 221.5, 162] [ 221.5, 163] [ 221.5, 164] [ 221.5, 165] [ 221.5, 166] [ 221.5, 167] [ 221.5, 168] [ 221.5, 169] [ 221.5, 170] [ 221.5, 171] [ 221.5, 172] [ 221.5, 173] [ 221.5, 174] [ 221.5, 175] [ 221.5, 176] [ 221.5, 177] [ 221.5, 178] [ 221.5, 179] [ 221.5, 180] [ 221.5, 181] [ 221.5, 182] [ 221.5, 183] [ 221.5, 184] [ 221.5, 185] [ 221.5, 186] [ 221.5, 187] [ 221.5, 188] [ 221.5, 189] [ 221.5, 190] [ 221.5, 191] [ 221.5, 192] [ 221.5, 193] [ 221.5, 194] [ 221.5, 195] [ 221.5, 196] [ 221.5, 197] [ 221.5, 198] [ 221.5, 199] [ 221.5, 200] [ 221.5, 201] [ 221.5, 202.5] [ 220, 202.5] [ 219, 202.5] [ 218, 202.5] [ 217, 202.5] [ 216, 202.5] [ 215, 202.5] [ 214, 202.5] [ 213, 202.5] [ 212, 202.5] [ 211, 202.5] [ 210, 202.5] [ 209, 202.5] [ 208, 202.5] [ 207, 202.5] [ 206, 202.5] [ 205, 202.5] [ 204, 202.5] [ 203, 202.5] [ 202, 202.5] [ 201, 202.5] [ 200, 202.5] [ 199, 202.5] [ 198, 202.5] [ 197, 202.5] [ 196, 202.5] [ 195, 202.5] [ 194, 202.5] [ 193, 202.5] [ 192, 202.5] [ 191, 202.5] [ 190, 202.5] [ 189, 202.5] [ 187.5, 202.5] [ 187.5, 201] [ 187.5, 200] [ 187.5, 199] [ 187.5, 198] [ 187.5, 197] [ 187.5, 196] [ 187.5, 195] [ 187.5, 194] [ 187.5, 193] [ 187.5, 192] [ 187.5, 191] [ 187.5, 190] [ 187.5, 189] [ 187.5, 188] [ 187.5, 187] [ 187.5, 186] [ 187.5, 185] [ 187.5, 184] [ 187.5, 183] [ 187.5, 182] [ 187.5, 181] [ 187.5, 180] [ 187.5, 179] [ 187.5, 178] [ 187.5, 177] [ 187.5, 176] [ 187.5, 175] [ 187.5, 174] [ 187.5, 173] [ 187.5, 172] [ 187.5, 171] [ 187.5, 170] [ 187.5, 169] [ 187.5, 168] [ 187.5, 167] [ 187.5, 166] [ 187.5, 165] [ 187.5, 164] [ 187.5, 163] [ 187.5, 162] [ 187.5, 161] [ 187.5, 160] [ 187.5, 159] [ 187.5, 158] [ 187.5, 157] [ 187.5, 156] [ 187.5, 155] [ 187.5, 154] [ 187.5, 153] [ 187.5, 152] [ 187.5, 151] [ 187.5, 150] [ 187.5, 149] [ 187.5, 148] [ 187.5, 147] [ 187.5, 146] [ 187.5, 145] [ 187.5, 144] [ 187.5, 143] [ 187.5, 142] [ 187.5, 141] [ 187.5, 140] [ 187.5, 139] [ 187.5, 138] [ 187.5, 137] [ 187.5, 136] [ 187.5, 135] [ 187.5, 134] [ 187.5, 133] [ 187.5, 132] [ 187.5, 131] [ 187.5, 130] [ 187.5, 129] [ 187.5, 128] [ 187.5, 127] [ 187.5, 126] [ 187.5, 125] [ 187.5, 124] [ 187.5, 123] [ 187.5, 122] [ 187.5, 121] [ 187.5, 120] [ 187.5, 119] [ 187.5, 118] [ 187.5, 117] [ 187.5, 116] [ 187.5, 115] [ 187.5, 114] [ 187.5, 113] [ 187.5, 112] [ 187.5, 111] [ 187.5, 110] [ 187.5, 109] [ 187.5, 108] [ 187.5, 107] [ 187.5, 106] [ 187.5, 105] [ 187.5, 104] [ 187.5, 103] [ 187.5, 102] [ 187.5, 101] [ 187.5, 100] [ 187.5, 99] [ 187.5, 98] [ 187.5, 97] [ 187.5, 96] [ 187.5, 95] [ 187.5, 94] [ 187.5, 93] [ 187.5, 92] [ 187.5, 91] [ 187.5, 90] [ 187.5, 89] [ 187.5, 88] [ 187.5, 87] [ 187.5, 86] [ 187.5, 85] [ 187.5, 84] [ 187.5, 83] [ 187.5, 82] [ 187.5, 81] [ 187.5, 80] [ 187.5, 79] [ 187.5, 78] [ 187.5, 77] [ 187.5, 76] [ 187.5, 75] [ 187.5, 74] [ 187.5, 73] [ 187.5, 72] [ 187.5, 71] [ 187.5, 70] [ 187.5, 69] [ 187.5, 68] [ 187.5, 67] [ 187.5, 66] [ 187.5, 65] [ 187.5, 64] [ 187.5, 63] [ 187.5, 62] [ 187.5, 61] [ 187.5, 60] [ 187.5, 59] [ 187.5, 58] [ 187.5, 57] [ 187.5, 56] [ 187.5, 55] [ 187.5, 54] [ 187.5, 53] [ 187.5, 52] [ 187.5, 51] [ 187.5, 50] [ 187.5, 49] [ 187.5, 48] [ 187.5, 47] [ 187.5, 46] [ 187.5, 45] [ 187.5, 44] [ 187.5, 43] [ 187.5, 42] [ 187.5, 41] [ 187.5, 40] [ 187.5, 39] [ 187.5, 38] [ 187.5, 37] [ 187.5, 36] [ 187.5, 35] [ 187.5, 34] [ 187.5, 33] -[ 134.5, 38.5] [ 136, 38.5] [ 137.5, 38.5] [ 138, 39.5] [ 139.5, 39.5] [ 140.5, 40.5] [ 141.5, 41.5] [ 141.5, 43] [ 142.5, 43.5] [ 142.5, 45] [ 143.5, 45.5] [ 143.5, 47] [ 144.5, 47.5] [ 144.5, 49] [ 145.5, 49.5] [ 145.5, 51] [ 145.5, 52] [ 146.5, 52.5] [ 146.5, 54] [ 146.5, 55] [ 146.5, 56] [ 147.5, 56.5] [ 147.5, 58] [ 147.5, 59] [ 147.5, 60] [ 148.5, 60.5] [ 148.5, 62] [ 148.5, 63] [ 148.5, 64] [ 149.5, 64.5] [ 149.5, 66] [ 149.5, 67] [ 149.5, 68] [ 149.5, 69] [ 150.5, 69.5] [ 150.5, 71] [ 150.5, 72] [ 150.5, 73] [ 150.5, 74] [ 150.5, 75] [ 151.5, 75.5] [ 151.5, 77] [ 151.5, 78] [ 151.5, 79] [ 151.5, 80] [ 151.5, 81] [ 151.5, 82] [ 151.5, 83] [ 152.5, 83.5] [ 152.5, 85] [ 152.5, 86] [ 152.5, 87] [ 152.5, 88] [ 152.5, 89] [ 152.5, 90] [ 152.5, 91] [ 152.5, 92] [ 153.5, 92.5] [ 153.5, 94] [ 153.5, 95] [ 153.5, 96] [ 153.5, 97] [ 153.5, 98] [ 153.5, 99] [ 153.5, 100] [ 153.5, 101] [ 153.5, 102] [ 153.5, 103] [ 153.5, 104] [ 153.5, 105] [ 153.5, 106] [ 153.5, 107] [ 154.5, 107.5] [ 154.5, 109] [ 154.5, 110] [ 154.5, 111] [ 154.5, 112] [ 154.5, 113] [ 154.5, 114] [ 154.5, 115] [ 154.5, 116] [ 154.5, 117] [ 154.5, 118] [ 154.5, 119] [ 154.5, 120] [ 154.5, 121] [ 154.5, 122] [ 154.5, 123] [ 154.5, 124] [ 154.5, 125] [ 154.5, 126] [ 154.5, 127] [ 154.5, 128] [ 154.5, 129] [ 154.5, 130] [ 154.5, 131] [ 154.5, 132] [ 154.5, 133] [ 154.5, 134] [ 154.5, 135] [ 154.5, 136] [ 154.5, 137] [ 154.5, 138] [ 154.5, 139] [ 154.5, 140] [ 154.5, 141] [ 154.5, 142] [ 154.5, 143] [ 154.5, 144] [ 154.5, 145] [ 154.5, 146] [ 154.5, 147] [ 154.5, 148] [ 154.5, 149.5] [ 153.5, 150] [ 153.5, 151] [ 153.5, 152] [ 153.5, 153] [ 153.5, 154] [ 153.5, 155] [ 153.5, 156] [ 153.5, 157] [ 153.5, 158] [ 153.5, 159] [ 153.5, 160] [ 153.5, 161] [ 153.5, 162] [ 153.5, 163] [ 153.5, 164.5] [ 152.5, 165] [ 152.5, 166] [ 152.5, 167] [ 152.5, 168] [ 152.5, 169] [ 152.5, 170] [ 152.5, 171] [ 152.5, 172] [ 152.5, 173.5] [ 151.5, 174] [ 151.5, 175] [ 151.5, 176] [ 151.5, 177] [ 151.5, 178] [ 151.5, 179] [ 151.5, 180] [ 151.5, 181.5] [ 150.5, 182] [ 150.5, 183] [ 150.5, 184] [ 150.5, 185] [ 150.5, 186] [ 150.5, 187.5] [ 149.5, 188] [ 149.5, 189] [ 149.5, 190] [ 149.5, 191] [ 149.5, 192.5] [ 148.5, 193] [ 148.5, 194] [ 148.5, 195] [ 148.5, 196.5] [ 147.5, 197] [ 147.5, 198] [ 147.5, 199] [ 147.5, 200.5] [ 146.5, 201] [ 146.5, 202] [ 146.5, 203] [ 146.5, 204.5] [ 145.5, 205] [ 145.5, 206] [ 145.5, 207.5] [ 144.5, 208] [ 144.5, 209.5] [ 143.5, 210] [ 143.5, 211.5] [ 142.5, 212] [ 142.5, 213.5] [ 141.5, 214] [ 141.5, 215.5] [ 140.5, 216.5] [ 139.5, 217.5] [ 138, 217.5] [ 137.5, 218.5] [ 136, 218.5] [ 134.5, 218.5] [ 134, 217.5] [ 132.5, 217.5] [ 131.5, 216.5] [ 130.5, 215.5] [ 130.5, 214] [ 129.5, 213.5] [ 129.5, 212] [ 128.5, 211.5] [ 128.5, 210] [ 127.5, 209.5] [ 127.5, 208] [ 126.5, 207.5] [ 126.5, 206] [ 126.5, 205] [ 125.5, 204.5] [ 125.5, 203] [ 125.5, 202] [ 125.5, 201] [ 124.5, 200.5] [ 124.5, 199] [ 124.5, 198] [ 124.5, 197] [ 123.5, 196.5] [ 123.5, 195] [ 123.5, 194] [ 123.5, 193] [ 122.5, 192.5] [ 122.5, 191] [ 122.5, 190] [ 122.5, 189] [ 122.5, 188] [ 121.5, 187.5] [ 121.5, 186] [ 121.5, 185] [ 121.5, 184] [ 121.5, 183] [ 121.5, 182] [ 120.5, 181.5] [ 120.5, 180] [ 120.5, 179] [ 120.5, 178] [ 120.5, 177] [ 120.5, 176] [ 120.5, 175] [ 120.5, 174] [ 119.5, 173.5] [ 119.5, 172] [ 119.5, 171] [ 119.5, 170] [ 119.5, 169] [ 119.5, 168] [ 119.5, 167] [ 119.5, 166] [ 119.5, 165] [ 118.5, 164.5] [ 118.5, 163] [ 118.5, 162] [ 118.5, 161] [ 118.5, 160] [ 118.5, 159] [ 118.5, 158] [ 118.5, 157] [ 118.5, 156] [ 118.5, 155] [ 118.5, 154] [ 118.5, 153] [ 118.5, 152] [ 118.5, 151] [ 118.5, 150] [ 117.5, 149.5] [ 117.5, 148] [ 117.5, 147] [ 117.5, 146] [ 117.5, 145] [ 117.5, 144] [ 117.5, 143] [ 117.5, 142] [ 117.5, 141] [ 117.5, 140] [ 117.5, 139] [ 117.5, 138] [ 117.5, 137] [ 117.5, 136] [ 117.5, 135] [ 117.5, 134] [ 117.5, 133] [ 117.5, 132] [ 117.5, 131] [ 117.5, 130] [ 117.5, 129] [ 117.5, 128] [ 117.5, 127] [ 117.5, 126] [ 117.5, 125] [ 117.5, 124] [ 117.5, 123] [ 117.5, 122] [ 117.5, 121] [ 117.5, 120] [ 117.5, 119] [ 117.5, 118] [ 117.5, 117] [ 117.5, 116] [ 117.5, 115] [ 117.5, 114] [ 117.5, 113] [ 117.5, 112] [ 117.5, 111] [ 117.5, 110] [ 117.5, 109] [ 117.5, 107.5] [ 118.5, 107] [ 118.5, 106] [ 118.5, 105] [ 118.5, 104] [ 118.5, 103] [ 118.5, 102] [ 118.5, 101] [ 118.5, 100] [ 118.5, 99] [ 118.5, 98] [ 118.5, 97] [ 118.5, 96] [ 118.5, 95] [ 118.5, 94] [ 118.5, 92.5] [ 119.5, 92] [ 119.5, 91] [ 119.5, 90] [ 119.5, 89] [ 119.5, 88] [ 119.5, 87] [ 119.5, 86] [ 119.5, 85] [ 119.5, 83.5] [ 120.5, 83] [ 120.5, 82] [ 120.5, 81] [ 120.5, 80] [ 120.5, 79] [ 120.5, 78] [ 120.5, 77] [ 120.5, 75.5] [ 121.5, 75] [ 121.5, 74] [ 121.5, 73] [ 121.5, 72] [ 121.5, 71] [ 121.5, 69.5] [ 122.5, 69] [ 122.5, 68] [ 122.5, 67] [ 122.5, 66] [ 122.5, 64.5] [ 123.5, 64] [ 123.5, 63] [ 123.5, 62] [ 123.5, 60.5] [ 124.5, 60] [ 124.5, 59] [ 124.5, 58] [ 124.5, 56.5] [ 125.5, 56] [ 125.5, 55] [ 125.5, 54] [ 125.5, 52.5] [ 126.5, 52] [ 126.5, 51] [ 126.5, 49.5] [ 127.5, 49] [ 127.5, 47.5] [ 128.5, 47] [ 128.5, 45.5] [ 129.5, 45] [ 129.5, 43.5] [ 130.5, 43] [ 130.5, 41.5] [ 131.5, 40.5] [ 132.5, 39.5] [ 134, 39.5] -[ 19.5, 30.5] [ 21, 30.5] [ 22, 30.5] [ 23, 30.5] [ 24, 30.5] [ 25, 30.5] [ 26, 30.5] [ 27, 30.5] [ 28, 30.5] [ 29, 30.5] [ 30, 30.5] [ 31, 30.5] [ 32, 30.5] [ 33, 30.5] [ 34, 30.5] [ 35, 30.5] [ 36, 30.5] [ 37, 30.5] [ 38, 30.5] [ 39, 30.5] [ 40, 30.5] [ 41, 30.5] [ 42, 30.5] [ 43, 30.5] [ 44, 30.5] [ 45, 30.5] [ 46, 30.5] [ 47, 30.5] [ 48, 30.5] [ 49, 30.5] [ 50, 30.5] [ 51, 30.5] [ 52, 30.5] [ 53, 30.5] [ 54, 30.5] [ 55, 30.5] [ 56, 30.5] [ 57, 30.5] [ 58, 30.5] [ 59, 30.5] [ 60, 30.5] [ 61, 30.5] [ 62, 30.5] [ 63, 30.5] [ 64, 30.5] [ 65, 30.5] [ 66, 30.5] [ 67, 30.5] [ 68, 30.5] [ 69, 30.5] [ 70, 30.5] [ 71, 30.5] [ 72, 30.5] [ 73, 30.5] [ 74, 30.5] [ 75, 30.5] [ 76, 30.5] [ 77, 30.5] [ 78, 30.5] [ 79, 30.5] [ 80, 30.5] [ 81, 30.5] [ 82, 30.5] [ 83, 30.5] [ 84.5, 30.5] [ 84.5, 32] [ 84.5, 33] [ 84.5, 34] [ 84.5, 35] [ 84.5, 36] [ 84.5, 37] [ 84.5, 38] [ 84.5, 39] [ 84.5, 40] [ 84.5, 41] [ 84.5, 42] [ 84.5, 43] [ 84.5, 44] [ 84.5, 45] [ 84.5, 46] [ 84.5, 47] [ 84.5, 48] [ 84.5, 49] [ 84.5, 50] [ 84.5, 51] [ 84.5, 52] [ 84.5, 53] [ 84.5, 54] [ 84.5, 55] [ 84.5, 56] [ 84.5, 57] [ 84.5, 58] [ 84.5, 59] [ 84.5, 60] [ 84.5, 61] [ 84.5, 62] [ 84.5, 63] [ 84.5, 64] [ 84.5, 65] [ 84.5, 66] [ 84.5, 67] [ 84.5, 68] [ 84.5, 69] [ 84.5, 70] [ 84.5, 71] [ 84.5, 72] [ 84.5, 73] [ 84.5, 74] [ 84.5, 75] [ 84.5, 76] [ 84.5, 77] [ 84.5, 78] [ 84.5, 79] [ 84.5, 80] [ 84.5, 81] [ 84.5, 82] [ 84.5, 83] [ 84.5, 84] [ 84.5, 85] [ 84.5, 86] [ 84.5, 87] [ 84.5, 88] [ 84.5, 89] [ 84.5, 90] [ 84.5, 91] [ 84.5, 92] [ 84.5, 93] [ 84.5, 94.5] [ 83, 94.5] [ 82, 94.5] [ 81, 94.5] [ 80, 94.5] [ 79, 94.5] [ 78, 94.5] [ 77, 94.5] [ 76, 94.5] [ 75, 94.5] [ 74, 94.5] [ 73, 94.5] [ 72, 94.5] [ 71, 94.5] [ 70, 94.5] [ 69, 94.5] [ 68, 94.5] [ 67, 94.5] [ 66, 94.5] [ 65, 94.5] [ 64, 94.5] [ 63, 94.5] [ 62, 94.5] [ 61, 94.5] [ 60, 94.5] [ 59, 94.5] [ 58, 94.5] [ 57, 94.5] [ 56, 94.5] [ 55, 94.5] [ 54, 94.5] [ 53, 94.5] [ 52, 94.5] [ 51, 94.5] [ 50, 94.5] [ 49, 94.5] [ 48, 94.5] [ 47, 94.5] [ 46, 94.5] [ 45, 94.5] [ 44, 94.5] [ 43, 94.5] [ 42, 94.5] [ 41, 94.5] [ 40, 94.5] [ 39, 94.5] [ 38, 94.5] [ 37, 94.5] [ 36, 94.5] [ 35, 94.5] [ 34, 94.5] [ 33, 94.5] [ 32, 94.5] [ 31, 94.5] [ 30, 94.5] [ 29, 94.5] [ 28, 94.5] [ 27, 94.5] [ 26, 94.5] [ 25, 94.5] [ 24, 94.5] [ 23, 94.5] [ 22, 94.5] [ 21, 94.5] [ 19.5, 94.5] [ 19.5, 93] [ 19.5, 92] [ 19.5, 91] [ 19.5, 90] [ 19.5, 89] [ 19.5, 88] [ 19.5, 87] [ 19.5, 86] [ 19.5, 85] [ 19.5, 84] [ 19.5, 83] [ 19.5, 82] [ 19.5, 81] [ 19.5, 80] [ 19.5, 79] [ 19.5, 78] [ 19.5, 77] [ 19.5, 76] [ 19.5, 75] [ 19.5, 74] [ 19.5, 73] [ 19.5, 72] [ 19.5, 71] [ 19.5, 70] [ 19.5, 69] [ 19.5, 68] [ 19.5, 67] [ 19.5, 66] [ 19.5, 65] [ 19.5, 64] [ 19.5, 63] [ 19.5, 62] [ 19.5, 61] [ 19.5, 60] [ 19.5, 59] [ 19.5, 58] [ 19.5, 57] [ 19.5, 56] [ 19.5, 55] [ 19.5, 54] [ 19.5, 53] [ 19.5, 52] [ 19.5, 51] [ 19.5, 50] [ 19.5, 49] [ 19.5, 48] [ 19.5, 47] [ 19.5, 46] [ 19.5, 45] [ 19.5, 44] [ 19.5, 43] [ 19.5, 42] [ 19.5, 41] [ 19.5, 40] [ 19.5, 39] [ 19.5, 38] [ 19.5, 37] [ 19.5, 36] [ 19.5, 35] [ 19.5, 34] [ 19.5, 33] [ 19.5, 32] +[ 2.5, -0.5] [ 4, -0.5] [ 5, -0.5] [ 6, -0.5] [ 7, -0.5] [ 8, -0.5] [ 9, -0.5] [ 10, -0.5] [ 11, -0.5] [ 12, -0.5] [ 13, -0.5] [ 14, -0.5] [ 15, -0.5] [ 16, -0.5] [ 17.5, -0.5] [ 17.5, 1] [ 17.5, 2.5] [ 16, 2.5] [ 15, 2.5] [ 14, 2.5] [ 13.5, 3] [ 13.5, 4] [ 13.5, 5.5] [ 12, 5.5] [ 11, 5.5] [ 10, 5.5] [ 9, 5.5] [ 8, 5.5] [ 6.5, 5.5] [ 6.5, 4] [ 6.5, 3] [ 6, 2.5] [ 5, 2.5] [ 4, 2.5] [ 2.5, 2.5] [ 2.5, 1] +[ 17.5, -0.5] [ 19.5, -0.5] [ 19.5, 1] [ 19.5, 2] [ 19.5, 3] [ 19.5, 4] [ 19.5, 5] [ 19.5, 6] [ 19.5, 7] [ 19.5, 8] [ 19.5, 9] [ 19.5, 10] [ 19.5, 11] [ 19.5, 12.5] [ 18, 12.5] [ 17, 12.5] [ 16, 12.5] [ 15, 12.5] [ 13.5, 12.5] [ 13.5, 11] [ 13.5, 10] [ 13.5, 9] [ 13.5, 8] [ 13.5, 7] [ 13.5, 6] [ 13.5, 5] [ 13.5, 4] [ 13.5, 2.5] [ 15, 2.5] [ 16, 2.5] [ 17, 2.5] [ 17.5, 2] [ 17.5, 1] +[ 6.5, 5.5] [ 8, 5.5] [ 9, 5.5] [ 10, 5.5] [ 11, 5.5] [ 12, 5.5] [ 13.5, 5.5] [ 13.5, 7] [ 13.5, 8] [ 13.5, 9] [ 13.5, 10] [ 13.5, 11] [ 13.5, 12.5] [ 12, 12.5] [ 11, 12.5] [ 10, 12.5] [ 9, 12.5] [ 8, 12.5] [ 7, 12.5] [ 6, 12.5] [ 5, 12.5] [ 4, 12.5] [ 3, 12.5] [ 2, 12.5] [ 1, 12.5] [ -0.5, 12.5] [ -0.5, 11] [ -0.5, 10] [ -0.5, 8.5] [ 1, 8.5] [ 2, 8.5] [ 3, 8.5] [ 4, 8.5] [ 5, 8.5] [ 6, 8.5] [ 6.5, 8] [ 6.5, 7] diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.dbf b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.dbf deleted file mode 100644 index 0a2e444943b3e3b835f318120bccbb4c58d4a4fb..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:881459241d920b7b0b0f04690ca4b64da9b40043e9761e8089867688fd8c868c -size 6583 diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp deleted file mode 100644 index b3adb3d3bb2ccb2ae5bfefd4abb19bd64970103a..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ff01566163097422211e31b35823cc6ede15efa3965bcc72f2e89f8b95fc2b30 -size 12860 diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shx b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shx deleted file mode 100644 index 8eb95e8e60e8cf4597630573a9dcfa4c795487fc..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b033aa81a9212511ecb13bf36bb9b92d26a2272e8fd2e7106fd938f623084664 -size 668 diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.dbf b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.dbf deleted file mode 100644 index 7f7a14e7e93b6ae0e262ae25f9c8735b61407051..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0f0a24f1a9e719f6b7f9cea9e8dbb89d90436b8837178c1f7e2155f555cd274c -size 1517 diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp deleted file mode 100644 index 4df7fd5f11a76ae2d527a9be87e52e380efe6edd..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a02afbec1aac0b3b812282d4877310d5ce035b9fce9aa4d2427244a0c4404840 -size 3228 diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shx b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shx deleted file mode 100644 index e8977f2d43cf2cc9b3b6dc1bd080b67d024f7573..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce4dc76a26a8fafad2f5e083c3aea4f5494319c7a46cfa7a339a0fd48161aa1d -size 252 diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.dbf b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.dbf deleted file mode 100644 index 1fd9789d1f9e5997ac7ecf8151b5501981153bdd..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:abe817af5f07dd14805d6a14fe5a75fb988340ca1ffcc8e81d8e7adee531a42b -size 6583 diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp deleted file mode 100644 index b3adb3d3bb2ccb2ae5bfefd4abb19bd64970103a..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ff01566163097422211e31b35823cc6ede15efa3965bcc72f2e89f8b95fc2b30 -size 12860 diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shx b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shx deleted file mode 100644 index 8eb95e8e60e8cf4597630573a9dcfa4c795487fc..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b033aa81a9212511ecb13bf36bb9b92d26a2272e8fd2e7106fd938f623084664 -size 668 diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.dbf b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.dbf deleted file mode 100644 index a84548112ba0945d770a527ac2d727f420a5e731..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b5fc99954f197ed6d0bcfc9ecf4178eb77f5893ba17b32a0906555a5c16fb63 -size 1517 diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp deleted file mode 100644 index 4df7fd5f11a76ae2d527a9be87e52e380efe6edd..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a02afbec1aac0b3b812282d4877310d5ce035b9fce9aa4d2427244a0c4404840 -size 3228 diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shx b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shx deleted file mode 100644 index e8977f2d43cf2cc9b3b6dc1bd080b67d024f7573..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce4dc76a26a8fafad2f5e083c3aea4f5494319c7a46cfa7a339a0fd48161aa1d -size 252 diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.dbf b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.dbf deleted file mode 100644 index a2d1962a67cfe76b01ba616264e3b432995b312b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e675961d8adb260fa0e564558e79e158c2511d7a1cbd464667b2cf7927f702fd -size 785 diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shp b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shp deleted file mode 100644 index 8ac2142c3235efbf2e8cf2803f9aeff3bba4649d..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4e720cbe159c9438355353a79261f74beba401408778cd8669afc74ec9301b26 -size 15684 diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shx b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shx deleted file mode 100644 index ecb34a6fd196a31064ce103077a3e80a450e6181..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7af082714c0e2d805f31e4f713599b7dda549f6ff99d81fb33efe41e160ff384 -size 580 diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.dbf b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.dbf index a2d1962a67cfe76b01ba616264e3b432995b312b..9ed672feb1457ec0eef8027c7e3b062082623cd7 100644 --- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.dbf +++ b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.dbf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e675961d8adb260fa0e564558e79e158c2511d7a1cbd464667b2cf7927f702fd -size 785 +oid sha256:039b117e408a00a939a7eb4268f1ef488e08a793645a9df2617a999008aab0b2 +size 2466 diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.prj b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.prj similarity index 100% rename from Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.prj rename to Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.prj diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shp b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shp index 199475acddb250a1349fbf18a06fd729b5283ba0..5521bb667bc0b70f5523f27a3ddd12a988143272 100644 --- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shp +++ b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shp @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d51f57a1463023f790db62d41cfea1ea1364d0703fde4b0a179a409536fd4990 -size 22756 +oid sha256:ac714bc9b3d7f861e18549af2ee9df1264cfdb3595a27d43fd621ee3ee854263 +size 50020 diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shx b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shx index 21af605da762cae678e5f94bbbb443f172c2984c..375bc0d40fca7103f87b18f4c088c0d474b294d1 100644 --- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shx +++ b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3cced39b706cd73f652e67d5a3e752aadff2a4ba95ce4a24714c0bd73b350e4 -size 580 +oid sha256:db653974b1e2e7b5c5c878f0cef7871fb75a8d7d48739723e26f281e04d32555 +size 1700 diff --git a/Data/Baseline/OTB/Files/feAlign.txt b/Data/Baseline/OTB/Files/feAlign.txt deleted file mode 100644 index 9803d3b15840ab23977df19847fd69b6f705bdc2..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/feAlign.txt +++ /dev/null @@ -1,759 +0,0 @@ -Nb Segment: 758 - 260.335 4.536 - 262.335 4.536 - 270.335 4.536 - 281.331 4.667 - 281.333 4.601 - 282.331 4.667 - 281.335 4.536 - 283.333 4.601 - 282.335 4.536 - 283.335 4.536 - 285.333 4.601 - 285.335 4.536 - 287.333 4.601 - 286.335 4.536 - 287.335 4.536 - 288.335 4.536 - 290.333 4.601 - 289.335 4.536 - 290.335 4.536 - 294.329 4.732 - 291.335 4.536 - 294.331 4.667 - 294.333 4.601 - 294.335 4.536 - 304.344 4.274 - 304.348 4.144 - 350.389 51.394 - 350.408 51.199 - 346.504 50.223 - 346.523 50.028 - 344.581 49.443 - 339.677 48.468 - 340.677 48.468 - 339.716 48.077 - 336.792 47.297 - 328.119 43.981 - 341.888 46.322 - 337.985 45.346 - 338.004 45.151 - 338.023 44.956 - 338.042 44.761 - 337.081 44.371 - 338.061 44.566 - 343.965 45.541 - 337.100 44.176 - 343.985 45.346 - 316.542 39.689 - 324.673 43.758 - 326.639 44.017 - 334.401 45.829 - 332.503 45.052 - 370.378 53.593 - 324.048 40.911 - 328.878 42.205 - 324.082 40.652 - 327.980 41.429 - 328.946 41.688 - 328.014 41.170 - 335.776 42.982 - 337.776 42.982 - 333.495 41.930 - 351.805 46.109 - 390.104 20.072 - 367.315 131.143 - 368.315 131.143 - 367.391 130.760 - 347.105 168.454 - 347.209 168.012 - 366.974 130.417 - 371.562 132.187 - 365.284 129.091 - 365.387 128.648 - 296.949 169.500 - 297.949 169.500 - 297.083 169.000 - 323.805 177.500 - 323.939 177.000 - 294.772 166.727 - 54.788 141.714 - 51.789 101.502 - 49.692 80.905 - 48.742 71.097 - 43.817 16.173 - 43.841 11.269 - 42.500 -0.500 - 72.923 344.523 - 55.601 152.183 - 56.515 159.123 - 56.687 145.242 - 51.683 99.636 - 48.506 67.910 - 46.504 45.106 - 44.372 21.312 - 42.500 -0.500 - 43.500 -0.500 - 43.631 0.491 - 294.713 418.881 - 329.666 388.146 - 333.713 418.881 - 339.277 407.975 - 499.546 30.235 - 43.500 -0.500 - 44.565 0.498 - 46.416 13.470 - 47.135 24.446 - 52.190 86.314 - 55.218 117.247 - 57.918 143.192 - 60.095 161.153 - 143.670 444.545 - 159.787 141.196 - 159.853 142.194 - 255.904 417.603 - 275.969 418.601 - 252.639 47.397 - 261.574 46.399 - 268.546 15.466 - 293.923 402.635 - 295.446 410.618 - 271.855 35.423 - 333.969 418.601 - 333.904 417.603 - 444.808 19.457 - 449.209 71.346 - 469.023 7.483 - 498.500 -0.500 - 21.500 320.500 - 22.500 419.500 - 44.500 -0.500 - 45.500 13.500 - 46.500 20.500 - 47.500 27.500 - 48.500 15.500 - 56.500 133.500 - 57.500 142.500 - 58.500 153.500 - 59.500 161.500 - 143.500 444.500 - 144.500 461.500 - 160.500 143.500 - 160.500 142.500 - 196.500 417.500 - 216.500 421.500 - 236.500 421.500 - 236.500 418.500 - 253.500 9.500 - 253.500 22.500 - 255.500 412.500 - 256.500 419.500 - 265.500 12.500 - 269.500 72.500 - 273.500 11.500 - 295.500 412.500 - 296.500 20.500 - 441.500 4.500 - 442.500 48.500 - 445.500 15.500 - 445.500 2.500 - 453.500 8.500 - 468.500 72.500 - 472.500 44.500 - 499.500 9.500 - 499.500 10.500 - 22.442 427.581 - 22.330 444.545 - 60.185 172.130 - 143.976 480.468 - 144.303 475.479 - 197.161 416.605 - 197.227 415.607 - 216.704 423.590 - 254.603 28.438 - 268.584 13.470 - 268.519 14.468 - 273.323 17.461 - 274.781 10.476 - 262.309 322.806 - 287.584 13.470 - 291.072 82.322 - 296.781 10.476 - 297.715 11.474 - 283.069 448.537 - 418.352 93.299 - 145.847 475.394 - 197.418 417.890 - 197.287 418.881 - 295.365 46.098 - 296.887 42.132 - 301.058 78.816 - 304.407 60.970 - 313.064 10.406 - 297.696 38.731 - 397.832 465.373 - 404.100 438.892 - 412.513 401.622 - 417.610 381.025 - 423.682 355.525 - 419.513 401.622 - 428.512 361.410 - 344.607 234.220 - 346.901 229.390 - 352.642 230.356 - 357.007 217.799 - 232.533 240.967 - 252.926 192.674 - 231.747 258.012 - 347.712 228.657 - 348.033 227.710 - 355.033 227.710 - 201.301 309.000 - 211.485 286.827 - 213.634 284.055 - 240.656 221.231 - 239.508 224.003 - 253.519 192.591 - 254.136 193.515 - 182.809 368.128 - 192.994 345.955 - 209.684 308.076 - 217.955 290.522 - 234.645 252.643 - 232.731 257.262 - 347.064 232.318 - 255.293 190.534 - 255.850 191.431 - 250.985 201.296 - 248.004 209.368 - 244.139 219.234 - 233.197 243.449 - 232.755 244.346 - 224.025 264.077 - 213.968 286.499 - 206.122 304.437 - 188.988 341.209 - 196.103 343.002 - 181.181 375.290 - 85.500 292.217 - 229.000 253.245 - 308.500 117.279 - 214.000 286.154 - 165.337 394.590 - 229.122 359.682 - 314.598 112.276 - 444.645 1.719 - 446.637 1.588 - 482.500 -0.500 - 482.502 -0.435 - 482.504 -0.369 - 484.502 -0.435 - 484.504 -0.369 - 486.502 -0.435 - 488.500 -0.500 - 488.502 -0.435 - 488.504 -0.369 - 425.866 350.358 - 425.349 353.290 - 423.278 362.017 - 423.019 363.983 - 421.466 370.778 - 423.278 364.017 - 421.466 371.778 - 418.102 384.336 - 419.396 380.506 - 417.066 390.199 - 416.031 395.063 - 414.478 401.858 - 414.478 402.858 - 411.113 416.416 - 407.490 430.938 - 425.349 364.290 - 403.867 445.461 - 419.396 388.506 - 401.020 458.087 - 399.984 462.950 - 399.467 465.882 - 399.984 464.950 - 408.266 435.041 - 403.461 455.828 - 470.252 292.115 - 470.499 294.366 - 230.937 358.280 - 234.021 356.979 - 224.122 367.878 - 213.786 256.177 - 216.160 256.172 - 212.002 259.950 - 210.855 260.500 - 206.460 264.436 - 122.154 335.011 - 202.848 266.934 - 196.119 270.218 - 115.630 338.540 - 188.802 273.490 - 184.879 288.270 - 118.186 419.536 - 392.518 211.033 - 181.340 275.835 - 176.383 290.487 - 108.965 341.363 - 117.888 420.188 - 116.896 420.319 - 305.271 458.519 - 102.376 227.250 - 171.228 277.737 - 167.237 292.999 - 170.230 292.802 - 127.322 419.615 - 143.288 419.568 - 189.189 442.560 - 193.181 443.298 - 194.179 443.233 - 279.995 443.608 - 293.965 443.692 - 306.937 443.842 - 305.939 443.908 - 325.896 443.600 - 331.883 444.207 - 311.926 460.515 - 326.894 460.534 - 491.500 -0.500 - 327.500 3.500 - 376.500 189.500 - 377.500 189.500 - 437.500 213.500 - 163.500 266.500 - 164.500 278.500 - 165.500 278.500 - 161.500 293.500 - 158.500 295.500 - 72.500 326.500 - 73.500 326.500 - 253.500 417.500 - 138.500 419.500 - 137.500 419.500 - 139.500 420.500 - 137.500 421.500 - 193.500 442.500 - 332.500 443.500 - 333.500 443.500 - 334.500 444.500 - 333.500 444.500 - 344.500 460.500 - 343.500 460.500 - 340.500 461.500 - 340.500 462.500 - 346.500 471.500 - 165.500 476.500 - 288.500 499.500 - 378.783 185.867 - 406.723 192.698 - 165.241 266.871 - 159.254 278.478 - 100.380 328.619 - 233.095 417.318 - 332.881 443.858 - 333.879 443.924 - 326.894 444.466 - 325.896 444.400 - 310.928 444.419 - 309.930 444.354 - 294.962 444.373 - 295.960 444.438 - 273.010 443.934 - 205.155 443.487 - 204.157 443.421 - 189.189 443.440 - 340.864 461.381 - 340.864 462.381 - 320.907 462.073 - 275.005 462.065 - 228.106 471.991 - 166.239 476.936 - 387.561 129.315 - 375.663 186.748 - 361.783 189.921 - 360.792 189.791 - 166.469 262.207 - 150.606 279.119 - 333.031 462.136 - 369.267 186.407 - 358.478 190.261 - 420.268 222.552 - 372.209 212.992 - 390.844 217.699 - 335.920 254.774 - 147.609 279.317 - 136.821 278.171 - 490.884 356.598 - 505.596 359.525 - 367.543 179.195 - 378.168 216.042 - 297.996 198.560 - 363.679 263.160 - 136.687 278.337 - 126.062 276.490 - 101.913 383.020 - 364.673 178.998 - 365.620 179.320 - 121.312 275.388 - 379.557 137.926 - 337.554 186.941 - 335.169 198.964 - 462.382 215.302 - 432.309 266.928 - 453.360 287.390 - 465.245 220.245 - 454.639 209.639 - 210.687 195.687 - 211.394 196.394 - 351.051 144.868 - 351.500 147.104 - 351.000 147.238 - 349.507 148.038 - 509.214 489.712 - 508.893 489.765 - 509.465 491.636 - 509.206 491.670 - 508.688 490.739 - 423.490 41.070 - 420.173 26.396 - 420.173 30.396 - 384.885 492.383 - 368.078 499.443 - 367.284 498.558 - 448.100 482.194 - 449.203 481.751 - 150.096 311.096 - 159.323 323.292 - 158.345 321.036 - 158.441 324.062 - 158.832 323.269 - 158.006 320.889 - 157.386 321.756 - 51.673 496.620 - 84.498 487.697 - 315.363 441.099 - 80.688 467.592 - 166.559 358.825 - 166.886 363.815 - 269.650 497.528 - 253.478 159.254 - 253.432 143.288 - 252.470 113.352 - 252.404 112.354 - 274.922 440.650 - 251.377 81.421 - 251.442 82.419 - 251.461 67.451 - 250.480 52.483 - 250.434 36.517 - 260.451 128.320 - 332.922 440.650 - 441.254 125.326 - 449.862 119.339 - 464.704 86.410 - 473.872 58.470 - 79.500 454.500 - 80.500 478.500 - 141.500 491.500 - 142.500 485.500 - 215.500 454.500 - 215.500 453.500 - 228.500 498.500 - 235.500 441.500 - 248.500 498.500 - 249.500 28.500 - 250.500 83.500 - 251.500 112.500 - 252.500 145.500 - 253.500 162.500 - 253.500 161.500 - 254.500 436.500 - 254.500 437.500 - 257.500 145.500 - 260.500 132.500 - 266.500 125.500 - 268.500 106.500 - 269.500 498.500 - 274.500 436.500 - 290.500 138.500 - 433.500 102.500 - 438.500 79.500 - 452.500 47.500 - 464.500 115.500 - 471.500 87.500 - 474.500 92.500 - 156.078 440.650 - 250.558 82.419 - 228.612 493.536 - 257.558 82.419 - 253.522 159.254 - 255.830 139.296 - 266.511 98.384 - 268.689 80.423 - 271.372 146.281 - 294.923 107.365 - 297.054 105.369 - 491.128 58.470 - 155.506 442.090 - 252.578 137.717 - 274.273 147.631 - 289.927 119.871 - 292.494 107.973 - 412.205 406.398 - 405.504 464.894 - 393.377 485.980 - 398.474 465.384 - 399.059 462.442 - 407.083 427.133 - 410.424 415.364 - 417.472 384.959 - 405.279 466.365 - 437.665 343.767 - 437.470 344.747 - 344.793 259.359 - 412.523 398.453 - 406.017 426.464 - 395.888 467.999 - 392.523 480.556 - 390.935 490.216 - 396.123 496.977 - 390.572 489.668 - 180.137 373.766 - 186.495 360.832 - 165.902 400.185 - 153.000 376.266 - 151.391 377.465 - 252.205 501.474 - 256.205 501.474 - 260.198 501.278 - 260.200 501.344 - 260.202 501.409 - 260.205 501.474 - 264.198 501.278 - 391.162 500.166 - 391.164 500.232 - 391.166 500.297 - 391.168 500.363 - 391.170 500.428 - 391.172 500.493 - 393.170 500.428 - 393.172 500.493 - 395.170 500.428 - 395.172 500.493 - 397.170 500.428 - 397.172 500.493 - 399.170 500.428 - 422.170 500.428 - 422.172 500.493 - 424.170 500.428 - 424.172 500.493 - 170.864 228.008 - 110.917 338.054 - 168.375 219.000 - 106.887 339.500 - 369.256 123.951 - 352.454 112.033 - 148.217 281.921 - 106.576 385.403 - 111.533 384.751 - 167.054 446.441 - 251.958 4.953 - 304.845 5.487 - 305.843 5.421 - 321.808 113.375 - 353.740 188.282 - 363.719 201.628 - 129.222 262.998 - 103.277 384.698 - 176.121 415.924 - 243.975 416.476 - 258.943 416.495 - 117.247 448.782 - 117.247 449.782 - 184.104 446.400 - 214.040 445.438 - 299.856 445.814 - 310.832 446.094 - 307.838 446.290 - 197.076 477.550 - 217.033 477.242 - 269.920 476.776 - 274.909 477.449 - 275.907 477.383 - 289.877 477.468 - 251.500 4.500 - 255.500 5.500 - 347.500 187.500 - 352.500 188.500 - 353.500 201.500 - 137.500 262.500 - 140.500 281.500 - 141.500 294.500 - 140.500 294.500 - 136.500 296.500 - 96.500 384.500 - 99.500 397.500 - 154.500 415.500 - 174.500 416.500 - 197.500 442.500 - 198.500 442.500 - 157.500 445.500 - 286.500 446.500 - 130.500 459.500 - 171.500 464.500 - 155.500 469.500 - 147.500 470.500 - 199.500 476.500 - 170.500 476.500 - 169.500 477.500 - 420.500 498.500 - 25.500 500.500 - 359.727 184.111 - 342.763 186.999 - 132.215 262.199 - 99.286 398.040 - 257.945 415.439 - 243.975 415.524 - 239.984 416.262 - 218.031 415.823 - 170.134 415.684 - 113.256 412.956 - 304.845 445.513 - 289.877 445.532 - 219.029 442.889 - 199.072 442.581 - 200.070 442.646 - 312.828 470.037 - 241.980 469.393 - 156.164 464.768 - 305.843 476.579 - 184.104 469.600 - 274.909 476.551 - 270.918 477.290 - 229.008 476.543 - 214.040 476.562 - 418.601 497.969 - 325.685 45.443 - 352.454 181.967 - 355.429 183.359 - 345.514 185.054 - 339.566 185.270 - 343.531 186.793 - 323.702 222.182 - 126.405 234.207 - 118.473 278.163 - 181.926 415.517 - 238.438 467.957 - 432.761 498.540 - 434.969 132.120 - 333.948 169.026 - 353.563 173.928 - 346.698 179.562 - 348.660 180.952 - 351.602 181.537 - 345.717 185.367 - 335.909 184.416 - 324.140 221.075 - 120.137 231.496 - 122.098 232.886 - 86.790 337.863 - 349.640 482.147 - 359.448 485.098 - 436.098 129.486 - 340.472 168.863 - 334.676 168.310 - 339.506 175.604 - 347.233 179.675 - 262.232 374.899 - 84.501 381.276 - 351.097 481.710 - 353.029 483.228 - 351.097 485.710 - 352.705 171.397 - 342.289 168.861 - 340.395 169.218 - 301.571 172.039 - 114.079 228.394 - 365.015 484.576 - 353.652 481.718 - 356.493 482.683 - 346.879 168.389 - 345.955 170.006 - 341.335 169.093 - 71.006 253.279 - 21.018 395.796 - 21.999 411.763 - 21.933 411.766 - 21.868 411.768 - 21.802 411.770 - 21.737 411.772 - 21.672 411.774 - 21.606 411.776 - 21.541 411.778 - 21.606 413.776 - 21.541 413.778 - 21.606 415.776 - 21.541 415.778 - 21.606 417.776 - 21.606 418.776 - 21.541 417.778 - 21.541 418.778 - 21.606 420.776 - 21.541 419.778 - 21.541 420.778 - 21.737 424.772 - 21.672 423.774 - 21.606 423.776 - 21.672 424.774 - 21.606 424.776 - 21.541 423.778 - 21.541 424.778 - 21.606 426.776 - 21.541 425.778 - 21.541 426.778 - 21.606 428.776 - 21.541 427.778 - 21.541 428.778 - 21.606 430.776 - 21.541 430.778 - 21.606 432.776 - 21.541 432.778 - 21.606 434.776 - 21.541 434.778 - 21.606 436.776 - 21.541 441.778 - 21.606 443.776 - 21.541 443.778 - 22.129 454.759 - 22.129 455.759 - 22.064 454.761 - 21.999 454.763 - 21.868 454.768 - 21.868 455.768 - 21.802 454.770 - 21.737 454.772 - 21.737 455.772 - 21.672 454.774 - 21.606 454.776 - 21.606 455.776 - 21.541 454.778 - 21.737 458.772 - 21.541 455.778 - 21.672 458.774 - 21.606 458.776 - 21.541 457.778 - 21.541 458.778 - 21.606 460.776 - 21.541 459.778 - 21.541 460.778 - 21.737 464.772 - 21.672 464.774 - 21.606 464.776 - 21.541 463.778 - 21.541 464.778 - 21.606 466.776 - 21.541 466.778 - 21.606 468.776 diff --git a/Data/Baseline/OTB/Files/feBreakAngularPathListOutput.txt b/Data/Baseline/OTB/Files/feBreakAngularPathListOutput.txt deleted file mode 100644 index 0f5ea993520cabcf3ff996765f2e7c2173b782cb..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/feBreakAngularPathListOutput.txt +++ /dev/null @@ -1,171 +0,0 @@ --------------------------------------------------------------------------- -MAX ANGULAR :0.174533(10 deg.) -INPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1], [5, 11], [5, 21] -Path 8: [1, 1], [31, 1], [41, 1] -OUTPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1] -Path 3: [11, 1], [21, 11] -Path 4: [21, 11], [31, 11] -Path 5: [1, 1], [5, 1], [7, 1], [11, 1] -Path 6: [11, 1], [21, 11] -Path 7: [21, 11], [31, 11], [41, 11] -Path 8: [1, 1], [5, 1], [7, 1], [11, 1] -Path 9: [11, 1], [21, 11] -Path 10: [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 11: [1, 11], [5, 11], [7, 11], [11, 11] -Path 12: [11, 11], [21, 1] -Path 13: [21, 1], [31, 1], [41, 1] -Path 14: [1, 1], [5, 1], [7, 1], [11, 1] -Path 15: [11, 1], [21, 11], [31, 21], [41, 31] -Path 16: [1, 1], [5, 1] -Path 17: [5, 1], [5, 11], [5, 21] -Path 18: [1, 1], [31, 1], [41, 1] --------------------------------------------------------------------------- -MAX ANGULAR :0.349066(20 deg.) -INPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1], [5, 11], [5, 21] -Path 8: [1, 1], [31, 1], [41, 1] -OUTPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1] -Path 3: [11, 1], [21, 11] -Path 4: [21, 11], [31, 11] -Path 5: [1, 1], [5, 1], [7, 1], [11, 1] -Path 6: [11, 1], [21, 11] -Path 7: [21, 11], [31, 11], [41, 11] -Path 8: [1, 1], [5, 1], [7, 1], [11, 1] -Path 9: [11, 1], [21, 11] -Path 10: [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 11: [1, 11], [5, 11], [7, 11], [11, 11] -Path 12: [11, 11], [21, 1] -Path 13: [21, 1], [31, 1], [41, 1] -Path 14: [1, 1], [5, 1], [7, 1], [11, 1] -Path 15: [11, 1], [21, 11], [31, 21], [41, 31] -Path 16: [1, 1], [5, 1] -Path 17: [5, 1], [5, 11], [5, 21] -Path 18: [1, 1], [31, 1], [41, 1] --------------------------------------------------------------------------- -MAX ANGULAR :0.523599(30 deg.) -INPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1], [5, 11], [5, 21] -Path 8: [1, 1], [31, 1], [41, 1] -OUTPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1] -Path 3: [11, 1], [21, 11] -Path 4: [21, 11], [31, 11] -Path 5: [1, 1], [5, 1], [7, 1], [11, 1] -Path 6: [11, 1], [21, 11] -Path 7: [21, 11], [31, 11], [41, 11] -Path 8: [1, 1], [5, 1], [7, 1], [11, 1] -Path 9: [11, 1], [21, 11] -Path 10: [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 11: [1, 11], [5, 11], [7, 11], [11, 11] -Path 12: [11, 11], [21, 1] -Path 13: [21, 1], [31, 1], [41, 1] -Path 14: [1, 1], [5, 1], [7, 1], [11, 1] -Path 15: [11, 1], [21, 11], [31, 21], [41, 31] -Path 16: [1, 1], [5, 1] -Path 17: [5, 1], [5, 11], [5, 21] -Path 18: [1, 1], [31, 1], [41, 1] --------------------------------------------------------------------------- -MAX ANGULAR :0.872665(50 deg.) -INPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1], [5, 11], [5, 21] -Path 8: [1, 1], [31, 1], [41, 1] -OUTPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1] -Path 8: [5, 1], [5, 11], [5, 21] -Path 9: [1, 1], [31, 1], [41, 1] --------------------------------------------------------------------------- -MAX ANGULAR :1.5708(90 deg.) -INPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1], [5, 11], [5, 21] -Path 8: [1, 1], [31, 1], [41, 1] -OUTPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1], [5, 11], [5, 21] -Path 8: [1, 1], [31, 1], [41, 1] --------------------------------------------------------------------------- -MAX ANGULAR :2.44346(140 deg.) -INPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1], [5, 11], [5, 21] -Path 8: [1, 1], [31, 1], [41, 1] -OUTPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1], [5, 11], [5, 21] -Path 8: [1, 1], [31, 1], [41, 1] --------------------------------------------------------------------------- -MAX ANGULAR :3.14159(180 deg.) -INPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1], [5, 11], [5, 21] -Path 8: [1, 1], [31, 1], [41, 1] -OUTPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1] -Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31] -Path 7: [1, 1], [5, 1], [5, 11], [5, 21] -Path 8: [1, 1], [31, 1], [41, 1] diff --git a/Data/Baseline/OTB/Files/feTvLikelihoodPathOutput.txt b/Data/Baseline/OTB/Files/feTvLikelihoodPathOutput.txt deleted file mode 100644 index 7e18b94533e5f25319caa19feb2f28bd5c96573a..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/feTvLikelihoodPathOutput.txt +++ /dev/null @@ -1,8 +0,0 @@ -INPUT list of Path : -Path 1: [157, 335], [204, 376] -Path 2: [21, 305], [35, 308], [77, 354], [85, 358] -Path 3: [73, 160], [126, 173] -OUTPUT list of Path : -Path 1: [157, 335], [204, 376] Value: 4.68584e-07 -Path 2: [21, 305], [35, 308], [77, 354], [85, 358] Value: 1.87363e-07 -Path 3: [73, 160], [126, 173] Value: 9.76259e-08 diff --git a/Data/Baseline/OTB/Files/feTvLinkPathOutput.txt b/Data/Baseline/OTB/Files/feTvLinkPathOutput.txt deleted file mode 100644 index 708fabe135918d33f8ab62d9af7bba6f1b48bf2d..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/feTvLinkPathOutput.txt +++ /dev/null @@ -1,23 +0,0 @@ -Maximum distance threshold: 30 (30) -Maximum angle threshold: 0.698132 (40) -INPUT list of Path : -Path 1: [1, 1], [51, 1] -Path 2: [61, 1], [91, 1] -Path 3: [111, 11], [211, 11] -Path 4: [1, 51], [51, 51] -Path 5: [71, 71], [71, 91] -Path 6: [71, 131], [71, 201] -Path 7: [141, 111], [101, 111] -Path 8: [151, 111], [191, 111] -Path 9: [111, 71], [141, 71] -Path 10: [181, 71], [151, 71] -Path 11: [11, 131], [11, 101] -Path 12: [11, 171], [11, 141] -OUTPUT list of Path : -Path 1: [1, 51], [51, 51] -Path 2: [71, 71], [71, 91] -Path 3: [71, 131], [71, 201] -Path 4: [211, 11], [111, 11], [91, 1], [61, 1], [51, 1], [1, 1] -Path 5: [101, 111], [141, 111], [151, 111], [191, 111] -Path 6: [111, 71], [141, 71], [151, 71], [181, 71] -Path 7: [11, 101], [11, 131], [11, 141], [11, 171] diff --git a/Data/Baseline/OTB/Files/feTvRemoveTortuousPathOutput.txt b/Data/Baseline/OTB/Files/feTvRemoveTortuousPathOutput.txt deleted file mode 100644 index fffefd4d766972197ca2a3b918db2f8e303d2fc5..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/feTvRemoveTortuousPathOutput.txt +++ /dev/null @@ -1,8 +0,0 @@ -Minimum Mean Distance: 10 (10) -INPUT list of Path : -Path 1: [1, 1], [1, 11] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1] -Path 3: [1, 1], [7, 7], [21, 21], [31, 31], [41, 41] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -OUTPUT list of Path : -Path 1: [1, 1], [7, 7], [21, 21], [31, 31], [41, 41] diff --git a/Data/Baseline/OTB/Files/feTvSimplifyPathOutput.txt b/Data/Baseline/OTB/Files/feTvSimplifyPathOutput.txt deleted file mode 100644 index 1da7ddfb7e7e9e2d787dcd41ac9d007c39a44af7..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/feTvSimplifyPathOutput.txt +++ /dev/null @@ -1,11 +0,0 @@ -TOLERANCE: 1(1) -INPUT list of Path : -Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1] -Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [5, 5], [7, 7], [11, 11], [21, 21], [31, 31], [41, 41] -Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11] -OUTPUT list of Path : -Path 1: [1, 1], [31, 1] -Path 2: [1, 1], [11, 1], [21, 11], [31, 11] -Path 3: [1, 1], [41, 41] -Path 4: [1, 1], [11, 1], [21, 11], [70, 11] diff --git a/Data/Baseline/OTB/Files/feTvVectorizationPathListOutput.txt b/Data/Baseline/OTB/Files/feTvVectorizationPathListOutput.txt deleted file mode 100644 index 348001835a5c6b8f4c03b9562ef9b47f41688704..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/feTvVectorizationPathListOutput.txt +++ /dev/null @@ -1,385 +0,0 @@ -Path 0: [523, 4], [522, 4], [521.519, 5], [521, 5.47291], [520.558, 6], [520, 6.41957], [519.517, 7], [519, 7.20893], [519, 8] -Path 1: [666, 0], [666, 0.755514], [666.534, 1], [667, 1.54937], [668, 2], [669, 2], [670, 3], [671, 4], [671, 5], [672, 5.56069], [673, 6.5845], [673, 8], [673.481, 9], [674, 9.47953], [674.36, 10], [675, 10.6091], [675.621, 12], [676.458, 13], [677, 13.577], [677, 15], [677, 16], [677.422, 17], [678, 17.4808], [678, 18], [678.364, 19], [679, 19], [680, 19.9039] -Path 2: [595, 4.40433], [594, 5], [593, 6.39503], [592.184, 7], [592, 7.50127], [591, 8.36608], [590, 9.17569], [589, 10], [588, 11], [587, 11], [586.346, 12], [585, 12.5495], [584.553, 14], [584, 14.5519], [583.543, 16], [583, 16.5361], [582.445, 18], [581.502, 19], [581, 19.513], [580, 20.6132], [579.468, 22], [578.542, 23], [578, 23.4978], [577.545, 24], [577, 24.5768], [576.326, 26], [575.445, 27], [574.581, 28], [574, 28.6009], [573.411, 30], [572.445, 31], [571.434, 32], [570.481, 33], [570, 34], [569.454, 35], [568.566, 36], [568, 36.5643], [567.429, 38], [566.521, 39], [566, 39.6024], [565.476, 41], [565, 42], [564.421, 43], [563.547, 44], [563, 44.543], [562, 45.6124], [561.433, 47], [561, 48], [560.393, 49], [559.581, 50], [559, 50.5958], [558.48, 52], [557.499, 53], [556.523, 54], [556, 54.5515], [555.42, 56], [555, 57], [554.467, 58], [554, 59], [553.446, 60], [552.531, 61], [552, 61.5413], [551.499, 63], [551, 64], [550.571, 65], [550, 65.5952], [549.552, 67], [549, 67.5817], [548.426, 69], [547.443, 70], [546.491, 71], [545.546, 72], [545, 72.5362], [544.436, 74], [543.477, 75], [542.467, 76], [541.449, 77], [540.513, 78], [540, 78.5659], [539.511, 80], [539, 80.5386], [538.448, 82], [537.487, 83], [536.504, 84], [536, 84.5229], [535, 85.5753], [534.473, 87], [534, 88], [533.428, 89], [532.493, 90], [531.545, 91], [531, 91.5473], [530.471, 93], [530, 94], [529.487, 95], [529, 96], [528.47, 97], [527.53, 98], [527, 98.5852], [526, 99.6065], [525.437, 101], [525, 102], [524.431, 103], [523.519, 104], [523, 104.522], [522, 105.524], [521, 106.55], [520.409, 108], [519.539, 109], [519, 109.546], [518.488, 111], [517.542, 112], [517, 112.57], [516, 113.611], [515.494, 115], [515, 116], [514.478, 117], [513.597, 118], [513, 118.568], [512.418, 120], [511.505, 121], [511, 121.593], [510.533, 123], [510, 123.522], [509.532, 125], [509, 125.535], [508.383, 127], [507.457, 128], [507, 129], [506.463, 130], [506, 131], [505.428, 132], [504.472, 133], [503.459, 134], [502.495, 135], [502, 136], [501.424, 137], [500.563, 138], [500, 138.53], [499.495, 140], [498.496, 141], [497.439, 142], [496.45, 143], [495.552, 144], [495, 144.55], [494.521, 146], [494, 146.501], [493, 147.526], [492, 148.568], [491.361, 150], [490.486, 151], [490, 152], [489.467, 153], [488.591, 154], [488, 154.596], [487.456, 156], [486.519, 157], [486, 157.591], [485.464, 159], [485, 160], [484.43, 161], [483.513, 162], [483, 162.518], [482, 163.551], [481.416, 165], [480.575, 166], [480, 166.58], [479.525, 168], [479, 168.519], [478, 169.568], [477.474, 171], [476.517, 172], [476, 172.565], [475.521, 174], [475, 174.584], [474.497, 176], [473.556, 177], [473, 177.588], [472.442, 179], [471.477, 180], [471, 181], [470.439, 182], [469.575, 183], [469, 183.578], [468.403, 185], [467.437, 186], [466.523, 187], [466, 187.574], [465.462, 189], [464.603, 190], [464, 190.593], [463.477, 192], [462.486, 193], [461.511, 194], [461, 194.557], [460.416, 196], [459.538, 197], [459, 197.547], [458.44, 199], [457.462, 200], [456.52, 201], [456, 201.543], [455.547, 203], [455, 203.535], [454.528, 205], [454, 205.47], [453.565, 206], [453, 206.526], [452, 207.595], [451.469, 209], [451, 210], [451, 211], [450.469, 212], [450, 213], [449.523, 214], [449, 214.559], [448.479, 216], [447.504, 217], [447, 217.563], [446, 218.567], [445.393, 220], [444.451, 221], [443.514, 222], [443, 222.543], [442, 223.567], [441.486, 225], [441, 226], [441, 227], [440.418, 228], [439.526, 229], [439, 229.43], [438.533, 230], [438, 230.467], [437.442, 231], [437, 232], [436.371, 233], [435.447, 234], [434.549, 235], [434, 235.55], [433, 236.579], [432, 237.609], [431.519, 239], [431, 239.544], [431, 241], [430.444, 242], [429.476, 243], [428.475, 244], [427.544, 245], [427, 245.597], [426.566, 247], [426, 247.584], [425.563, 249], [425, 249.555], [424.444, 251], [423.481, 252], [422.539, 253], [422, 253.552], [421.45, 255], [420.594, 256], [420, 256.601], [419.427, 258], [418.42, 259], [417.461, 260], [417, 261], [416.444, 262], [416, 263], [415.454, 264], [414.528, 265], [414, 265.546], [413.399, 267], [412.495, 268], [412, 269], [411.465, 270], [410.462, 271], [409.469, 272], [409, 273], [408.304, 274], [407.434, 275], [407, 276], [406.494, 277], [405.591, 278], [405, 278.578], [404.425, 280], [403.43, 281], [402.406, 282], [401.475, 283], [401, 284], [400.479, 285], [400, 286], [399.457, 287], [399, 288], [398.428, 289], [398, 290], [397.497, 291], [397, 292], [396.462, 293], [396, 294], [395.466, 295], [394.555, 296], [394, 296.644], [393, 297.65], [392.38, 299], [391.44, 300], [390.475, 301], [389.473, 302], [388.48, 303], [387.489, 304], [386.566, 305], [386, 305.582], [385.494, 307], [384.592, 308], [384, 308.591], [383.529, 310], [383, 310.566], [382.427, 312], [381.467, 313], [380.554, 314], [380, 314.589], [379.458, 316], [378.554, 317], [378, 317.506], [377, 318.589], [376, 319.614], [375.478, 321], [375, 322], [374.534, 323], [374, 323.561], [373.463, 325], [372.553, 326], [372, 326.537], [371.373, 328], [370.462, 329], [370, 330], [369.412, 331], [369, 332], [368.457, 333], [367.533, 334], [367, 334.558], [366, 335.554], [365.494, 337], [364.544, 338], [364, 338.567], [363.391, 340], [362.452, 341], [361.563, 342], [361, 342.549], [360.517, 344], [360, 344.503], [359, 345.583], [358, 346.599], [357, 347.605], [356.373, 349], [355.508, 350], [355, 350.572], [354.501, 352], [354, 352.542], [353.458, 354], [352.436, 355], [351.452, 356], [351, 357], [350.524, 358], [350, 358.496], [350, 359], [349.571, 360], [349, 360.549], [348.421, 362], [347.536, 363], [347, 363.619], [346.47, 365], [345.614, 366], [345, 366.55], [344.512, 368], [344, 368.529], [343, 369.573], [342.391, 371], [341.481, 372], [341, 373], [340.48, 374], [339.607, 375], [339, 375.466], [339, 376], [338.458, 377], [337, 377.581], [337, 379], [336.5, 380], [336, 381], [336, 382], [335.493, 383], [334.49, 384], [333.407, 385], [333, 386], [332.134, 387], [331, 387.535], [330.501, 389], [330, 389.586], [329.436, 391], [328.529, 392], [328, 392.45], [327.54, 393], [327, 393.503], [326, 394.572], [326, 396], [325.479, 397], [324.556, 398], [324, 398.589], [323.392, 400], [322.481, 401], [322, 402], [321.554, 403], [321, 403.575], [320.463, 405], [319.458, 406], [318.473, 407], [317.524, 408], [317, 408.554], [316.469, 410], [316, 411], [315.436, 412], [314.472, 413], [313.462, 414], [312.48, 415], [312, 416], [311.431, 417], [311, 418], [310.453, 419], [309.523, 420], [309, 420.48], [308.528, 421], [308, 421.51], [307, 422.548], [306.423, 424], [306, 425], [305.497, 426], [305, 427], [304.43, 428], [303.449, 429], [302.441, 430], [301.467, 431], [301, 432], [300.465, 433], [300, 434], [299.455, 435], [298.516, 436], [298, 436.49], [297.529, 437], [297, 437.48], [296.553, 438], [296, 438.55], [295.396, 440], [294.494, 441], [294, 442], [293.419, 443], [292.443, 444], [291.41, 445], [290.513, 446], [290, 446.581], [289.587, 448], [289, 448.568], [288.524, 450], [288, 450.526], [287, 451.555], [286.407, 453], [285.593, 454], [285, 454.589], [285, 456], [284.404, 457], [283.516, 458], [283, 458.556], [282.393, 460], [281.446, 461], [280.553, 462], [280, 462.554], [279.474, 464], [278.545, 465], [278, 465.531], [277, 466.552], [276, 467.568], [275, 468.603], [274.559, 470], [274, 470.531], [273.55, 472], [273, 472.543], [272.454, 474], [271.475, 475], [270.514, 476], [270, 476.597], [269.438, 478], [268.567, 479], [268, 479.532], [267.463, 481], [266.514, 482], [266, 482.493], [265.461, 483], [264.554, 484], [264, 484.59], [263.485, 486], [262.545, 487], [262, 487.511], [261, 488.558], [260.422, 490], [259.551, 491], [259, 491.58], [258.548, 493], [258, 493.545], [257.503, 495], [257, 495.531], [256, 496.569], [255.387, 498], [254.484, 499], [254, 500], [253.459, 501], [252.538, 502], [252, 502.517], [251, 503.562], [250.414, 505], [249.492, 506], [249, 507], [248.47, 508], [248, 509], [247.463, 510], [246.551, 511], [246, 511.572], [245.403, 513], [244.533, 514], [244, 514.57], [244, 516], [243.423, 517], [242.605, 518], [242, 518.531], [241.505, 520], [241, 520.46], [240.531, 521], [240, 521.522], [239, 522.615], [239, 524], [238.422, 525], [238, 526], [237.507, 527], [237, 527.554], [236.404, 529], [235.501, 530], [235, 530.581], [234.443, 532], [234, 533], [233.533, 534], [233, 534.53], [232.516, 536], [232, 536.509], [231, 537.504], [230, 538.505], [229, 539.539], [228.501, 541], [228, 541.497], [228, 542], [228, 543], [227.53, 544], [227, 544.516], [226.494, 546], [226, 547], [225.482, 548], [225, 549], [225, 550], [225, 551], [224.515, 552], [224, 552.51], [224, 554], [223.497, 555], [223, 556], [222.403, 557], [222, 558], [221.393, 559], [221, 560], [221, 561], [220.486, 562], [220, 563], [219.529, 564], [219, 564.561], [218.415, 566], [217.494, 567], [217, 568], [217, 569], [216.436, 570], [216, 571], [216, 572], [215.508, 573], [215, 573.534], [214.446, 575], [213.51, 576], [213, 576.54], [212, 577.579], [212, 579], [212, 580], [211.465, 581], [211, 582], [210.588, 583], [210, 583.55], [209.525, 585], [209, 585.53], [208, 586.596], [207.517, 588], [207, 588.591], [207, 590], [207, 591], [206.529, 592], [206, 592.505], [206, 594], [205.529, 595], [205, 595.532], [204.459, 597], [203.562, 598], [203, 598.607], [203, 600], [202.435, 601], [202, 602], [202, 603], [202, 604], [201.468, 605], [201, 606], [200.487, 607], [199.574, 608], [199, 608.581], [198.535, 610], [198, 610.571], [198, 612], [197.572, 613], [197, 613.487], [197, 614], [197, 615], [197, 616], [196.481, 617], [196, 618], [195.47, 619], [195, 620], [194.416, 621], [194, 622], [193.433, 623], [193, 624], [193, 625], [192.462, 626], [192, 627], [192, 628], [191.488, 629], [191, 630], [190.421, 631], [190, 632], [189.449, 633], [189, 634], [188.409, 635], [188, 636], [188, 637], [188, 638], [187.532, 639], [187, 639.531], [187, 641], [186.451, 642], [185.494, 643], [184.545, 644], [184, 644.566], [183.51, 646], [183, 646.54], [183, 648], [183, 649], [182.451, 650], [182, 651], [182, 652], [181.528, 653], [181, 653.542], [180.47, 655], [179.537, 656], [179, 656.539], [178.536, 658], [178, 658.538], [178, 660], [178, 661], [178, 662], [178, 663], [178, 664], [177.539, 665], [177, 665.459], [177, 666], [176.523, 667], [176, 667.545], [175.479, 669], [175, 670], [175, 671], [175, 672], [174.442, 673], [174, 674], [173.462, 675], [173, 676], [173, 677], [172.565, 678], [172, 678.505], [171, 679.533], [170.305, 681], [170, 682], [169.403, 683], [169, 684], [168.544, 685], [168, 685.535], [168, 687], [168, 688], [168, 689] -Path 3: [510, 10], [509, 11], [508, 11], [507.425, 11], [506.563, 12], [506, 13], [506, 14], [505.388, 15], [504.551, 16], [504, 16.5955], [504, 18], [503.431, 19], [503, 20], [503, 21], [502.437, 22], [502, 23], [502, 24], [502, 25], [502.553, 26], [503.494, 27], [504, 27.4621], [504.389, 28], [505, 28.501] -Path 4: [642, 14], [641, 15], [640, 15.2508], [639, 16], [638, 16.4707], [637, 17.3218], [635.536, 18], [634.546, 19], [634, 19.53], [633, 20.442], [632, 21.2918], [631, 22.1775], [630, 23], [629, 23.4577], [628, 24.3779], [627, 25.2208], [626, 26], [625, 26], [624.439, 27], [623.425, 28], [622.424, 29], [621.435, 30], [620.43, 31], [619.411, 32], [618.39, 33], [617.41, 34], [616.434, 35], [615.42, 36], [614.338, 37], [613, 38] -Path 5: [505, 34], [504, 34], [504, 35], [503.679, 36], [503, 36] -Path 6: [503, 38], [503, 38.5973], [504, 39], [504.441, 40], [505, 40.3571], [505.446, 41], [506, 41.363], [506.175, 42], [507, 42] -Path 7: [611, 39], [610, 40], [609, 40], [608, 40.3808], [607, 41.3086], [606, 42], [605, 42.4634], [604, 43], [603.373, 44], [602.219, 45], [601, 45.376], [600.395, 46], [599.282, 47], [598.196, 48], [597, 48.5944], [596, 49.6023], [595, 50.5688], [594, 51.4515], [593.484, 52], [592.412, 53] -Path 8: [990, 45], [989, 46], [988, 46], [987, 46.4471], [986.513, 47], [986, 47.4302], [985.459, 48], [984.427, 49], [983.423, 50], [982.291, 51], [981.047, 52], [980, 53], [979, 53] -Path 9: [489, 47], [490, 47.4408], [490.551, 48], [491.611, 49], [493, 49.6206], [494, 50.555], [495, 51.5412], [495.606, 53], [496.612, 54], [498, 54.4771], [498.539, 55], [500, 55.5574], [501, 56.4921], [501.44, 57], [502, 57.4964], [502.423, 58], [503, 58.4437], [503.516, 59], [505, 59] -Path 10: [485, 49], [484, 49], [483.552, 50], [483, 50.5266], [483, 52], [483, 53], [483, 54], [483, 55], [483, 56], [483, 57], [483, 58], [483, 59], [483, 60] -Path 11: [507, 49], [507, 50], [508, 50], [509, 50], [510, 50], [511, 50], [512, 50], [513, 50.5154], [514, 51.3798], [514.522, 52], [515.124, 53], [516, 53] -Path 12: [971, 56], [970, 57], [969, 57], [968, 57.3194], [967.37, 58], [966.245, 59], [965, 60], [964, 60.1443], [963.192, 61], [962, 61.2191], [961.287, 62], [960, 63], [959, 63.3283], [958.336, 64], [957.294, 65], [956.276, 66], [955, 66.4461], [954.493, 67], [954, 68], [954, 69], [953.319, 70], [954, 70] -Path 13: [591, 55], [591.973, 55], [592, 56], [592.486, 57], [593, 58], [593, 59.4884], [593.541, 60], [594, 60.5082], [595, 61], [595.504, 62], [596.449, 63], [597, 63.5539], [597.563, 65], [598.464, 66], [599, 66.5251], [600, 67.4701], [600.483, 68], [601, 68.4728], [601.406, 69], [602, 69.4996], [602, 70], [602, 71], [602.605, 72], [603.435, 73], [604, 73.567], [604.542, 75], [605.486, 76], [606, 76.5382], [606.574, 78], [607.479, 79], [608, 79.5383], [608.583, 81], [609.575, 82], [610.502, 83], [611, 84], [611.506, 85], [612.457, 86], [613, 86.5307], [614, 87.5216], [615, 88.5089], [616, 89.507], [617, 90.4573], [617, 91] -Path 14: [484, 64], [483, 64], [482, 64], [482, 65], [482, 66], [482, 67], [482, 68], [482, 69], [482.527, 70], [483, 71], [483.541, 72], [484.516, 73], [485.507, 74], [486.533, 75], [488, 75.5525], [489, 76.4689], [489.521, 77], [490.59, 78], [491.613, 79], [492.547, 80], [493.536, 81], [494.53, 82], [495.385, 83], [496, 83] -Path 15: [707, 64], [707, 65], [708, 65.4538], [708.63, 66], [709.52, 67], [710.404, 68], [711, 68.5743], [712, 69.5566], [713, 70.528], [713.449, 72], [714, 72.5332], [714, 74], [714, 75], [714.485, 76], [715, 76.5332], [715, 78], [715.576, 79], [716.481, 80], [717, 80.5386], [718, 81.489], [718.457, 82], [719, 82.4006], [719.455, 83], [720, 83.3214], [720.522, 84], [722, 84.6336], [723, 85.5792], [724, 86.5779], [724.535, 88], [725.46, 89], [726, 89.5325], [727, 90.6372], [727.604, 92], [728.528, 93], [729, 94], [729.483, 95], [730, 95.4749], [730, 96], [730.484, 97], [731, 97.4849], [731.498, 98], [732, 98.5137], [733, 99.5066], [734, 100.518], [734.407, 102], [735, 102.556], [735.435, 104], [736, 104.453], [736.498, 105], [737, 105.577], [738, 106.589], [739, 107.52], [740, 108.522], [740.438, 110], [741, 110.511], [741.57, 112], [742.587, 113], [743.583, 114], [744.496, 115], [745, 115.528], [745.467, 117], [746, 117.496], [746, 118], [746.441, 119], [747, 119.532], [747.652, 121], [748.625, 122], [749.519, 123], [750, 124], [750.408, 125], [751, 125.511], [751, 127], [751.467, 128], [752, 128.55], [752.644, 130], [753.575, 131], [754, 132], [754.581, 133], [755, 134], [755.436, 135], [756, 135.525], [756, 137], [756.512, 138], [757.381, 139], [758, 139.574], [759, 140], [760, 140.646], [760.638, 142], [761, 143], [761, 144], [761, 145], [761.488, 146], [762, 146.525], [762, 148], [762.465, 149], [763, 149.348], [763, 150], [763, 151] -Path 16: [672, 46], [671, 46], [670.443, 46], [670, 47], [670, 48], [670, 48.5163], [669.361, 49], [668.504, 50], [667.518, 51], [667, 51.5256], [666.5, 52], [666, 53.2553], [665, 54.305], [664, 55.3581], [663, 56.3897], [662, 57.422], [661, 58.4103], [660, 59.3781], [659, 60.3729], [658, 61.3878], [657, 62.3898], [656, 63.3312], [655, 64.3194], [654, 65.2902], [653, 66], [652, 66.4119], [651, 67.39], [650, 68.3058], [649, 69.2107], [648, 70.1546], [647, 71], [646, 71.3576], [645, 72.3707], [644, 73.269], [643, 74.1505], [642, 75], [641, 75.2232], [640, 76], [639, 77], [638, 77.1274], [637, 78.0313], [636, 79], [635, 79], [634.364, 80], [633.338, 81], [632.279, 82], [631.214, 83] -Path 17: [930, 80], [929, 80], [928.063, 81], [927, 81.119], [926.169, 82], [925, 83], [924, 83.1902], [923.234, 84], [922.116, 85], [921, 85.226], [920.294, 86], [919.179, 87], [918, 87.3218], [917.372, 88], [916.319, 89], [915, 90], [914, 90], [913, 91] -Path 18: [629, 84], [628, 85], [627, 85.3951], [626, 86], [625.345, 87], [624.279, 88], [623.199, 89], [622, 89.395], [621.445, 90], [620.422, 91], [620, 92] -Path 19: [495, 87], [496, 87], [496, 88], [496, 89], [496, 90], [496.395, 91], [497, 91.6102], [497.59, 93], [499, 93.5676], [500, 94.5229], [501, 95.4706], [501.464, 96], [502, 96.4806], [502, 97], [502.345, 98], [503, 98], [504, 99], [505, 100], [506, 100] -Path 20: [515, 92], [514, 92.4075], [513, 93], [512.551, 94], [512, 94.5286], [512, 96], [511.522, 97], [511, 97.5398], [510, 98.509], [509, 99.3715], [509, 100] -Path 21: [908, 93], [907, 94], [906, 94], [905, 95], [904, 95], [903, 96], [902, 96], [901, 97], [900, 97.182], [899.275, 98], [898, 98.259], [897.304, 99], [896, 100], [895, 101], [894, 101], [893, 102], [892, 102.095], [891.158, 103], [890, 103.1], [889.155, 104], [888, 105] -Path 22: [501, 103], [500, 103], [500, 104], [500, 105], [499.516, 106], [499, 106] -Path 23: [881, 108], [880, 108], [879, 109], [878, 110], [877, 110], [876, 110.124], [875.18, 111] -Path 24: [870, 113], [869, 114], [868, 114], [867.166, 115], [866, 115.255], [865.318, 116], [864, 117] -Path 25: [862, 118], [861, 119], [860, 119], [859, 119.386], [858.375, 120], [857.34, 121], [856.205, 122], [855, 122.31], [854.376, 123], [853.077, 124], [852, 125], [851, 125], [850, 126], [849, 126.026], [848.025, 127], [847, 127.198], [846.254, 128], [845, 129], [844, 129], [843, 130], [842, 130], [841, 131], [840, 131.148], [839.149, 132], [838, 133], [837, 133], [836, 134], [835, 134.129], [834.206, 135], [833, 135.452], [832.362, 136], [831.039, 137], [830, 137], [829, 138], [828, 138], [827, 139], [826, 139], [825, 140], [824, 141], [823, 141], [822, 141.324], [821.306, 142], [820, 143], [819, 143] -Path 26: [493, 123], [492, 123], [492, 124], [492, 125], [491.451, 126], [490.622, 127], [490, 127] -Path 27: [485, 131], [484, 131], [484, 132], [484, 133.354], [484.592, 134], [485, 135], [486, 135] -Path 28: [484, 140], [483, 140], [482, 140], [482, 141], [481.633, 142], [481, 142.468], [481, 143], [481, 144], [480.416, 145], [479.413, 146], [478.418, 147], [477.43, 148], [476.417, 149], [475.415, 150], [474.409, 151], [473.313, 152], [472.096, 153], [471, 153.199], [470.254, 154], [469.136, 155], [468.389, 156], [468, 157], [467.447, 158], [466.29, 159], [465.367, 160], [465, 161], [464.515, 162], [464, 162.439], [464, 163] -Path 29: [431, 141], [431, 142], [432, 142.364], [432.329, 143], [433, 143.417], [433, 144] -Path 30: [815, 145], [814, 145], [813, 145], [812.496, 146], [811.509, 147], [811, 147.506], [810, 148.401], [809.403, 149], [808.313, 150], [807.226, 151], [806, 151.43], [805.417, 152], [804.295, 153], [803, 154], [802, 154], [801, 155], [800, 155], [799, 156], [798, 156.03], [797.05, 157], [796, 157.262], [795.398, 158], [794.207, 159] -Path 31: [763, 164], [763.678, 164], [764, 165.394], [765, 166], [766.49, 166], [767, 166.51], [768, 167], [768.599, 168] -Path 32: [463, 170], [461.567, 170], [461, 171], [461, 172], [461, 172.536], [460, 173], [459.575, 174], [459, 174.572], [458.589, 176], [458, 176.501], [457.601, 178], [457, 178.488], [456.55, 179], [456, 179.343], [456, 180] -Path 33: [768, 174], [767, 174], [766, 174], [766, 175], [765.575, 176], [765, 176.545], [764.442, 178], [764, 179], [764, 180], [763.524, 181], [763, 181.458], [763, 182], [763, 183], [763, 184], [763, 185], [763, 186], [762.543, 187], [762, 187.434], [762, 188], [762, 189], [762, 190], [762, 191], [762, 192], [762, 193] -Path 34: [452, 183], [451, 183], [450, 183], [449.408, 184], [449, 185], [448.201, 186], [447, 186] -Path 35: [805, 171], [805, 171.509], [805.642, 172], [806, 173.407], [806.727, 174], [807, 175], [807, 175.538], [807.552, 176], [808, 177.412], [809, 178.473], [809.502, 179], [810.414, 180], [811, 181], [811.477, 182], [812, 183], [812.501, 184], [813, 185], [813.528, 186], [814, 187], [814.585, 188], [815.443, 189], [816, 189.567], [816.515, 191], [817, 192], [817.583, 193], [818.447, 194], [819, 194.574], [820, 195.609], [820.594, 197], [821.463, 198], [822, 198.576], [822.444, 200], [823, 200.592], [823.477, 202], [824, 202.494], [824.4, 203], [825, 203.53], [826, 204.566], [826.566, 206], [827.574, 207], [828.537, 208], [829.443, 209], [830, 209.566], [830.572, 211], [831.443, 212], [832, 212.572], [832.447, 214], [833, 214.562], [833.55, 216], [834, 217], [834.56, 218], [835.406, 219], [836, 219.6], [836.513, 221], [837, 222], [837.548, 223], [838.373, 224], [839, 224.577], [839.604, 226], [840.498, 227], [841, 227.597], [841.483, 229], [842, 229.539], [842.532, 231], [843.371, 232], [844, 232.615], [844.503, 234], [845, 235], [845.634, 236], [846.416, 237], [847, 237.604], [847.47, 239], [848, 239.529], [848.577, 241], [849.485, 242], [850, 242.558], [850.54, 244], [851, 245], [851.528, 246], [852.371, 247], [853, 247.604], [853.518, 249], [854.427, 250], [855, 250.555], [855.463, 252], [856, 252.56], [856.41, 254], [857, 254.658], [857.564, 256], [858.486, 257], [859, 257.553], [859.506, 259], [860, 260], [860.588, 261], [861.45, 262], [862, 262.538], [863, 263.627], [863.555, 265], [864.478, 266], [865, 266.543], [865.574, 268], [866.464, 269], [867, 269.56], [868, 270.61], [868.506, 272], [869, 273], [869.575, 274], [870.417, 275], [871, 275.566], [871.586, 277], [872.478, 278], [873, 278.533], [874, 279.593], [874.525, 281], [875.398, 282], [876, 282.596], [876.494, 284], [877, 284.513], [878, 285.573], [878.525, 287], [879.393, 288], [880, 288.587], [880.476, 290], [881, 290.575], [882, 291.606], [882.563, 293], [883.469, 294], [884, 294.56], [884.498, 296], [885, 296.524], [885.584, 298], [886.47, 299], [887, 299.543], [888, 300.578], [888.575, 302], [889, 303], [889.56, 304], [890, 305], [890.515, 306], [891.37, 307], [892, 307.532], [892.547, 309], [893.515, 310], [894, 311], [894.582, 312], [895.484, 313], [896, 313.544], [897, 314.587], [897.56, 316], [898.394, 317], [899, 317.596], [899.4, 319], [900, 319.592], [900.475, 321], [901, 321.531], [902, 322.57], [902.607, 324], [903.512, 325], [904.378, 326], [905, 326.586], [905.466, 328], [906, 328.548], [907, 329.588], [907.587, 331], [908.506, 332], [909.393, 333], [910, 333.623], [910.529, 335], [911.458, 336], [912, 336.552], [913, 337.621], [913.629, 339], [914.552, 340], [915, 341], [915.586, 342], [916.42, 343], [917, 343.559], [917.585, 345], [918.553, 346], [919.459, 347], [920, 347.557], [920.474, 349], [921, 349.565], [921.518, 351], [922.485, 352], [923, 352.472], [923.495, 353], [924, 353.51], [925, 354.546], [926, 355.578], [926.421, 357], [927, 357.582], [927.402, 359], [928, 359.61], [928.423, 361], [929, 361.572], [929.45, 363], [930, 363.543], [930.481, 365], [931, 365.522], [932, 366.566], [932.553, 368], [933.357, 369], [934, 369.6], [934.514, 371], [935.354, 372], [936, 372.592], [936.451, 374], [937, 374.593], [937.46, 376], [938, 376.587], [938.464, 378], [939, 378.564], [939.375, 380], [940, 380.563], [940.324, 382], [941, 382.489], [941, 383] -Path 36: [445, 189], [445.505, 190], [446, 191], [446, 192], [446, 193], [446, 194], [446, 195], [446, 196] -Path 37: [762, 198.366], [761, 199.436], [760.488, 200], [760, 201], [760, 202], [760, 203], [760, 203.549], [759.419, 204], [759, 205], [759, 206], [759, 207], [759, 208], [759, 209], [759, 210], [759, 211] -Path 38: [422, 207], [422.631, 207], [423, 208], [424, 208.534], [424, 210], [424.03, 211], [425, 211] -Path 39: [433, 218], [432, 218], [431, 218], [430.445, 219], [429.578, 220], [429, 220.279], [429, 221] -Path 40: [759, 218], [759, 219], [759, 220], [759, 221], [759, 222], [759, 223], [758.518, 224], [758, 224.473], [758, 225], [757.523, 226], [757, 226.61], [756.528, 228], [756, 228.521], [756, 230], [755.437, 231], [755, 232], [755, 233], [755, 234], [754.48, 235], [754, 236], [754, 237], [754, 238], [754, 239], [754, 240], [754, 241], [754, 242], [753.537, 243], [753, 243.526], [753, 245], [753, 246], [753, 247], [753, 248], [753, 249], [753, 250], [752.51, 251], [752, 251.517], [752, 253], [751.561, 254], [751, 254.547], [751, 256], [751, 257], [750.55, 258], [750, 258.48], [750, 259], [750, 260], [749.339, 261], [749, 262], [749, 263], [749, 264], [749, 265], [748.446, 266], [748, 267], [748, 268], [748, 269], [748, 270], [748, 271], [748, 272], [748, 273], [748, 274], [748, 275], [747.515, 276], [747, 276.499], [747, 277], [747, 278], [746.456, 279], [746, 280], [746, 281], [746, 282], [746, 283], [746, 284], [746, 285], [745.44, 286], [744.374, 287] -Path 41: [422, 230], [421, 230], [420, 230], [420, 231], [420, 232] -Path 42: [413, 239], [412, 239], [411, 239], [410, 239], [410, 240] -Path 43: [407, 246], [407.314, 247], [408, 247.209], [408.441, 248], [409, 248] -Path 44: [404, 260], [403, 260], [402, 260], [401.447, 261], [400.519, 262], [400, 262.54], [399, 263.56], [398.5, 265], [398, 266], [398, 267], [397.47, 268], [397, 269], [396.504, 270], [396, 270.357], [395.631, 271], [395, 271] -Path 45: [378, 290], [377, 290], [376.42, 291], [376, 292], [376, 293], [376, 294], [375.654, 295], [375, 295] -Path 46: [745, 289], [744.016, 289], [744, 289.55], [743, 290], [743, 291], [743, 292], [743, 293], [743, 294], [743, 295], [743, 296], [743, 297], [743, 298], [743, 299], [743, 300], [743, 301], [743, 302] -Path 47: [743, 308], [742, 308], [741.49, 309], [741, 310], [741, 311], [741, 312], [741, 313], [741, 314], [740.314, 315], [740, 316], [739.336, 317], [739, 318], [739, 319], [739, 320], [739, 321], [738.488, 322], [738, 323], [738, 324], [738, 325], [738, 326], [738, 327], [738, 328], [738, 329], [738, 330], [738, 331], [738, 332] -Path 48: [358, 317], [358.472, 318], [359, 318.322], [359, 319] -Path 49: [351, 334], [350, 334], [350, 335], [350, 336], [350.524, 337], [351, 338], [351, 339] -Path 50: [738, 340], [738, 341], [737.457, 342], [737, 343], [737, 344], [736.58, 345], [736, 345.429], [736, 346], [736, 347], [735.491, 348], [735, 349], [734.454, 350], [734, 351], [734, 352], [734, 353], [734, 354], [734, 355], [734, 356], [734, 357], [734, 358], [734, 359], [734, 360], [734, 361], [734, 362], [734, 363], [734, 364], [734, 365], [734, 366] -Path 51: [336, 352], [336.451, 352.764], [337, 353.078], [337, 354] -Path 52: [997, 362], [996, 362], [995, 362], [994.324, 363], [993.131, 364], [992, 365], [991, 365.221], [990.217, 366], [989, 366.382], [988.373, 367], [987.25, 368], [986, 369], [985, 369], [984, 370], [983, 370.013], [982.023, 371], [981, 372], [980, 372], [979, 373], [978, 373], [977, 374], [976, 374.024], [975.039, 375], [974, 375.029], [973.052, 376], [972, 377], [971, 377], [970, 378], [969, 378.056], [968.064, 379], [967, 379.225], [966.276, 380], [965, 381], [964, 381], [963, 382], [962, 382.151], [961.183, 383], [960, 384], [959, 384], [958, 385], [957, 385.157], [956.214, 386], [955, 387], [954, 387], [953, 388], [952, 388], [951, 389], [950, 389.023], [949.032, 390], [948, 390.025], [947.059, 391] -Path 53: [337, 362], [336, 362.058], [335, 363], [334, 363], [333.219, 364], [332.131, 365], [332, 366], [332, 367], [332, 368], [332.497, 369], [333, 369.346], [333, 370] -Path 54: [734, 372], [734, 373], [733.51, 374], [733, 374.494], [733, 375], [733, 376], [733, 377], [732.499, 378], [732, 379], [732, 380], [732, 381], [732, 382], [732, 383], [732, 384], [731.481, 385], [731, 386], [731, 387], [731, 388], [731, 389], [730.539, 390], [730, 390.528], [730, 392], [730, 393], [730, 394], [730, 395], [729.524, 396], [729, 396.507], [729, 398], [729, 399], [729, 400], [729, 401], [729, 402], [729, 403], [728.47, 404], [728, 405], [728, 406], [728, 407] -Path 55: [321, 381], [320, 381], [320, 382], [320, 383], [320.475, 384], [321, 384.516], [321, 386], [321, 387] -Path 56: [945, 392], [944, 393], [943, 394.196], [942, 395], [941, 395.398], [940, 396.215], [939.244, 397], [939, 398], [938, 399], [937, 399], [936, 400], [935, 400.227], [934, 401], [933, 402], [932, 402], [931, 403], [930, 403.275], [929, 404.204], [928, 405], [927, 405], [926.371, 406], [925.109, 407], [924, 408], [923, 408.079], [922.104, 409], [921, 409.379], [920.374, 410], [919.299, 411], [918, 412] -Path 57: [727, 409], [728, 409], [728, 410], [728, 411], [728, 412], [728, 413], [728.336, 414], [729, 414] -Path 58: [297, 415], [297.468, 416], [298, 416.466], [298, 417], [298.467, 418], [299, 418.341], [299, 419], [299, 420], [299, 421] -Path 59: [728, 419], [728, 420], [728, 421], [728, 422], [728, 423] -Path 60: [916, 413], [915, 414], [914, 414.101], [913, 415], [912, 416], [911, 416.242], [910, 417], [909, 417.294], [908, 418.145], [907, 419], [906, 419.374], [905, 420.266], [904, 421], [903, 421], [902.379, 422], [901.239, 423], [900, 424], [899, 424.239], [898.265, 425], [897.177, 426], [896, 426.314], [895.351, 427], [894.105, 428], [893, 428.205], [892.261, 429], [891.015, 430], [890, 430.331], [889.331, 431], [888.284, 432], [887, 432.405], [886.399, 433], [885.299, 434], [884.133, 435], [883, 435.399], [882.383, 436], [881.336, 437], [880, 437.427], [879.392, 438], [878.308, 439], [877.219, 440], [876, 440.42], [875.446, 441], [874.411, 442], [873.326, 443], [872, 444], [871, 444], [870, 445], [869, 445.202], [868.22, 446], [867, 446.448], [866.376, 447], [865.288, 448], [864, 449], [863, 449.346], [862.338, 450], [861.332, 451], [860.266, 452], [859, 453], [858, 453.292], [857.327, 454], [856.173, 455], [855, 455.372], [854.359, 456], [853.256, 457], [852, 457.3], [851.339, 458], [850, 459], [849, 459.192], [848.227, 460], [847, 460.41], [846.416, 461], [845.328, 462], [844.105, 463], [843, 463.103], [842.183, 464], [841, 465], [840, 466], [839, 466.385], [838.321, 467], [837, 467.476], [836.455, 468], [835.378, 469], [834.288, 470], [833, 470.496], [832.431, 471], [831.369, 472], [830.239, 473], [829, 474], [828, 474.051], [827.069, 475], [826, 476], [825, 476], [824, 477], [823, 477], [822, 478] -Path 61: [728, 429], [727, 429], [727, 430], [727, 431], [727, 432], [727, 433], [727, 434], [727, 435], [727, 436], [727, 437], [727, 438], [727, 439] -Path 62: [997, 444], [996, 444], [995, 444], [994.422, 445], [993.411, 446], [992.38, 447], [991.3, 448], [990, 448.498], [989.491, 449], [988.457, 450], [987.425, 451], [986.415, 452], [985.444, 453], [984.535, 454], [984, 454.549], [983, 455.6], [982.455, 457], [981.499, 458], [980.512, 459], [980, 459.466], [979.587, 460], [979, 460.538], [978.521, 462], [978, 462.48], [977.491, 463], [976.436, 464], [976, 465], [975.24, 466], [974, 466.311], [973.335, 467], [972.266, 468], [971.232, 469], [970, 469.438], [969.436, 470], [968.465, 471], [967.427, 472], [966.387, 473], [965.449, 474], [964.433, 475], [963.302, 476], [962.072, 477], [961, 478], [960, 478], [959, 479], [958, 479.172], [957.206, 480], [956, 480.387], [955.363, 481], [954.342, 482], [953.295, 483], [952.278, 484], [951, 484.412], [950.455, 485], [949.403, 486], [948.38, 487], [947.341, 488], [946.256, 489], [945.182, 490], [944, 490.381], [943.336, 491], [942.31, 492], [941.251, 493], [940, 493.371], [939.41, 494], [938.409, 495], [937.393, 496], [936.36, 497], [935.291, 498], [934.246, 499], [933.183, 500], [932, 501], [931, 502], [930, 502.269], [929.229, 503], [928.176, 504], [927, 504.409], [926.43, 505], [925.399, 506], [924.36, 507], [923.338, 508], [922.354, 509], [921, 509.383], [920.374, 510], [920, 511], [919, 512], [918, 512.115], [917.119, 513], [916.117, 514], [915, 514.311], [914.351, 515], [913.29, 516], [912.303, 517], [911, 517.435], [910.461, 518], [909.437, 519], [908.322, 520], [907.239, 521], [906.204, 522], [905, 522.391], [904.427, 523], [903.338, 524], [902.286, 525], [901.064, 526], [900, 526.371], [899.311, 527], [898.317, 528], [897, 528.457], [897, 529], [896.228, 530], [895, 530.334], [894.406, 531], [893.277, 532], [892.17, 533], [891, 534], [890, 535], [889, 535.394], [888.365, 536], [887.325, 537], [886.318, 538], [885.107, 539], [884, 540], [883, 541], [882, 541], [881, 541.4], [880.418, 542], [879.368, 543], [878.332, 544], [877, 544.569], [876, 545.575], [875, 546.505], [874.248, 548], [873, 548.442], [872.481, 549], [871.416, 550], [870.375, 551], [869.406, 552], [868.423, 553], [867.416, 554], [866.399, 555], [865.362, 556], [864.31, 557], [863.295, 558], [862.151, 559], [861, 559.332], [860.337, 560], [859.314, 561], [858.31, 562], [857, 562.384], [856.385, 563], [855.381, 564], [854.397, 565], [853.343, 566], [852.307, 567], [851.29, 568], [850, 568.48], [849.467, 569], [848.44, 570], [847.394, 571], [846.383, 572], [845.32, 573], [844.277, 574], [843.253, 575], [842, 575.435], [841.421, 576], [840.415, 577], [839.404, 578], [838.374, 579], [837.356, 580], [836.345, 581], [835.273, 582], [834.204, 583], [833, 583.382], [832.35, 584], [831.328, 585], [830.296, 586], [829.215, 587], [828, 587.331], [827.327, 588], [826.253, 589], [825.121, 590], [824, 590.323], [823.338, 591], [822.272, 592], [821, 592.496], [820.52, 593], [820, 593.514], [819, 594.484], [818.437, 595], [817.336, 596], [816.282, 597], [815.21, 598], [814, 598.317], [813.397, 599], [812.264, 600], [811, 601], [810, 602], [809, 602] -Path 63: [275, 455], [275, 456], [275, 457], [275, 458] -Path 64: [728, 469], [728, 469.715], [729, 470], [729, 471], [729.565, 472], [730.454, 473], [731, 473.472], [731.429, 474], [732, 474.431], [732.438, 475], [733, 475.536], [734, 476.628], [734.507, 478], [735.313, 479], [736, 479.066], [736, 480] -Path 65: [721, 473.455], [720.483, 474], [720, 475], [720, 476.399], [719.428, 477], [719, 478], [718, 478] -Path 66: [729, 487], [729, 488], [730, 488], [731, 488], [732, 488] -Path 67: [715, 497], [714, 497], [714, 498], [713.476, 499], [712.491, 500], [711, 500.568], [710, 502], [709.022, 503], [708, 503.506], [707.501, 505], [707, 505.488], [707, 506], [707, 507], [706.459, 508], [705.556, 509], [705, 509.449], [704.523, 510], [704, 510.605], [703.46, 512], [703, 513], [703, 514], [703, 515], [702.473, 516], [702, 517], [701.597, 518], [701, 518.401], [700.562, 519], [700, 519.532], [699.412, 521], [699, 522], [698.445, 523], [698, 524] -Path 68: [241, 503], [240, 503.405], [239, 504], [239, 505], [239, 506], [239, 507], [239.124, 508], [240, 508] -Path 69: [228, 509], [229, 509.504], [230, 510], [231, 510] -Path 70: [613, 516], [613.679, 517], [614.353, 518], [615, 518.682], [615.448, 520], [616, 520.439], [616.364, 521], [617, 521.464], [617, 522] -Path 71: [233, 516], [232, 516.213], [231, 517], [230, 517], [230, 518], [230, 519] -Path 72: [635, 519], [636, 519.308], [636.157, 520], [637, 520], [638, 520] -Path 73: [225, 528], [225, 529], [225.353, 530], [226, 530.391], [226, 531] -Path 74: [214, 543], [214.456, 544], [215, 544.527], [216, 545.439], [216, 546], [216.497, 547], [217, 547.52], [217.224, 549], [218, 549.177], [218, 550] -Path 75: [695, 539], [694, 539], [693.456, 539], [693, 540], [693, 541], [693, 542], [692.515, 543], [692, 544], [692, 545], [692, 546], [692, 547], [691.555, 548], [691, 548.506], [691, 550], [691, 551], [691, 552], [691, 553], [691.527, 554] -Path 76: [559, 557], [559, 558], [559.487, 559], [560, 559.546], [560.113, 561], [561, 561] -Path 77: [208, 565], [208.47, 566], [209, 566.389], [209, 567], [209, 568] -Path 78: [784, 583], [785, 583], [786, 583], [787, 583.415], [788, 584.483], [789, 585.448], [790, 586], [791.477, 586], [792, 586.534], [793, 587], [794, 587], [795, 587], [796, 587], [797.469, 587], [798.475, 588], [799, 589], [799.567, 590], [800, 591], [800.572, 592], [801.448, 593], [802, 593.611], [802.541, 595], [803.463, 596], [804, 596.54], [805, 597.532], [806, 598.538] -Path 79: [780, 585], [779.489, 585], [779, 586], [779, 587], [779, 588], [779, 589], [778.507, 590], [778, 591], [777.58, 592], [777, 592.634], [776.418, 594], [775.491, 595], [774.519, 596], [774, 596.562], [773, 597.566], [772, 598.514], [771, 599.482], [771, 600], [770.462, 601], [769.484, 602], [768.471, 603], [767.447, 604], [766.46, 605], [765.492, 606], [764.507, 607], [764, 607.562], [763, 608.59], [762, 609.569], [761, 610.527], [760.342, 612], [759, 612.42], [758.429, 613], [757.356, 614], [756.075, 615] -Path 80: [542, 598], [541, 598], [540, 598], [539.421, 599], [538.344, 600], [537.223, 601], [537, 602] -Path 81: [546, 593], [546.431, 594], [547, 595.301], [548, 596.374], [548.614, 597], [549, 597.526], [549.502, 598], [550.386, 599], [551, 600.419], [552, 601], [552.498, 602], [553, 602.476], [553.377, 603], [554, 603.599], [554, 605], [554.48, 606], [555, 606.475], [555, 607], [555.651, 608], [556.542, 609], [557.464, 610], [558, 610.537], [559, 611.568], [559.608, 613], [560, 614], [560.584, 615], [561.548, 616], [562.521, 617], [563.515, 618], [564.398, 619], [565, 619.653], [565.543, 621], [566.464, 622], [567, 622.555], [568, 623.593], [568.652, 625], [569.591, 626], [570.501, 627], [571.369, 628], [572, 628.53], [572.662, 630], [574, 630.673], [575, 631.644], [575.205, 633], [576, 633] -Path 82: [797, 599], [797, 600], [797, 601], [797.485, 602], [798, 602.57], [798.402, 604], [799, 604.616], [799.431, 606], [800, 606.637], [800.417, 608], [801, 608.635], [801, 610], [801.597, 611], [802, 612], [802.501, 613], [803, 614], [803.428, 615], [804, 615.618], [804, 617], [804.648, 618], [805, 619] -Path 83: [713, 598], [713.515, 598], [714, 598.573], [714.596, 599], [715.454, 600], [716.287, 601], [717, 602], [717, 602.628], [718, 603], [718.454, 604], [719, 604.489], [719, 605], [719.418, 606], [720, 606], [721, 606], [722, 607], [722.571, 608], [724, 608.455], [724.468, 609], [725, 609.437], [725.588, 610], [727, 610.601], [728, 611], [729, 611.545], [730, 612], [731, 612], [732, 612.477], [732.471, 613], [733, 613.435], [733.497, 614], [734, 614.458], [734, 615] -Path 84: [809, 604], [809, 605], [809.609, 606], [810, 607], [810.512, 608], [811, 609], [811.482, 610], [812, 610.546], [812.457, 612], [813, 612.562], [813.432, 614], [814, 614.584], [814, 616], [814.526, 617], [815, 618], [815.506, 619], [816, 620], [816.488, 621], [817, 621.571], [817.46, 623], [818, 623.606], [818, 625], [818.574, 626], [819, 627], [819.553, 628], [820, 629], [820.521, 630], [821, 631], [821.491, 632], [822, 632.571], [822.461, 634], [823, 634.562], [823.459, 636], [824, 636.566], [824.433, 638], [825, 638.552], [825.446, 640], [826, 640.568], [826.422, 642], [827, 642.592], [827.397, 644], [828, 644.586], [828, 646], [828.538, 647], [829, 648], [829.523, 649], [830, 650], [830.554, 651], [831, 652], [831.531, 653], [832.402, 654], [833, 654.583], [833.451, 656], [834, 656.598], [834.415, 658], [835, 658.543], [835.495, 660], [836, 660.558], [836.477, 662], [837, 662.571], [837.442, 664], [838, 664.521], [838.487, 666], [839, 666.514], [840, 667.561], [840.484, 669], [841, 669.493], [841, 670], [841, 671] -Path 85: [789, 604], [788, 604], [787, 605], [786, 605], [785, 606], [784, 606], [783, 607], [782, 607], [781, 608], [780, 608], [779, 609], [778, 609] -Path 86: [775, 609], [774, 609], [773, 610], [773, 611], [774, 612] -Path 87: [535, 603], [534.268, 603], [534, 604.011], [533, 605], [532, 605.013], [531, 606.147], [530, 607.244], [529, 608], [528, 608.374], [527, 609.348], [526, 610.33], [525, 611.279], [524, 612.219], [523, 613.134], [522, 614], [521, 614], [520.305, 615], [519.28, 616], [518.285, 617], [517.249, 618], [516.241, 619], [515, 619.267], [514.312, 620], [513.253, 621], [513, 622], [512, 623], [511, 623.142], [510.15, 624], [509, 624.329], [508.341, 625], [507.313, 626], [506.348, 627], [505.314, 628], [504.316, 629], [503.244, 630], [502, 630.239], [501.265, 631], [500.196, 632], [499.238, 633], [498.222, 634], [497, 634.32], [496.331, 635], [495.302, 636], [494.239, 637], [493.159, 638], [492.142, 639], [491, 639.296], [490.277, 640], [489.248, 641], [488.147, 642], [487, 642.245], [486.324, 643], [485.263, 644], [484.218, 645], [483.167, 646], [482, 646.24], [481.409, 647], [480.32, 648], [479.275, 649], [478.295, 650], [477.194, 651], [476.098, 652], [475, 652.251], [474.262, 653], [473.193, 654], [472.158, 655], [471, 655.302], [470.32, 656], [469.331, 657], [468.338, 658], [467.253, 659], [466.195, 660], [465.108, 661], [464, 661.266], [463.248, 662], [462.248, 663], [461.222, 664], [460.159, 665], [459.159, 666], [458, 666.16], [457.235, 667], [456.18, 668], [455, 668.32], [454.304, 669], [453.274, 670], [452.211, 671], [451.227, 672], [450.17, 673], [449, 673.272], [448.385, 674], [447.34, 675], [446.347, 676], [445.151, 677], [444.127, 678], [443.067, 679], [442, 680], [441, 680.104], [440.153, 681], [439.088, 682], [438.037, 683], [437, 683.269], [436.267, 684], [435.232, 685], [434.088, 686], [433, 686.277], [432.335, 687], [431.268, 688], [430.199, 689], [429.154, 690], [428, 690.2], [427.217, 691], [426.14, 692], [425, 692.307], [424.532, 693], [424, 693.253], [423.485, 694], [423, 695], [422, 696], [421.104, 697], [420, 697], [419, 698] -Path 88: [775, 616], [776, 617], [776.409, 618], [777, 618.57], [777.258, 620], [778, 620.605], [778, 622], [778.479, 623], [779, 623.608], [779.436, 625], [780, 625.622], [780, 627], [780.551, 628], [781, 629], [781.491, 630], [782, 630.459], [782, 631] -Path 89: [750, 617], [750, 617.915], [751, 618], [751.544, 619], [752.545, 620], [754, 620.586], [755, 621.459], [755.54, 622], [757, 622.494], [757.475, 623], [758, 623], [759, 623.518], [760, 624], [761, 624] -Path 90: [767, 619], [767, 619.815], [767.662, 620], [768, 620.539], [769, 621], [769.475, 622], [770, 622], [771, 622], [772, 622.755], [772.643, 624], [773.364, 625], [774, 625.623] -Path 91: [806.094, 622], [807, 623], [807, 624], [807.645, 625], [808, 626], [808.611, 627], [809, 628], [809.533, 629], [810, 630], [810.409, 631], [811, 631.609], [811, 633], [811.658, 634], [812, 635], [812.621, 636], [813, 637] -Path 92: [542, 621], [542, 621.502], [542.586, 622], [543, 623], [543, 623.551], [543.598, 624], [544, 625], [545, 625.42], [545.543, 626], [546, 627], [547, 628], [547.417, 629], [548, 629.582], [548.53, 631], [549, 632], [549.635, 633] -Path 93: [540, 623], [539, 623], [538, 623.294], [537, 624.256], [536, 625.15], [535, 626], [534, 627], [533, 628], [532, 628], [531, 628], [530.31, 629], [530, 630], [529, 631], [528, 631.189], [527.223, 632], [526.167, 633], [525.152, 634], [524, 634.287], [523.289, 635], [522.252, 636], [521.223, 637], [520, 637.351], [519.406, 638], [518.372, 639], [518, 640], [517.152, 641], [516, 641.233], [515.319, 642], [514.286, 643], [513.104, 644], [512.132, 645], [511, 645.198], [511, 646] -Path 94: [773, 629], [773, 630], [773.582, 631], [774, 632], [774.508, 633], [775, 634], [775.458, 635], [776, 635.569], [776, 637], [776, 638], [776.51, 639], [777, 640], [777.463, 641], [778, 641.436], [778.545, 642], [779.535, 643], [780, 644], [780, 645], [780.581, 646], [781, 647], [781.541, 648], [782, 649], [782.496, 650], [783, 650.575], [783.465, 652], [784, 652.578], [784, 654], [784.487, 655], [785, 655.478], [785, 656], [785.335, 657], [786, 657.494], [786, 658], [786, 659], [786.513, 660], [787, 661], [788, 662], [788, 663] -Path 95: [535, 614], [533.579, 615], [532.582, 616], [531.513, 617], [531, 617.582], [530, 618.433], [529, 619.233], [527.621, 620], [526.583, 621], [525.552, 622], [525, 622.564], [524, 623.45], [523, 624.331], [521.683, 625], [520.578, 626], [519.592, 627], [519, 628], [518, 629], [517, 629.405], [515.65, 630], [514.593, 631], [513.614, 632], [513, 633], [512, 633.555], [511, 634.201], [511, 635] -Path 96: [581, 634], [580, 634], [579.3, 635], [578, 635.216], [577.488, 636], [576, 637] -Path 97: [784, 635], [784, 636], [784.545, 637], [785, 638], [785.475, 639], [786, 639.538], [786.498, 641], [787, 641.542], [787.481, 643], [788, 643.594], [788, 645], [788.583, 646], [789, 647], [789.508, 648], [790, 649] -Path 98: [168, 638], [169, 638.61], [169.393, 640], [170, 640.502], [170.203, 642], [171, 642] -Path 99: [814, 639], [814.261, 640], [815, 640.42], [815, 641], [815, 642], [815.538, 643], [816, 644], [816.598, 645], [817, 646], [817.575, 647], [818, 648], [818.463, 649], [819, 649.574], [819.471, 651], [820, 651.573], [820.458, 653], [821, 653.613], [821.502, 655], [822, 656], [823, 657], [823, 658], [824, 659], [824, 660], [824.396, 661], [825, 661.622], [825.391, 663], [826, 663.659], [826.496, 665], [827, 665.57], [827.468, 667], [828, 667.575], [828.43, 669], [829, 669.594], [829.488, 671], [830, 671.569], [830.507, 673], [831, 674], [831.56, 675], [832, 676], [832.505, 677], [833, 678], [833, 679], [833.814, 680] -Path 100: [573, 640], [572, 640], [571.504, 641], [571, 641.323], [570.498, 642], [569.466, 643], [568.475, 644], [567.432, 645], [567, 646], [566.26, 647], [565.174, 648], [564, 648.349], [563.322, 649], [562.208, 650], [561, 650.318], [560.332, 651], [559.208, 652], [558, 652.501], [557, 653.464], [556.5, 654], [556, 654.408], [555.445, 655], [554.407, 656], [553.353, 657], [552.174, 658], [551, 658.281], [550.287, 659], [549, 660], [548, 660.292], [547.292, 661], [546, 661.509], [545, 662.506], [544, 663.502], [543, 664.514], [542, 665.533], [541, 666.552], [540, 667.586], [539.478, 669], [539, 670], [538.462, 671], [538, 672], [537.428, 673], [536.577, 674], [536, 674] -Path 101: [171, 651], [170, 651], [169, 651.415], [169, 652], [169, 653], [168.07, 654], [168.049, 654.951], [168, 656], [168, 657], [168, 658] -Path 102: [546, 661], [545.49, 662], [544.494, 663], [543.497, 664], [542.5, 665] -Path 103: [167, 662], [166, 662], [165.356, 662], [165, 663], [164.423, 663.423] -Path 104: [785, 666], [784, 666], [783.51, 667], [783, 667.547], [782.519, 669], [782, 669.534], [781.504, 671], [781, 671.506], [780.521, 673], [780, 673.517], [780, 675] -Path 105: [416, 668], [416, 668.59], [416.722, 669], [417, 670], [418, 670.624], [419, 671.537], [419.575, 673], [420.513, 674], [421.475, 675], [422, 675.606], [422.519, 677], [423, 678], [423.508, 679], [424, 680], [424, 681], [424, 682] -Path 106: [842, 679], [842, 680], [842.544, 681], [843.103, 682], [844, 682.846] -Path 107: [537, 681], [536, 681], [535.5, 682], [535, 682.511], [534.446, 684], [533, 684.541], [532, 685.423], [531.608, 686], [531, 686], [530, 687] -Path 108: [780, 677], [780.427, 678], [781, 679], [781.49, 680], [782, 681], [782, 681.51], [783, 682], [783.492, 683], [784, 683.556], [785, 684.565], [786, 685.591], [786.504, 687], [787.402, 688], [788, 688.516], [788.455, 690], [789, 690.168], [789, 691] -Path 109: [481, 681], [480, 681.353], [479, 682.245], [478, 683.144], [477, 684.082], [476, 685], [475, 685.397], [474, 686], [473.291, 687], [472.184, 688], [471.049, 689], [470, 689.278], [469.259, 690], [468.249, 691], [467.195, 692], [466.158, 693], [465, 693.372], [464.375, 694], [463, 694.642], [462.188, 696], [461.106, 697], [460.136, 698], [459, 698.265], [458.298, 699], [457.197, 700], [456.158, 701], [455.147, 702], [454, 702.335], [453.362, 703], [452.337, 704], [451.289, 705], [450.171, 706], [449.082, 707], [448, 707.266], [447.259, 708], [446.263, 709], [445.211, 710], [444, 710.232], [444, 711] -Path 110: [407, 687], [407, 688], [408, 688.468], [408, 689], [408, 690], [408.246, 691], [409, 691] -Path 111: [394, 692], [394, 693], [394.626, 694], [395, 695], [395.46, 696], [396, 696.299], [396, 697] -Path 112: [848, 693], [847, 693.453], [846, 694.448], [845, 695], [844.387, 696], [843.366, 697], [842.307, 698], [841.203, 699], [840, 699.381], [839.397, 700], [838.368, 701], [837.345, 702], [836.28, 703], [835.336, 704], [834, 704.587], [833.081, 706], [832, 707], [831, 707.161], [830.19, 708], [829, 708.4], [828.402, 709], [827.418, 710], [826.469, 711], [825.345, 712], [824.134, 713], [823, 714], [822, 714.349], [821.456, 715], [821, 716] -Path 113: [490, 688], [489, 689], [488, 689], [487, 689.481], [486, 690.444], [485, 691.361], [483.578, 692], [483, 693.297], [482, 694], [481.492, 694], [481, 694.553], [480.429, 695], [480, 695.502], [479, 696], [478.459, 697], [477.406, 698], [476.351, 699], [475.316, 700], [474, 700.466], [473.45, 701], [472.398, 702], [471.36, 703] -Path 114: [520, 694.175], [519, 695], [518, 695], [517, 695.377], [516, 696], [515.275, 697] -Path 115: [416, 700], [417, 700.621], [418, 701.587], [418.401, 703], [419, 703.518], [419.601, 705], [420.447, 706], [421, 706.609], [421.582, 708], [422.462, 709], [423, 709.538], [423.559, 711], [424.516, 712], [425.51, 713], [426.467, 714], [427, 714.544], [427.548, 716], [428, 717], [428.498, 718], [429, 718.482], [429, 719], [429, 720] -Path 116: [801, 692], [801, 693], [802, 694], [803, 695], [803, 696], [804, 697], [804.418, 698], [805, 699.469], [805.514, 700], [806, 701], [806, 702], [806.58, 703], [807, 704], [807, 705], [807.466, 706], [808, 706.575], [808.558, 708], [809.555, 709], [810.489, 710], [811, 710.57], [811.533, 712], [812, 713], [812.474, 714], [813, 714.46], [813, 715], [813.486, 716], [814, 716.473], [814, 717], [814.574, 718], [815.502, 719], [816, 720], [816.62, 721], [817.5, 722], [818, 723], [818.549, 724], [819.434, 725], [820, 725.556], [820.531, 727], [821.487, 728], [822, 728.589], [822.564, 730], [823.502, 731], [824.482, 732], [825, 732.43], [825.556, 733], [827, 733.537], [828, 734.475], [828.447, 735], [829, 735.575], [829, 737], [829.582, 738], [830, 739], [830, 740], [830, 741], [830.587, 742], [831.437, 743], [832, 743.588], [833, 744.611], [833, 746], [833.482, 747], [834, 747.501], [834, 749], [834, 750], [834, 751], [834.598, 752], [835.562, 753], [836.554, 754], [837.533, 755], [838.452, 756], [839, 756.564], [839.451, 758], [840, 758.575], [840.486, 760], [841, 760.503], [842, 761.518], [843, 762.55], [843, 764], [843, 765], [843, 766], [843, 767], [843.578, 768], [844.413, 769], [845, 769.567], [845.444, 771], [846, 771.535], [846, 773], [846.498, 774], [847, 774.55], [847.525, 776], [848, 777], [848.587, 778], [849.463, 779], [850, 779.496], [850, 780], [850.556, 781], [851.528, 782], [852, 783], [852.577, 784], [853.418, 785], [854, 785.522], [854.493, 787], [855, 787.446], [855.395, 788], [856, 788.52], [856.44, 790], [857, 790.544], [857.472, 792], [858, 792.584], [858, 794], [858.586, 795], [859.546, 796], [860.386, 797], [861, 797.551], [862, 798.584], [863, 799.643], [863, 801], [863.448, 802], [864, 802], [865, 802] -Path 117: [142, 710], [142.371, 711], [143, 711.598], [144, 712.525], [145, 713.373], [145, 714], [145.377, 715], [146, 715] -Path 118: [347, 714], [348, 714], [348, 715], [348, 716], [348, 717] -Path 119: [997, 714], [996, 714], [995, 714], [994.443, 715], [993.363, 716], [992, 716.605], [991, 717.583], [990, 718.514], [989, 719.453], [988.464, 720], [987.418, 721], [986.398, 722], [985.388, 723], [984, 723.58], [983, 724.544], [982, 725.525], [981, 726.51], [980, 727.458], [979.432, 728], [978.321, 729], [977, 729.486], [976.479, 730], [975.412, 731], [974.379, 732], [973, 732.644], [972, 733.614], [971, 734.559], [970, 735.523], [969, 736.503], [968, 737.487], [967.489, 738], [966.449, 739], [965, 739.631], [964, 740.587], [963, 741.554], [962, 742.546], [961, 743.515], [960, 744.473], [959.438, 745], [958.416, 746], [957.397, 747], [956.409, 748], [955.432, 749], [954.443, 750], [953.458, 751], [952.464, 752], [951.464, 753], [950.439, 754], [949.417, 755], [948.4, 756], [947, 756.622], [946, 757.576], [945, 758.537], [944, 759.493], [943.481, 760], [942.419, 761], [941, 761.616], [940, 762.639], [939, 763.628], [938, 764.595], [937, 765.558], [936, 766.534], [935, 767.536], [934, 768.516], [933, 769.471], [932.454, 770], [931.439, 771], [930.455, 772], [929.456, 773], [928.44, 774], [927.424, 775], [926.418, 776], [925.432, 777], [924.43, 778], [923.385, 779], [922, 779.598], [921, 780.578], [920, 781.549], [919, 782.485], [918.462, 783], [917.419, 784], [916.315, 785], [915, 785.536], [914, 786.5], [913, 787.488], [912.447, 788], [911.425, 789], [910, 789.577], [909, 790.524], [908, 791.461], [907.435, 792], [906.335, 793], [905.123, 794], [904, 794.418], [903.401, 795], [902.339, 796], [901, 796.507], [900, 797.417], [899.416, 798], [898.3, 799], [897.093, 800], [896, 800.239], [895.274, 801], [894, 802], [893, 802.329], [892.333, 803], [891.144, 804], [890, 804.251], [889.311, 805], [888, 806], [887, 806.057], [886.062, 807], [885, 808], [884, 808.17], [883.192, 809], [882, 809.294], [881.305, 810], [880, 811], [879, 811], [878, 812], [877, 812.053], [876.089, 813], [875, 813.012], [874.018, 814], [873, 815] -Path 120: [146, 719], [145, 719], [144, 719], [143, 719], [142.512, 720], [142, 720.51], [142, 722], [141.451, 723], [140.619, 724], [140, 724.456], [139.606, 725], [139, 725.151], [139, 726] -Path 121: [137, 726], [137, 727], [137.509, 728], [138, 729], [138.108, 730], [139, 730] -Path 122: [483, 731], [483, 732], [483.513, 733], [484, 734], [484, 735], [484.448, 736], [485, 736.266], [485, 737] -Path 123: [971, 727], [970, 728], [969, 729], [968, 730], [967, 731], [966, 732], [965, 732], [964.238, 733], [963.239, 734], [962.239, 735], [961.157, 736], [960.089, 737], [959, 738], [958, 739] -Path 124: [423, 733], [422, 733.261], [421, 734.1], [420, 735], [419, 735.175], [418, 736.215], [417, 737], [416.206, 738], [415, 738.416], [414.4, 739], [413.301, 740], [412.055, 741], [411, 741.165], [410.212, 742], [409, 743], [408, 743.29], [407.312, 744], [406, 744.501], [405.426, 746], [404.458, 747], [403.499, 748], [402.454, 749], [401.404, 750], [400.357, 751], [399.303, 752], [398, 752.395], [397.425, 753], [396.444, 754], [395.448, 755], [394.455, 756], [394, 757], [394, 758] -Path 125: [137, 739], [136.456, 739], [135.552, 740], [135, 740.72], [134.384, 741], [134, 742], [133.467, 743], [133, 744], [133, 745], [133, 746], [133.357, 747], [134, 747] -Path 126: [993, 740], [992, 740.478], [991, 741.472], [989.519, 742], [989, 743], [988.363, 744], [987, 744.538], [986, 745.507], [985, 746.452], [984.439, 747], [983.361, 748], [982.218, 749], [981.08, 750], [980, 750.342], [979.368, 751], [978.295, 752], [977, 752.474], [976.455, 753], [975.455, 754], [974.436, 755], [973.394, 756], [972.181, 757], [971.086, 758], [970, 758.435], [969.448, 759], [968.49, 760], [967.517, 761], [967, 761.558], [966, 762.56], [965, 763.557], [964, 764.557], [963, 765.553], [962, 766.546], [961, 767.53], [960, 768.473], [959.506, 769], [959, 769.418], [958.446, 770], [957.411, 771], [956.395, 772], [955.411, 773], [954.477, 774], [953.479, 775], [952.458, 776], [951.406, 777], [950.376, 778], [949.367, 779], [948.349, 780], [947, 780.457], [946.482, 781], [945.439, 782], [944.432, 783], [943.392, 784], [942.374, 785], [941.358, 786], [940, 786.46], [939.437, 787], [938.43, 788], [937.424, 789], [936.43, 790], [935.396, 791], [934.312, 792], [933.29, 793], [932, 793.504], [931, 794.422], [930.433, 795], [929.393, 796], [928.322, 797], [927.283, 798], [926, 798.431], [925.41, 799], [924.359, 800], [923.334, 801], [922.304, 802], [921, 802.422], [920.396, 803], [919.226, 804], [918, 805], [917.095, 806], [916, 806.4], [915.387, 807], [914.332, 808], [913.327, 809], [912.342, 810], [911, 810.494], [910.404, 811], [909.436, 812], [908.468, 813], [907.435, 814], [906.419, 815], [905.41, 816], [904.403, 817], [903.41, 818], [902.393, 819], [901.363, 820], [900.33, 821], [899, 821.494], [898.475, 822], [897.434, 823], [896.431, 824], [895.417, 825], [894.398, 826], [893.372, 827], [892.334, 828], [891.275, 829], [890.231, 830], [889, 830.347], [888.366, 831], [887.293, 832], [886.173, 833], [885, 833.299], [884.304, 834], [883.216, 835], [882, 835.221], [881.29, 836], [880, 837], [879, 837.259], [878.263, 838], [877.241, 839], [876, 839.4], [875.373, 840], [874.264, 841], [873.214, 842], [872.235, 843], [871, 843.456], [870.459, 844], [869.459, 845], [868.467, 846], [867.424, 847], [866.355, 848], [865.32, 849], [864, 849.397], [863.443, 850], [862.305, 851], [861.116, 852], [860, 852.324], [859.324, 853], [858.21, 854], [857, 854.362], [856.367, 855], [855.331, 856], [854, 856.482], [853.491, 857], [852.462, 858], [851.419, 859], [850.338, 860], [849.128, 861], [848, 861.329], [847.363, 862], [846.16, 863], [845, 863.376], [844.386, 864], [843.363, 865], [842, 865.12], [842, 866] -Path 127: [406, 746], [405, 746.57], [404, 747.552], [403, 748.474] -Path 128: [464, 741], [463, 741.377], [461.558, 742], [461, 742.59], [460.458, 743], [460, 744], [459, 745], [458, 745.204], [457, 746.179], [456, 747], [455, 747] -Path 129: [148, 745], [147.484, 745], [147, 746], [146.517, 747], [146, 748], [145.537, 749], [145, 749.559], [144.531, 751], [144, 751.406], [144, 752], [144, 753], [143.382, 754], [143, 755], [142.501, 756], [142, 756.594], [142, 758], [141.545, 759], [141, 759.542], [141, 761], [140.594, 762], [140, 762.506], [140, 764], [139.495, 765], [139, 766], [138.492, 767], [138, 768], [137.539, 769], [137, 769.563], [137, 771], [137, 772], [137, 773], [137, 774], [137, 775], [137, 776], [136.415, 777], [136, 778], [136, 779], [135.508, 780], [135, 780.497], [135, 781], [135, 782], [134.407, 783], [134, 784], [133.481, 785], [133, 786], [132.353, 787], [132, 788], [132, 789], [131.488, 790], [130.761, 791], [130, 791], [129, 792] -Path 130: [292.713, 742], [292, 743], [292, 743.776], [291, 744.497], [290, 745], [289, 746], [288, 746.439], [287, 747.473], [286, 748.431], [285, 749.368], [284.424, 750], [283.63, 751], [283, 752], [283, 753], [282, 754], [282, 754.716], [281, 755] -Path 131: [996, 752], [995, 752.085], [994, 753], [993, 754], [992, 754.278], [991, 755], [990, 755], [989.4, 756], [988, 756.61], [987.289, 758], [986.242, 759], [985, 759.378], [984.414, 760], [983.327, 761], [982.242, 762], [981, 762.377], [980.372, 763], [979.296, 764], [978.236, 765], [977.147, 766], [976, 766.35], [975.343, 767], [974.333, 768], [973, 768.516], [972, 769.455], [971.478, 770], [970.413, 771], [969.358, 772], [968.32, 773], [967.295, 774], [966, 774.517], [965, 775.542], [964, 776.513], [963, 777.461], [962.536, 778], [962, 778.351], [961.411, 779], [960, 779.584], [959, 781], [958, 782], [957.186, 783], [956, 783.659], [955.249, 785], [954.338, 786], [953.406, 787], [952.239, 788], [951.4, 789], [950.561, 790], [950, 790.399], [949.535, 791], [949, 791.342], [949, 792], [948, 793], [948, 794] -Path 132: [950, 747], [949, 747.06], [948, 748], [947, 748.335], [946, 749.373], [945, 750.345], [944, 751.308], [943, 752.275], [942, 753.306], [941, 754.257], [940, 755.142], [939, 756.038], [938, 757], [937, 757], [936.271, 758], [935.236, 759], [934.26, 760], [933.25, 761], [932, 761.427], [931.533, 762], [931, 762.444], [931, 763], [930.199, 764], [929.191, 765], [928.114, 766], [927.076, 767], [926.024, 768], [925, 768.243], [924.338, 769] -Path 133: [821, 752], [822, 752.345], [822.794, 753], [823, 753.711], [824, 754], [824.575, 754], [825, 754.601], [826, 755.465], [827, 756.41], [828.378, 757], [829, 757.663], [830, 758], [830.412, 759], [831, 759.076], [831, 760] -Path 134: [270, 760], [270.512, 761], [271, 762], [271.333, 763], [272, 763.32], [272, 764], [272, 765] -Path 135: [396, 759.432], [396.547, 760], [397, 761], [397, 762], [397, 763.483], [397.581, 764], [398, 765], [398, 765.505], [399, 766], [400, 766.589], [401, 767.491], [401.456, 768], [402, 768.482], [402.522, 769], [404, 769.578], [405, 770], [406, 770.503], [407, 771.469], [407.491, 772], [408, 772.485], [408.483, 773], [409, 773.511], [410, 774.519], [411, 775.496], [411.363, 776], [412, 776.419], [412, 777] -Path 136: [527, 759], [526, 759.397], [525, 760.388], [524, 761.304], [522.513, 762], [522, 762.517], [521, 763.392], [520, 764.242], [518.515, 765], [518, 765.515], [517, 766], [516.395, 767], [515.304, 768], [514, 768.536], [513, 769.524], [512, 770.526], [511, 771.502], [510, 772.46], [509.453, 773], [508, 773.607], [507, 774.543], [506, 775.502], [505, 776.422], [504.416, 777], [503.327, 778], [502, 778] -Path 137: [997, 766], [996, 766], [995, 766], [994.394, 767], [993.357, 768], [992.298, 769], [991, 769.42], [990.414, 770], [989.357, 771], [988.301, 772], [987, 772.418], [986.456, 773], [985.421, 774], [984.394, 775], [983.362, 776], [982.308, 777], [981, 777.419], [980.424, 778], [979.386, 779], [978.339, 780], [977.226, 781], [976, 781.38], [975.394, 782], [974.321, 783], [973.248, 784], [972, 784.418], [971.41, 785], [970.348, 786], [969.287, 787], [968, 787.432], [967.42, 788], [966.388, 789], [965.377, 790], [964.353, 791], [963, 791.432], [962.49, 792], [961.578, 793], [961, 793.623], [960, 794.442], [960, 795] -Path 138: [448.464, 758], [449, 758.572], [449.646, 759], [450, 759.607], [450.586, 760], [451.412, 761], [452, 762.367], [453, 763], [454, 763], [455.073, 764], [456, 765.275], [456.849, 766], [457, 767], [457.489, 768], [458, 768.576], [459, 769.559], [460, 770.541], [461, 771.633], [461, 773] -Path 139: [443, 775], [442, 775.469], [441.423, 776], [440, 776.653], [439, 777.579], [438, 778.496], [437.44, 779], [436.429, 780], [435, 780.638], [434, 781.654], [433, 782.553], [432, 784] -Path 140: [761, 773], [761, 773.915], [761.542, 774], [762, 774.52], [763, 775], [764, 775.485], [764.54, 776], [765.538, 777], [766.487, 778], [767, 778.495], [767.502, 779], [769, 779.549], [770, 780.171], [770, 781] -Path 141: [689, 772], [688, 772.174], [687, 773], [686, 773.317], [685, 774.289], [684, 775.311], [683, 776], [682.285, 777], [681.309, 778], [680, 778.568], [679.445, 780], [678.42, 781], [677.368, 782], [676.358, 783], [675.357, 784], [674.343, 785], [673.328, 786], [672, 786.277], [671.364, 787], [670.022, 788], [669, 789], [668, 789], [667, 790], [666, 791], [665, 792], [664, 792], [663, 792.275], [662.273, 793], [661.298, 794], [660, 794.489], [659.491, 795], [658.513, 796], [658, 796.54], [657, 797.497], [656.566, 798], [656, 798.45], [655.516, 799], [655, 799.342], [655, 800], [654, 801] -Path 142: [831, 762], [831, 763], [831, 764.363], [831.568, 765], [832, 765.516], [833, 766], [833.699, 766], [834.444, 767], [835, 768], [835, 769], [835, 770.417], [835.539, 771], [836, 772.432], [837, 773.435], [838.312, 774], [839, 774.898], [839.669, 775], [840, 776], [840.359, 777], [841, 777] -Path 143: [550, 778], [549, 778], [548.537, 779], [548, 779.554], [547, 780.541], [546, 781.578], [545, 782.644], [544, 783.573], [543, 784.572], [542, 785.524], [541, 786.51], [540, 787.479], [539.406, 788], [539, 789] -Path 144: [523, 774], [522, 774], [521.36, 774], [521, 775], [520, 776], [519, 777], [518, 778], [517, 778], [516, 778.3], [515, 779], [514.268, 780], [513.272, 781], [512.292, 782], [511, 782.362], [511, 783], [510.175, 784], [509.15, 785], [508, 785.072], [507.381, 786], [506, 786] -Path 145: [464, 781], [463, 781], [462, 781], [462, 782], [461.426, 783], [461, 784], [461, 785], [461, 786], [461, 787], [461, 788], [461, 789], [461.557, 790], [462.496, 791], [463, 791], [464, 791], [465, 791.545], [466, 792], [467, 792.598], [468, 793], [469, 793] -Path 146: [116, 782], [116.564, 783], [117.382, 784], [118, 784.55], [119, 785], [120, 785.528], [121, 786.492], [121.19, 787], [122, 787] -Path 147: [497, 778], [497.642, 778], [498, 778.62], [498.546, 779], [499.406, 780], [500, 781.498], [501, 782], [501.611, 783], [502.602, 784], [503.503, 785], [505, 785.249], [505.331, 786], [506, 786] -Path 148: [752, 778], [751, 778.348], [750, 779.139], [749, 780], [748, 780.392], [747, 781.365], [746, 782], [745, 782], [744.472, 783], [743.421, 784], [742.343, 785], [741.278, 786], [740, 786.495], [739.505, 787], [739, 787.49], [738.475, 788], [737.43, 789], [736.35, 790], [735.286, 791], [734.22, 792], [733, 792.481], [732.468, 793], [731.457, 794], [730.424, 795], [729.349, 796], [728, 797], [727, 797], [726, 798], [725, 799], [724, 799.157], [723.064, 800], [722, 800.689], [721, 801.646], [720, 802.607], [719, 803.585], [718, 804.517], [717, 805.403], [716.399, 806], [715.307, 807], [714.263, 808], [713, 808.427], [712.414, 809], [711.36, 810], [710.24, 811], [709, 811.387], [708.369, 812], [707.317, 813], [706, 813.549], [705, 814.521], [704, 815.491], [703.604, 816], [703, 816.504], [702, 817.614], [701, 818.527], [700, 819.001], [699.001, 820], [698, 821], [697, 822], [696, 822.45], [695.404, 823], [694.338, 824], [693.147, 825] -Path 149: [410, 782], [409, 782], [408.497, 782], [408, 782.627], [407, 783], [406.507, 784], [406, 784.528], [405, 785.405], [404.421, 786], [403.315, 787], [402.166, 788], [401.1, 789], [400, 789.42], [399.476, 790], [398.426, 791], [397.355, 792], [396.255, 793], [395.22, 794], [394, 794.481], [393.463, 795], [392.411, 796], [391.426, 797], [390.491, 798], [389.498, 799], [388.485, 800], [387.328, 801], [386, 802], [385, 803], [384, 804], [383, 805], [382, 805.355], [381.363, 806], [380.35, 807], [379.239, 808], [378.168, 809], [377, 810], [376, 810.037], [375.055, 811], [374, 812], [373, 812.25], [372.227, 813], [371, 813.526], [370, 814.491], [369.479, 815], [368.439, 816], [367.418, 817], [366.359, 818], [365.317, 819], [364, 819.38], [363.469, 820], [362.231, 821] -Path 150: [911, 781], [910, 782], [909, 782], [908, 783], [907, 784], [906, 784], [905.126, 785], [904.046, 786], [903, 786.135], [902.187, 787], [901.044, 788], [900, 788.094], [899.152, 789], [898, 790], [897, 790.037], [896.067, 791], [895, 791.121], [894.186, 792], [893, 793], [892, 793], [891, 794], [890, 794], [889, 795], [888, 795], [887, 796], [886, 796], [885, 797], [884, 797], [883, 798], [882, 798], [881, 799] -Path 151: [430, 785], [429, 786], [428, 786.476], [427, 787], [426.363, 788], [425, 788.583], [424, 789.499], [423.493, 790], [422.453, 791], [421.575, 792], [421, 792] -Path 152: [494, 783], [493, 783.477], [492.47, 784], [492, 785.436], [491.445, 786], [491, 787], [491, 788], [490.531, 789], [490, 790], [489.514, 791], [489, 791.604], [488, 792.591], [487, 793.499], [487, 794], [486.167, 795], [485, 796], [484, 796], [483, 797], [482, 797] -Path 153: [532, 796], [531, 796], [530, 796], [529.408, 797], [528.094, 798], [527, 799], [526, 799], [525, 799.643], [524, 800.568], [523, 801.397], [522.459, 802], [521, 803], [520, 804], [519, 805], [518, 805.511], [517, 806] -Path 154: [957, 797], [956, 797], [955, 797], [954.453, 798], [953.482, 799], [952.492, 800], [951.529, 801], [951, 801.523], [950, 802.552], [949.461, 804], [948, 804.424], [948, 805], [947, 806], [946, 807], [945, 808] -Path 155: [502, 798], [503, 798], [504, 798.607], [504.6, 800], [505.557, 801], [506.456, 802], [507, 802.451], [507, 803], [507.514, 804], [509, 804.334], [509, 805] -Path 156: [748, 797], [748, 798], [748, 799], [748, 800], [748.549, 801], [749, 802], [749.333, 803], [750, 803] -Path 157: [107, 801], [107, 802], [107.534, 803], [109, 803.378], [109.436, 804], [110, 804] -Path 158: [550, 800], [549, 800.243], [548, 801.131], [547, 802], [546, 803], [545, 803], [544, 804], [543, 804], [542, 805], [541, 806], [540, 806.278], [539, 807], [538, 807], [537.46, 808], [536.47, 809], [535.473, 810], [534.44, 811], [533.425, 812], [532.405, 813], [531.413, 814], [530.447, 815], [529.511, 816], [529, 816.465], [528.541, 817], [528, 817.51], [527, 818.485], [527, 819], [526.296, 820], [525, 820.438], [524.442, 821], [523.377, 822], [522, 823] -Path 159: [652, 802], [651, 802.258], [650, 803], [649, 803.44], [648, 804.393], [647, 805.405], [646, 806.426], [645, 807], [644, 807.57], [643.37, 809], [642.308, 810], [641, 810.377], [640.451, 811], [639.396, 812], [638.403, 813], [637.512, 814], [637, 814.538], [636, 815.566], [635.439, 817], [634.5, 818], [633.477, 819], [632.406, 820], [631, 821] -Path 160: [866, 806], [866, 806.681], [867, 807], [867, 808], [867.5, 809], [868, 809], [869, 809.597], [870, 810] -Path 161: [226, 805], [225, 805], [224.473, 805], [224, 806], [223.558, 807], [223, 808], [223, 809], [223, 810], [223, 811], [223, 812], [223, 813], [223, 814] -Path 162: [110, 810], [110, 811], [110.522, 812], [112, 812.323], [112.282, 813], [113, 813] -Path 163: [416, 811], [415, 811], [414, 811], [413.444, 812], [412.398, 813], [411.401, 814], [411, 815] -Path 164: [482, 810], [482, 811], [482, 812], [483, 812.636], [483.529, 814], [484.425, 815], [485, 815.538], [486, 816.536], [487, 817.522], [488, 818.579], [489, 819.714], [490, 820.699], [490.409, 822], [491, 822.617], [491.603, 824], [492.489, 825], [493, 825.567], [493.617, 827], [494.463, 828], [495, 828.52], [495, 830] -Path 165: [716, 813], [716, 814], [716, 815], [716.534, 816], [717, 817], [717.486, 818], [718, 818.363], [718.478, 819], [719, 819], [720, 819], [721, 820], [721.361, 821], [722, 821] -Path 166: [918, 813], [917.599, 814], [917, 814.472], [916.522, 815], [916, 815.635], [915, 816.484], [914.404, 817], [913.404, 818], [912.325, 819], [911.291, 820], [910, 820.568], [909, 821.538], [908, 822.523], [907, 823.468], [906.451, 824], [905.411, 825], [904.389, 826], [903, 826.583], [902, 827.551], [901, 828.559], [900, 829.487], [899.454, 830], [898.406, 831], [897, 831.626], [896.294, 833], [895, 833.506], [894, 834.5], [893, 835.424], [892.478, 836], [891.305, 837], [890, 838], [889.014, 839], [888, 839.421], [887.449, 840], [887, 841] -Path 167: [338, 815], [339, 815.481], [339, 816], [339, 817] -Path 168: [939, 811], [937.527, 811], [936.559, 812], [936, 813.424], [935, 814.453], [934, 815], [933.365, 816], [932.332, 817], [931.298, 818], [930, 818.432], [929.425, 819], [928.451, 820], [927.434, 821], [926.352, 822], [925.295, 823], [924.118, 824], [923, 824.324], [922.308, 825], [921.251, 826], [920, 826.364], [919.359, 827], [918.314, 828], [917.266, 829], [916, 829.443], [915.438, 830], [914.394, 831], [913.375, 832], [912.348, 833], [911.295, 834], [910, 834.439], [909.506, 835], [909, 835.43], [908.428, 836], [907.378, 837], [906.336, 838], [905.253, 839], [904, 839.436], [903.43, 840], [902.409, 841], [901.389, 842], [900.334, 843], [899.206, 844], [898, 844.288], [897.307, 845], [896.199, 846], [895, 846.324], [894.41, 847], [893.354, 848], [892.193, 849], [891.183, 850], [890, 850.428], [889.425, 851], [888.414, 852], [887.392, 853], [886.337, 854], [885.265, 855], [884, 855.41], [883.413, 856], [882.403, 857], [881.374, 858], [880.324, 859], [879.268, 860], [878, 860.43], [877.432, 861], [876.41, 862], [875.376, 863], [874.334, 864], [873.288, 865], [872, 865.412], [871.423, 866], [870.397, 867], [869.425, 868], [869, 869] -Path 169: [345, 816], [345.578, 817], [346.49, 818], [347, 818] -Path 170: [354, 818], [353, 818], [352, 818], [351.706, 819], [351, 819.629], [350.316, 821], [349.233, 822], [348.225, 823], [347, 824], [346.382, 825], [346, 826], [346, 827], [345.717, 828], [347, 828] -Path 171: [313, 820], [312, 820], [311, 820], [310.181, 821], [309, 822], [308, 822.177], [307.164, 823], [306, 823.474], [305.396, 824], [304.131, 825], [303, 826], [302, 826] -Path 172: [321, 817], [321.471, 818], [322.493, 819], [323.489, 820], [324.455, 821], [325, 822], [325.611, 823], [326.5, 824], [327, 824.504], [328, 825.568] -Path 173: [442, 821], [441, 821.051], [440, 822], [439, 822], [438.277, 823], [437.242, 824], [436.156, 825], [435.045, 826], [434, 826.245], [433.239, 827], [432.232, 828], [431, 828.339], [430.352, 829], [429.333, 830], [428.289, 831], [427.255, 832], [426.252, 833], [425, 833.374], [424.357, 834], [423.322, 835], [422.289, 836], [421.27, 837], [420.257, 838], [419.215, 839], [418, 839.309], [417.331, 840], [416.301, 841], [415.273, 842], [414.211, 843], [413.181, 844], [412, 844.325], [411.319, 845], [410.312, 846], [409.267, 847], [408.225, 848], [407.175, 849], [406, 849.331], [405.326, 850], [404.313, 851], [403.28, 852], [402.212, 853], [401.133, 854], [400, 854.25], [399.318, 855], [398.263, 856], [397.245, 857], [396.233, 858], [395, 858.323], [394.324, 859], [393.303, 860], [392.264, 861], [391.235, 862], [390.195, 863], [389.142, 864], [388, 864.1], [387.237, 865], [386, 866] -Path 174: [445, 818.382], [445.614, 819], [446.486, 820], [447, 821.392], [448, 822], [448, 823] -Path 175: [380, 820], [380, 821], [380, 821.533], [381, 822.463], [382, 823], [382, 824], [382.624, 825], [383, 826], [383, 827], [383, 828], [383, 829], [383, 830] -Path 176: [626, 823], [625, 823], [624, 823], [623.383, 824], [622.412, 825], [621, 825.537], [620, 826.564], [619.423, 828], [618.399, 829], [617.346, 830], [616.136, 831], [615, 831], [614, 832], [613, 833], [612, 833], [611, 833.326], [610.351, 834], [609.283, 835], [608, 835.437], [607.505, 836], [607, 836.435], [606.483, 837], [605.488, 838], [604.513, 839], [604, 839.456], [603.505, 840], [603, 840.444], [602.475, 841], [601.448, 842], [600.422, 843], [599.429, 844], [598.589, 845], [598, 845.504], [597.547, 847], [597, 847.55], [597, 849], [596.675, 850], [596, 850] -Path 177: [104, 825], [105, 825.434], [105.304, 826], [106, 826.404], [106, 827], [106, 828], [106.368, 829], [107, 829], [108, 829.387], [108.488, 830], [109, 830], [110, 830] -Path 178: [456, 829], [456.401, 830], [457, 830], [458, 830], [459, 830] -Path 179: [182, 826], [182, 826.528], [182.53, 827], [183, 828], [183, 829], [183, 829.531], [183.723, 830], [184, 831], [185, 831.498], [185.514, 832], [186.087, 833], [187, 833] -Path 180: [269, 832], [269, 832.563], [270, 833], [270.619, 834], [271.448, 835], [272, 835.225], [272.329, 836], [273, 836.223], [273.55, 837] -Path 181: [99, 835], [98, 835], [97, 835], [97, 836], [97, 837], [96.5831, 838], [96, 838.602], [96, 840], [96, 841], [96.4016, 842], [97, 842.592], [97.4843, 844], [98, 844.52], [98, 846] -Path 182: [372, 833], [372, 834], [372, 835], [373, 835.565], [374, 836], [375, 837], [375, 838], [375.545, 839], [376, 840], [376.544, 841], [377.422, 842], [378, 842.453], [378.375, 843], [379, 843.559], [379, 845] -Path 183: [508, 835], [508, 836], [508.509, 837], [509, 838], [509.422, 839], [510, 839.609], [510.471, 841], [511, 841.556], [512, 842.581], [513, 843.538], [514, 844.476], [514.551, 845], [516, 845.519], [517, 846], [518, 846], [519, 846.551], [520, 847], [521, 847], [522, 847.091], [522, 848] -Path 184: [318, 836], [317, 836], [316.16, 837], [315, 837.297], [314.32, 838], [313.264, 839], [312.203, 840], [311, 840.354], [310.342, 841], [309.305, 842], [308.277, 843], [307.238, 844], [306, 844.399], [305.416, 845], [304.369, 846], [303.342, 847], [302.29, 848], [301.195, 849], [300.169, 850], [299, 850.264], [298.592, 851], [298, 851] -Path 185: [704, 836], [703, 836], [702, 836], [701.361, 837], [700.295, 838], [699.176, 839], [698, 839.512], [697, 840.44], [696.418, 841], [695.375, 842], [694.312, 843], [693, 843.51], [692, 844.488], [691.473, 845], [690.461, 846], [689.429, 847], [688.395, 848], [687.355, 849], [686.267, 850], [685, 850.426], [684.423, 851], [683.373, 852], [682.289, 853], [681.165, 854], [680, 854.358], [679.355, 855], [678.307, 856], [677, 856.485], [676.478, 857], [675.445, 858], [674.395, 859], [673.344, 860], [672.299, 861], [671, 861.485], [670.479, 862], [669.435, 863], [668.359, 864], [667.273, 865], [666, 865.502], [665, 866.47], [664.454, 867], [663.426, 868], [662.385, 869], [661.347, 870], [660, 870.534], [659, 871.498], [658.475, 872], [657.431, 873], [656.391, 874], [655.347, 875], [654.291, 876], [653, 876.463], [652.441, 877], [651.416, 878], [650.379, 879], [649.3, 880], [648, 880.471], [647.441, 881], [646.41, 882], [645.329, 883], [644.201, 884], [643, 884.385], [642.385, 885], [641.332, 886], [640, 886.513], [639, 887.466], [638.452, 888], [637.442, 889], [636.414, 890], [635.368, 891], [634.347, 892], [633, 892.543], [632, 893.532], [631, 894.512], [630, 895.496], [629.48, 896], [628.462, 897], [627.44, 898], [626.412, 899], [625.391, 900], [624.354, 901], [623.282, 902], [622, 902.424], [621.422, 903], [620.334, 904], [619.213, 905], [618, 905.343], [617.349, 906], [616.293, 907], [615, 907.46], [614.451, 908], [613.391, 909], [612.34, 910], [611.302, 911], [610, 911.511], [609, 912.398], [608.395, 913], [607, 914] -Path 186: [265.437, 836], [266, 837], [267, 838], [267.492, 839], [268, 839.542], [268, 841] -Path 187: [384, 837], [383, 837], [382, 837.484], [381.618, 838], [381, 838.422], [381, 839], [381, 840] -Path 188: [290, 838], [291, 838], [292, 838], [293, 838], [294, 838] -Path 189: [334, 838], [333, 838], [332, 838], [331.432, 839], [330.433, 840], [329.395, 841], [328.23, 842], [327, 842.412], [326.418, 843], [325.38, 844], [324.386, 845], [323.443, 846], [322.444, 847], [321.404, 848], [320.349, 849], [319.283, 850], [318, 851], [317, 851.188], [316.243, 852], [315, 852.164], [314.29, 853], [313, 854] -Path 190: [494, 840], [495, 841], [495.36, 842], [496, 842.568], [496.517, 844], [497, 845], [497, 846], [497.268, 847], [498, 847.643], [498, 849], [498, 850] -Path 191: [274, 841], [274.641, 841], [275, 841.66], [276, 842], [276.629, 843], [278, 843.557], [279, 844.453], [279.409, 845], [280, 845.46], [280.329, 846], [281, 846] -Path 192: [264, 842], [264, 843], [265, 843.688], [266, 844], [267, 845], [268, 846] -Path 193: [253, 845], [253.535, 846], [254.51, 847], [255.4, 848], [256, 848.619], [256.634, 850], [257.573, 851], [258.577, 852], [260, 852.886] -Path 194: [291, 845], [292, 845], [292, 846], [292.557, 847], [293, 848], [293.513, 849], [294, 850], [294, 851] -Path 195: [249, 846], [248, 846], [247, 847], [246, 848], [245, 849] -Path 196: [528, 846], [528, 847], [529, 847], [530, 847.527], [531, 848.524], [531.543, 850], [532, 851], [532.581, 852], [533.5, 853], [534, 853.527], [535, 854.553], [536, 855.546], [537, 856.523], [538, 857.49], [538.414, 858], [539, 858.497], [539, 859], [539.477, 860], [540, 860.522], [540, 862], [540.42, 863], [541, 863.584], [542, 864.645], [543, 865.589], [544, 866.55], [545, 867.468], [545.489, 868], [546, 868], [547, 868], [548, 868] -Path 197: [249, 848], [249, 849], [249.638, 850], [250.483, 851], [251, 851.567], [252, 852.56], [253, 853.581], [254, 854.592], [255, 855.404], [255.592, 856], [257, 857] -Path 198: [263, 848], [263, 849], [264, 850], [265, 850.356], [265.126, 851], [266, 851.226], [266, 852] -Path 199: [355, 844], [354, 844.393], [353, 845.059], [352, 846], [351, 847], [350.467, 847], [350, 848], [349, 849], [348, 850], [347, 850], [346, 850.626], [345, 851.325], [344.411, 852], [343, 852.5], [342, 853], [341, 853.592], [340, 854.504], [340, 856], [340, 857], [340, 858], [340, 859], [340, 860] -Path 200: [794, 846], [794, 847], [794, 848], [794.606, 849], [796, 849.426], [796, 850], [796, 851], [797, 852] -Path 201: [840, 843], [839.397, 843], [839, 844], [838.501, 845], [838, 846.415], [837.323, 847], [837, 847.593], [836, 848], [835.546, 849], [835, 849.336], [834.412, 850], [833.123, 851], [832.105, 852], [831.15, 853], [830, 853.408], [829.637, 854], [829, 854] -Path 202: [98, 849], [98, 850], [98.5541, 851], [99, 852], [99.4731, 853], [100, 853.388], [100.464, 854], [101, 854], [102, 854.49], [102.447, 855], [103, 855.508], [104, 856.521], [105, 857.529], [105.476, 859], [106, 859.443], [106, 860], [106, 861], [106, 862], [106, 863] -Path 203: [694, 834], [693, 834.449], [692, 835.395], [691, 836.272], [690, 837.144], [689, 838.123], [688, 839.161], [687, 840], [686, 841], [685, 841.222], [684, 842.142], [683, 843.07], [682, 844], [681, 844.325], [680, 845.166], [679, 846.129], [678, 847.056], [677, 848.02], [676, 849], [675, 849.302], [674, 850], [673, 850.564], [672.16, 852], [671, 852.35], [670.383, 853], [669, 853.523], [668.169, 855], [667.072, 856], [666, 856], [665, 856.579], [664.079, 858], [663, 859], [662, 859.328], [661.347, 860], [660.309, 861], [659.296, 862], [658.291, 863], [657, 863.588], [656, 864.513], [655, 865.438], [654.461, 866], [653.409, 867], [652.317, 868], [651.239, 869], [650.147, 870], [649, 870.293], [648.281, 871], [647.169, 872], [646.125, 873], [645, 873.335], [644.353, 874], [643.342, 875], [642.374, 876], [641.303, 877], [640, 877.662], [639, 878.497], [639, 879], [638.031, 880], [637, 881], [636, 881], [635, 882], [634, 883], [633, 884], [632, 884.196], [631.227, 885], [630, 885.47], [629.441, 886], [629, 887], [628, 888], [627, 888.144], [626.158, 889], [625, 890], [624, 891], [623, 891.39], [622.338, 892], [621.302, 893], [620, 893.508], [619, 894.438], [618.416, 895], [617.464, 896], [616.424, 897], [615.248, 898], [614, 899], [613, 900], [612, 900], [611, 900.133], [611, 901] -Path 204: [877, 849], [876, 850], [875, 850], [874, 850.431], [873, 851], [872, 851.619], [871, 852.537], [870, 853.41], [869.391, 854], [868, 854.573], [867.101, 856], [866, 857], [865, 857.06], [864.052, 858], [863.064, 859], [862, 859.409], [861.431, 860], [860.37, 861], [859.341, 862], [858, 862.512], [857, 863.495], [856.417, 864], [855.405, 865], [854.409, 866], [853.334, 867], [852.232, 868], [851.167, 869], [850, 869.427], [849.432, 870], [848.319, 871], [847.096, 872], [846.037, 873], [845, 873.398], [844.303, 874], [843.466, 875], [842.439, 876], [842, 877] -Path 205: [244, 852], [245, 852.522], [246, 853.638], [246.593, 855], [247.578, 856], [248.593, 857], [249.64, 858], [251, 858.46], [251, 859] -Path 206: [368, 850], [368.429, 851], [369, 852], [369.657, 853], [370.63, 854], [371.608, 855], [372.587, 856], [373.588, 857], [375, 857.543], [376, 858.464], [376.369, 859], [377, 859.531], [378, 860.591], [379, 861.689], [380, 862.481], [380, 863] -Path 207: [365, 853], [364, 853], [363.248, 854], [362.199, 855], [361.165, 856], [360, 856.281], [359.306, 857], [358.272, 858], [357.222, 859], [356.178, 860], [355, 860.299], [354.311, 861], [353.273, 862], [352.231, 863], [351.211, 864], [350, 864.31], [349.32, 865], [348.3, 866], [347.291, 867], [346.097, 868], [345, 868.098], [344.147, 869], [343, 870], [342.273, 870.677], [343, 871.517], [344, 872.57], [345, 873.532], [346, 874.501], [347, 875.503], [348, 876.581] -Path 208: [788, 853], [789, 853.318], [789, 854], [789, 855] -Path 209: [239, 854], [238, 854], [237, 854], [237, 855], [236.536, 856], [236, 856], [235, 857], [235, 858] -Path 210: [501, 855], [500, 855], [499.139, 856], [498.401, 857], [497.497, 858], [496, 858] -Path 211: [382, 857], [383, 858], [383, 859], [383.492, 860], [384, 861], [385, 862] -Path 212: [575, 857], [574, 857], [573, 857], [573, 858], [573, 859], [573, 860], [573.473, 861], [574, 861.541], [575, 862.519], [576, 863.568], [576.561, 865], [577.463, 866], [578, 866.521], [579, 867.517], [580, 868.593], [581, 869.639], [581.512, 871], [582.428, 872], [583, 872.578], [584, 873.615], [584.549, 875], [585.527, 876], [586.478, 877], [587, 877.511], [588, 878.527], [589, 879.543], [590, 880.547], [591, 881.04], [591, 882] -Path 213: [814, 855], [813, 855.126], [812, 856.028], [811, 857], [810, 857], [809.226, 858], [808.127, 859], [807, 859.342], [806.345, 860], [805.357, 861], [804.363, 862], [803.267, 863], [802.217, 864], [801.288, 865], [800.268, 866], [799.245, 867], [798.259, 868], [797.063, 869], [797, 870] -Path 214: [242, 858], [243, 858], [244, 859], [244.329, 860], [245, 860.543], [246, 861] -Path 215: [495, 860], [494, 861], [493, 861.396], [492.46, 862], [492, 863] -Path 216: [588, 860], [587.729, 861], [587, 861], [586, 861], [585, 861] -Path 217: [509, 862], [508, 862], [507, 863], [507, 864], [506.597, 865], [506, 865] -Path 218: [501, 866], [502, 866], [503, 866.37], [503, 867], [503, 868], [504, 869], [504, 870] -Path 219: [566, 866], [567, 866], [568, 866.377], [568.404, 867], [569, 867], [570, 867], [571, 868] -Path 220: [746, 865], [746.918, 865], [747, 865.652], [748, 866], [748.221, 867], [749, 867.471], [749, 868] -Path 221: [819, 865], [817.516, 865], [817, 865.502], [816, 866.444], [815, 867], [814.382, 868], [813.337, 869], [812, 869.453], [811.454, 870], [810.395, 871], [809.384, 872], [808, 872.547], [807, 873.449], [806.425, 874], [805.329, 875], [804.211, 876], [803, 876.521], [802, 877.512], [801, 878.44], [800.416, 879], [799.375, 880], [798.325, 881], [797, 881.491], [796.5, 882], [795.474, 883], [794.441, 884], [793.283, 885], [792, 886], [791, 886], [790, 886.56], [789, 888], [788, 888], [787, 888.585], [786, 889.47], [786, 890], [785, 891], [784, 891.534], [783, 892.55], [782, 893.529], [781, 894.528], [780, 895.531], [779, 896.513], [778, 897.483], [777.46, 898], [776.422, 899], [775.397, 900], [774, 900.578], [773, 901.534], [772, 902.486], [771.448, 903], [770.405, 904], [769.366, 905], [768.355, 906], [767, 906.606], [766, 907.573], [765, 908.521], [764, 909.49], [763.476, 910], [762.469, 911], [761.483, 912], [760.542, 913], [760, 913.446], [759.581, 914], [759, 914.354], [758.365, 915], [757.302, 916], [756.267, 917], [755.177, 918], [754, 918.317], [753.392, 919], [752.321, 920], [751.259, 921], [750.216, 922], [749, 922.437], [749, 923], [748.055, 924], [747, 924.174], [746.24, 925], [745, 926], [744, 927], [743, 928], [742, 929], [741, 929], [740, 930], [739, 930], [738, 931], [737, 932], [736, 933], [735.326, 934], [734.595, 935], [734, 935] -Path 222: [498, 868], [497.55, 869], [497, 869.575], [497, 871], [497, 872], [497, 873], [497, 874] -Path 223: [515, 862], [515.451, 863], [516, 864.492], [516.554, 865], [517.492, 866], [518, 866.522], [518.503, 867], [519, 868], [520, 868.54], [520.331, 870], [521, 870] -Path 224: [743, 868], [742, 868], [741.856, 869], [741, 869.692], [740, 871], [739.543, 872], [739, 872] -Path 225: [839, 869], [838, 870], [837, 870], [836, 870], [835.481, 871], [834.55, 872], [834, 872.491], [833.563, 873], [833, 873.503], [832, 874.534], [831, 875.472], [830.488, 876], [829.454, 877], [828.392, 878], [827.313, 879], [826.18, 880], [825, 880.308], [824.364, 881], [823.309, 882], [822, 882.372], [821.426, 883], [820.332, 884], [819.249, 885], [818.161, 886], [817, 886.366], [816.38, 887], [815.319, 888], [814.207, 889], [813, 889.166], [812.265, 890], [811, 891] -Path 226: [478, 871], [477, 871], [476, 871.55], [475, 872.559], [474, 873.548], [473, 874.491], [472.514, 875], [472, 875.469], [471.513, 876], [471, 876.474], [470.438, 877], [469.387, 878], [468.257, 879], [467, 879.515], [466, 880.537], [465, 881.418], [464.434, 882], [463.305, 883], [462.142, 884], [461, 884.494], [460.447, 885], [459.218, 886] -Path 227: [598, 867], [598.409, 868], [599, 869.428], [600, 870.496], [601, 871], [601.444, 872], [602, 872.551], [603, 873.458], [603.407, 874], [604, 874.374], [604.45, 875], [605, 875.378], [605.413, 876], [606, 876.681], [606.537, 878], [607.539, 879], [608.433, 880], [609, 880.433], [609, 881] -Path 228: [793, 871], [792, 871], [791.173, 872], [790, 872.338], [789.329, 873], [788.284, 874], [787.327, 875], [786, 875.501], [785, 876.578], [784.343, 878], [783.334, 879], [782.321, 880], [781, 881], [780.386, 882], [779.358, 883] -Path 229: [566, 869], [566.371, 870], [567, 871.46], [568, 872], [568.513, 873], [569.409, 874], [570, 874.606], [571, 875.645], [571.646, 877], [572.549, 878], [573.498, 879], [574, 879.514], [575, 880.606], [576, 881.638], [577, 882.646], [577.645, 884], [578.596, 885], [579.569, 886], [580.446, 887], [581, 887.564], [582, 888.601], [583, 889.579], [583.64, 891], [584.557, 892], [585.445, 893], [586, 893.499], [586.362, 894], [587, 894.726], [587.667, 896], [588, 897] -Path 230: [862, 874], [861, 874], [860, 874], [859.465, 875], [858.429, 876], [857.377, 877], [856.311, 878], [855.226, 879], [854, 879.394], [853.376, 880], [852.375, 881], [851.392, 882], [850.519, 883], [850, 883.452], [850, 884], [849.7, 885], [849, 885] -Path 231: [737, 876], [738, 876], [739, 876], [740, 876.748] -Path 232: [750, 875], [749, 875], [748.477, 875], [748, 875.547], [747.419, 876], [747, 876.512], [746, 877], [745.488, 878], [744.458, 879], [743.476, 880], [743, 881] -Path 233: [204, 877], [204, 878], [205, 878], [206, 878.46], [206.523, 879] -Path 234: [558, 876.173], [557, 877], [556, 878], [555, 878], [554.044, 879], [553.239, 880], [552.255, 881], [551.324, 882], [551, 883] -Path 235: [643, 868], [642, 868], [641, 868], [640, 868], [639.483, 868], [639, 868.578], [638, 869], [637.479, 869], [637, 869.674], [636.483, 870], [636, 871], [635, 872], [634.495, 872], [633.506, 873], [632.525, 874], [631.582, 875], [631, 875.552], [630, 876.473], [629.396, 877], [629, 878], [628, 879], [627, 879], [626, 879], [625.413, 880], [624.434, 881], [623.449, 882], [622.388, 883], [621.137, 884] -Path 236: [504, 875], [504, 875.517], [504.802, 876], [505, 877], [505, 878], [505, 879], [505, 880], [506, 880.395], [506, 881], [506, 882], [507, 883], [506.103, 884] -Path 237: [271, 881], [270, 882], [269, 882], [268, 882] -Path 238: [367, 881], [366, 881], [365.108, 882], [364.003, 883], [363, 883.31], [362.342, 884], [361.303, 885] -Path 239: [199, 881], [198, 881.265], [197, 882.397], [196, 883], [195.334, 884], [194, 884.56], [193, 885.55], [192.435, 887], [191.542, 888], [191, 888.611], [190, 889.576], [189, 890.541], [188.455, 892], [187.039, 893], [186.25, 894], [186, 895], [185, 896], [184, 896], [183, 896], [182, 897] -Path 240: [287, 883], [286, 883], [285.366, 884], [284, 884.413], [284, 885], [283, 886], [282, 887], [282, 888], [281.094, 889] -Path 241: [524, 879], [524.286, 880], [525, 881], [525, 881.511], [525.581, 882], [526, 883], [527, 883.536], [528, 884.567], [529, 885.676], [529.464, 887], [530, 887.552], [531, 888.538], [532, 889.522], [533, 890.501], [534, 891.536], [534.54, 893], [535.374, 894], [536, 894.478], [536.401, 895], [537, 895.485], [537, 896], [537, 897], [537.29, 898], [538, 898.708], [538, 900] -Path 242: [836, 882], [835, 882], [833.585, 882], [833, 883], [832.175, 884], [831, 885], [830, 885.316], [829.317, 886], [828, 886.55], [827, 887.492], [826.47, 888], [825.427, 889], [824.378, 890], [823.314, 891], [822, 891.435], [821.43, 892], [820.387, 893], [819.237, 894], [818, 894.386], [817.45, 895], [816.417, 896], [815.401, 897], [814, 897.339], [813.427, 898], [812.293, 899], [811.448, 900], [810.529, 901], [810, 901.549], [809, 902.48], [808.517, 903], [808, 903.433], [807.511, 904], [807, 904.407], [806.467, 905], [805.339, 906], [804.329, 907], [803, 907.539], [802, 908.49], [801.507, 909], [801, 909.471], [800.493, 910], [799.483, 911], [798.523, 912], [798, 912.383], [797.64, 913], [797, 913.46], [796.523, 914], [796, 914.522], [795, 915], [794, 915], [793, 915] -Path 243: [228, 884], [227.055, 885], [226, 885.471], [226, 886], [225.49, 887] -Path 244: [483, 884], [482, 884], [481.378, 885], [480.403, 886], [479, 886.368], [479, 887] -Path 245: [907, 885], [908, 885], [909, 885], [910, 885], [911, 885], [912, 885.875], [913, 886], [914, 886], [915, 886], [916, 886.54], [917, 887], [918, 887], [919, 887.043], [919, 888] -Path 246: [323, 886], [322, 886], [321.462, 887], [321, 888], [320.428, 889], [319.487, 890], [318.446, 891], [317.357, 892], [316.302, 893], [315, 893.457], [314.478, 894], [313.433, 895], [312.458, 896], [311.419, 897], [310.321, 898], [309.293, 899], [308.278, 900], [307, 900.479], [306.477, 901], [305.463, 902], [304.365, 903], [303.145, 904], [302, 905], [301, 905.355], [300.439, 906], [299.438, 907], [298.379, 908], [297, 908.456], [297, 909], [296.35, 910], [295, 910.358], [294.467, 911], [293.264, 912], [292.029, 913], [291.068, 914], [290, 914.061], [289.096, 915], [288, 916], [287, 917], [286, 918] -Path 247: [231, 888], [230.502, 889], [230, 889], [229, 890], [229, 891], [228.624, 892], [228, 892] -Path 248: [735, 882], [733.604, 882], [733, 883], [733, 883.782], [732.45, 884], [731.554, 885], [731, 886.416], [730, 887.446], [729, 888], [728, 889], [727, 890], [726, 891], [725, 892], [724, 892] -Path 249: [928, 889], [927, 889], [926, 889], [925, 889.665], [924, 890], [923, 890], [922, 890] -Path 250: [83, 890], [83.5498, 891], [85, 891.402], [85, 892] -Path 251: [498, 890], [498, 890.635], [499, 891], [499, 892], [499.528, 893] -Path 252: [731.486, 890], [732, 891], [733, 891.481], [733.206, 892], [734, 892] -Path 253: [891, 886], [892, 886], [893, 886.498], [894, 887], [895, 887], [896, 887], [897, 887], [898, 887], [899.346, 887], [900, 888], [901, 889], [902, 889], [902.529, 889], [903, 889.508], [904, 890], [905.443, 890], [906, 891], [907, 891], [908, 891.535], [909, 892], [910, 892.455], [910.434, 893], [911, 893.319], [911, 894], [911.556, 895], [912, 896], [912.462, 897], [913, 897.572], [913.408, 899], [914, 899.525], [914, 901], [914.439, 902], [915, 902] -Path 254: [520, 881], [518.719, 881], [518, 882], [517.509, 883], [517, 884.396], [516.305, 885], [515.503, 886], [514.565, 887], [514, 887.597], [513, 888.425], [512, 889], [511, 889], [510, 889.473], [509, 890], [508, 890], [507.485, 890], [507, 891.054], [506, 892], [505, 892], [504, 892], [503.442, 893] -Path 255: [808, 892], [807, 892], [806.131, 893], [805.034, 894], [804, 894.243], [803.279, 895], [802.134, 896], [801, 896.325], [800.413, 897], [800, 898] -Path 256: [495, 893], [494, 893], [493.166, 894], [492, 895], [491, 895] -Path 257: [853, 895], [852, 895], [851.333, 896], [850.226, 897], [849, 897.667], [848.343, 899], [848, 900] -Path 258: [238, 897], [237, 897], [236, 897], [235.304, 898], [235, 899], [234.707, 900], [234, 900.275], [233.336, 901], [232, 901.649], [232, 903] -Path 259: [83, 898], [84, 898.441], [84, 899], [84.4691, 900], [85, 900.371], [85, 901] -Path 260: [333, 898], [334, 898.503], [335, 899.521], [336, 900.572], [336.519, 902], [337.17, 903], [338, 903] -Path 261: [610, 894], [609, 894], [608.464, 894], [608, 895], [607, 896.022], [606, 897], [605.37, 897], [605, 897.517], [604, 898.453], [603, 899], [602.533, 900], [602, 900] -Path 262: [765, 895], [764, 896], [763, 896.01], [762, 897], [761, 897.256], [760, 898.288], [759, 899], [758.312, 900], [757.336, 901], [756.283, 902], [755.243, 903], [754.203, 904], [753.158, 905], [752.118, 906], [751, 907], [750, 907.193], [749.216, 908], [748, 909], [747, 910], [746, 910.054], [745.094, 911], [744, 912], [743, 913], [742, 913.096], [741.105, 914], [740.048, 915], [739, 915.348], [738.384, 916], [737.294, 917], [736.204, 918], [735.157, 919], [734.164, 920], [733, 920.416], [732.44, 921], [731.393, 922], [730.33, 923], [729.214, 924], [728.108, 925], [727.118, 926], [726.128, 927] -Path 263: [843, 902], [842, 902], [841.426, 902], [841, 902.588], [840, 903], [840, 904], [839, 905], [838, 905.209], [837.232, 906], [836, 906.473], [835.47, 907], [834.44, 908], [833.398, 909], [832, 909.419], [831.509, 910], [831, 910.288], [830.554, 911], [830, 911.333], [829.292, 912], [828.433, 913], [827.434, 914], [826, 914.351], [825.55, 915], [825, 915.185], [825, 916] -Path 264: [459, 904], [458, 904], [457, 904], [456.473, 905], [455.465, 906], [454.499, 907], [453.471, 908], [452.423, 909], [451.46, 910], [450.477, 911], [449.455, 912], [448, 912.601], [447, 913] -Path 265: [487, 905], [486, 905], [485, 905], [484.547, 906], [484, 906.516], [483, 907.456], [482.461, 908], [481.393, 909], [480, 909.608], [479, 910.499], [478.46, 911], [477.385, 912], [476, 912.572], [475, 913.623], [474, 914.498], [473.484, 915], [472.395, 916], [471.283, 917], [470, 917.521], [469, 918.223], [468.23, 919], [467, 920], [466, 921], [465, 921], [464, 921], [463, 921.609], [462.185, 923], [461.087, 924], [460.006, 925], [459, 925.274], [458.266, 926], [457.164, 927], [456, 927.378], [455.44, 928], [454.41, 929] -Path 266: [172, 904], [171, 904], [170.463, 904], [169.503, 905], [169, 905.599], [168, 906], [167.505, 907], [167, 907.38], [167, 908], [166, 909] -Path 267: [513, 907], [512, 907], [511.097, 908], [510, 908.245], [509.452, 909] -Path 268: [509, 911], [509.699, 912], [510.621, 913], [511.631, 914], [512.611, 915], [513.589, 916], [514.576, 917], [515.533, 918], [516.5, 919], [517, 919.532], [518, 920.165], [518, 921] -Path 269: [707, 912], [708, 912], [708, 913], [708, 914], [708.568, 915], [709.312, 916], [710, 916], [711, 917], [711.464, 918], [712, 918.414], [712.407, 919], [713, 919] -Path 270: [266, 913], [265, 913], [264.213, 914], [263.03, 915], [262, 915], [261, 915.478], [261, 916], [260.87, 917], [260, 917] -Path 271: [465, 913], [464, 913], [463, 913], [462.572, 914], [462, 914.511], [461, 915.547], [460, 916.601], [459.275, 918], [458, 918.281], [457.284, 919], [456, 920], [455, 921], [454, 921.321], [453.343, 922], [452, 922.606], [451, 923.521], [450, 924.443], [450, 925] -Path 272: [605, 915], [604, 916], [603, 916], [602, 916.584], [601, 917.57], [600, 918.483], [599.512, 919], [599, 919.418], [598.437, 920], [597.396, 921], [596.406, 922], [595.393, 923], [594.368, 924], [593.323, 925], [592, 925.507], [591.532, 927], [591, 927.488], [591, 928], [591, 929] -Path 273: [533, 915], [534, 916], [534.823, 916], [535, 917], [536, 917] -Path 274: [71, 917], [71, 918], [71.4585, 919], [72, 919], [73, 919], [74, 919.036], [74, 920] -Path 275: [820, 918], [819, 918], [818.47, 918], [818, 919.078], [817, 920], [816, 920], [815.407, 921], [814.353, 922], [813.351, 923], [812, 923.571], [811, 924.501], [810, 926], [809, 926.664], [809, 928], [808.263, 929], [807, 929.286], [806.397, 930], [806, 931], [805.273, 932], [804, 932.594], [803, 933.204], [802.375, 934] -Path 276: [175, 921], [175.563, 921], [176, 922], [176.493, 923], [177, 923.529] -Path 277: [257, 923], [256, 923], [255, 923], [254.554, 924], [254, 924.601], [253, 925.513], [252, 926.438], [251.403, 927], [250.338, 928], [249, 928.534], [248, 929.467], [247.427, 930], [246.369, 931], [245.366, 932], [244.277, 933] -Path 278: [239, 926], [238, 926], [237.219, 927], [236.047, 928], [235, 928.293], [234.28, 929], [234, 930] -Path 279: [66, 926], [66, 927], [66, 928], [66.5362, 929], [68, 929], [69, 929] -Path 280: [403, 913], [402, 913], [401, 913.346], [400.392, 914], [399.525, 915], [398.646, 916], [398, 916.525], [397.483, 917], [396.54, 918], [397, 919], [397, 920], [397, 921], [397, 922], [397, 923], [397, 924.459], [397.605, 925], [398.433, 926], [399, 927], [399.457, 928], [400, 928.571], [400.421, 930], [401, 930.588], [401, 932], [401.512, 933], [402, 934], [402, 935], [402.606, 936], [403.408, 937], [404, 937.584], [404.544, 939], [405.448, 940], [406, 940.539], [407, 941.593], [408, 942.357], [408, 943] -Path 281: [684, 929], [684.664, 930], [685.441, 931], [686, 931.55], [686.461, 933], [687, 933.479], [687, 934], [687, 935] -Path 282: [905, 928], [905, 929], [906, 929.451], [906, 930], [906, 931] -Path 283: [345, 928], [345, 928.614], [345.581, 929], [346, 930], [347, 930.598], [347.492, 932], [348, 932.418], [348, 933], [348, 934] -Path 284: [448, 931], [447, 931], [446, 931], [445.464, 932], [444.217, 933], [443.245, 934], [442.396, 935], [441.43, 936], [440, 936] -Path 285: [591, 931], [591.461, 932], [592, 932.524], [592.566, 934], [593.487, 935], [594, 935.534], [594.566, 937], [595.469, 938], [596, 938.51], [597, 939.609], [597.575, 941], [598.471, 942], [599, 942.541], [600, 943.556], [601, 944.549], [602, 945.504], [603, 946], [604, 946.556], [605, 947], [606, 947.495], [606.546, 948], [608, 948.171], [608, 949] -Path 286: [724, 928.064], [723, 929.022], [722, 930.032], [721, 931], [720, 931], [719.342, 932], [718.202, 933], [717.072, 934], [716, 935], [715, 935.278], [714.257, 936], [713.227, 937], [712.194, 938], [711.229, 939], [710, 939.396], [709.461, 940], [708.519, 941], [708, 941.357], [708, 942], [708, 943], [708, 944], [707.359, 945], [706.44, 946], [705.483, 947], [704.546, 948], [704, 948.599], [703.402, 950], [702.382, 951], [701.356, 952], [700.303, 953], [699, 953.378], [698.419, 954], [697.373, 955], [696.264, 956], [695.245, 957], [694.229, 958], [693, 958.253], [692.442, 959], [692, 960] -Path 287: [543, 926], [543, 926.531], [543.553, 927], [544, 928], [544.474, 929], [545, 930], [545, 931], [545, 932], [545, 933], [545.407, 934], [546, 934.605], [546, 936], [546.501, 937], [547, 938], [547.485, 939], [548, 939.426], [548.323, 940], [549, 940.399], [549, 941] -Path 288: [242, 934], [241, 935], [240, 935.06], [239.11, 936], [238, 936] -Path 289: [426, 928], [425.376, 928], [424.528, 929], [424, 930], [424, 931.409], [423.404, 932], [423, 932.516], [422.473, 933], [422, 934], [421.409, 935], [420.508, 936], [420, 936.551], [419, 937.575], [418, 938.572], [417, 939.538], [416.264, 941], [415, 941.262], [414.38, 942] -Path 290: [633, 934], [632, 934], [631, 934], [630, 934.649], [630, 936] -Path 291: [843, 928], [843, 928.676], [843.512, 929], [844.449, 930], [845.457, 931], [846, 932], [846.486, 933], [847, 934], [847, 935], [847.553, 936], [848.508, 937], [850, 937.475], [850.496, 938], [851, 938], [852, 938.571], [853, 939.43], [853.339, 940], [854, 940] -Path 292: [906, 935], [905, 935], [904.488, 936], [903.514, 937], [903, 937.527], [902, 938.46], [901.508, 939], [901, 939.348], [900.453, 940], [899.401, 941], [898.297, 942], [897, 943], [896, 943] -Path 293: [227, 936], [226, 936], [225, 936], [224.393, 937], [223.408, 938] -Path 294: [571, 935], [571, 936], [572, 936.597], [573, 937.598], [574, 938.566], [574, 940], [574, 941], [574, 942], [574.445, 943], [575, 943.594], [575.547, 945], [576, 946], [576, 947] -Path 295: [67, 937], [67.404, 938], [68, 938.521], [68, 940], [68, 941], [68, 942], [68.4064, 943], [69, 943.083], [69, 944] -Path 296: [167.487, 935], [168, 936], [168, 936.523], [169, 937], [169.432, 938], [170, 938.555], [170.461, 940], [171, 940.391], [171, 941] -Path 297: [559, 935], [558, 935.485], [557.484, 936], [557, 937], [556, 937.59], [555, 938.559], [554, 939.468], [553.534, 940], [553, 940.314], [552.455, 941] -Path 298: [798, 936], [797, 937], [796, 937], [795.346, 938], [794, 938.483], [793.503, 939], [793, 939.395], [792.423, 940], [791.343, 941], [790.348, 942], [789.315, 943], [788.186, 944], [787, 944.401], [786.488, 945], [785.511, 946], [785, 946.568], [784, 947.58], [783.407, 949], [782.41, 950], [781, 950.46], [781, 951], [780.565, 952], [780, 952.496], [779.495, 953], [778.121, 954] -Path 299: [631, 938], [630, 938], [630, 939], [629.249, 940], [628, 940.403], [627.387, 941], [626.373, 942], [625.342, 943], [624.297, 944], [623.18, 945], [622, 946], [621, 946] -Path 300: [672, 936], [673.245, 936], [674, 937], [675, 938], [675.497, 939], [676, 939.525], [677, 940.475], [677.467, 941], [678, 941.508], [678, 943] -Path 301: [838, 930], [837, 930], [836, 931], [835, 931.105], [834, 932], [833, 932.31], [832, 933], [831, 934], [830, 934], [829, 935], [828, 936], [827, 936], [826, 937], [825, 937.319], [824, 938], [823, 938.543], [822, 939.381], [821.591, 940], [821, 940] -Path 302: [234, 939], [234, 940], [233, 941], [232, 941] -Path 303: [735, 937], [734, 937], [733.417, 937], [733, 937.529], [732, 938.486], [731, 939], [730.327, 940], [729.331, 941], [728.423, 942], [727.466, 943] -Path 304: [300, 936], [300, 936.691], [300.593, 937], [301.396, 938], [302.28, 939], [303, 940], [303, 941], [303.585, 942], [304.472, 943], [305, 943.43], [305.483, 944], [306, 944.516], [307, 945.596], [308, 946] -Path 305: [840, 942], [841, 942.369], [841.586, 943], [842.563, 944], [843.464, 945], [844, 945.538], [845, 946.612], [845.652, 948], [846.582, 949], [847.469, 950], [848, 950.549], [849, 951.63], [849.583, 953], [850, 954], [851, 955], [852, 956], [852.823, 957], [853.674, 958], [854.511, 959], [855, 960], [856, 961] -Path 306: [768, 937], [767, 937.498], [766.419, 938], [765.514, 939], [764.551, 940], [763.507, 941], [763, 941.506], [762, 942.411], [761, 943], [760.333, 944], [759.243, 945], [758, 945.438], [757.425, 946], [756.379, 947], [755.295, 948], [754, 948.476], [753.463, 949], [752.442, 950], [751.383, 951], [750.31, 952], [749.231, 953], [748, 953.453], [747.439, 954], [746.417, 955], [745.394, 956], [744.327, 957], [743, 957.486], [742.493, 958], [741.483, 959], [740.448, 960], [739.369, 961], [738.137, 962], [737, 962.304], [736.305, 963], [735.13, 964], [734, 964.403], [733.421, 965], [732.377, 966], [731, 966.528], [730, 967.484], [729.467, 968], [728.366, 969], [727.285, 970], [726.262, 971], [725, 971.546], [724, 972.521], [723, 973.475], [722.48, 974], [721.395, 975], [720.337, 976], [719, 976.565], [718, 977.518], [717, 978.495], [716.508, 979], [716, 979.492], [715.496, 980], [714.431, 981], [713.417, 982], [712.395, 983], [711, 983.563], [710, 984.517], [709, 985.492], [708.484, 986], [707.492, 987], [706.501, 988], [706, 988.415], [705.448, 989], [704.355, 990], [703.268, 991], [702, 991.519], [701, 992.494], [700.442, 993], [699.399, 994], [698, 994.583], [697, 995.544], [696, 996.486], [695.41, 997], [694.387, 998], [694, 999] -Path 307: [232, 944], [231, 944], [230, 944], [229.359, 945], [228.179, 946], [227, 947], [226, 947.248], [225.263, 948], [224, 948.446], [223.385, 949], [222.394, 950], [221.535, 951], [221, 951.427], [220.578, 952], [220, 952.437], [219.275, 953], [218.398, 954], [217.443, 955], [216.378, 956], [215, 957] -Path 308: [665, 940], [665, 941], [665, 942.435], [665.773, 943], [666, 944], [666.552, 945], [667, 946], [667.562, 947], [668.501, 948], [669.488, 949], [670, 949.442], [670.38, 950], [671, 950], [672, 950] -Path 309: [563, 944], [563, 945], [563.443, 946], [564, 946.583], [564, 948] -Path 310: [546, 946], [545, 946], [544, 947], [543, 947], [542, 948], [541, 948.274], [540.266, 949], [539, 949.527], [538, 950.524], [537, 951.459], [536.349, 952], [535.3, 953], [534.275, 954], [533, 954.318], [532.599, 955], [532, 955.347], [531.659, 956], [531, 956.467], [531, 957], [530.277, 958], [529.258, 959], [528, 959.57], [527, 960.068], [527, 961] -Path 311: [212, 947], [213, 947], [214, 947.425], [214.571, 948], [216, 949], [217, 949.523], [218, 950.423], [218, 951] -Path 312: [835, 947], [834, 947], [833, 947], [832.291, 948], [831.25, 949], [830.204, 950], [829.029, 951], [828, 951.263], [827.29, 952], [826.251, 953] -Path 313: [383, 947], [383, 948], [383.593, 949], [384.435, 950], [385, 950], [386, 950] -Path 314: [678, 948], [677, 948], [676, 948], [675.403, 949], [675, 950] -Path 315: [853, 947], [853, 948], [854, 948.537], [854.567, 950], [855, 951], [855.571, 952], [856.533, 953], [857.587, 954], [859, 954.527], [859.502, 956], [860, 957], [860.499, 958], [861, 958.421], [861.549, 959], [862.584, 960], [863.428, 961], [864, 961.569], [864.525, 963], [865.125, 964], [866, 964] -Path 316: [60, 949], [59, 949], [58, 949], [58, 950], [57.5466, 951], [57, 951.552], [56.3484, 953], [55.3158, 954], [54.4304, 955], [53.5353, 956], [53, 956.317], [53, 957] -Path 317: [509, 940], [509, 940.822], [510, 941], [511, 941.497], [512.442, 942], [513.379, 943], [514, 943.636], [515, 944.423], [516, 945.425], [517.445, 946], [518, 946.68], [519, 947.393], [520, 948], [520.516, 948], [521, 948.525], [522, 949], [522.599, 950], [524, 950.484], [524.451, 951], [525, 951.452], [525.435, 952], [526, 952.436], [526, 953], [526.431, 954], [527, 954.284], [527.555, 955] -Path 318: [671, 933], [670, 933.023], [669, 934], [668, 934.434], [666.545, 935], [666, 935.51], [665, 936.4], [664, 937.179], [663, 938.054], [662, 939], [661, 940], [660, 940.409], [659, 941.012], [658, 942], [657, 943], [656, 944], [655, 944], [654, 945], [653, 945.033], [652, 946], [651, 946.246], [650, 947.169], [649, 948], [648.479, 948], [648, 948.547], [647.498, 949], [647, 949.584], [646.442, 950], [646, 950.537], [645, 951], [644.353, 952], [643, 952.57], [642, 953.584], [641, 954.556], [640, 955.547], [639, 956] -Path 319: [728, 949], [726.502, 949], [725.512, 950], [725, 950.571], [724, 951], [723.457, 952], [722.319, 953], [721, 954], [720, 954], [719, 955], [718, 955.381], [717.314, 956], [716, 956.507], [715, 957.311], [714.383, 958], [713, 959], [712, 960], [711, 960], [710, 960.268], [709.302, 961], [708, 962], [707, 962], [706, 963], [705, 963], [704, 964], [703, 964], [702, 965], [701, 965.327], [700.336, 966], [699.303, 967], [698.163, 968], [697.239, 969], [696.49, 970], [695.621, 971], [695, 971.518], [694.458, 973] -Path 320: [819, 950], [819, 950.893], [818, 951], [817, 951], [816, 952] -Path 321: [207, 954], [207, 955], [207, 956], [208, 957], [208, 958] -Path 322: [824, 954], [823.302, 955], [822, 955.465], [821.521, 956], [821, 956.425], [820.51, 957], [820, 957.402], [819.454, 958], [818.341, 959], [818, 960], [817, 961], [816, 961.241], [815.253, 962], [814.195, 963], [813, 963.37], [812.474, 964], [811.64, 965], [811, 965.616], [811, 967], [812, 967.773], [813, 968.827], [813.528, 970], [814.424, 971], [815, 971.581], [815.575, 973], [816.453, 974], [817, 974.578], [817.55, 976], [818.44, 977], [819, 977.545], [819.611, 979], [820.413, 980], [821, 980.544], [821.595, 982], [822.507, 983], [824, 983.912], [824.506, 985], [825.415, 986], [826, 986.572], [826.59, 988], [827.51, 989], [828.468, 990], [829, 990.551], [830, 991.61], [830.586, 993], [831.5, 994], [832, 994.492], [832.448, 995], [833, 995.535], [834, 996.553], [835, 997.538], [835, 999] -Path 323: [263, 955], [264, 955.631], [265, 956.551], [266, 957.414], [266.626, 958], [267, 959] -Path 324: [312, 955], [311, 955], [311, 956], [311, 957], [311.357, 958], [312, 958.314], [312.472, 959], [313, 959], [314, 959.467], [314.372, 960], [315, 960] -Path 325: [200, 953], [199.401, 953], [199, 953.598], [198.365, 954], [198, 954.529], [197.385, 955], [196.508, 956], [196, 957], [195.498, 958], [194.524, 959], [194, 959.403], [193.417, 960], [192.386, 961], [191.534, 962], [191, 962.393], [190.397, 963], [189, 963.35], [189, 964], [188, 965], [187, 965] -Path 326: [271, 957], [271, 958], [271.497, 959], [272, 959.561], [273, 960.548], [274, 961.473], [274.434, 962], [275, 962.349], [275.637, 963], [276.559, 964], [277, 965] -Path 327: [774, 956], [773, 957], [772, 957.391], [771, 958], [770.378, 959], [769, 959.452], [769, 960], [768, 961], [767, 962], [766.259, 963], [765.449, 964], [764.488, 965], [763.5, 966], [763, 966.411], [762.455, 967], [761.389, 968], [760.386, 969], [759, 969.465], [758.428, 970], [757.351, 971], [756.294, 972], [755, 972.482], [754.478, 973], [753.42, 974], [752.332, 975], [751, 975.434], [750.47, 976], [749.429, 977], [748.356, 978], [747.271, 979], [746, 979.454], [745.439, 980], [744.379, 981], [743.345, 982], [742, 982.516], [741, 983.524], [740, 984.492], [739.472, 985], [738.395, 986], [737.05, 987], [736, 987.305], [735.322, 988], [734.292, 989], [733, 989.039], [732.091, 990], [731, 991], [730, 991.374], [730, 992], [729.842, 993], [729, 993], [728, 993.704], [727.253, 995], [726.303, 996], [725, 996.271], [725, 997] -Path 328: [563, 953], [562, 953], [561, 953.391], [560.455, 954], [559.502, 955], [558.569, 956], [557.554, 957], [557, 957.522], [556, 958.399], [555, 959], [554.259, 960], [553, 960.455], [552.492, 961], [551.484, 962], [550.474, 963], [549.42, 964], [548, 964.517], [547, 965.299], [546.225, 966], [545, 966.467], [544.43, 967], [543.297, 968], [542.304, 969], [541, 969.51], [540.497, 971], [539.471, 972], [539, 973], [538, 974], [537, 975], [536, 976], [535, 976], [534, 976.54], [533, 977.562], [532, 978.539], [531, 979.483], [530.509, 980], [530, 980.438], [529.479, 981], [528.391, 982], [527.229, 983] -Path 329: [641, 958], [641, 959], [641, 960], [641.544, 961], [642.42, 962], [643, 962.406], [643, 963], [643.504, 964], [644, 965], [644.265, 966], [645, 966] -Path 330: [50, 960], [51, 960.497], [51, 961], [51, 962], [51, 963] -Path 331: [254.042, 960], [255, 961], [255.621, 962], [256.146, 963], [257, 963] -Path 332: [630, 961], [629, 962], [628, 963], [627, 963], [626, 964], [625, 965], [624, 966], [623, 966] -Path 333: [683, 962], [682, 962], [681.277, 963], [680, 963.249], [679.301, 964], [678.192, 965], [677.105, 966], [676, 966.31], [675.3, 967], [674.25, 968], [673.173, 969], [672.127, 970], [671, 970.261], [670.283, 971], [669.201, 972], [668.141, 973], [667, 973.315], [666.33, 974], [665.259, 975], [664.169, 976], [663.055, 977], [662, 977.068], [661.083, 978], [660, 979], [659, 979.13], [658.149, 980], [657, 981], [656, 981.001], [655.002, 982], [654, 982.207], [653.252, 983], [652.16, 984], [651, 984.432], [650.45, 985], [649.441, 986], [648.443, 987], [647.481, 988], [646.498, 989], [645.432, 990], [645, 991], [644.016, 992], [643, 992.326], [642.321, 993], [641.399, 994], [640.405, 995], [639.436, 996], [638.537, 997], [638, 997.547], [638, 999] -Path 334: [397, 957], [395.591, 957], [394.509, 958], [394, 958.51], [393, 959.441], [392, 960.392], [391, 961.479], [390, 962.496], [389, 963], [388.415, 964], [387.32, 965], [386.248, 966], [385, 966.476], [384.5, 967], [384, 967.441], [383.479, 968], [382.429, 969], [381.334, 970], [380, 971], [379, 971], [378, 972], [377, 973], [376, 973.601], [375, 974.562], [374, 975.487], [373.424, 976], [372, 976.619], [371, 977.6], [370, 978.587], [369, 979.546], [368, 980.479], [367.456, 981], [366.406, 982], [365.377, 983], [364, 983.519], [363, 984.478], [362.479, 985], [361.441, 986], [360.423, 987], [359.473, 988], [358.559, 989], [358, 989.576], [357, 990] -Path 335: [316, 964], [315, 964], [314, 964], [313.583, 965], [313, 965] -Path 336: [205, 965], [204, 965], [203.417, 966], [202.138, 967], [201, 968], [200, 969], [199, 970], [198, 970], [197, 970.404], [196.41, 971], [195, 971.505], [194, 973], [193.303, 974], [193, 975], [193, 976] -Path 337: [272, 966], [272.712, 967], [273.396, 968], [274, 968.496], [274, 969], [274, 970] -Path 338: [51, 965], [51.4704, 966], [52, 967], [52, 968], [52, 969], [52, 970], [52.4132, 971], [53, 971.429], [53.5542, 972], [55, 972], [56, 972.519] -Path 339: [288, 966], [288, 966.596], [289, 967], [289.662, 968], [290.511, 969], [291.36, 970], [292, 970.299], [292.319, 971], [293, 971.445], [293, 972], [293.56, 973], [294.632, 974], [296, 974.543], [297, 975.556], [298, 976.537], [298.629, 978], [299.651, 979], [300.633, 980], [301, 981] -Path 340: [887, 967], [887, 968], [888, 968.436], [888.455, 969], [889, 969] -Path 341: [318, 970], [318.383, 971], [319, 971.546], [320, 972.54], [321, 973], [322, 973], [323, 973.268], [323.354, 974], [324, 974.249], [324, 975] -Path 342: [902, 968], [902.476, 969], [903.431, 970], [904, 971], [905, 971.594], [906, 972.564], [907, 973.531], [908, 974.487], [908.494, 975], [909, 975.476], [909.538, 976], [910.553, 977], [911.563, 978], [912.576, 979], [913.574, 980], [914.579, 981], [915.601, 982], [916.582, 983], [917.551, 984], [918.53, 985], [920, 985.871], [921, 987], [921, 988], [921.055, 989], [922, 990] -Path 343: [865, 969], [865.416, 970], [866.467, 971], [867.48, 972], [868, 973], [868, 973.505], [869, 974] -Path 344: [587, 972], [586.205, 972], [586, 973.037], [585, 974], [584, 975], [583, 975], [582.115, 976], [581, 976.366], [581, 977], [580.464, 978], [579.507, 979], [579, 979.51], [578, 980] -Path 345: [805, 970], [804, 970.457], [803.355, 971], [803, 972.317], [802, 973.296], [801.335, 974], [801, 975], [800, 976], [799, 976], [798, 976], [797.248, 977], [796.233, 978], [795.224, 979], [794, 979.328], [794, 980], [793.109, 981], [792, 981.221], [792, 982], [791, 983], [790, 983], [789, 984], [788, 984], [787, 985], [786.219, 986], [785.189, 987], [784.184, 988], [783, 988.292], [782.382, 989], [781.338, 990], [780.295, 991], [779.226, 992], [778.209, 993], [777, 994], [776, 995] -Path 346: [165, 977], [164, 977], [163.386, 978], [162.426, 979], [161.495, 980], [160.583, 981], [160, 981.608], [159, 982.587], [158, 983.579], [157.344, 985], [156.009, 986], [155, 986] -Path 347: [253, 977], [254, 977.54], [255, 978.611], [256, 979.525], [257, 980], [258, 980.581], [259, 981.396], [259.223, 982], [260, 982] -Path 348: [227, 978], [227, 979], [228, 979.62], [229, 980.633], [229.551, 982], [230.44, 983], [231, 983.337], [231, 984] -Path 349: [527, 977], [526, 978], [525, 979], [524, 979], [524, 980], [524, 981], [524, 982] -Path 350: [683, 979], [682, 979], [681.023, 980], [680, 980.166], [679.22, 981], [678, 982], [677, 982.199], [676.217, 983], [675, 983.397], [674.405, 984], [673.341, 985], [672.219, 986], [671, 986.267], [670.297, 987], [669.203, 988], [668, 988.352], [667.384, 989], [666.391, 990], [666, 991] -Path 351: [243, 976], [242, 976.064], [241, 977], [240, 977.474], [239, 978.415], [237.588, 979], [237, 980], [236, 980.54], [235, 981.478], [234.471, 982], [233.436, 983] -Path 352: [285, 981], [286, 981.432], [286.311, 982], [287, 982] -Path 353: [308, 981], [307, 981], [306, 982], [305, 982], [304, 983], [303, 983.513], [303, 985], [302.672, 986] -Path 354: [312, 980.428], [313, 981], [313.644, 982], [314.563, 983], [315.518, 984], [316.444, 985], [317, 985.563], [317.594, 987], [318.27, 988], [319, 988] -Path 355: [635, 979], [634, 979], [633, 980], [632, 980.143], [631, 981], [630, 981], [629.433, 982], [629, 983], [629, 984], [628.607, 985], [628, 985.185], [628, 986] -Path 356: [868, 981], [867, 982], [866, 982.366], [866, 983], [865, 984], [864, 985], [863, 985.154], [862.184, 986], [861, 986.346], [860.341, 987], [859, 987.56], [858, 988.48], [858, 989], [857.186, 990], [856, 990], [855, 990.617], [854, 991.499], [854, 992], [853.317, 993], [852, 993.32], [852, 994] -Path 357: [141, 982], [141, 983], [142, 983.531], [143, 984], [144, 984] -Path 358: [619, 981], [619, 981.627], [620, 982], [620.562, 982], [621.479, 983], [622, 984], [622.47, 985], [623, 985.464], [623.381, 986], [624, 986], [625, 987] -Path 359: [894, 968], [894, 968.635], [895.43, 969], [896.384, 970], [897, 971.359], [898, 972.479], [899, 973.474], [899.525, 974], [900.465, 975], [901.429, 976], [902, 977.423], [903, 978.476], [904, 979.431], [905, 980.392], [906, 981.401], [907.421, 982], [908.46, 983], [909, 984], [910, 984.421], [910.481, 985], [911, 985.39], [911.519, 986], [912.583, 987], [913.662, 988], [915, 988.619], [916, 989.565], [917, 990.545], [918, 991.609], [919, 992.7], [920, 993.549], [921, 994.482], [921.562, 995], [922.499, 996], [923, 996.383], [923.24, 997], [924, 997] -Path 360: [292, 985], [293, 985], [294, 985.479], [294, 986] -Path 361: [136, 986], [135, 986], [134.676, 987], [134, 987.378], [134, 988] -Path 362: [523, 986], [522, 986], [521, 987], [520, 987.159], [519.202, 988], [518, 988.342], [517.343, 989], [516.327, 990], [515.326, 991], [514.313, 992], [513.238, 993], [512, 993.36], [511.36, 994], [510.292, 995], [509.207, 996], [508, 996.369], [507.38, 997], [506.335, 998], [505.374, 999] -Path 363: [162, 987], [163, 987], [163.56, 988], [164.476, 989], [165, 989.585], [165.496, 991], [166, 991.401], [166.426, 992], [167, 992.358], [167, 993], [167.233, 994], [168, 994.778], [168, 996] -Path 364: [380, 987], [379, 987], [378, 987], [377.598, 988], [377, 988.526], [376, 989] -Path 365: [144, 987], [144, 988], [144, 989], [144, 990], [144.44, 991], [145, 991.301], [145, 992] -Path 366: [434, 988], [433, 988], [432.449, 989], [431.37, 990], [431, 991], [430, 992], [429, 992.006], [428.005, 993], [427, 993.367], [426.379, 994], [425.312, 995], [424.317, 996], [423.858, 997], [423, 997] -Path 367: [39, 989], [39.3222, 990], [40, 990], [41, 991], [42, 991.449], [42.5407, 992], [43.3585, 993], [44, 993.541], [45, 994], [46, 994.595], [47, 995] -Path 368: [273, 988], [273, 989], [273, 990], [273.516, 991], [274.272, 992], [275, 992.418], [275.225, 993], [276, 993.452], [276.241, 994], [277, 994.562], [277.329, 996], [278, 996] -Path 369: [874, 983], [874, 983.589], [875.433, 984], [876.395, 985], [877.474, 986], [878.458, 987], [879.485, 988], [880, 989], [881, 989.537], [882, 990.556], [883, 991.596], [883.592, 993], [884.603, 994], [885.602, 995], [886.592, 996], [887.55, 997], [888.427, 998], [889, 998.419], [889, 999] -Path 370: [121, 990], [120, 990], [119, 991], [118, 991], [117, 992], [116, 992] -Path 371: [615, 981], [614.055, 981], [614, 982.134], [612.614, 983], [611.645, 984], [610.666, 985], [610, 986], [609.6, 987], [609, 988], [609, 989], [609, 990] -Path 372: [324, 991], [323, 991], [322, 991], [321.306, 992], [320.349, 993], [319.499, 994], [319, 995], [319, 996], [319, 997], [319.581, 998], [320, 999] -Path 373: [774, 991], [774.328, 992], [775, 992.158], [775, 993] -Path 374: [267, 992], [266.228, 992], [266, 992.692], [265, 993], [265, 994], [265, 995] -Path 375: [353, 994], [352, 994], [351.338, 995], [350, 995.557], [349, 996.471], [348.604, 997], [348, 997.434], [347.709, 998], [347, 998.456], [347, 999] -Path 376: [447, 993], [447, 993.508], [448, 994], [448.585, 995], [449.631, 996], [451, 996.572], [452, 997.449], [452.484, 998], [453, 998.382], [453, 999] -Path 377: [360.445, 993], [361, 994], [361, 995], [362, 995.559], [363, 996.575], [363.493, 998], [364, 998.399], [364, 999] -Path 378: [849, 995], [848, 995], [847, 996], [846, 997], [846, 998], [846, 999] -Path 379: [36, 996], [37, 996.347], [37.5507, 997], [39, 997] -Path 380: [382, 995], [382, 995.842], [383, 996], [384, 996], [384.621, 997], [385.566, 998], [386, 999] -Path 381: [852, 994], [853, 995], [853, 996], [853.657, 997], [854.515, 998], [855, 999] -Path 382: [195, 991], [194.435, 991], [194, 992.435], [193, 993.387], [192, 994.494], [191.458, 995], [191, 996.312], [190, 997], [189.395, 998], [189, 999] -Path 383: [592, 995], [592, 996], [592, 996.547], [593, 997], [593.475, 998], [594, 998.378], [594, 999] -Path 384: [927, 994], [928, 994], [929, 995], [929, 995.511], [930, 996.432], [931, 997], [932, 997.492], [932.455, 998], [933, 998.466], [933, 999] diff --git a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.dbf b/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.dbf deleted file mode 100644 index dad747fadfc34595b27fc718e1f0a0833bd0fb0f..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4910095bcc63510b5d14ced32ec054d329fb1f106676869563424bccd6d998bc -size 12597 diff --git a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shp b/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shp deleted file mode 100644 index db9524f4ac8c78193c1af6e2767f3ae5901dfba6..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a1e3ab5de6caec9d1e335eafe346c673f87ec06c02f0fb3a5ccafeb3919961c8 -size 12084 diff --git a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shx b/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shx deleted file mode 100644 index 33a059571d78911f9ed73052eb7c74ad7222ad7a..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0ffb45fdd34b1bb0bbb8817b1de538b4609e806972cf5287d9ec3b7828c86cc2 -size 628 diff --git a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.dbf b/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.dbf deleted file mode 100644 index fdefcdf3425ca5e4912797aacabf50f7a36609cb..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1acfd03f31de99605e10020ae2646b81143bd7f816559bc7d962ef2b49216af7 -size 10055 diff --git a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shp b/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shp deleted file mode 100644 index b3adb3d3bb2ccb2ae5bfefd4abb19bd64970103a..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ff01566163097422211e31b35823cc6ede15efa3965bcc72f2e89f8b95fc2b30 -size 12860 diff --git a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shx b/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shx deleted file mode 100644 index 8eb95e8e60e8cf4597630573a9dcfa4c795487fc..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b033aa81a9212511ecb13bf36bb9b92d26a2272e8fd2e7106fd938f623084664 -size 668 diff --git a/Data/Baseline/OTB/Files/obTvHooverMatrixFilter.txt b/Data/Baseline/OTB/Files/obTvHooverMatrixFilter.txt index 94d2133f6b9804fd92b3caedf977dda8f0e3fb3c..f26c0213ffe4decceafcc5ddef12cfb7804081a4 100644 --- a/Data/Baseline/OTB/Files/obTvHooverMatrixFilter.txt +++ b/Data/Baseline/OTB/Files/obTvHooverMatrixFilter.txt @@ -1,4 +1,3 @@ -5826 0 0 0 0 -0 1221 0 0 0 -0 0 1560 0 76 -291 0 0 1476 72 +66 0 0 +0 66 0 +0 0 77 diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.dbf b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.dbf deleted file mode 100644 index 0f08f3fb2beb363362f44b8b9dd9ff44202c288d..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7b569ccdf07c81702a2d9b9d2de6fb196f3ac8d3a28cac40b77b520b786cba61 -size 77 diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shp b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shp deleted file mode 100644 index 9b56f40fa4796185ee13dad6841807407a6d48d3..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2ea4e04a7d38ecc8754828204aab67cdf51fd69054da7c1ed8c3257ce1764ece -size 284 diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shx b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shx deleted file mode 100644 index 2a1f95e40a1cf6322eacb52ab4c796a7ffba7b35..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e4c1b4db2157ab84d77eaf714555cca7915b573fbe5e691e6ab2ce4f7e2defc -size 108 diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.dbf b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.dbf index 0f08f3fb2beb363362f44b8b9dd9ff44202c288d..631e7c82cb3ff2f983790645329a5d14cfe82596 100644 --- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.dbf +++ b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.dbf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b569ccdf07c81702a2d9b9d2de6fb196f3ac8d3a28cac40b77b520b786cba61 -size 77 +oid sha256:2dcf4153202960ac9e3d92293108c2ffa5ebb4c258695f366e3e49cf078f2808 +size 102 diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shp b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shp index c6b34a49304ff32b6d7bb2314522a7fece34d6b5..73c5eea2ce3b904768567f18fa0b0ce0672eafcb 100644 --- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shp +++ b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shp @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42c325b877fb5db5b15ee30e5c691a4500370bda6bf851ec33cb868f0b8f73fe -size 364 +oid sha256:a5b0b418ddcc3967ac3dc0c263799abcc2173f6755c984583bdae05e2f94e1c0 +size 828 diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shx b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shx index ccd3962d47d6794f8b06ea86131e5853270d7df6..ed61a0c43a797502a4a2638de7b027a34f646c09 100644 --- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shx +++ b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7eb939ef1b4d627696c5ddb141d2364794e5fd7f85f56a31bacc97d161b4f692 -size 108 +oid sha256:5f275e86fab9c7dbd9aade5a425fb227d909b1b3ecc81b139f7ce01ffb5c2f91 +size 124 diff --git a/Data/Baseline/OTB/Files/srRCC8CalculatorOutput.txt b/Data/Baseline/OTB/Files/srRCC8CalculatorOutput.txt deleted file mode 100644 index 443a0f86e801040b656531a5d6964a27e7964204..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/srRCC8CalculatorOutput.txt +++ /dev/null @@ -1,5 +0,0 @@ -Test results from otbImageToImageRCC8calculator test. -7 1 0 0 -1 7 4 6 -0 3 7 2 -0 5 2 7 diff --git a/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput.dot b/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput.dot deleted file mode 100644 index 79ae6d70ff30eba499eaf025da67cc89073e07f1..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput.dot +++ /dev/null @@ -1,19 +0,0 @@ -digraph G { -0 [NumberOfPointsInPath="112",P0x="55.5",P0y="123.5",P100x="31.5",P100y="141",P101x="31.5",P101y="139.5",P102x="41.5",P102y="129.5",P103x="43",P103y="129.5",P104x="44.5",P104y="127.5",P105x="46",P105y="127.5",P106x="46.5",P106y="126.5",P107x="49",P107y="126.5",P108x="49.5",P108y="125.5",P109x="51",P109y="125.5",P10x="80",P10y="129.5",P110x="51.5",P110y="124.5",P111x="55",P111y="124.5",P11x="81.5",P11y="129.5",P12x="91.5",P12y="139.5",P13x="91.5",P13y="141",P14x="93.5",P14y="142.5",P15x="93.5",P15y="144",P16x="94.5",P16y="144.5",P17x="94.5",P17y="146",P18x="95.5",P18y="146.5",P19x="95.5",P19y="148",P1x="67.5",P1y="123.5",P20x="96.5",P20y="148.5",P21x="96.5",P21y="151",P22x="97.5",P22y="151.5",P23x="97.5",P23y="154",P24x="98.5",P24y="154.5",P25x="98.5",P25y="157",P26x="99.5",P26y="157.5",P27x="99.5",P27y="163",P28x="100.5",P28y="163.5",P29x="100.5",P29y="178.5",P2x="68",P2y="124.5",P30x="99.5",P30y="179",P31x="99.5",P31y="184.5",P32x="98.5",P32y="185",P33x="98.5",P33y="187.5",P34x="97.5",P34y="188",P35x="97.5",P35y="190.5",P36x="96.5",P36y="191",P37x="96.5",P37y="193.5",P38x="95.5",P38y="194",P39x="95.5",P39y="195.5",P3x="71.5",P3y="124.5",P40x="94.5",P40y="196",P41x="94.5",P41y="197.5",P42x="93.5",P42y="198",P43x="93.5",P43y="199.5",P44x="91.5",P44y="201",P45x="91.5",P45y="202.5",P46x="81.5",P46y="212.5",P47x="80",P47y="212.5",P48x="78.5",P48y="214.5",P49x="77",P49y="214.5",P4x="72",P4y="125.5",P50x="76.5",P50y="215.5",P51x="74",P51y="215.5",P52x="73.5",P52y="216.5",P53x="72",P53y="216.5",P54x="71.5",P54y="217.5",P55x="68",P55y="217.5",P56x="67.5",P56y="218.5",P57x="55.5",P57y="218.5",P58x="55",P58y="217.5",P59x="51.5",P59y="217.5",P5x="73.5",P5y="125.5",P60x="51",P60y="216.5",P61x="49.5",P61y="216.5",P62x="49",P62y="215.5",P63x="46.5",P63y="215.5",P64x="46",P64y="214.5",P65x="44.5",P65y="214.5",P66x="43",P66y="212.5",P67x="41.5",P67y="212.5",P68x="31.5",P68y="202.5",P69x="31.5",P69y="201",P6x="74",P6y="126.5",P70x="29.5",P70y="199.5",P71x="29.5",P71y="198",P72x="28.5",P72y="197.5",P73x="28.5",P73y="196",P74x="27.5",P74y="195.5",P75x="27.5",P75y="194",P76x="26.5",P76y="193.5",P77x="26.5",P77y="191",P78x="25.5",P78y="190.5",P79x="25.5",P79y="188",P7x="76.5",P7y="126.5",P80x="24.5",P80y="187.5",P81x="24.5",P81y="185",P82x="23.5",P82y="184.5",P83x="23.5",P83y="179",P84x="22.5",P84y="178.5",P85x="22.5",P85y="163.5",P86x="23.5",P86y="163",P87x="23.5",P87y="157.5",P88x="24.5",P88y="157",P89x="24.5",P89y="154.5",P8x="77",P8y="127.5",P90x="25.5",P90y="154",P91x="25.5",P91y="151.5",P92x="26.5",P92y="151",P93x="26.5",P93y="148.5",P94x="27.5",P94y="148",P95x="27.5",P95y="146.5",P96x="28.5",P96y="146",P97x="28.5",P97y="144.5",P98x="29.5",P98y="144",P99x="29.5",P99y="142.5",P9x="78.5",P9y="127.5",SegmentationLevel="0",SegmentationType="0"]; -1 [NumberOfPointsInPath="5",P0x="187.5",P0y="31.5",P1x="221.5",P1y="31.5",P2x="221.5",P2y="202.5",P3x="187.5",P3y="202.5",P4x="187.5",P4y="33",SegmentationLevel="0",SegmentationType="0"]; -2 [NumberOfPointsInPath="120",P0x="134.5",P0y="38.5",P100x="122.5",P100y="69",P101x="122.5",P101y="64.5",P102x="123.5",P102y="64",P103x="123.5",P103y="60.5",P104x="124.5",P104y="60",P105x="124.5",P105y="56.5",P106x="125.5",P106y="56",P107x="125.5",P107y="52.5",P108x="126.5",P108y="52",P109x="126.5",P109y="49.5",P10x="144.5",P10y="47.5",P110x="127.5",P110y="49",P111x="127.5",P111y="47.5",P112x="128.5",P112y="47",P113x="128.5",P113y="45.5",P114x="129.5",P114y="45",P115x="129.5",P115y="43.5",P116x="130.5",P116y="43",P117x="130.5",P117y="41.5",P118x="132.5",P118y="39.5",P119x="134",P119y="39.5",P11x="144.5",P11y="49",P12x="145.5",P12y="49.5",P13x="145.5",P13y="52",P14x="146.5",P14y="52.5",P15x="146.5",P15y="56",P16x="147.5",P16y="56.5",P17x="147.5",P17y="60",P18x="148.5",P18y="60.5",P19x="148.5",P19y="64",P1x="137.5",P1y="38.5",P20x="149.5",P20y="64.5",P21x="149.5",P21y="69",P22x="150.5",P22y="69.5",P23x="150.5",P23y="75",P24x="151.5",P24y="75.5",P25x="151.5",P25y="83",P26x="152.5",P26y="83.5",P27x="152.5",P27y="92",P28x="153.5",P28y="92.5",P29x="153.5",P29y="107",P2x="138",P2y="39.5",P30x="154.5",P30y="107.5",P31x="154.5",P31y="149.5",P32x="153.5",P32y="150",P33x="153.5",P33y="164.5",P34x="152.5",P34y="165",P35x="152.5",P35y="173.5",P36x="151.5",P36y="174",P37x="151.5",P37y="181.5",P38x="150.5",P38y="182",P39x="150.5",P39y="187.5",P3x="139.5",P3y="39.5",P40x="149.5",P40y="188",P41x="149.5",P41y="192.5",P42x="148.5",P42y="193",P43x="148.5",P43y="196.5",P44x="147.5",P44y="197",P45x="147.5",P45y="200.5",P46x="146.5",P46y="201",P47x="146.5",P47y="204.5",P48x="145.5",P48y="205",P49x="145.5",P49y="207.5",P4x="141.5",P4y="41.5",P50x="144.5",P50y="208",P51x="144.5",P51y="209.5",P52x="143.5",P52y="210",P53x="143.5",P53y="211.5",P54x="142.5",P54y="212",P55x="142.5",P55y="213.5",P56x="141.5",P56y="214",P57x="141.5",P57y="215.5",P58x="139.5",P58y="217.5",P59x="138",P59y="217.5",P5x="141.5",P5y="43",P60x="137.5",P60y="218.5",P61x="134.5",P61y="218.5",P62x="134",P62y="217.5",P63x="132.5",P63y="217.5",P64x="130.5",P64y="215.5",P65x="130.5",P65y="214",P66x="129.5",P66y="213.5",P67x="129.5",P67y="212",P68x="128.5",P68y="211.5",P69x="128.5",P69y="210",P6x="142.5",P6y="43.5",P70x="127.5",P70y="209.5",P71x="127.5",P71y="208",P72x="126.5",P72y="207.5",P73x="126.5",P73y="205",P74x="125.5",P74y="204.5",P75x="125.5",P75y="201",P76x="124.5",P76y="200.5",P77x="124.5",P77y="197",P78x="123.5",P78y="196.5",P79x="123.5",P79y="193",P7x="142.5",P7y="45",P80x="122.5",P80y="192.5",P81x="122.5",P81y="188",P82x="121.5",P82y="187.5",P83x="121.5",P83y="182",P84x="120.5",P84y="181.5",P85x="120.5",P85y="174",P86x="119.5",P86y="173.5",P87x="119.5",P87y="165",P88x="118.5",P88y="164.5",P89x="118.5",P89y="150",P8x="143.5",P8y="45.5",P90x="117.5",P90y="149.5",P91x="117.5",P91y="107.5",P92x="118.5",P92y="107",P93x="118.5",P93y="92.5",P94x="119.5",P94y="92",P95x="119.5",P95y="83.5",P96x="120.5",P96y="83",P97x="120.5",P97y="75.5",P98x="121.5",P98y="75",P99x="121.5",P99y="69.5",P9x="143.5",P9y="47",SegmentationLevel="0",SegmentationType="0"]; -3 [NumberOfPointsInPath="5",P0x="19.5",P0y="30.5",P1x="84.5",P1y="30.5",P2x="84.5",P2y="94.5",P3x="19.5",P3y="94.5",P4x="19.5",P4y="32",SegmentationLevel="0",SegmentationType="0"]; -4 [NumberOfPointsInPath="164",P0x="53.5",P0y="85.5",P100x="25.5",P100y="202.5",P101x="25.5",P101y="201",P102x="24.5",P102y="200.5",P103x="24.5",P103y="199",P104x="23.5",P104y="198.5",P105x="23.5",P105y="197",P106x="22.5",P106y="196.5",P107x="22.5",P107y="195",P108x="21.5",P108y="194.5",P109x="21.5",P109y="192",P10x="85",P10y="96.5",P110x="21",P110y="191.5",P111x="19.5",P111y="191.5",P112x="19.5",P112y="189",P113x="18.5",P113y="188.5",P114x="18.5",P114y="186",P115x="17.5",P115y="185.5",P116x="17.5",P116y="183",P117x="16.5",P117y="182.5",P118x="16.5",P118y="179",P119x="15.5",P119y="178.5",P11x="86.5",P11y="96.5",P120x="15.5",P120y="173",P121x="14.5",P121y="172.5",P122x="14.5",P122y="166",P123x="13.5",P123y="165.5",P124x="13.5",P124y="142.5",P125x="14.5",P125y="142",P126x="14.5",P126y="135.5",P127x="15.5",P127y="135",P128x="15.5",P128y="129.5",P129x="16.5",P129y="129",P12x="89.5",P12y="99.5",P130x="16.5",P130y="125.5",P131x="17.5",P131y="125",P132x="17.5",P132y="122.5",P133x="18.5",P133y="122",P134x="18.5",P134y="119.5",P135x="19.5",P135y="119",P136x="19.5",P136y="116.5",P137x="21",P137y="116.5",P138x="21.5",P138y="115",P139x="21.5",P139y="113.5",P13x="89.5",P13y="101",P140x="22.5",P140y="113",P141x="22.5",P141y="111.5",P142x="23.5",P142y="111",P143x="23.5",P143y="109.5",P144x="24.5",P144y="109",P145x="24.5",P145y="107.5",P146x="25.5",P146y="107",P147x="25.5",P147y="105.5",P148x="26.5",P148y="104.5",P149x="28",P149y="104.5",P14x="91.5",P14y="102.5",P150x="28.5",P150y="104",P151x="28.5",P151y="102.5",P152x="30.5",P152y="101",P153x="30.5",P153y="99.5",P154x="33.5",P154y="96.5",P155x="35",P155y="96.5",P156x="40.5",P156y="90.5",P157x="43",P157y="90.5",P158x="44.5",P158y="88.5",P159x="46",P159y="88.5",P15x="91.5",P15y="104",P160x="46.5",P160y="87.5",P161x="50",P161y="87.5",P162x="50.5",P162y="86.5",P163x="53",P163y="86.5",P16x="92",P16y="104.5",P17x="93.5",P17y="104.5",P18x="94.5",P18y="105.5",P19x="94.5",P19y="107",P1x="66.5",P1y="85.5",P20x="95.5",P20y="107.5",P21x="95.5",P21y="109",P22x="96.5",P22y="109.5",P23x="96.5",P23y="111",P24x="97.5",P24y="111.5",P25x="97.5",P25y="113",P26x="98.5",P26y="113.5",P27x="98.5",P27y="116",P28x="99",P28y="116.5",P29x="100.5",P29y="116.5",P2x="67",P2y="86.5",P30x="100.5",P30y="119",P31x="101.5",P31y="119.5",P32x="101.5",P32y="122",P33x="102.5",P33y="122.5",P34x="102.5",P34y="125",P35x="103.5",P35y="125.5",P36x="103.5",P36y="129",P37x="104.5",P37y="129.5",P38x="104.5",P38y="135",P39x="105.5",P39y="135.5",P3x="69.5",P3y="86.5",P40x="105.5",P40y="142",P41x="106.5",P41y="142.5",P42x="106.5",P42y="165.5",P43x="105.5",P43y="166",P44x="105.5",P44y="172.5",P45x="104.5",P45y="173",P46x="104.5",P46y="178.5",P47x="103.5",P47y="179",P48x="103.5",P48y="182.5",P49x="102.5",P49y="183",P4x="70",P4y="87.5",P50x="102.5",P50y="185.5",P51x="101.5",P51y="186",P52x="101.5",P52y="188.5",P53x="100.5",P53y="189",P54x="100.5",P54y="191.5",P55x="99",P55y="191.5",P56x="98.5",P56y="193",P57x="98.5",P57y="194.5",P58x="97.5",P58y="195",P59x="97.5",P59y="196.5",P5x="73.5",P5y="87.5",P60x="96.5",P60y="197",P61x="96.5",P61y="198.5",P62x="95.5",P62y="199",P63x="95.5",P63y="200.5",P64x="94.5",P64y="201",P65x="94.5",P65y="202.5",P66x="93.5",P66y="203.5",P67x="92",P67y="203.5",P68x="91.5",P68y="204",P69x="91.5",P69y="205.5",P6x="74",P6y="88.5",P70x="89.5",P70y="207",P71x="89.5",P71y="208.5",P72x="86.5",P72y="211.5",P73x="85",P73y="211.5",P74x="79.5",P74y="217.5",P75x="77",P75y="217.5",P76x="75.5",P76y="219.5",P77x="74",P77y="219.5",P78x="73.5",P78y="220.5",P79x="70",P79y="220.5",P7x="75.5",P7y="88.5",P80x="69.5",P80y="221.5",P81x="67",P81y="221.5",P82x="66.5",P82y="222.5",P83x="53.5",P83y="222.5",P84x="53",P84y="221.5",P85x="50.5",P85y="221.5",P86x="50",P86y="220.5",P87x="46.5",P87y="220.5",P88x="46",P88y="219.5",P89x="44.5",P89y="219.5",P8x="77",P8y="90.5",P90x="43",P90y="217.5",P91x="40.5",P91y="217.5",P92x="35",P92y="211.5",P93x="33.5",P93y="211.5",P94x="30.5",P94y="208.5",P95x="30.5",P95y="207",P96x="28.5",P96y="205.5",P97x="28.5",P97y="204",P98x="28",P98y="203.5",P99x="26.5",P99y="203.5",P9x="79.5",P9y="90.5",SegmentationLevel="0",SegmentationType="1"]; -5 [NumberOfPointsInPath="5",P0x="154.5",P0y="106.5",P1x="220.5",P1y="106.5",P2x="220.5",P2y="143.5",P3x="154.5",P3y="143.5",P4x="154.5",P4y="108",SegmentationLevel="0",SegmentationType="1"]; -6 [NumberOfPointsInPath="46",P0x="138",P0y="55.5",P10x="143.5",P10y="102",P11x="144.5",P11y="102.5",P12x="144.5",P12y="160.5",P13x="143.5",P13y="161",P14x="143.5",P14y="180.5",P15x="142.5",P15y="181",P16x="142.5",P16y="191.5",P17x="141.5",P17y="192",P18x="141.5",P18y="198.5",P19x="140.5",P19y="199",P1x="139.5",P1y="56.5",P20x="140.5",P20y="203.5",P21x="139.5",P21y="204",P22x="139.5",P22y="206.5",P23x="138",P23y="207.5",P24x="136.5",P24y="206.5",P25x="136.5",P25y="204",P26x="135.5",P26y="203.5",P27x="135.5",P27y="199",P28x="134.5",P28y="198.5",P29x="134.5",P29y="192",P2x="139.5",P2y="59",P30x="133.5",P30y="191.5",P31x="133.5",P31y="181",P32x="132.5",P32y="180.5",P33x="132.5",P33y="161",P34x="131.5",P34y="160.5",P35x="131.5",P35y="102.5",P36x="132.5",P36y="102",P37x="132.5",P37y="82.5",P38x="133.5",P38y="82",P39x="133.5",P39y="71.5",P3x="140.5",P3y="59.5",P40x="134.5",P40y="71",P41x="134.5",P41y="64.5",P42x="135.5",P42y="64",P43x="135.5",P43y="59.5",P44x="136.5",P44y="59",P45x="136.5",P45y="56.5",P4x="140.5",P4y="64",P5x="141.5",P5y="64.5",P6x="141.5",P6y="71",P7x="142.5",P7y="71.5",P8x="142.5",P8y="82",P9x="143.5",P9y="82.5",SegmentationLevel="0",SegmentationType="1"]; -7 [NumberOfPointsInPath="5",P0x="19.5",P0y="31.5",P1x="55.5",P1y="31.5",P2x="55.5",P2y="72.5",P3x="19.5",P3y="72.5",P4x="19.5",P4y="33",SegmentationLevel="0",SegmentationType="1"]; -8 [NumberOfPointsInPath="5",P0x="75.5",P0y="41.5",P1x="138.5",P1y="41.5",P2x="138.5",P2y="49.5",P3x="75.5",P3y="49.5",P4x="75.5",P4y="43",SegmentationLevel="0",SegmentationType="1"]; -0 -> 4 [Value="5"]; -1 -> 5 [Value="2"]; -2 -> 5 [Value="2"]; -2 -> 6 [Value="6"]; -2 -> 8 [Value="2"]; -3 -> 4 [Value="2"]; -3 -> 7 [Value="4"]; -3 -> 8 [Value="2"]; -} diff --git a/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput2.dot b/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput2.dot deleted file mode 100644 index 468c69f20b4ca03e3aefe782287282e9d48fddb6..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput2.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph G { -0 [NumberOfPointsInPath="5",P0x="82.5",P0y="76.5",P1x="175.5",P1y="76.5",P2x="175.5",P2y="168.5",P3x="82.5",P3y="168.5",P4x="82.5",P4y="78",SegmentationLevel="0",SegmentationType="0"]; -1 [NumberOfPointsInPath="5",P0x="82.5",P0y="102.5",P1x="175.5",P1y="102.5",P2x="175.5",P2y="149.5",P3x="82.5",P3y="149.5",P4x="82.5",P4y="104",SegmentationLevel="0",SegmentationType="1"]; -2 [NumberOfPointsInPath="5",P0x="49.5",P0y="41.5",P1x="117.5",P1y="41.5",P2x="117.5",P2y="119.5",P3x="49.5",P3y="119.5",P4x="49.5",P4y="43",SegmentationLevel="1",SegmentationType="0"]; -3 [NumberOfPointsInPath="5",P0x="27.5",P0y="141.5",P1x="59.5",P1y="141.5",P2x="59.5",P2y="214.5",P3x="27.5",P3y="214.5",P4x="27.5",P4y="143",SegmentationLevel="1",SegmentationType="0"]; -4 [NumberOfPointsInPath="5",P0x="138.5",P0y="13.5",P1x="167.5",P1y="13.5",P2x="167.5",P2y="76.5",P3x="138.5",P3y="76.5",P4x="138.5",P4y="15",SegmentationLevel="1",SegmentationType="0"]; -0 -> 1 [Value="4"]; -0 -> 2 [Value="2"]; -0 -> 4 [Value="1"]; -1 -> 2 [Value="2"]; -} diff --git a/Data/Baseline/OTB/Files/srRCC8GraphWriterOutput1.dot b/Data/Baseline/OTB/Files/srRCC8GraphWriterOutput1.dot deleted file mode 100644 index bc065f3b862aa01c09a55a3a9e1d735e17855cbb..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/srRCC8GraphWriterOutput1.dot +++ /dev/null @@ -1,12 +0,0 @@ -digraph G { -0 [NumberOfPointsInPath="3",P0x="0",P0y="0",P1x="10",P1y="10",P2x="-5",P2y="2",SegmentationLevel="0",SegmentationType="0"]; -1 [NumberOfPointsInPath="3",P0x="0",P0y="0",P1x="10",P1y="10",P2x="-5",P2y="2",SegmentationLevel="1",SegmentationType="1"]; -2 [NumberOfPointsInPath="3",P0x="0",P0y="0",P1x="10",P1y="10",P2x="-5",P2y="2",SegmentationLevel="2",SegmentationType="0"]; -3 [NumberOfPointsInPath="3",P0x="0",P0y="0",P1x="10",P1y="10",P2x="-5",P2y="2",SegmentationLevel="3",SegmentationType="0"]; -0 -> 1 [Value="1"]; -1 -> 2 [Value="2"]; -2 -> 3 [Value="3"]; -0 -> 2 [Value="4"]; -1 -> 3 [Value="5"]; -0 -> 3 [Value="6"]; -} diff --git a/Data/Baseline/OTB/Files/srRCC8PolygonToPolygonCalculatorOutput.txt b/Data/Baseline/OTB/Files/srRCC8PolygonToPolygonCalculatorOutput.txt deleted file mode 100644 index 0e6c0a5a795100d17da92b4cf77dda3573b80968..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/srRCC8PolygonToPolygonCalculatorOutput.txt +++ /dev/null @@ -1,5 +0,0 @@ -Test results from otbPolygonToPolygonRCC8calculator test. -7 1 0 0 -1 7 4 6 -0 3 7 2 -0 5 2 7 diff --git a/Data/Baseline/OTB/Files/srTvPolygonListToRCC8GraphFilterOutput.dot b/Data/Baseline/OTB/Files/srTvPolygonListToRCC8GraphFilterOutput.dot deleted file mode 100644 index b0ea91f66e5ded3e702027f8870e10d13d8a6224..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Files/srTvPolygonListToRCC8GraphFilterOutput.dot +++ /dev/null @@ -1,12 +0,0 @@ -digraph G { -0 [NumberOfPointsInPath="4",P0x="0",P0y="0",P1x="2",P1y="0",P2x="2",P2y="6",P3x="0",P3y="6",SegmentationLevel="0",SegmentationType="1"]; -1 [NumberOfPointsInPath="4",P0x="1",P0y="1",P1x="4",P1y="1",P2x="4",P2y="5",P3x="1",P3y="5",SegmentationLevel="0",SegmentationType="1"]; -2 [NumberOfPointsInPath="4",P0x="3",P0y="1",P1x="4",P1y="1",P2x="4",P2y="2",P3x="3",P3y="2",SegmentationLevel="1",SegmentationType="1"]; -3 [NumberOfPointsInPath="4",P0x="5",P0y="1",P1x="8",P1y="1",P2x="8",P2y="5",P3x="5",P3y="5",SegmentationLevel="1",SegmentationType="1"]; -4 [NumberOfPointsInPath="4",P0x="6",P0y="2",P1x="7",P1y="2",P2x="7",P2y="3",P3x="6",P3y="3",SegmentationLevel="2",SegmentationType="1"]; -5 [NumberOfPointsInPath="4",P0x="8",P0y="1",P1x="9",P1y="1",P2x="9",P2y="5",P3x="8",P3y="5",SegmentationLevel="2",SegmentationType="1"]; -0 -> 1 [Value="2"]; -2 -> 1 [Value="3"]; -3 -> 5 [Value="2"]; -4 -> 3 [Value="5"]; -} diff --git a/Data/Baseline/OTB/Images/dmTvBSplinesInterpolateDeformationField.tif b/Data/Baseline/OTB/Images/dmTvBSplinesInterpolateDeformationField.tif deleted file mode 100644 index 69c0b928afa3361c7e154c1a820e3715580af9e6..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/dmTvBSplinesInterpolateDeformationField.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9447965707e53fa16f1eaa4d8e198c79c67f58992fb0f3417e45e09197629b93 -size 193942 diff --git a/Data/Baseline/OTB/Images/dmTvNNearestPointsLinearInterpolateDeformationField.tif b/Data/Baseline/OTB/Images/dmTvNNearestPointsLinearInterpolateDeformationField.tif deleted file mode 100644 index a823334750cd9f6c86d683f100662864eaee9994..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/dmTvNNearestPointsLinearInterpolateDeformationField.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7e3e1fb0f6625e1a63a93cf472797f5793af362e6ac5a455d202c607725ecfec -size 198042 diff --git a/Data/Baseline/OTB/Images/dmTvNNearestTransformsLinearInterpolateDeformationField.tif b/Data/Baseline/OTB/Images/dmTvNNearestTransformsLinearInterpolateDeformationField.tif deleted file mode 100644 index b59a569283720ffabb00256a5eebf9111a0a9993..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/dmTvNNearestTransformsLinearInterpolateDeformationField.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e86de8b62d0d9b3bf0098efca75a7cbb6dd30f61bd6bb331bbe21189b54ab35 -size 199687 diff --git a/Data/Baseline/OTB/Images/dmTvNearestPointDeformationField.tif b/Data/Baseline/OTB/Images/dmTvNearestPointDeformationField.tif deleted file mode 100644 index d098656a6f6e6605f71c8b21aa182c8d8f1b194a..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/dmTvNearestPointDeformationField.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:35adef700d011fb7793a3751c5565eea206a03b7c73265cf693763cf3a02c198 -size 14780 diff --git a/Data/Baseline/OTB/Images/dmTvNearestTransformDeformationField.tif b/Data/Baseline/OTB/Images/dmTvNearestTransformDeformationField.tif deleted file mode 100644 index 7cb2622d35b0188d4c2c458bf20005c41088871b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/dmTvNearestTransformDeformationField.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f7f8af0c00a846d0027df0688fc82c10dd6832b08d16aa86068d66d11f4a2485 -size 192056 diff --git a/Data/Baseline/OTB/Images/feDrawPathAlignDeuxTraits.png b/Data/Baseline/OTB/Images/feDrawPathAlignDeuxTraits.png deleted file mode 100644 index fa2ce49bc9aee59ff1db19390cfaa907b9e5f51d..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/feDrawPathAlignDeuxTraits.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2c57a5038aa07298c3b42be3d1d47dd84136a4d7f210a08dbe5b223b266814f0 -size 568 diff --git a/Data/Baseline/OTB/Images/feImageToEdgePathFilterOutput.tif b/Data/Baseline/OTB/Images/feImageToEdgePathFilterOutput.tif new file mode 100644 index 0000000000000000000000000000000000000000..fb2de39373f31b7c8967de82fd695a972d0c84dc --- /dev/null +++ b/Data/Baseline/OTB/Images/feImageToEdgePathFilterOutput.tif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c006246fea917e0870d9fcbac03c8ee7f80e65d3faffd1e76b731192dbef5978 +size 546 diff --git a/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductDirectionOutput.tif b/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductDirectionOutput.tif deleted file mode 100644 index a5401aba3a1c7561fd18356e9c8d813acc6606ff..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductDirectionOutput.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b67d658cebed1a8dcfb9fa45be201a00cdfe874321dc4c63cbcca540ec6c6f3 -size 741552 diff --git a/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductModulusOutput.tif b/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductModulusOutput.tif deleted file mode 100644 index f3d6fec2decdd35ffc57ee088b85dd2a209c5c1a..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductModulusOutput.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca321fd53b489787e40bc9bf9dd49140d95d43fff73ae3501b25ceb75e529a23 -size 3023067 diff --git a/Data/Baseline/OTB/Images/feTvNonMaxRemovalByDirectionOutput.tif b/Data/Baseline/OTB/Images/feTvNonMaxRemovalByDirectionOutput.tif deleted file mode 100644 index a0a6e6047bac5bfada96ec5afc74e21dacb99468..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/feTvNonMaxRemovalByDirectionOutput.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:57aae675e46c74467b7d34cc2fe660e4944e096db81115663960627e7e775ed4 -size 1018004 diff --git a/Data/Baseline/OTB/Images/feTvOutputRoadDetection.tif b/Data/Baseline/OTB/Images/feTvOutputRoadDetection.tif deleted file mode 100644 index 7fe52fc0aeb9a86db404f1cefae1145da8292072..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/feTvOutputRoadDetection.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d0495a68b9e656915b10d5ff2c41c9f15fc46f1069a1e9dc429a153139b2607d -size 196662 diff --git a/Data/Baseline/OTB/Images/feTvRemoveIsolatedByDirectionOutput.tif b/Data/Baseline/OTB/Images/feTvRemoveIsolatedByDirectionOutput.tif deleted file mode 100644 index a7d309ac66e53468919f03954933fa9f93a23301..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/feTvRemoveIsolatedByDirectionOutput.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e56e9cadb996fea0621e258155d2414f12899652c33dbc04a69c884923981f72 -size 2166447 diff --git a/Data/Baseline/OTB/Images/feTvRemoveWrongDirectionOutput.tif b/Data/Baseline/OTB/Images/feTvRemoveWrongDirectionOutput.tif deleted file mode 100644 index 15afc03958f1d221c020052230ffe5cea2e202a3..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/feTvRemoveWrongDirectionOutput.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6cda584546d11c80f5c32dbe32f843d178a182c47062de7d7e3dcb6931bf5304 -size 1360300 diff --git a/Data/Baseline/OTB/Images/feTvVectorizationPathListOutput.png b/Data/Baseline/OTB/Images/feTvVectorizationPathListOutput.png deleted file mode 100644 index 542e264b833a1f712018a454168f529f40eae386..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/feTvVectorizationPathListOutput.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5c1fabb13b4184517fc6929de7f5ec9f41a7c59d6bd9f07208587dd19cb9855b -size 23840 diff --git a/Data/Baseline/OTB/Images/msPyrAn_mire_log_an_2.png b/Data/Baseline/OTB/Images/msPyrAn_mire_log_an_2.png deleted file mode 100644 index f42b4baef16bcda041abf7b6d93eae69bbd0a817..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrAn_mire_log_an_2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c689b2d88a728f26e8464920bd0b8858621dcfec203a612e4cd8763b62d7c83c -size 164 diff --git a/Data/Baseline/OTB/Images/msPyrAn_mire_log_id_2.png b/Data/Baseline/OTB/Images/msPyrAn_mire_log_id_2.png deleted file mode 100644 index 02e9380066f73621e2908c406d1a32e78646d83b..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrAn_mire_log_id_2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eb8b759bff6ee7b8972ee09f87094106334dbb84f4b41434ec6cf18ec1821129 -size 296 diff --git a/Data/Baseline/OTB/Images/msPyrAn_mire_log_if_2.png b/Data/Baseline/OTB/Images/msPyrAn_mire_log_if_2.png deleted file mode 100644 index 3c40551414a347fbe12e6fac0b7da1164fbd1b1e..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrAn_mire_log_if_2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b985a05924d453325761a1d99e3bb0c64ac61a6359533035d6368f4d0c2e0ef6 -size 110 diff --git a/Data/Baseline/OTB/Images/msPyrAn_mire_log_sd_2.png b/Data/Baseline/OTB/Images/msPyrAn_mire_log_sd_2.png deleted file mode 100644 index 06af199a6bbee53c445ff1a24903f356ee1f6530..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrAn_mire_log_sd_2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:94647a3bd9b8617e0686c2ad9d7541b6a23d00f3c38cd162eb9c96ec7c077f03 -size 280 diff --git a/Data/Baseline/OTB/Images/msPyrAn_mire_log_sf_2.png b/Data/Baseline/OTB/Images/msPyrAn_mire_log_sf_2.png deleted file mode 100644 index 7d6ab132cb03f3a2b3fa5690b856000cfde1cc38..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrAn_mire_log_sf_2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b5273aadaeb17d41f4fa8a3b6c006879f36d1a913aa84146a2004122757feec7 -size 133 diff --git a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_an_full.tif b/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_an_full.tif deleted file mode 100644 index df49966b316319dac9e2c6cb94f2d3c2199c427d..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_an_full.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4acd9feb652abe765b4f93b6b08a59bde3111d1eae18e298848b04983d24e112 -size 2433975 diff --git a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_if_full.tif b/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_if_full.tif deleted file mode 100644 index d373dfb668ec13cc83aa631849fd78a2fcdc4bf6..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_if_full.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0bfbe517069a01fcd757ede835ffe3df3602f95921e8793acb49947f86e022fe -size 2084698 diff --git a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif b/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif deleted file mode 100644 index 791be26fb902300057b5f5a85da06922d58cfd96..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7086793fa9d0d553e115fd3e92cb5455b2dbca6f01352aabbf7312e02e33ffa2 -size 1409779 diff --git a/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_256_2.tif b/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_256_2.tif deleted file mode 100644 index 070eb61973a513c4b68733c4c68de91ab9be3d28..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_256_2.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eeaf4e2e3a704677c6fbc00550aa21a79f7b40126f677247abd652e39c967ff4 -size 162988 diff --git a/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_full.tif b/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_full.tif deleted file mode 100644 index 876e6de02b97af902286a224e141d34db2b9203a..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_full.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fad9049c90e30e939018725efe1bdf8d0e35302d50ae891812acbb3fdea013a -size 829512 diff --git a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_2.tif b/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_2.tif deleted file mode 100644 index 457056589f50a72e5d6341ee2f06751493459701..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_2.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:24efbd3ab2d54b9066d15145402583db895d8c6747795c83db07b965669748bd -size 30896 diff --git a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_4.tif b/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_4.tif deleted file mode 100644 index 12bb4bd12f5a53be3e9416d09e8bd241f8c50450..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_4.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fc44580b13963e8db80966f7251b8ef77b1fcb967c0a192354959ca7b18df2b3 -size 22111 diff --git a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_5.tif b/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_5.tif deleted file mode 100644 index a65b7a1e6d77aaed7b5f014b3a53ee35438feee4..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_5.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e1b31996ceec7f89920c029f0ccdb5adca0172d9850e4b0f37fc3ca48b471bd8 -size 21878 diff --git a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_7.tif b/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_7.tif deleted file mode 100644 index e12083be6785bcd46158ab0550b2172654b94de2..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_7.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:47d986a0f28e59fa8586db478791df92c6d93816d392bfbf331054e771b25930 -size 24465 diff --git a/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_if.tif b/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_if.tif deleted file mode 100644 index d6121605a13f36f9874bdfc6d067078ebb4d598a..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_if.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6abc1377ee09e3181c6600bece9ed11374f3c50dff1d98460e3f2adc273ecaca -size 20179 diff --git a/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_sf.tif b/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_sf.tif deleted file mode 100644 index e9f7589afcc41153e338f2885f8e6e05b49b1001..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_sf.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ba1c0155d39d3272d956c839f8f4e179dbef23ebee5499c0886a0cdb2bdeb05b -size 22191 diff --git a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutput.tif b/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutput.tif deleted file mode 100644 index 1582d4104bd26e22608c9c337ae659b4992a60c3..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutput.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e6946443c79f0ee5e07b3c653958ce13e5d97e87cc9958cb13051c9d3d07e416 -size 9378087 diff --git a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_GEOEYE.tif b/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_GEOEYE.tif deleted file mode 100644 index 5b30246782bd321aeab3a79046db7e63a7a187b1..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_GEOEYE.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8fb50d087c6620f8836274927849326dc2fb77a592ca64a2a3f116236248fd03 -size 59434 diff --git a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_QUICKBIRD.tif b/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_QUICKBIRD.tif deleted file mode 100644 index ca2897289d6507bcd3adf32e79d1fe62e0dddd5f..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_QUICKBIRD.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:89fb4f4c776f753b71e48c74b4c46231a03ae57451ccfc87903b0b0cb4b7ad7c -size 41907 diff --git a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_WORLDVIEW2.tif b/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_WORLDVIEW2.tif deleted file mode 100644 index 68f813382bae7b22465d7e4850f2a47bd7796caa..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_WORLDVIEW2.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cad5f798ddae790efa1d14ff57f7d0c25d5fd89f125961c0ba68c3923568ba05 -size 2656332 diff --git a/Data/Baseline/OTB/Images/raTvUrbanAreaDetection.png b/Data/Baseline/OTB/Images/raTvUrbanAreaDetection.png deleted file mode 100644 index b4535ce33f3c4a19b9b297fe4c76acb870fdd5da..0000000000000000000000000000000000000000 --- a/Data/Baseline/OTB/Images/raTvUrbanAreaDetection.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d34b5be5393bbb04b1fa634fa175f2bf0eb7e5928abe4768fd08dfa7d72323f9 -size 2057 diff --git a/Data/Input/Dempster-Shafer/DSFuzzyModel.xml b/Data/Input/Dempster-Shafer/DSFuzzyModel.xml deleted file mode 100644 index 034442d66e8ad214fadb3037553ab092b9be323b..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/DSFuzzyModel.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" ?> -<FuzzydDescriptorsModel> - <Descriptor name="NONDVI"> - <Parameter value="0.0328422" /> - <Parameter value="0.0966684" /> - <Parameter value="0.128072" /> - <Parameter value="0.892172" /> - </Descriptor> - <Descriptor name="ROADSA"> - <Parameter value="0.0528834" /> - <Parameter value="0.125395" /> - <Parameter value="0.216374" /> - <Parameter value="1" /> - </Descriptor> - <Descriptor name="NOBUIL"> - <Parameter value="0.0198015" /> - <Parameter value="0.0944664" /> - <Parameter value="0.17092" /> - <Parameter value="0.87146" /> - </Descriptor> -</FuzzydDescriptorsModel> diff --git a/Data/Input/Dempster-Shafer/DSFuzzyModel_Init.xml b/Data/Input/Dempster-Shafer/DSFuzzyModel_Init.xml deleted file mode 100644 index 83f733dc4c117e0ae898afa499e45ae6db65aa7a..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/DSFuzzyModel_Init.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" ?> -<FuzzydDescriptorsModel> - <Descriptor name="NONDVI"> - <Parameter value="0.05" /> - <Parameter value="0.15" /> - <Parameter value="0.20" /> - <Parameter value="0.95" /> - </Descriptor> - <Descriptor name="ROADSA"> - <Parameter value="0.15" /> - <Parameter value="0.30" /> - <Parameter value="0.50" /> - <Parameter value="0.95" /> - </Descriptor> - <Descriptor name="NOBUIL"> - <Parameter value="0.05" /> - <Parameter value="0.07" /> - <Parameter value="0.10" /> - <Parameter value="0.95" /> - </Descriptor> -</FuzzydDescriptorsModel> diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.TIF b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.TIF deleted file mode 100644 index c35e58f7734d48008a909fe36028bb11872914b8..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.TIF +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4c708f6360cadd64d7c530b6412397ddc60929b8c3bcea79d4b45e392dde59c -size 1149268 diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.geom b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.geom deleted file mode 100644 index 68452848273e55170a47fdfad7c8175c0b3763dd..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.geom +++ /dev/null @@ -1,165 +0,0 @@ -adjustment_0.adj_param_0.center: 0 -adjustment_0.adj_param_0.description: intrack_offset -adjustment_0.adj_param_0.lock_flag: 0 -adjustment_0.adj_param_0.parameter: 0 -adjustment_0.adj_param_0.sigma: 50 -adjustment_0.adj_param_0.units: pixel -adjustment_0.adj_param_1.center: 0 -adjustment_0.adj_param_1.description: crtrack_offset -adjustment_0.adj_param_1.lock_flag: 0 -adjustment_0.adj_param_1.parameter: 0 -adjustment_0.adj_param_1.sigma: 50 -adjustment_0.adj_param_1.units: pixel -adjustment_0.adj_param_2.center: 0 -adjustment_0.adj_param_2.description: intrack_scale -adjustment_0.adj_param_2.lock_flag: 0 -adjustment_0.adj_param_2.parameter: 0 -adjustment_0.adj_param_2.sigma: 50 -adjustment_0.adj_param_2.units: unknown -adjustment_0.adj_param_3.center: 0 -adjustment_0.adj_param_3.description: crtrack_scale -adjustment_0.adj_param_3.lock_flag: 0 -adjustment_0.adj_param_3.parameter: 0 -adjustment_0.adj_param_3.sigma: 50 -adjustment_0.adj_param_3.units: unknown -adjustment_0.adj_param_4.center: 0 -adjustment_0.adj_param_4.description: map_rotation -adjustment_0.adj_param_4.lock_flag: 0 -adjustment_0.adj_param_4.parameter: 0 -adjustment_0.adj_param_4.sigma: 0.1 -adjustment_0.adj_param_4.units: degrees -adjustment_0.description: Initial adjustment -adjustment_0.dirty_flag: 0 -adjustment_0.number_of_params: 5 -bias_error: 0 -current_adjustment: 0 -height_off: 241 -height_scale: 500 -image_id: 02APR01105228-M1BS-000000128955_01_P001 -lat_off: 43.5757 -lat_scale: 0.0881 -line_den_coeff_00: 1 -line_den_coeff_01: 3.073151e-05 -line_den_coeff_02: 0.0006767593 -line_den_coeff_03: 0.0002759762 -line_den_coeff_04: 1.707011e-05 -line_den_coeff_05: -4.215218e-07 -line_den_coeff_06: -2.031982e-06 -line_den_coeff_07: 6.281466e-06 -line_den_coeff_08: -2.098686e-05 -line_den_coeff_09: 1.091061e-05 -line_den_coeff_10: 3.716818e-08 -line_den_coeff_11: 5.435656e-08 -line_den_coeff_12: -4.35619e-06 -line_den_coeff_13: 1.09022e-08 -line_den_coeff_14: 1.78519e-08 -line_den_coeff_15: 0.0004342067 -line_den_coeff_16: 6.371344e-08 -line_den_coeff_17: 0 -line_den_coeff_18: -1.416592e-05 -line_den_coeff_19: 1.653665e-08 -line_num_coeff_00: -0.001183432 -line_num_coeff_01: 0.001540212 -line_num_coeff_02: -0.9858373 -line_num_coeff_03: 0.01594806 -line_num_coeff_04: 2.730892e-05 -line_num_coeff_05: -9.785795e-07 -line_num_coeff_06: 0.0002528461 -line_num_coeff_07: -0.0007762763 -line_num_coeff_08: 0.001998298 -line_num_coeff_09: -5.855501e-06 -line_num_coeff_10: -8.293341e-07 -line_num_coeff_11: 4.496584e-08 -line_num_coeff_12: 2.925877e-05 -line_num_coeff_13: 0 -line_num_coeff_14: -8.818227e-06 -line_num_coeff_15: -4.465644e-05 -line_num_coeff_16: -1.06142e-05 -line_num_coeff_17: 4.172296e-07 -line_num_coeff_18: -4.632173e-06 -line_num_coeff_19: 1.915274e-07 -line_off: 3630 -line_scale: 3691 -ll_lat: 43.4876885949517 -ll_lon: 1.35617248105186 -long_off: 1.4635 -long_scale: 0.1091 -lr_lat: 43.487956450501 -lr_lon: 1.57224225725364 -meters_per_pixel_x: 2.55166863064346 -meters_per_pixel_y: 2.68906571490787 -number_lines: 7265 -number_of_adjustments: 1 -number_samples: 6876 -polynomial_format: B -rand_error: 0 -rect: 0 0 6875 7264 -ref_point_hgt: 241 -ref_point_lat: 43.5755460927759 -ref_point_line: 3632 -ref_point_lon: 1.46371767649799 -ref_point_samp: 3437.5 -samp_den_coeff_00: 1 -samp_den_coeff_01: 0.001117681 -samp_den_coeff_02: 0.002334335 -samp_den_coeff_03: -0.0006207135 -samp_den_coeff_04: -5.962135e-05 -samp_den_coeff_05: 1.552717e-06 -samp_den_coeff_06: -1.84009e-06 -samp_den_coeff_07: -4.876876e-06 -samp_den_coeff_08: 3.158963e-05 -samp_den_coeff_09: -1.201072e-05 -samp_den_coeff_10: -1.579758e-07 -samp_den_coeff_11: -9.944747e-08 -samp_den_coeff_12: 1.942372e-06 -samp_den_coeff_13: 0 -samp_den_coeff_14: -8.945496e-08 -samp_den_coeff_15: -1.480163e-06 -samp_den_coeff_16: -6.008504e-08 -samp_den_coeff_17: 3.055564e-08 -samp_den_coeff_18: 1.11032e-07 -samp_den_coeff_19: 1.314046e-08 -samp_num_coeff_00: -0.0021422 -samp_num_coeff_01: 1.003674 -samp_num_coeff_02: 0.00317708 -samp_num_coeff_03: 0.0002667587 -samp_num_coeff_04: -0.002315384 -samp_num_coeff_05: 0.0006203277 -samp_num_coeff_06: -0.0004161892 -samp_num_coeff_07: 0.001035653 -samp_num_coeff_08: -0.001198854 -samp_num_coeff_09: 7.437719e-06 -samp_num_coeff_10: 2.503507e-06 -samp_num_coeff_11: -2.185972e-05 -samp_num_coeff_12: -4.893912e-05 -samp_num_coeff_13: -1.149441e-05 -samp_num_coeff_14: 8.351017e-05 -samp_num_coeff_15: -7.642065e-05 -samp_num_coeff_16: -2.684169e-07 -samp_num_coeff_17: 2.340974e-08 -samp_num_coeff_18: 7.001246e-06 -samp_num_coeff_19: -3.846245e-08 -samp_off: 3438 -samp_scale: 3443 -sensor: QB02 -support_data.B_band_absCalFactor: 0.0160412 -support_data.G_band_absCalFactor: 0.0143847 -support_data.N_band_absCalFactor: 0.0154242 -support_data.R_band_absCalFactor: 0.0126735 -support_data.TDI_level: 13 -support_data.azimuth_angle: 154.8 -support_data.band_id: Multi -support_data.band_name_list: B G R N -support_data.bits_per_pixel: 16 -support_data.elevation_angle: 48.6 -support_data.generation_date: 2004-05-25T19:49:03.000000Z -support_data.sat_azimuth_angle: 359 -support_data.sat_elevation_angle: 72.4 -support_data.sat_id: QB02 -support_data.tlc_date: 2002-04-01T10:52:28.415362Z; -support_data.type: ossimQuickbirdMetaData -type: ossimQuickbirdRpcModel -ul_lat: 43.663535886024 -ul_lon: 1.35446328287058 -ur_lat: 43.6638304625161 -ur_lon: 1.57254618315919 diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.dbf b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.dbf deleted file mode 100644 index 17a9903a40c7d097242b4f5367a8a1c3a0b30687..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:63f211d703d89d3abd9c7b0c2729f11b94fc9918108e77ab707c3a5b087c8da7 -size 1028 diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.prj b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.prj deleted file mode 100644 index a30c00a55de19be195abf9e942f6cff93bf0a825..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.prj +++ /dev/null @@ -1 +0,0 @@ -GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] \ No newline at end of file diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp deleted file mode 100644 index f901be7cd3a3eb8e328388cb03d4db257cd46987..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a8d2eee9ba80d3bb867aada7db654ef86d17cad4f1d526b0385a943f29d82a6b -size 4564 diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shx b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shx deleted file mode 100644 index 6f0fa666c0082c9bb48b431e0df4b44b357d6276..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f3bdf591bf2d6a7e3025629649f3e3effa4511f9f1af793193365b3ef53d8eb3 -size 252 diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.dbf b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.dbf deleted file mode 100644 index ed4287655d16eccbc86bc1926bc7b00c177ce96b..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d680b1d17582dc86c451bbe0446f9af84ae611b6afe06a5db38adecf191ba971 -size 4847 diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.prj b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.prj deleted file mode 100644 index a30c00a55de19be195abf9e942f6cff93bf0a825..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.prj +++ /dev/null @@ -1 +0,0 @@ -GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] \ No newline at end of file diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp deleted file mode 100644 index d5ff96b9922859ed04a1f8c4479c89507f6c4daa..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d0b6e77ff1d3acae9432b63b929050ed0089e9aace8a831c817b07ac02b04063 -size 18388 diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shx b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shx deleted file mode 100644 index 72bda750b8f93dbb743c133f9cdcb57e5d489314..0000000000000000000000000000000000000000 --- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8e3f91df5a62beb63ba9b17a952d2673a732aa428b20861dce0c6dd986e588db -size 668 diff --git a/Data/Input/InputForRoadDetectionScalarProductDir.raw b/Data/Input/InputForRoadDetectionScalarProductDir.raw deleted file mode 100644 index 95baee1dbe12bd62a063c59131b10dc4e8bde71c..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetectionScalarProductDir.raw +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:983ff7d0fd3f483320cd5739d48a65d89b39085be7689c9ccf2c1909646abe37 -size 8000000 diff --git a/Data/Input/InputForRoadDetectionScalarProductDir.raw.hdr b/Data/Input/InputForRoadDetectionScalarProductDir.raw.hdr deleted file mode 100644 index 542943fbb79a3e0a855c28857c843cfc6fa64f18..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetectionScalarProductDir.raw.hdr +++ /dev/null @@ -1,14 +0,0 @@ -ENVI -description = { -/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/feTvNeigborhoodScalarProductDirectionOutput} -samples = 1000 -lines = 1000 -bands = 1 -header offset = 0 -file type = ENVI Standard -data type = 5 -interleave = bsq -byte order = 0 -map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North} -band names = { -Band 1} diff --git a/Data/Input/InputForRoadDetectionScalarProductMod.raw b/Data/Input/InputForRoadDetectionScalarProductMod.raw deleted file mode 100644 index 1965bed30248a82446ddaf14b1080f9a1e1a755a..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetectionScalarProductMod.raw +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4381a7c3cb500cf48069d96e6cfd22d93c314d9b72ed13db4b63d71595cf4d0d -size 8000000 diff --git a/Data/Input/InputForRoadDetectionScalarProductMod.raw.hdr b/Data/Input/InputForRoadDetectionScalarProductMod.raw.hdr deleted file mode 100644 index 4718fbd683e934c6b1228b843fbf722e17ca6b2c..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetectionScalarProductMod.raw.hdr +++ /dev/null @@ -1,14 +0,0 @@ -ENVI -description = { -/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/feTvNeigborhoodScalarProductModulusOutput} -samples = 1000 -lines = 1000 -bands = 1 -header offset = 0 -file type = ENVI Standard -data type = 5 -interleave = bsq -byte order = 0 -map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North} -band names = { -Band 1} diff --git a/Data/Input/InputForRoadDetection_IsolatedRem.raw b/Data/Input/InputForRoadDetection_IsolatedRem.raw deleted file mode 100644 index 47f0f275c53646931b0dd5c8b3734a3d2db3447b..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetection_IsolatedRem.raw +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:708c193109abedbfbf512198f0ddfb3d395877892535ac24ebd69debed6d252a -size 8000000 diff --git a/Data/Input/InputForRoadDetection_IsolatedRem.raw.hdr b/Data/Input/InputForRoadDetection_IsolatedRem.raw.hdr deleted file mode 100644 index c3059e85c1b67b6662f1fc540bb7b52f52f871a8..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetection_IsolatedRem.raw.hdr +++ /dev/null @@ -1,14 +0,0 @@ -ENVI -description = { -/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/feTvRemoveIsolatedByDirectionOutput} -samples = 1000 -lines = 1000 -bands = 1 -header offset = 0 -file type = ENVI Standard -data type = 5 -interleave = bsq -byte order = 0 -map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North} -band names = { -Band 1} diff --git a/Data/Input/InputForRoadDetection_NonMaxRem.raw b/Data/Input/InputForRoadDetection_NonMaxRem.raw deleted file mode 100644 index 5798a2e6cff1445685a8633fd0ccaa7951982471..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetection_NonMaxRem.raw +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:38e0a731bd1b6032cfa78f0bf04953af80d47503d7a309c0a151c24d8a7d4c92 -size 8000000 diff --git a/Data/Input/InputForRoadDetection_NonMaxRem.raw.hdr b/Data/Input/InputForRoadDetection_NonMaxRem.raw.hdr deleted file mode 100644 index f127f633be1cf99c10cd5abf9c5abf5707b9e9c7..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetection_NonMaxRem.raw.hdr +++ /dev/null @@ -1,14 +0,0 @@ -ENVI -description = { -/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/feTvNonMaxRemovalByDirectionOutput} -samples = 1000 -lines = 1000 -bands = 1 -header offset = 0 -file type = ENVI Standard -data type = 5 -interleave = bsq -byte order = 0 -map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North} -band names = { -Band 1} diff --git a/Data/Input/InputForRoadDetection_SpectralAngle.raw b/Data/Input/InputForRoadDetection_SpectralAngle.raw deleted file mode 100644 index fcfe442dca79ccfc12b2f1b2fb7abfee4cf74a9a..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetection_SpectralAngle.raw +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:650d138fc001f6e44fe4c937736c0fee5a0421f8924116c104e52c5ac60e6845 -size 8000000 diff --git a/Data/Input/InputForRoadDetection_SpectralAngle.raw.hdr b/Data/Input/InputForRoadDetection_SpectralAngle.raw.hdr deleted file mode 100644 index e8d1181b91312aa95409ed3257c39f57c40f43b2..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetection_SpectralAngle.raw.hdr +++ /dev/null @@ -1,14 +0,0 @@ -ENVI -description = { -/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/bfTvSpectralAngleDistanceOutput} -samples = 1000 -lines = 1000 -bands = 1 -header offset = 0 -file type = ENVI Standard -data type = 5 -interleave = bsq -byte order = 0 -map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North} -band names = { -Band 1} diff --git a/Data/Input/InputForRoadDetection_WrongRem.raw b/Data/Input/InputForRoadDetection_WrongRem.raw deleted file mode 100644 index b77cb617091761f57ab8a441e59a5a0d72ecb26f..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetection_WrongRem.raw +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cfce41cafcedca2eec656277cda36f4c5dceaef30abfb367858a0a274d41b2aa -size 8000000 diff --git a/Data/Input/InputForRoadDetection_WrongRem.raw.hdr b/Data/Input/InputForRoadDetection_WrongRem.raw.hdr deleted file mode 100644 index a8093309243fe19444a67cace922dfebf88bea04..0000000000000000000000000000000000000000 --- a/Data/Input/InputForRoadDetection_WrongRem.raw.hdr +++ /dev/null @@ -1,14 +0,0 @@ -ENVI -description = { -/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/feTvRemoveWrongDirectionOutput} -samples = 1000 -lines = 1000 -bands = 1 -header offset = 0 -file type = ENVI Standard -data type = 5 -interleave = bsq -byte order = 0 -map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North} -band names = { -Band 1} diff --git a/Data/Input/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml b/Data/Input/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml deleted file mode 100644 index 36bf8590e956116f6e4a111960f27111f41faa0f..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" ?> -<FeatureStatistics> - <Statistic name="mean"> - <StatisticVector value="823.004" /> - <StatisticVector value="81672" /> - <StatisticVector value="0.821769" /> - <StatisticVector value="3.36296" /> - </Statistic> - <Statistic name="stddev"> - <StatisticVector value="366.639" /> - <StatisticVector value="135865" /> - <StatisticVector value="1.31875" /> - <StatisticVector value="9.14568" /> - </Statistic> -</FeatureStatistics> diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01.tif b/Data/Input/ObjectReco/Boats/maur_B010202_01.tif deleted file mode 100644 index e3b946f57282e32006c7930175f75a6c23a9ad20..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:76240f31ab0ebe2c8e83b38d8a02a2840f98b34aa470e92395763014c8b9cc05 -size 13234829 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.dbf b/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.dbf deleted file mode 100644 index a0aa2d0d932106f2394124898383c7cac084c7d9..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:01de58ce3c495b414e3f919d615130b06be4bbf1003b6b0de4f5253f2f75be54 -size 128437 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shp b/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shp deleted file mode 100644 index cfa8f3d8dbcf234345c82d3b9153ba3120dd0635..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0d1c844b374bafb64de032505d8289c60df1a902468126eddd39a88223e1c4de -size 39160 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shx b/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shx deleted file mode 100644 index 4a2c3af97936c8dcb47fa4403afe509a53710708..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:be403f366f2b77b0d0e003483d14e3a791132d8553071062e7291d54a85f8e3e -size 11260 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.dbf b/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.dbf deleted file mode 100644 index 202ee4ebf826690e08e4824b170606210b443de7..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:397c38ef052e1be71c0417e8755149f56e29a89db317020b118683950807072f -size 580 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shp b/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shp deleted file mode 100644 index 6c61252e5cde1badc59f9dcab1deb7ef9aaf8661..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3de1390f4caeb34c796e97b5fd734118267dab9b7de9edd731013ebfb938772a -size 2236 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shx b/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shx deleted file mode 100644 index eedcb9a4a63e2e0e2f855ed1a9a8a4840f778aa2..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bc1895c35aa8f5da834af41323f450b6bad52514d7965ceb8a1e18dbaeddc7b1 -size 124 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.dbf b/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.dbf deleted file mode 100644 index 3522a6c3014f619bed4fbbc4950e5928f903e858..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.dbf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:53d0f24062de7d7d09a7daa461a58a7e86e432d599655b89578f72f137f905d8 -size 365699 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shp b/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shp deleted file mode 100644 index 24cb707432de271be01f81c9c3e2ca6c0b9a6e87..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0cf2710d95e4c820526a25bc6690ef7a3b976f18cf17f3f2ed1ffbe035515747 -size 126492 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shx b/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shx deleted file mode 100644 index aa895b96ac97a0ee0052261977e5ce92bac4ebcb..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:78090fcacc5e730c68b21172cd3879d44817317527c415e713a872129d3fc6bc -size 36212 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01_amplitude.tif b/Data/Input/ObjectReco/Boats/maur_B010202_01_amplitude.tif deleted file mode 100644 index 1476026469d7d1da3ac47455c8fc6ac6cbc3028f..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01_amplitude.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0a9b97df1f6ae5a5356cbb4710e1cb0b95c7b8b82211dde09ba236164ecd965d -size 8584511 diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01_extract_amplitude.tif b/Data/Input/ObjectReco/Boats/maur_B010202_01_extract_amplitude.tif deleted file mode 100644 index 0aebc9c9a6236adfda6f6f6ae4f48a121064951a..0000000000000000000000000000000000000000 --- a/Data/Input/ObjectReco/Boats/maur_B010202_01_extract_amplitude.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32dd7458e8c64d1779b1513e7a22e28249939d49e6e9023888c12c89eeade1c8 -size 71853 diff --git a/Data/Input/Seg1InputForRCC8Graph.tif b/Data/Input/Seg1InputForRCC8Graph.tif deleted file mode 100644 index e677622f9e4c0d4d464a97c7868746d837030406..0000000000000000000000000000000000000000 --- a/Data/Input/Seg1InputForRCC8Graph.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:75bfc4c053eeb623f1c3c072989a39835f7c6632b40902604bab4c8c7567c3d9 -size 5564 diff --git a/Data/Input/Seg2InputForRCC8Graph.tif b/Data/Input/Seg2InputForRCC8Graph.tif deleted file mode 100644 index 6acc661a46c63f05ebc2b1114eba866af69151cd..0000000000000000000000000000000000000000 --- a/Data/Input/Seg2InputForRCC8Graph.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ebfa2c070d97c3f7a524766a02360ad9b8c21c98e49d5e7dd7eea9ff23224900 -size 4691 diff --git a/Data/Input/Seg3InputForRCC8Graph.tif b/Data/Input/Seg3InputForRCC8Graph.tif deleted file mode 100644 index 2e27e0ee07e6a96ee3080888d565476f87127f8f..0000000000000000000000000000000000000000 --- a/Data/Input/Seg3InputForRCC8Graph.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e2b58aefe1fa20b19ea16c34bbc047fd8a4b06ccb302b39d900cbead96c62ca6 -size 3340 diff --git a/Data/Input/Seg4InputForRCC8Graph.tif b/Data/Input/Seg4InputForRCC8Graph.tif deleted file mode 100644 index c2886b585ce56f98b79be4f016cdd69180bac30f..0000000000000000000000000000000000000000 --- a/Data/Input/Seg4InputForRCC8Graph.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8da097d6896b059cda7de7ff1225ce04be314844ecf8ef62c43d2db2335b8f53 -size 3024 diff --git a/Data/Input/Seg5InputForRCC8Graph.tif b/Data/Input/Seg5InputForRCC8Graph.tif deleted file mode 100644 index 6b8329bcff20dd012dd54dfdbe1f1e60e968591c..0000000000000000000000000000000000000000 --- a/Data/Input/Seg5InputForRCC8Graph.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c84224aa400ed08bc16edb53596dd9f205996e1dc0fdf377220beebf54119c09 -size 3931 diff --git a/Data/Input/rcc8_mire1.png b/Data/Input/rcc8_mire1.png deleted file mode 100644 index 84d80b5e476e3cda75dea149e44b344d157c7437..0000000000000000000000000000000000000000 --- a/Data/Input/rcc8_mire1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:12f42927804f6acac12efbe0822696999f081d3b1c2d2e0660227a63635f2fba -size 10261 diff --git a/Data/Input/rcc8_mire2.png b/Data/Input/rcc8_mire2.png deleted file mode 100644 index fe51b7d93dca6819628b8aeccd1786b05ef28f12..0000000000000000000000000000000000000000 --- a/Data/Input/rcc8_mire2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:41dc58713412957c17566c85387bf1b8b260ccf1f8fd8196fe649643887f2d03 -size 10261 diff --git a/Data/Input/rcc8_mire3.png b/Data/Input/rcc8_mire3.png deleted file mode 100644 index 6ca1fb1ed79527ade0d0d39d517d2b27590fec86..0000000000000000000000000000000000000000 --- a/Data/Input/rcc8_mire3.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2cde01113be3caeb86230817cd34355becc8aa74536929d3b22a8fe82f58659 -size 294 diff --git a/Data/Input/rcc8_mire4.png b/Data/Input/rcc8_mire4.png deleted file mode 100644 index 10cd0bd99ff3ade23944d2d64bdba05104de70ea..0000000000000000000000000000000000000000 --- a/Data/Input/rcc8_mire4.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:57d4c7a833e915885ee3702f7990864e0583838d395f7e4fccb38502607d7189 -size 10261 diff --git a/Data/Input/rcc8_mire5.png b/Data/Input/rcc8_mire5.png deleted file mode 100644 index 25031a9c185cce67878d7f32db1d587524d22bb5..0000000000000000000000000000000000000000 --- a/Data/Input/rcc8_mire5.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32d1a7049dcdf8cf0488452d6347467740c97536baa73e21751d499ef41f306b -size 112 diff --git a/Data/Input/rcc8_mire5.png.aux.xml b/Data/Input/rcc8_mire5.png.aux.xml deleted file mode 100644 index 098625bf84b4ca0de04765727ac8e21380994743..0000000000000000000000000000000000000000 --- a/Data/Input/rcc8_mire5.png.aux.xml +++ /dev/null @@ -1,6 +0,0 @@ -<PAMDataset> - <GeoTransform> 5.0000000000000000e+00, 1.0000000000000000e+00, 0.0000000000000000e+00, 1.5000000000000000e+01, 0.0000000000000000e+00, 1.0000000000000000e+00</GeoTransform> - <Metadata> - <MDI key="Comment">Created with The GIMP</MDI> - </Metadata> -</PAMDataset> diff --git a/Documentation/Cookbook/rst/C++/UserGuide.rst b/Documentation/Cookbook/rst/C++/UserGuide.rst index c557ef2e761c22797a3b6ebe000ca350507e2fbd..956d36e3ca03d27e8638f2cf1a376b9763e3de3e 100644 --- a/Documentation/Cookbook/rst/C++/UserGuide.rst +++ b/Documentation/Cookbook/rst/C++/UserGuide.rst @@ -705,7 +705,6 @@ Interest Points See example :ref:`RatioLineDetectorExample.cxx`. See example :ref:`CorrelationLineDetectorExample.cxx`. See example :ref:`AsymmetricFusionOfLineDetectorExample.cxx`. - See example :ref:`ParallelLineDetectionExample.cxx`. * Segment Extraction. See example :ref:`LineSegmentDetectorExample.cxx`. @@ -785,26 +784,9 @@ following expressions: * Flusser Moments for Images. See example :ref:`FlusserMomentsImageFunctionExample.cxx`. -Road and cloud extraction +Cloud extraction ~~~~~~~~~~~~~~~~~~~~~~~~~ -Road extraction is a critical feature for an efficient use of high -resolution satellite images. There are many applications of road -extraction: update of GIS database, reference for image registration, -help for identification algorithms and rapid mapping for example. Road -network can be used to register an optical image with a map or an -optical image with a radar image for example. Road network extraction -can help for other algorithms: isolated building detection, bridge -detection. In these cases, a rough extraction can be sufficient. In the -context of response to crisis, a fast mapping is necessary: within -6 hours, infrastructures for the designated area are required. Within -this timeframe, a manual extraction is inconceivable and an automatic -help is necessary. - -* Road extraction filter. See example :ref:`ExtractRoadExample.cxx`. - -* Step by step road extraction. See example :ref:`ExtractRoadByStepsExample.cxx`. - * Cloud Detection. See example :ref:`CloudDetectionExample.cxx`. Image Simulation diff --git a/Documentation/Cookbook/rst/recipes/improc.rst b/Documentation/Cookbook/rst/recipes/improc.rst index 4216062f7ebafc55de4e5ab342b03cb90ffee1a6..72f24b429994e2f58729ff50b2773bb58bdf25b1 100644 --- a/Documentation/Cookbook/rst/recipes/improc.rst +++ b/Documentation/Cookbook/rst/recipes/improc.rst @@ -289,128 +289,3 @@ skipped. There is a cleanup option that can be disabled in order to check intermediate outputs of this composite application. - -Dempster Shafer based Classifier Fusion ---------------------------------------- - -This framework is dedicated to perform cartographic validation starting -from the result of a detection (for example a road extraction), enhance -the results viability by using a classifier fusion algorithm. Using a -set of descriptors, the processing chain validates or invalidates the -input geometrical features. - -Fuzzy Model (requisite) -~~~~~~~~~~~~~~~~~~~~~~~ - -The *DSFuzzyModelEstimation* application performs the fuzzy model -estimation (once by use case: descriptor set / Belief support / -Plausibility support). It has the following input parameters: - -- ``-psin`` a vector data of positive samples enriched according to the - “Compute Descriptors†part - -- ``-nsin`` a vector data of negative samples enriched according to the - “Compute Descriptors†part - -- ``-belsup`` a support for the Belief computation - -- ``-plasup`` a support for the Plausibility computation - -- ``-desclist`` an initialization model (xml file) or a descriptor name - list (listing the descriptors to be included in the model) - -The application can be used like this: - -:: - - otbcli_DSFuzzyModelEstimation -psin PosSamples.shp - -nsin NegSamples.shp - -belsup "ROADSA" - -plasup "NONDVI" "ROADSA" "NOBUIL" - -desclist "NONDVI" "ROADSA" "NOBUIL" - -out FuzzyModel.xml - -The output file ``FuzzyModel.xml`` contains the optimal model to perform -information fusion. - -First Step: Compute Descriptors -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The first step in the classifier fusion based validation is to compute, -for each studied polyline, the chosen descriptors. In this context, the -*ComputePolylineFeatureFromImage* application can be used for a large -range of descriptors. It has the following inputs: - -- ``-in`` an image (of the studied scene) corresponding to the chosen - descriptor (NDVI, building Mask…) - -- ``-vd`` a vector data containing polyline of interest - -- ``-expr`` a formula (“b1 >0.4â€, “b1 == 0â€) where b1 is the standard - name of input image first band - -- ``-field`` a field name corresponding to the descriptor codename - (NONDVI, ROADSA...) - -The output is a vector data containing polylines with a new field -containing the descriptor value. In order to add the “NONDVI†descriptor -to an input vector data (“inVD.shpâ€) corresponding to the percentage of -pixels along a polyline that verifies the formula “NDVI >0.4â€: - -:: - - otbcli_ComputePolylineFeatureFromImage -in NDVI.TIF - -vd inVD.shp - -expr "b1 > 0.4" - -field "NONDVI" - -out VD_NONDVI.shp - -``NDVI.TIF`` is the NDVI mono band image of the studied scene. This step -must be repeated for each chosen descriptor: - -:: - - otbcli_ComputePolylineFeatureFromImage -in roadSpectralAngle.TIF - -vd VD_NONDVI.shp - -expr "b1 > 0.24" - -field "ROADSA" - -out VD_NONDVI_ROADSA.shp - -:: - - otbcli_ComputePolylineFeatureFromImage -in Buildings.TIF - -vd VD_NONDVI_ROADSA.shp - -expr "b1 == 0" - -field "NOBUILDING" - -out VD_NONDVI_ROADSA_NOBUIL.shp - -Both ``NDVI.TIF`` and ``roadSpectralAngle.TIF`` can be produced using -**Monteverdi** feature extraction capabilities, and ``Buildings.TIF`` -can be generated using **Monteverdi** rasterization module. From now on, -``VD_NONDVI_ROADSA_NOBUIL.shp`` contains three descriptor fields. It -will be used in the following part. - -Second Step: Feature Validation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The final application (*VectorDataDSValidation* ) will validate or -invalidate the studied samples using `the Dempster-Shafer -theory <http://en.wikipedia.org/wiki/Dempster%E2%80%93Shafer_theory>`_ -. Its inputs are: - -- ``-in`` an enriched vector data “VD\_NONDVI\_ROADSA\_NOBUIL.shp†- -- ``-belsup`` a support for the Belief computation - -- ``-plasup`` a support for the Plausibility computation - -- ``-descmod`` a fuzzy model FuzzyModel.xml - -The output is a vector data containing only the validated samples. - -:: - - otbcli_VectorDataDSValidation -in extractedRoads_enriched.shp - -descmod FuzzyModel.xml - -out validatedSamples.shp - diff --git a/Examples/FeatureExtraction/CMakeLists.txt b/Examples/FeatureExtraction/CMakeLists.txt index 19c504f658d111d89bbd3a107d495d0989e3d003..5d48aead0da95f1391506976bcfeb80c37083e36 100644 --- a/Examples/FeatureExtraction/CMakeLists.txt +++ b/Examples/FeatureExtraction/CMakeLists.txt @@ -38,18 +38,6 @@ target_link_libraries(CorrelationLineDetectorExample ${OTB_LIBRARIES}) add_executable(EdgeDensityExample EdgeDensityExample.cxx) target_link_libraries(EdgeDensityExample ${OTB_LIBRARIES}) -#OTBRoadExtraction depends OTBMathParser. But OTB_USE_MUPARSER is OFF -if(OTBMathParser_LOADED) -add_executable(ExtractRoadByStepsExample ExtractRoadByStepsExample.cxx) -target_link_libraries(ExtractRoadByStepsExample ${OTB_LIBRARIES}) - -add_executable(ExtractRoadExample ExtractRoadExample.cxx) -target_link_libraries(ExtractRoadExample ${OTB_LIBRARIES}) - -add_executable(ParallelLineDetectionExample ParallelLineDetectionExample.cxx) -target_link_libraries(ParallelLineDetectionExample ${OTB_LIBRARIES}) -endif() - add_executable(FlusserMomentsImageFunctionExample FlusserMomentsImageFunctionExample.cxx) target_link_libraries(FlusserMomentsImageFunctionExample ${OTB_LIBRARIES}) @@ -71,12 +59,6 @@ target_link_libraries(PanTexExample ${OTB_LIBRARIES}) add_executable(RatioLineDetectorExample RatioLineDetectorExample.cxx) target_link_libraries(RatioLineDetectorExample ${OTB_LIBRARIES}) -add_executable(SeamCarvingExample SeamCarvingExample.cxx) -target_link_libraries(SeamCarvingExample ${OTB_LIBRARIES}) - -add_executable(SeamCarvingOtherExample SeamCarvingOtherExample.cxx) -target_link_libraries(SeamCarvingOtherExample ${OTB_LIBRARIES}) - add_executable(SFSExample SFSExample.cxx) target_link_libraries(SFSExample ${OTB_LIBRARIES}) diff --git a/Examples/FeatureExtraction/ExtractRoadByStepsExample.cxx b/Examples/FeatureExtraction/ExtractRoadByStepsExample.cxx deleted file mode 100644 index 54891d83c85169c20f0e82311a78b2d4aba5f986..0000000000000000000000000000000000000000 --- a/Examples/FeatureExtraction/ExtractRoadByStepsExample.cxx +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -// This example illustrates the details of the \doxygen{otb}{RoadExtractionFilter}. -// This filter, described in the previous section, is a composite filter that includes -// all the steps below. Individual filters can be replaced to design a road detector -// targeted at SAR images for example. - -#include "otbPolyLineParametricPathWithValue.h" -#include "otbSpectralAngleDistanceImageFilter.h" -#include "itkGradientRecursiveGaussianImageFilter.h" -#include "otbNeighborhoodScalarProductFilter.h" -#include "otbRemoveIsolatedByDirectionFilter.h" -#include "otbRemoveWrongDirectionFilter.h" -#include "otbNonMaxRemovalByDirectionFilter.h" -#include "otbVectorizationPathListFilter.h" -#include "otbSimplifyPathListFilter.h" -#include "otbBreakAngularPathListFilter.h" -#include "otbRemoveTortuousPathListFilter.h" -#include "otbLinkPathListFilter.h" -#include "otbLikelihoodPathListFilter.h" -#include "otbDrawPathListFilter.h" -#include "otbLikelihoodPathListFilter.h" -#include "otbMultiToMonoChannelExtractROI.h" -#include "itkUnaryFunctorImageFilter.h" -#include "itkRescaleIntensityImageFilter.h" -#include "itkSqrtImageFilter.h" - -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbMultiChannelExtractROI.h" -#include "otbVectorRescaleIntensityImageFilter.h" -#include "itkAddImageFilter.h" -#include "itkSubtractImageFilter.h" -#include "itkRGBPixel.h" -#include "itkComposeImageFilter.h" -#include "itkThresholdImageFilter.h" -#include "itkSigmoidImageFilter.h" -#include "itkThresholdImageFilter.h" -#include "itkBinaryBallStructuringElement.h" -#include "itkGrayscaleDilateImageFilter.h" - -/* Example usage: -./ExtractRoadByStepsExample Input/qb_RoadExtract.tif Output/ExtractRoadByStepsExampleOutput.jpg Output/qb_ExtractRoad_pretty.jpg 337 557 432 859 0.00005 1.0 -*/ - -/* Example usage: -./ExtractRoadByStepsExample Input/qb_RoadExtract2.tif Output/ExtractRoadByStepsExampleOutput2.jpg Output/qb_ExtractRoad_pretty2.jpg 228 316 207 282 0.00005 1.0 -*/ - - -int main(int itkNotUsed(argc), char* argv[]) -{ - - const unsigned int Dimension = 2; - typedef double PixelType; - typedef unsigned char OutputPixelType; - typedef itk::CovariantVector<PixelType, Dimension> VectorPixelType; - typedef otb::Image<PixelType, Dimension> InternalImageType; - typedef otb::VectorImage<PixelType, Dimension> MultiSpectralImageType; - typedef otb::Image<VectorPixelType, Dimension> VectorImageType; - - typedef otb::PolyLineParametricPathWithValue<double, Dimension> PathType; - - typedef otb::ImageFileReader<MultiSpectralImageType> MultispectralReaderType; - - MultispectralReaderType::Pointer multispectralReader = MultispectralReaderType::New(); - multispectralReader->SetFileName(argv[1]); - - // Create an 3 band image for the software guide - typedef otb::VectorImage<OutputPixelType, Dimension> OutputVectorImageType; - typedef otb::ImageFileWriter<OutputVectorImageType> VectorWriterType; - typedef otb::VectorRescaleIntensityImageFilter<MultiSpectralImageType, OutputVectorImageType> VectorRescalerType; - typedef otb::MultiChannelExtractROI<unsigned char, unsigned char> ChannelExtractorType; - - // The GenerateOutputInformation() information is required here so - // that the number of component per pixel is update and known to set - // up the maximum and minimum values for the rescaling filter - multispectralReader->GenerateOutputInformation(); - - OutputVectorImageType::PixelType minimum, maximum; - minimum.SetSize(multispectralReader->GetOutput()->GetNumberOfComponentsPerPixel()); - maximum.SetSize(multispectralReader->GetOutput()->GetNumberOfComponentsPerPixel()); - minimum.Fill(0); - maximum.Fill(255); - - VectorRescalerType::Pointer vr = VectorRescalerType::New(); - vr->SetInput(multispectralReader->GetOutput()); - vr->SetOutputMinimum(minimum); - vr->SetOutputMaximum(maximum); - vr->SetClampThreshold(0.01); - - ChannelExtractorType::Pointer selecter = ChannelExtractorType::New(); - selecter->SetInput(vr->GetOutput()); - selecter->SetExtractionRegion(multispectralReader->GetOutput()->GetLargestPossibleRegion()); - selecter->SetChannel(3); - selecter->SetChannel(2); - selecter->SetChannel(1); - - VectorWriterType::Pointer vectWriter = VectorWriterType::New(); - vectWriter->SetFileName(argv[3]); - vectWriter->SetInput(selecter->GetOutput()); - vectWriter->Update(); - - MultiSpectralImageType::PixelType pixelRef; - pixelRef.SetSize(4); - pixelRef[0] = atoi(argv[4]); - pixelRef[1] = atoi(argv[5]); - pixelRef[2] = atoi(argv[6]); - pixelRef[3] = atoi(argv[7]); - - double resolution = 0.6; // to get directly from metadata - double alpha = atof(argv[9]); - - // The spectral angle is used to compute a grayscale image from the - // multispectral original image using - // \doxygen{otb}{SpectralAngleDistanceImageFilter}. The spectral - // angle is illustrated on - // Figure~\ref{fig:RoadExtractionSpectralAngleDiagram}. Pixels - // corresponding to roads are in darker color. - // - // \begin{figure} - // \center - // \includegraphics[width=0.40\textwidth]{RoadExtractionSpectralAngleDiagram.eps} - // \itkcaption[Spectral Angle]{Illustration of the spectral angle - // for one pixel of a three-band image. One of the vector is the - // reference pixel and the other is the current pixel.} - // \label{fig:RoadExtractionSpectralAngleDiagram} - // \end{figure} - // - // - - typedef otb::SpectralAngleDistanceImageFilter<MultiSpectralImageType, InternalImageType> SAFilterType; - SAFilterType::Pointer saFilter = SAFilterType::New(); - saFilter->SetReferencePixel(pixelRef); - saFilter->SetInput(multispectralReader->GetOutput()); - - // A square root is applied to the spectral angle image in order to enhance contrast between - // darker pixels (which are pixels of interest) with \doxygen{itk}{SqrtImageFilter}. - - typedef itk::SqrtImageFilter<InternalImageType, InternalImageType> SqrtFilterType; - SqrtFilterType::Pointer sqrtFilter = SqrtFilterType::New(); - sqrtFilter->SetInput(saFilter->GetOutput()); - - // Use the Gaussian gradient filter compute the gradient in x and y direction - // respectively - // (\doxygen{itk}{GradientRecursiveGaussianImageFilter}). - - double sigma = alpha * (1.2 / resolution + 1); - typedef itk::GradientRecursiveGaussianImageFilter<InternalImageType, VectorImageType> GradientFilterType; - GradientFilterType::Pointer gradientFilter = GradientFilterType::New(); - gradientFilter->SetSigma(sigma); - gradientFilter->SetInput(sqrtFilter->GetOutput()); - - // Compute the scalar product of the neighboring pixels and keep the - // minimum value and the direction with \doxygen{otb}{NeighborhoodScalarProductFilter}. - // This is the line detector described - // in \cite{Lacroix1998}. - - typedef otb::NeighborhoodScalarProductFilter<VectorImageType, InternalImageType, InternalImageType> NeighborhoodScalarProductType; - NeighborhoodScalarProductType::Pointer scalarFilter = NeighborhoodScalarProductType::New(); - scalarFilter->SetInput(gradientFilter->GetOutput()); - - // The resulting image is passed to the \doxygen{otb}{RemoveIsolatedByDirectionFilter} - // filter to remove pixels - // with no neighbor having the same direction. - - typedef otb::RemoveIsolatedByDirectionFilter<InternalImageType, InternalImageType, InternalImageType> RemoveIsolatedByDirectionType; - RemoveIsolatedByDirectionType::Pointer removeIsolatedByDirectionFilter = RemoveIsolatedByDirectionType::New(); - removeIsolatedByDirectionFilter->SetInput(scalarFilter->GetOutput()); - removeIsolatedByDirectionFilter->SetInputDirection(scalarFilter->GetOutputDirection()); - - // We remove pixels having a direction corresponding to bright lines - // as we know that after the spectral angle, roads are in darker color - // with the \doxygen{otb}{RemoveWrongDirectionFilter} filter. - - typedef otb::RemoveWrongDirectionFilter<InternalImageType, InternalImageType, InternalImageType> RemoveWrongDirectionType; - RemoveWrongDirectionType::Pointer removeWrongDirectionFilter = RemoveWrongDirectionType::New(); - removeWrongDirectionFilter->SetInput(removeIsolatedByDirectionFilter->GetOutput()); - removeWrongDirectionFilter->SetInputDirection(scalarFilter->GetOutputDirection()); - - // We remove pixels which are not maximum on the direction - // perpendicular to the road direction with the \doxygen{otb}{NonMaxRemovalByDirectionFilter}. - - typedef otb::NonMaxRemovalByDirectionFilter<InternalImageType, InternalImageType, InternalImageType> NonMaxRemovalByDirectionType; - NonMaxRemovalByDirectionType::Pointer nonMaxRemovalByDirectionFilter = NonMaxRemovalByDirectionType::New(); - nonMaxRemovalByDirectionFilter->SetInput(removeWrongDirectionFilter->GetOutput()); - nonMaxRemovalByDirectionFilter->SetInputDirection(scalarFilter->GetOutputDirection()); - - // Extracted road are vectorized into polylines with \doxygen{otb}{VectorizationPathListFilter}. - - typedef otb::VectorizationPathListFilter<InternalImageType, InternalImageType, PathType> VectorizationFilterType; - VectorizationFilterType::Pointer vectorizationFilter = VectorizationFilterType::New(); - vectorizationFilter->SetInput(nonMaxRemovalByDirectionFilter->GetOutput()); - vectorizationFilter->SetInputDirection(scalarFilter->GetOutputDirection()); - vectorizationFilter->SetAmplitudeThreshold(atof(argv[8])); - - // However, this vectorization is too simple and need to be refined - // to be usable. First, we remove all aligned points to make one segment with - // \doxygen{otb}{SimplifyPathListFilter}. - // Then we break the polylines which have sharp angles as they are probably - // not road with \doxygen{otb}{BreakAngularPathListFilter}. - // Finally we remove path which are too short with \doxygen{otb}{RemoveTortuousPathListFilter}. - - typedef otb::SimplifyPathListFilter<PathType> SimplifyPathType; - SimplifyPathType::Pointer simplifyPathListFilter = SimplifyPathType::New(); - simplifyPathListFilter->GetFunctor().SetTolerance(1.0); - simplifyPathListFilter->SetInput(vectorizationFilter->GetOutput()); - - typedef otb::BreakAngularPathListFilter<PathType> BreakAngularPathType; - BreakAngularPathType::Pointer breakAngularPathListFilter = BreakAngularPathType::New(); - breakAngularPathListFilter->SetMaxAngle(otb::CONST_PI / 8.); - breakAngularPathListFilter->SetInput(simplifyPathListFilter->GetOutput()); - - typedef otb::RemoveTortuousPathListFilter<PathType> RemoveTortuousPathType; - RemoveTortuousPathType::Pointer removeTortuousPathListFilter = RemoveTortuousPathType::New(); - removeTortuousPathListFilter->GetFunctor().SetThreshold(1.0); - removeTortuousPathListFilter->SetInput(breakAngularPathListFilter->GetOutput()); - - // Polylines within a certain range are linked (\doxygen{otb}{LinkPathListFilter}) to - // try to fill gaps due to occultations by vehicules, trees, etc. before simplifying - // polylines (\doxygen{otb}{SimplifyPathListFilter}) and - // removing the shortest ones with \doxygen{otb}{RemoveTortuousPathListFilter}. - - typedef otb::LinkPathListFilter<PathType> LinkPathType; - LinkPathType::Pointer linkPathListFilter = LinkPathType::New(); - linkPathListFilter->SetDistanceThreshold(25.0 / resolution); - linkPathListFilter->SetAngularThreshold(otb::CONST_PI / 8); - linkPathListFilter->SetInput(removeTortuousPathListFilter->GetOutput()); - - SimplifyPathType::Pointer simplifyPathListFilter2 = SimplifyPathType::New(); - simplifyPathListFilter2->GetFunctor().SetTolerance(1.0); - simplifyPathListFilter2->SetInput(linkPathListFilter->GetOutput()); - - RemoveTortuousPathType::Pointer removeTortuousPathListFilter2 = RemoveTortuousPathType::New(); - removeTortuousPathListFilter2->GetFunctor().SetThreshold(10.0); - removeTortuousPathListFilter2->SetInput(simplifyPathListFilter2->GetOutput()); - - // A value can be associated with each polyline according to pixel values - // under the polyline with \doxygen{otb}{LikelihoodPathListFilter}. A higher value - // will mean a higher Likelihood to be a road. - - typedef otb::LikelihoodPathListFilter<PathType, InternalImageType> PathListToPathListWithValueType; - PathListToPathListWithValueType::Pointer pathListConverter = PathListToPathListWithValueType::New(); - pathListConverter->SetInput(removeTortuousPathListFilter2->GetOutput()); - pathListConverter->SetInputImage(nonMaxRemovalByDirectionFilter->GetOutput()); - - // A black background image is built to draw the path on. - - InternalImageType::Pointer output = InternalImageType::New(); - output->CopyInformation(multispectralReader->GetOutput()); - output->SetRegions(output->GetLargestPossibleRegion()); - output->Allocate(); - output->FillBuffer(0.0); - - // Polylines are drawn on a black background image with \doxygen{otb}{DrawPathListFilter}. - // The \code{SetUseIternalValues()} tell the drawing filter to draw the path with its Likelihood - // value. - - typedef otb::DrawPathListFilter<InternalImageType, PathType, InternalImageType> DrawPathType; - DrawPathType::Pointer drawPathListFilter = DrawPathType::New(); - drawPathListFilter->SetInput(output); - drawPathListFilter->SetInputPath(pathListConverter->GetOutput()); - drawPathListFilter->SetUseInternalPathValue(true); - - // The output from the drawing filter contains very small values (Likelihood values). Therefore - // the image has to be rescaled to be viewed. The whole pipeline is executed by invoking - // the \code{Update()} method on this last filter. - - typedef itk::RescaleIntensityImageFilter<InternalImageType, InternalImageType> RescalerType; - RescalerType::Pointer rescaler = RescalerType::New(); - rescaler->SetOutputMaximum(255); - rescaler->SetOutputMinimum(0); - rescaler->SetInput(drawPathListFilter->GetOutput()); - rescaler->Update(); - - // this small piece of code aims at producing a pretty RGB png result image. - typedef otb::MultiToMonoChannelExtractROI<OutputPixelType, PixelType> ChannelExtractionFilterType; - typedef itk::AddImageFilter<InternalImageType, InternalImageType, InternalImageType> AddFilterType; - typedef itk::SubtractImageFilter<InternalImageType, InternalImageType, InternalImageType> SubtractFilterType; - typedef itk::ThresholdImageFilter<InternalImageType> ThresholdFilterType; - typedef itk::RGBPixel<OutputPixelType> RGBPixelType; - typedef otb::Image<RGBPixelType, Dimension> RGBImageType; - typedef itk::ComposeImageFilter<InternalImageType, RGBImageType> ComposeFilterType; - typedef otb::ImageFileWriter<RGBImageType> RGBWriterType; - typedef itk::BinaryBallStructuringElement<PixelType, Dimension> StructuringElementType; - typedef itk::GrayscaleDilateImageFilter<InternalImageType, InternalImageType, StructuringElementType> DilateFilterType; - - StructuringElementType se; - se.SetRadius(1); - se.CreateStructuringElement(); - - // Filters definitions - ChannelExtractionFilterType::Pointer channelExtractor1 = ChannelExtractionFilterType::New(); - ChannelExtractionFilterType::Pointer channelExtractor2 = ChannelExtractionFilterType::New(); - ChannelExtractionFilterType::Pointer channelExtractor3 = ChannelExtractionFilterType::New(); - - AddFilterType::Pointer addFilter = AddFilterType::New(); - SubtractFilterType::Pointer subtract2 = SubtractFilterType::New(); - SubtractFilterType::Pointer subtract3 = SubtractFilterType::New(); - ThresholdFilterType::Pointer threshold11 = ThresholdFilterType::New(); - ThresholdFilterType::Pointer threshold21 = ThresholdFilterType::New(); - ThresholdFilterType::Pointer threshold31 = ThresholdFilterType::New(); - ThresholdFilterType::Pointer threshold12 = ThresholdFilterType::New(); - ThresholdFilterType::Pointer threshold22 = ThresholdFilterType::New(); - ThresholdFilterType::Pointer threshold32 = ThresholdFilterType::New(); - - ComposeFilterType::Pointer composer = ComposeFilterType::New(); - RGBWriterType::Pointer writer = RGBWriterType::New(); - - DilateFilterType::Pointer dilater = DilateFilterType::New(); - - dilater->SetInput(rescaler->GetOutput()); - dilater->SetKernel(se); - - // Extract each channel - channelExtractor1->SetInput(vr->GetOutput()); - channelExtractor2->SetInput(vr->GetOutput()); - channelExtractor3->SetInput(vr->GetOutput()); - - channelExtractor1->SetChannel(3); - channelExtractor2->SetChannel(2); - channelExtractor3->SetChannel(1); - - // Add the path to the red component - addFilter->SetInput1(channelExtractor1->GetOutput()); - addFilter->SetInput2(dilater->GetOutput()); - - subtract2->SetInput1(channelExtractor2->GetOutput()); - subtract2->SetInput2(dilater->GetOutput()); - subtract3->SetInput1(channelExtractor3->GetOutput()); - subtract3->SetInput2(dilater->GetOutput()); - - // Threshold outside the [0, 255] range - - threshold11->SetInput(addFilter->GetOutput()); - threshold11->ThresholdBelow(0); - threshold11->SetOutsideValue(0); - threshold12->SetInput(threshold11->GetOutput()); - threshold12->ThresholdAbove(255); - threshold12->SetOutsideValue(255); - - threshold21->SetInput(subtract2->GetOutput()); - threshold21->ThresholdBelow(0); - threshold21->SetOutsideValue(0); - threshold22->SetInput(threshold21->GetOutput()); - threshold22->ThresholdAbove(255); - threshold22->SetOutsideValue(255); - - threshold31->SetInput(subtract3->GetOutput()); - threshold31->ThresholdBelow(0); - threshold31->SetOutsideValue(0); - threshold32->SetInput(threshold31->GetOutput()); - threshold32->ThresholdAbove(255); - threshold32->SetOutsideValue(255); - - // Compose the output image - composer->SetInput(0, threshold12->GetOutput()); - composer->SetInput(1, threshold22->GetOutput()); - composer->SetInput(2, threshold32->GetOutput()); - - // Write the new rgb image - writer->SetInput(composer->GetOutput()); - writer->SetFileName(argv[2]); - writer->Update(); - - // Figures~\ref{fig:ROADEXTRACTIONBYSTEPS} and \ref{fig:ROADEXTRACTIONBYSTEPS2} - // show the result of applying - // the road extraction by steps to a fusionned Quickbird image. The result image - // is a RGB composition showing the extracted path in red. Full processing took - // about 3 seconds for each image. - // - // \begin{figure}[htbp] - // \center - // \includegraphics[width=0.44\textwidth]{qb_ExtractRoad_pretty.eps} - // \includegraphics[width=0.44\textwidth]{ExtractRoadByStepsExampleOutput.eps} - // \itkcaption[Road extraction filter application]{Result of applying - // the road extraction by steps pipeline to a fusionned Quickbird - // image. From left to right : original image, extracted road with their - // Likelihood values.} - // \label{fig:ROADEXTRACTIONBYSTEPS} - // \end{figure} - // - // \begin{figure}[htbp] - // \center - // \includegraphics[width=0.44\textwidth]{qb_ExtractRoad_pretty2.eps} - // \includegraphics[width=0.44\textwidth]{ExtractRoadByStepsExampleOutput2.eps} - // \itkcaption[Road extraction filter application]{Result of applying - // the road extraction by steps pipeline to a fusionned Quickbird - // image. From left to right : original image, extracted road with their - // Likelihood values.} - // \label{fig:ROADEXTRACTIONBYSTEPS2} - // \end{figure} - - return EXIT_SUCCESS; -} diff --git a/Examples/FeatureExtraction/ExtractRoadExample.cxx b/Examples/FeatureExtraction/ExtractRoadExample.cxx deleted file mode 100644 index 94c4361e0d20c29ea24a6461e2248374e7047524..0000000000000000000000000000000000000000 --- a/Examples/FeatureExtraction/ExtractRoadExample.cxx +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -/* Example usage: -./ExtractRoadExample Input/qb_RoadExtract.tif Output/ExtractRoadOutput.png 337 557 432 859 1.0 0.00005 1.0 0.39269 1.0 10.0 25. -*/ - - -// The easiest way to use the road extraction filter provided by OTB is to use the composite -// filter. If a modification in the pipeline is required to adapt to a particular situation, -// the step by step example, described in the next section can be adapted. -// -// This example demonstrates the use of the \doxygen{otb}{RoadExtractionFilter}. -// This filter is a composite filter achieving road extraction according to the algorithm -// adapted by E. Christophe and J. Inglada \cite{Christophe2007} from an original method -// proposed in \cite{Lacroix1998}. -// -// The first step toward the use of this filter is the inclusion of the proper header files. - -#include "otbPolyLineParametricPathWithValue.h" -#include "otbRoadExtractionFilter.h" -#include "otbDrawPathListFilter.h" - -#include "otbImage.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "itkRescaleIntensityImageFilter.h" -#include "otbMath.h" - -#include "itkInvertIntensityImageFilter.h" -#include "itkGrayscaleDilateImageFilter.h" -#include "itkBinaryBallStructuringElement.h" - -int main(int argc, char* argv[]) -{ - - if (argc != 14) - { - std::cerr << "Usage: " << argv[0]; - std::cerr << " inputFileName outputFileName firstPixelComponent secondPixelComponent "; - std::cerr << "thirdPixelComponent fourthPixelComponent alpha amplitudeThrehsold tolerance "; - std::cerr << "angularThreshold-maxAngle firstMeanDistanceThreshold secondMeanDistanceThreshold "; - std::cerr << "distanceThreshold" << std::endl; - return EXIT_FAILURE; - } - - const unsigned int Dimension = 2; - // Then we must decide what pixel type to use for the image. We choose to do - // all the computation in floating point precision and rescale the results - // between 0 and 255 in order to export PNG images. - - typedef double InputPixelType; - typedef unsigned char OutputPixelType; - - // The images are defined using the pixel type and the dimension. Please note that - // the \doxygen{otb}{RoadExtractionFilter} needs an \doxygen{otb}{VectorImage} as input - // to handle multispectral images. - - typedef otb::VectorImage<InputPixelType, Dimension> InputVectorImageType; - typedef otb::Image<InputPixelType, Dimension> InputImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - - // We define the type of the polyline that the filter produces. We use the - // \doxygen{otb}{PolyLineParametricPathWithValue}, which allows the filter to produce - // a likehood value along with each polyline. The filter is able to produce - // \doxygen{itk}{PolyLineParametricPath} as well. - - typedef otb::PolyLineParametricPathWithValue<InputPixelType, Dimension> PathType; - - // Now we can define the \doxygen{otb}{RoadExtractionFilter} that takes a multi-spectral - // image as input and produces a list of polylines. - - typedef otb::RoadExtractionFilter<InputVectorImageType, PathType> RoadExtractionFilterType; - - // We also define an \doxygen{otb}{DrawPathListFilter} to draw the output - // polylines on an image, taking their likehood values into account. - - typedef otb::DrawPathListFilter<InputImageType, PathType, InputImageType> DrawPathFilterType; - - // The intensity rescaling of the results will be carried out by the - // \doxygen{itk}{RescaleIntensityImageFilter} which is templated by the - // input and output image types. - - typedef itk::RescaleIntensityImageFilter<InputImageType, OutputImageType> RescalerType; - - // An \doxygen{otb}{ImageFileReader} class is also instantiated in order to read - // image data from a file. Then, an \doxygen{otb}{ImageFileWriter} - // is instantiated in order to write the output image to a file. - - typedef otb::ImageFileReader<InputVectorImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - // The different filters composing our pipeline are created by invoking their - // \code{New()} methods, assigning the results to smart pointers. - - ReaderType::Pointer reader = ReaderType::New(); - RoadExtractionFilterType::Pointer roadExtractionFilter = RoadExtractionFilterType::New(); - DrawPathFilterType::Pointer drawingFilter = DrawPathFilterType::New(); - RescalerType::Pointer rescaleFilter = RescalerType::New(); - WriterType::Pointer writer = WriterType::New(); - - reader->SetFileName(argv[1]); - - // The \doxygen{otb}{RoadExtractionFilter} needs to have a reference pixel - // corresponding to the spectral content likely to represent a road. This is done - // by passing a pixel to the filter. Here we suppose that the input image - // has four spectral bands. - - InputVectorImageType::PixelType ReferencePixel; - ReferencePixel.SetSize(4); - ReferencePixel.SetElement(0, ::atof(argv[3])); - ReferencePixel.SetElement(1, ::atof(argv[4])); - ReferencePixel.SetElement(2, ::atof(argv[5])); - ReferencePixel.SetElement(3, ::atof(argv[6])); - roadExtractionFilter->SetReferencePixel(ReferencePixel); - - // We must also set the alpha parameter of the filter which allows us to tune the width of the roads - // we want to extract. Typical value is $1.0$ and should be working in most situations. - - roadExtractionFilter->SetAlpha(atof(argv[7])); - - // All other parameter should not influence the results too much in most situation and can - // be kept at the default value. - // - // The amplitude threshold parameter tunes the sensitivity of the vectorization step. A typical - // value is $5 \cdot 10^{-5}$. - - roadExtractionFilter->SetAmplitudeThreshold(atof(argv[8])); - - // The tolerance threshold tunes the sensitivity of the path simplification step. - // Typical value is $1.0$. - - roadExtractionFilter->SetTolerance(atof(argv[9])); - - // Roads are not likely to have sharp turns. Therefore we set the max angle parameter, - // as well as the link angular threshold. The value is typically $\frac{\pi}{8}$. - - roadExtractionFilter->SetMaxAngle(atof(argv[10])); - roadExtractionFilter->SetAngularThreshold(atof(argv[10])); - - // The \doxygen{otb}{RoadExtractionFilter} performs two odd path removing operations at different stage of - // its execution. The first mean distance threshold and the second mean distance threshold set their criterion - // for removal. Path are removed if their mean distance between nodes is to small, since such path coming - // from previous filters are likely to be tortuous. The first removal operation as a typical mean distance - // threshold parameter of $1.0$, and the second of $10.0$. - - roadExtractionFilter->SetFirstMeanDistanceThreshold(atof(argv[11])); - roadExtractionFilter->SetSecondMeanDistanceThreshold(atof(argv[12])); - - // The \doxygen{otb}{RoadExtractionFilter} is able to link path whose ends are near - // according to an euclidean distance criterion. The threshold for this distance - // to link a path is the distance threshold parameter. A typical value is $25$. - - roadExtractionFilter->SetDistanceThreshold(atof(argv[13])); - - // We will now create a black background image to draw the resulting polyline on. - // To achieve this we need to know the size of our input image. Therefore we trigger the - // \code{GenerateOutputInformation()} of the reader. - - reader->GenerateOutputInformation(); - InputImageType::Pointer blackBackground = InputImageType::New(); - blackBackground->CopyInformation(reader->GetOutput()); - blackBackground->SetRegions(blackBackground->GetLargestPossibleRegion()); - blackBackground->Allocate(); - blackBackground->FillBuffer(0); - - // We tell the \doxygen{otb}{DrawPathListFilter} to try to use the likehood value - // embedded within the polyline as a value for drawing this polyline if possible. - - drawingFilter->UseInternalPathValueOn(); - - // The \code{itk::RescaleIntensityImageFilter} needs to know which - // is the minimum and maximum values of the output generated - // image. Those can be chosen in a generic way by using the - // \code{NumericTraits} functions, since they are templated over - // the pixel type. - - rescaleFilter->SetOutputMinimum(itk::NumericTraits<OutputPixelType>::min()); - rescaleFilter->SetOutputMaximum(itk::NumericTraits<OutputPixelType>::max()); - - // Now it is time for some pipeline wiring. - - roadExtractionFilter->SetInput(reader->GetOutput()); - drawingFilter->SetInput(blackBackground); - drawingFilter->SetInputPath(roadExtractionFilter->GetOutput()); - rescaleFilter->SetInput(drawingFilter->GetOutput()); - - // The update of the pipeline is triggered by the \code{Update()} method - // of the rescale intensity filter. - - rescaleFilter->Update(); - - // output image enhancement - typedef itk::BinaryBallStructuringElement<OutputPixelType, Dimension> StructuringElementType; - typedef itk::GrayscaleDilateImageFilter<OutputImageType, OutputImageType, StructuringElementType> DilateFilterType; - typedef itk::InvertIntensityImageFilter<OutputImageType, OutputImageType> InvertFilterType; - - StructuringElementType se; - se.SetRadius(1); - se.CreateStructuringElement(); - - DilateFilterType::Pointer dilater = DilateFilterType::New(); - - dilater->SetInput(rescaleFilter->GetOutput()); - dilater->SetKernel(se); - - InvertFilterType::Pointer invertFilter = InvertFilterType::New(); - invertFilter->SetInput(dilater->GetOutput()); - - writer->SetFileName(argv[2]); - writer->SetInput(invertFilter->GetOutput()); - writer->Update(); - - // Figure~\ref{fig:ROADEXTRACTION_FILTER} shows the result of applying - // the road extraction filter to a fusionned Quickbird image. - // \begin{figure} - // \center - // \includegraphics[width=0.44\textwidth]{qb_ExtractRoad_pretty.eps} - // \includegraphics[width=0.44\textwidth]{ExtractRoadOutput.eps} - // \itkcaption[Road extraction filter application]{Result of applying - // the \doxygen{otb}{RoadExtractionFilter} to a fusionned Quickbird - // image. From left to right : original image, extracted road with their - // likehood values (color are inverted for display).} - // \label{fig:ROADEXTRACTION_FILTER} - // \end{figure} - - return EXIT_SUCCESS; -} diff --git a/Examples/FeatureExtraction/ParallelLineDetectionExample.cxx b/Examples/FeatureExtraction/ParallelLineDetectionExample.cxx deleted file mode 100644 index 305fd72b5ade098bd0ec217ee49a71b41c3211e6..0000000000000000000000000000000000000000 --- a/Examples/FeatureExtraction/ParallelLineDetectionExample.cxx +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -/* Example usage: -./ParallelLineDetectionExample Output/Lines.png Output/ParallelLines.png 20 2 10 -*/ - - -// This example illustrates the details of the \doxygen{otb}{ParallelLinePathListFilter}. -// - -#include "itkPolyLineParametricPath.h" -#include "otbDrawPathListFilter.h" - -#include "otbParallelLinePathListFilter.h" - -#include "otbImage.h" -#include "otbImageFileWriter.h" - -int main(int argc, char* argv[]) -{ - if (argc != 6) - { - std::cerr << "Usage: " << std::endl; - std::cerr << argv[0] << " outputImage "; - std::cerr << " outputParallelLineImage "; - std::cerr << " distThreshParallel angThreshParallel commonDistThreshParallel" << std::endl; - return EXIT_FAILURE; - } - - double distThreshParallel = atof(argv[3]); - double angThreshParallel = atof(argv[4]); - double commonDistThreshParallel = atof(argv[5]); - - // We start by creating an empty image - const unsigned int Dimension = 2; - typedef unsigned char PixelType; - - typedef otb::Image<PixelType, Dimension> ImageType; - - ImageType::Pointer image = ImageType::New(); - - ImageType::IndexType start; - - start[0] = 0; - start[1] = 0; - - ImageType::SizeType size; - size[0] = 600; - size[1] = 300; - - ImageType::RegionType region; - - region.SetSize(size); - region.SetIndex(start); - image->SetRegions(region); - image->Allocate(); - image->FillBuffer(itk::NumericTraits<PixelType>::Zero); - - // We create some lines - typedef itk::PolyLineParametricPath<Dimension> PathType; - typedef otb::ObjectList<PathType> PathListType; - - PathListType::Pointer lineList = PathListType::New(); - - typedef PathType::ContinuousIndexType ContinuousIndexType; - ContinuousIndexType cindex; - - /*-----*/ - PathType::Pointer aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 1; - cindex[1] = 41; - aLine->AddVertex(cindex); - - cindex[0] = 175; - cindex[1] = 204; - aLine->AddVertex(cindex); - - lineList->PushBack(aLine); - - /*-----*/ - aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 60; - cindex[1] = 18; - aLine->AddVertex(cindex); - - cindex[0] = 203; - cindex[1] = 164; - aLine->AddVertex(cindex); - - lineList->PushBack(aLine); - - /*-----*/ - aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 174; - cindex[1] = 99; - aLine->AddVertex(cindex); - - cindex[0] = 281; - cindex[1] = 1; - aLine->AddVertex(cindex); - - lineList->PushBack(aLine); - - /*-----*/ - aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 3; - cindex[1] = 233; - aLine->AddVertex(cindex); - - cindex[0] = 191; - cindex[1] = 227; - aLine->AddVertex(cindex); - - lineList->PushBack(aLine); - - /*-----*/ - aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 254; - cindex[1] = 279; - aLine->AddVertex(cindex); - - cindex[0] = 351; - cindex[1] = 110; - aLine->AddVertex(cindex); - - lineList->PushBack(aLine); - - /*-----*/ - aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 270; - cindex[1] = 287; - aLine->AddVertex(cindex); - - cindex[0] = 368; - cindex[1] = 120; - aLine->AddVertex(cindex); - - lineList->PushBack(aLine); - - /*-----*/ - aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 355; - cindex[1] = 204; - aLine->AddVertex(cindex); - - cindex[0] = 528; - cindex[1] = 199; - aLine->AddVertex(cindex); - - lineList->PushBack(aLine); - - /*-----*/ - aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 437; - cindex[1] = 243; - aLine->AddVertex(cindex); - - cindex[0] = 591; - cindex[1] = 237; - aLine->AddVertex(cindex); - - lineList->PushBack(aLine); - - // Polylines are drawn on a black - typedef otb::DrawPathListFilter<ImageType, PathType, ImageType> DrawPathType; - DrawPathType::Pointer drawPathListFilter = DrawPathType::New(); - drawPathListFilter->SetInput(image); - drawPathListFilter->SetInputPath(lineList); - drawPathListFilter->SetPathValue(itk::NumericTraits<PixelType>::max()); - - typedef otb::ImageFileWriter<ImageType> WriterType; - WriterType::Pointer writer = WriterType::New(); - writer->SetInput(drawPathListFilter->GetOutput()); - writer->SetFileName(argv[1]); - writer->Update(); - - // Parallel lines are detected. A minimum common length, an angular - // threshold and a maximum distance threshold have to specified. - // The input is a pathList of the previously extracted line segments. - typedef otb::ParallelLinePathListFilter<PathType> ParallelLinePathType; - ParallelLinePathType::Pointer parallelLinePathListFilter = ParallelLinePathType::New(); - parallelLinePathListFilter->SetDistanceThreshold(distThreshParallel); - parallelLinePathListFilter->SetAngularThreshold(angThreshParallel); - parallelLinePathListFilter->SetCommonDistanceThreshold(commonDistThreshParallel); - parallelLinePathListFilter->SetInput(lineList); - parallelLinePathListFilter->Update(); - - // A black background image is built to draw the path on. - ImageType::Pointer outputParallel = ImageType::New(); - outputParallel->SetRegions(image->GetLargestPossibleRegion()); - outputParallel->Allocate(); - outputParallel->FillBuffer(itk::NumericTraits<PixelType>::Zero); - - // Parallel lines are drawn on a black background image with \doxygen{otb}{DrawPathListFilter}. - // The \code{SetUseIternalValues()} tells the drawing filter to draw the path with its likelihood - // value. - // typedef otb::DrawPathListFilter<ImageType, PathType, ImageType> DrawPathType; - DrawPathType::Pointer drawPathListFilterParallel = DrawPathType::New(); - drawPathListFilterParallel->SetInput(outputParallel); - drawPathListFilterParallel->SetInputPath(parallelLinePathListFilter->GetOutput()); - drawPathListFilter->SetPathValue(itk::NumericTraits<PixelType>::max()); - drawPathListFilterParallel->SetUseInternalPathValue(false); - - // Write the Line image - WriterType::Pointer writerParallel = WriterType::New(); - writerParallel->SetInput(drawPathListFilterParallel->GetOutput()); - writerParallel->SetFileName(argv[2]); - writerParallel->Update(); - - return EXIT_SUCCESS; -} diff --git a/Examples/FeatureExtraction/SeamCarvingExample.cxx b/Examples/FeatureExtraction/SeamCarvingExample.cxx deleted file mode 100644 index 854872a1b56ec802b03b13569154f4e1c2df596b..0000000000000000000000000000000000000000 --- a/Examples/FeatureExtraction/SeamCarvingExample.cxx +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -// This example illustrates the details of the seam carving operation. -// References to this method can be found in \cite{Avidan07}. This example -// details the use of \doxygen{otb}{ImageToCarvingPathFilter} and -// \doxygen{otb}{RemoveCarvingPathFilter}. -// -// In this example, a loop is defined to remove a vertical or horizontal seam -// at each step of the algorithm. The seam with the minimum energy is chosen. - -/* Example usage: -./SeamCarvingExample Input/QB_Suburb.png Output/SeamCarvingExampleOutput.png 50 -*/ - - -#include "otbImage.h" -#include "itkPolyLineParametricPath.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "itkUnaryFunctorImageFilter.h" -#include "itkGradientMagnitudeImageFilter.h" -#include "itkRescaleIntensityImageFilter.h" - -#include "otbDrawPathFilter.h" -#include "otbImageToCarvingPathFilter.h" -#include "otbRemoveCarvingPathFilter.h" - -#include "itkImageDuplicator.h" - -int main(int itkNotUsed(argc), char* argv[]) -{ - - typedef float InputPixelType; - typedef unsigned char OutputPixelType; - const unsigned int Dimension = 2; - - typedef otb::Image<InputPixelType, Dimension> ImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - typedef itk::PolyLineParametricPath<Dimension> PathType; - - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - typedef itk::RescaleIntensityImageFilter<ImageType, OutputImageType> RescalerType; - - ReaderType::Pointer reader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - RescalerType::Pointer rescaler = RescalerType::New(); - - const char* filenamereader = argv[1]; - reader->SetFileName(filenamereader); - - const char* filenamewriter = argv[2]; - writer->SetFileName(filenamewriter); - - int iteration = atoi(argv[3]); - - // Energy is computed according to the gradient of the image, thus an - // \doxygen{itk}{GradientMagnitudeImageFilter} is instantiated - - typedef itk::GradientMagnitudeImageFilter<ImageType, ImageType> GradientType; - GradientType::Pointer gradient = GradientType::New(); - - // The \doxygen{otb}{ImageToCarvingPathFilter} compute the seam of minimum - // energy according to lines or columns of the image. Later, as we will - // choose the best option between the two, we need two of these filters. - - typedef otb::ImageToCarvingPathFilter<ImageType, PathType> CarvingFilterType; - CarvingFilterType::Pointer carvingFilterVert = CarvingFilterType::New(); - CarvingFilterType::Pointer carvingFilterHor = CarvingFilterType::New(); - - // The \doxygen{otb}{RemoveCarvingPathFilter} will really resize the image - // deleting the path. - - typedef otb::RemoveCarvingPathFilter<ImageType, PathType, ImageType> RemoveCarvingPathFilterType; - RemoveCarvingPathFilterType::Pointer removeCarvingPath = RemoveCarvingPathFilterType::New(); - - // As we are going to iterate through the filters, we need to disconnect the - // pipeline at one point and store the image somewhere. For that purpose, we - // use an \doxygen{itk}{ImageDuplicator} - - typedef itk::ImageDuplicator<ImageType> duplicatorType; - duplicatorType::Pointer duplicator = duplicatorType::New(); - - // Now that all elements have been instantiated, we start to plug the pipeline - // and to define the loop. - - reader->Update(); - duplicator->SetInputImage(reader->GetOutput()); - duplicator->Update(); - - double energyVert, energyHor; - - for (int i = 0; i < iteration; ++i) - { - - gradient->SetInput(duplicator->GetOutput()); - - // Two carving filters processed the gradient image to find the minimum - // vertical seam and the minimum horizontal seam. Note that the - // \code{UpdateLargestPossibleRegion()} need to be used as the size of the - // input image will be different in each loop. - - carvingFilterVert->SetInput(gradient->GetOutput()); - carvingFilterVert->SetDirection(0); - carvingFilterVert->UpdateLargestPossibleRegion(); - energyVert = carvingFilterVert->GetEnergyPerPix(); - - carvingFilterHor->SetInput(gradient->GetOutput()); - carvingFilterHor->SetDirection(1); - carvingFilterHor->UpdateLargestPossibleRegion(); - energyHor = carvingFilterHor->GetEnergyPerPix(); - - // The vertical or the horizontal seam with the minimal energy is chosen. - - if (energyVert < energyHor) - { - removeCarvingPath->SetInput(duplicator->GetOutput()); - removeCarvingPath->SetInputPath(carvingFilterVert->GetOutput()); - removeCarvingPath->SetDirection(0); - removeCarvingPath->UpdateLargestPossibleRegion(); - } - else - { - removeCarvingPath->SetInput(duplicator->GetOutput()); - removeCarvingPath->SetInputPath(carvingFilterHor->GetOutput()); - removeCarvingPath->SetDirection(1); - removeCarvingPath->UpdateLargestPossibleRegion(); - } - - // The duplicator filter keep the results for the next loop - - duplicator->SetInputImage(removeCarvingPath->GetOutput()); - duplicator->Update(); - } - - // Finally, the resulting image is saved on an image file as usual - - rescaler->SetInput(duplicator->GetOutput()); - writer->SetInput(rescaler->GetOutput()); - writer->Update(); - - // Figure~\ref{fig:SEAMCARVING_FILTER} shows the result of applying - // the seam carving filter to a satellite image. - // \begin{figure} - // \center - // \includegraphics[width=0.44\textwidth]{QB_Suburb.eps} - // \includegraphics[width=0.38\textwidth]{SeamCarvingExampleOutput.eps} - // \itkcaption[Seam carving filter application]{Result of applying - // the \doxygen{otb}{ImageToCarvingPathFilter} followed by the - // \doxygen{otb}{RemoveCarvingPathFilter} to Quickbird - // image. From left to right : original image, reduced image removing the 50 - // seams with the lowest energy.} - // \label{fig:SEAMCARVING_FILTER} - // \end{figure} - - return EXIT_SUCCESS; -} diff --git a/Examples/FeatureExtraction/SeamCarvingOtherExample.cxx b/Examples/FeatureExtraction/SeamCarvingOtherExample.cxx deleted file mode 100644 index f8ac6e4e1b794f09b246ba2105d9dff9333d823b..0000000000000000000000000000000000000000 --- a/Examples/FeatureExtraction/SeamCarvingOtherExample.cxx +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -// This example illustrates the use of the \doxygen{otb}{AddCarvingPathFilter}, -// the opposite of the \doxygen{otb}{RemoveCarvingPathFilter}. -// -// Here, we use this filter combined with the \doxygen{otb}{DrawPathFilter} to -// output the image with the removed seam in white. -// -// Most of the code is similar to the previous example. - -/* Example usage: -./SeamCarvingOtherExample Input/QB_Suburb.png Output/SeamCarvingOtherExampleOutput.png 50 -*/ - - -#include "otbImage.h" -#include "itkPolyLineParametricPath.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "itkUnaryFunctorImageFilter.h" -#include "itkRescaleIntensityImageFilter.h" -#include "itkGradientMagnitudeImageFilter.h" - -#include "otbDrawPathFilter.h" -#include "otbImageToCarvingPathFilter.h" -#include "otbRemoveCarvingPathFilter.h" -#include "otbAddCarvingPathFilter.h" - -#include "itkImageDuplicator.h" -#include "otbObjectList.h" - -int main(int itkNotUsed(argc), char* argv[]) -{ - - typedef float InputPixelType; - typedef unsigned char OutputPixelType; - const unsigned int Dimension = 2; - - typedef otb::Image<InputPixelType, Dimension> ImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - typedef itk::PolyLineParametricPath<Dimension> PathType; - - // We need to define a list to keep the path in memory until the end of - // the seam carving process. This is done using an \doxygen{otb}{ObjectList} - - typedef otb::ObjectList<PathType> PathListType; - PathListType::Pointer pathList = PathListType::New(); - - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - typedef itk::RescaleIntensityImageFilter<ImageType, OutputImageType> RescalerType; - - ReaderType::Pointer reader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - RescalerType::Pointer rescaler = RescalerType::New(); - - const char* filenamereader = argv[1]; - reader->SetFileName(filenamereader); - - const char* filenamewriter = argv[2]; - writer->SetFileName(filenamewriter); - - int iteration = atoi(argv[3]); - - // We instantiate the different filters of the pipeline as before. - - typedef itk::GradientMagnitudeImageFilter<ImageType, ImageType> GradientType; - GradientType::Pointer gradient = GradientType::New(); - - typedef otb::ImageToCarvingPathFilter<ImageType, PathType> CarvingFilterType; - CarvingFilterType::Pointer carvingFilter = CarvingFilterType::New(); - - typedef otb::DrawPathFilter<ImageType, PathType, ImageType> DrawPathFilterType; - DrawPathFilterType::Pointer drawPathFilter = DrawPathFilterType::New(); - - typedef otb::RemoveCarvingPathFilter<ImageType, PathType, ImageType> RemoveCarvingPathFilterType; - RemoveCarvingPathFilterType::Pointer removeCarvingPath = RemoveCarvingPathFilterType::New(); - - typedef otb::AddCarvingPathFilter<ImageType, PathType, ImageType> AddCarvingPathFilterType; - AddCarvingPathFilterType::Pointer addCarvingPath = AddCarvingPathFilterType::New(); - - typedef itk::ImageDuplicator<ImageType> duplicatorType; - duplicatorType::Pointer duplicator = duplicatorType::New(); - reader->Update(); - duplicator->SetInputImage(reader->GetOutput()); - duplicator->Update(); - - // The loop to shorten the image is similar to the previous one. Here we - // decide to remove alternatively one vertical and one horizontal seam. At - // each iteration, we save the seam on the list using the \code{PushBack()} - // method. - - for (int i = 0; i < iteration; ++i) - { - - gradient->SetInput(duplicator->GetOutput()); - - carvingFilter->SetInput(gradient->GetOutput()); - carvingFilter->SetDirection(i % 2); - - removeCarvingPath->SetInput(duplicator->GetOutput()); - removeCarvingPath->SetInputPath(carvingFilter->GetOutput()); - removeCarvingPath->SetDirection(i % 2); - removeCarvingPath->UpdateLargestPossibleRegion(); - - pathList->PushBack(carvingFilter->GetOutput()); - carvingFilter->GetOutput()->DisconnectPipeline(); - - duplicator->SetInputImage(removeCarvingPath->GetOutput()); - duplicator->Update(); - } - - // The next loop will put back the seam using the - // \doxygen{otb}{AddCarvingPathFilter} and drawing it with the - // \doxygen{otb}{DrawPathFilter}. - - for (int i = iteration - 1; i >= 0; i--) - { - - addCarvingPath->SetInput(duplicator->GetOutput()); - addCarvingPath->SetInputPath(pathList->GetNthElement(i)); - addCarvingPath->SetDirection(i % 2); - addCarvingPath->UpdateLargestPossibleRegion(); - - drawPathFilter->SetInput(addCarvingPath->GetOutput()); - drawPathFilter->SetInputPath(pathList->GetNthElement(i)); - drawPathFilter->UpdateLargestPossibleRegion(); - - duplicator->SetInputImage(drawPathFilter->GetOutput()); - duplicator->Update(); - } - - // Finally, the resulting image is saved on an image file as usual - - rescaler->SetInput(duplicator->GetOutput()); - writer->SetInput(rescaler->GetOutput()); - writer->Update(); - - // Figure~\ref{fig:SEAMCARVING2_FILTER} shows the result of applying - // the seam carving filter to a satellite image. - // \begin{figure} - // \center - // \includegraphics[width=0.44\textwidth]{QB_Suburb.eps} - // \includegraphics[width=0.44\textwidth]{SeamCarvingOtherExampleOutput.eps} - // \itkcaption[Seam carving filter application]{Illustration of the minimum - // seams alternatively vertical and horizontal on a Quickbird - // image. From left to right : original image, image with the 25 vertical - // seams and the 25 horizontal seams.} - // \label{fig:SEAMCARVING2_FILTER} - // \end{figure} - - return EXIT_SUCCESS; -} diff --git a/Examples/FeatureExtraction/test/CMakeLists.txt b/Examples/FeatureExtraction/test/CMakeLists.txt index 0f1e957d04e949f5bcf3d51906014e7fc2e0061e..bea835448e0a05ee71769a08dbca9cb19dbef7e4 100644 --- a/Examples/FeatureExtraction/test/CMakeLists.txt +++ b/Examples/FeatureExtraction/test/CMakeLists.txt @@ -90,54 +90,6 @@ otb_add_test(NAME feTeRatioLineDetectorExampleTest COMMAND ${OTB_TEST_DRIVER} 5 1 ) -# ------- RoadExtractionExamplesTest---------- - - -otb_add_test(NAME feTeExtractRoadByStepsExampleTest COMMAND ${OTB_TEST_DRIVER} - --compare-n-images ${NOTOL} 2 - ${BASELINE}/qb_ExtractRoad_pretty.png - ${TEMP}/qb_ExtractRoad_pretty.png - ${BASELINE}/ExtractRoadByStepsExampleOutput.png - ${TEMP}/ExtractRoadByStepsExampleOutput.png - Execute $<TARGET_FILE:ExtractRoadByStepsExample> - ${INPUTDATA}/qb_RoadExtract.tif - ${TEMP}/ExtractRoadByStepsExampleOutput.png - ${TEMP}/qb_ExtractRoad_pretty.png - 337 557 432 859 0.00005 1.0 -) - - -otb_add_test(NAME feTeExtractRoadExampleTest COMMAND ${OTB_TEST_DRIVER} - --compare-image ${NOTOL} - ${BASELINE}/ExtractRoadExampleOutput.png - ${TEMP}/ExtractRoadExampleOutput.png - Execute $<TARGET_FILE:ExtractRoadExample> - ${INPUTDATA}/qb_RoadExtract.tif - ${TEMP}/ExtractRoadExampleOutput.png - 337 557 432 859 1.0 0.00005 1.0 0.39269 1.0 10.0 25. -) - -# ------- SeamCarvingExamplesTest---------- - -otb_add_test(NAME feTeSeamCarvingExampleTest COMMAND ${OTB_TEST_DRIVER} - --compare-image ${NOTOL} - ${BASELINE}/SeamCarvingExampleOutput.png - ${TEMP}/SeamCarvingExampleOutput.png - Execute $<TARGET_FILE:SeamCarvingExample> - ${INPUTDATA}/QB_Suburb.png - ${TEMP}/SeamCarvingExampleOutput.png - 50 -) - -otb_add_test(NAME feTeSeamCarvingOtherExampleTest COMMAND ${OTB_TEST_DRIVER} - --compare-image ${NOTOL} - ${BASELINE}/SeamCarvingOtherExampleOutput.png - ${TEMP}/SeamCarvingOtherExampleOutput.png - Execute $<TARGET_FILE:SeamCarvingOtherExample> - ${INPUTDATA}/QB_Suburb.png - ${TEMP}/SeamCarvingOtherExampleOutput.png - 50 -) #otb_add_test(NAME feTeImageToSIFTKeyPointSetFilterTest COMMAND ${OTB_TEST_DRIVER} # --compare-image ${NOTOL} diff --git a/Examples/OBIA/LabelMapToVectorData.cxx b/Examples/OBIA/LabelMapToVectorData.cxx index 001d38ecf9d139292dbcf9ffda681be03a85e87c..2f2a1423404845c1fd60146b0e0ae5524472ee87 100644 --- a/Examples/OBIA/LabelMapToVectorData.cxx +++ b/Examples/OBIA/LabelMapToVectorData.cxx @@ -20,7 +20,7 @@ /* Example usage: -./LabelMapToVectorData Input/rcc8_mire1.png Output/rcc8_mire2_vectorizer.shp +./LabelMapToVectorData Input/labelImage_UnsignedChar.tif Output/LabelMapToVectorData.shp */ diff --git a/Examples/OBIA/test/CMakeLists.txt b/Examples/OBIA/test/CMakeLists.txt index 49cb2f872e107f61111f8f8de573c974f6c1badb..563fdaf61883ef675fe38633608791d02554e5d8 100644 --- a/Examples/OBIA/test/CMakeLists.txt +++ b/Examples/OBIA/test/CMakeLists.txt @@ -42,6 +42,6 @@ set(INPUTDATA ${OTB_DATA_ROOT}/Input) otb_add_test(NAME trTeLabelMapToVectorData COMMAND ${OTB_TEST_DRIVER} Execute $<TARGET_FILE:LabelMapToVectorData> - ${INPUTDATA}/rcc8_mire1.png - ${TEMP}/rcc8_mire2_vectorizer.shp + ${INPUTDATA}/labelImage_UnsignedChar.tif + ${TEMP}/trTeLabelMapToVectorDataOutput.shp ) diff --git a/Examples/Projections/OrthoRectificationExample.cxx b/Examples/Projections/OrthoRectificationExample.cxx index 93bfecc1681ac8d3c5093c9f74664ca97c50c369..e3a2f4d1c5cdaf2a682c9b2bbc516f970134aba5 100644 --- a/Examples/Projections/OrthoRectificationExample.cxx +++ b/Examples/Projections/OrthoRectificationExample.cxx @@ -23,7 +23,7 @@ #include "otbImageFileWriter.h" // This example demonstrates the use of the -// \doxygen{otb}{OrthoRectificationFilter}. This filter is intended to +// \doxygen{otb}{GenericRSResampleImageFilter}. This filter is intended to // orthorectify images which are in a distributor format with the // appropriate meta-data describing the sensor model. In this example, // we will choose to use an UTM projection for the output image. @@ -32,7 +32,7 @@ // proper header files: the one for the ortho-rectification filter and // the one defining the different projections available in OTB. -#include "otbOrthoRectificationFilter.h" +#include "otbGenericRSResampleImageFilter.h" #include "otbSpatialReference.h" int main(int argc, char* argv[]) @@ -66,15 +66,12 @@ int main(int argc, char* argv[]) writer->SetFileName(argv[2]); // We can now proceed to declare the type for the ortho-rectification - // filter. The class \doxygen{otb}{OrthoRectificationFilter} is - // templated over the input and the output image types as well as over - // the cartographic projection. We define therefore the - // type of the projection we want, which is an UTM projection for this case. - -// Software Guide : BeginCodeSnippet - typedef otb::GenericMapProjection<otb::TransformDirection::FORWARD> MapProjectionType; - typedef otb::OrthoRectificationFilter<VectorImageType, VectorImageType, - MapProjectionType> + // filter. The class \doxygen{otb}{GenericRSResampleImageFilter} is + // templated over the input and the output image types. + + // Software Guide : BeginCodeSnippet + + typedef otb::GenericRSResampleImageFilter<VectorImageType, VectorImageType> OrthoRectifFilterType; OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New(); @@ -83,10 +80,9 @@ int main(int argc, char* argv[]) // instantiate the map projection, set the {\em zone} and {\em hemisphere} // parameters and pass this projection to the orthorectification filter. - MapProjectionType::Pointer utmMapProjection = MapProjectionType::New(); - utmMapProjection->SetWkt(otb::SpatialReference::FromUTM(atoi(argv[3]),*argv[4]=='N'? otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt()); - std::cout<<utmMapProjection->GetWkt()<<std::endl; - orthoRectifFilter->SetMapProjection(utmMapProjection); + std::string wkt = otb::SpatialReference::FromUTM(atoi(argv[3]),*argv[4]=='N'? otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt(); + std::cout<<wkt<<std::endl; + orthoRectifFilter->SetOutputProjectionRef(wkt); // We then wire the input image to the orthorectification filter. @@ -129,8 +125,6 @@ int main(int argc, char* argv[]) writer->SetInput(orthoRectifFilter->GetOutput()); - writer->SetAutomaticTiledStreaming(); - // Finally, we trigger the pipeline execution by calling the // \code{Update()} method on the writer. Please note that the // ortho-rectification filter is derived from the diff --git a/Examples/Tutorials/OrthoFusion.cxx b/Examples/Tutorials/OrthoFusion.cxx index a94f608086de60b7907003cecca3822fee7ce8e4..c0ead29574f94efba0267646cbeea59af4162b45 100644 --- a/Examples/Tutorials/OrthoFusion.cxx +++ b/Examples/Tutorials/OrthoFusion.cxx @@ -28,8 +28,7 @@ #include "otbImageFileReader.h" #include "otbImageFileWriter.h" -#include "otbOrthoRectificationFilter.h" -#include "otbGenericMapProjection.h" +#include "otbGenericRSResampleImageFilter.h" #include "otbSimpleRcsPanSharpeningFusionImageFilter.h" #include "otbStandardFilterWatcher.h" @@ -89,12 +88,9 @@ int main(int argc, char* argv[]) // \item the hemisphere // \end{itemize} - typedef otb::GenericMapProjection<otb::TransformDirection::INVERSE> InverseProjectionType; - InverseProjectionType::Pointer utmMapProjection = InverseProjectionType::New(); - utmMapProjection->SetWkt( - otb::SpatialReference::FromUTM(atoi(argv[4]),argv[5][0]=='N' ? + std::string wkt = otb::SpatialReference::FromUTM(atoi(argv[4]),argv[5][0]=='N' ? otb::SpatialReference::hemisphere::north : - otb::SpatialReference::hemisphere::south).ToWkt()); + otb::SpatialReference::hemisphere::south).ToWkt(); // We will need to pass several parameters to the orthorectification // concerning the desired output region: @@ -118,10 +114,10 @@ int main(int argc, char* argv[]) // We declare the orthorectification filter. And provide the different // parameters: - typedef otb::OrthoRectificationFilter<ImageType, DoubleImageType, InverseProjectionType> OrthoRectifFilterType; + typedef otb::GenericRSResampleImageFilter<ImageType, DoubleImageType> OrthoRectifFilterType; OrthoRectifFilterType::Pointer orthoRectifPAN = OrthoRectifFilterType::New(); - orthoRectifPAN->SetMapProjection(utmMapProjection); + orthoRectifPAN->SetOutputProjectionRef(wkt); orthoRectifPAN->SetInput(readerPAN->GetOutput()); @@ -133,12 +129,12 @@ int main(int argc, char* argv[]) // Now we are able to have the orthorectified area from the PAN image. We just // have to follow a similar process for the XS image. - typedef otb::OrthoRectificationFilter<VectorImageType, DoubleVectorImageType, InverseProjectionType> VectorOrthoRectifFilterType; + typedef otb::GenericRSResampleImageFilter<VectorImageType, DoubleVectorImageType> VectorOrthoRectifFilterType; VectorOrthoRectifFilterType::Pointer orthoRectifXS = VectorOrthoRectifFilterType::New(); - orthoRectifXS->SetMapProjection(utmMapProjection); + orthoRectifXS->SetOutputProjectionRef(wkt); orthoRectifXS->SetInput(readerXS->GetOutput()); @@ -160,8 +156,6 @@ int main(int argc, char* argv[]) writer->SetInput(fusion->GetOutput()); - writer->SetAutomaticTiledStreaming(); - otb::StandardFilterWatcher watcher(writer, "OrthoFusion"); writer->Update(); diff --git a/Modules/Applications/AppClassification/app/CMakeLists.txt b/Modules/Applications/AppClassification/app/CMakeLists.txt index b646618959248fab615337a300a67a254f1337b5..50ac00ea1619c068da99774d0010ee532a5b7fd1 100644 --- a/Modules/Applications/AppClassification/app/CMakeLists.txt +++ b/Modules/Applications/AppClassification/app/CMakeLists.txt @@ -48,11 +48,6 @@ otb_create_application( SOURCES otbFusionOfClassifications.cxx LINK_LIBRARIES ${${otb-module}_LIBRARIES}) -otb_create_application( - NAME ComputePolylineFeatureFromImage - SOURCES otbComputePolylineFeatureFromImage.cxx - LINK_LIBRARIES ${${otb-module}_LIBRARIES}) - if(OTB_USE_SHARK) otb_create_application( NAME KMeansClassification @@ -75,11 +70,6 @@ otb_create_application( SOURCES otbPredictRegression.cxx LINK_LIBRARIES ${${otb-module}_LIBRARIES}) -otb_create_application( - NAME DSFuzzyModelEstimation - SOURCES otbDSFuzzyModelEstimation.cxx - LINK_LIBRARIES ${${otb-module}_LIBRARIES}) - otb_create_application( NAME ClassificationMapRegularization SOURCES otbClassificationMapRegularization.cxx @@ -95,11 +85,6 @@ otb_create_application( SOURCES otbComputeImagesStatistics.cxx LINK_LIBRARIES ${${otb-module}_LIBRARIES}) -otb_create_application( - NAME VectorDataDSValidation - SOURCES otbVectorDataDSValidation.cxx - LINK_LIBRARIES ${${otb-module}_LIBRARIES}) - otb_create_application( NAME PolygonClassStatistics SOURCES otbPolygonClassStatistics.cxx diff --git a/Modules/Applications/AppClassification/app/otbComputePolylineFeatureFromImage.cxx b/Modules/Applications/AppClassification/app/otbComputePolylineFeatureFromImage.cxx deleted file mode 100644 index 919ad16354ffb3fbed8b08585e2d5c562c044955..0000000000000000000000000000000000000000 --- a/Modules/Applications/AppClassification/app/otbComputePolylineFeatureFromImage.cxx +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <iostream> - -#include "otbVectorImage.h" - -#include "otbWrapperApplicationFactory.h" - - -#include "otbVectorDataFileReader.h" -#include "otbVectorDataFileWriter.h" -#include "itkPreOrderTreeIterator.h" - -#include "otbVectorDataIntoImageProjectionFilter.h" -#include "otbVectorDataTransformFilter.h" -#include "itkAffineTransform.h" - -#include "otbParserConditionDataNodeFeatureFunction.h" -#include "otbNDVIDataNodeFeatureFunction.h" - -// Elevation handler -#include "otbWrapperElevationParametersHandler.h" - -namespace otb -{ -namespace Wrapper -{ - -class ComputePolylineFeatureFromImage: public Application -{ -public: - /** Standard class typedefs. */ - typedef ComputePolylineFeatureFromImage Self; - typedef Application Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - // Images - typedef FloatVectorImageType::PixelType PixelType; - typedef FloatVectorImageType ImageType; - - // VectorData - typedef VectorData<> VectorDataType; - typedef VectorDataType::DataNodeType DataNodeType; - typedef DataNodeType::ValuePrecisionType PrecisionType; - typedef DataNodeType::PrecisionType CoordRepType; - typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> TreeIteratorType; - typedef VectorDataIntoImageProjectionFilter<VectorDataType, ImageType> VectorDataIntoImageProjType; - typedef VectorDataProjectionFilter<VectorDataType, VectorDataType> VectorDataProjectionFilterType; - - typedef ParserConditionDataNodeFeatureFunction<ImageType, CoordRepType, PrecisionType> - ParserConditionFeatureFunctionType; - - /** Standard macro */ - itkNewMacro(Self) -; - - itkTypeMacro(ComputePolylineFeatureFromImage, otb::Application) -; - -private: - void DoInit() override - { - SetName("ComputePolylineFeatureFromImage"); - SetDescription("This application computes the chosen descriptors for each studied polyline contained in the input VectorData."); - - SetDocName("Compute Polyline Feature From Image"); - SetDocLongDescription("The first step in the classifier fusion based validation is to compute the chosen descriptors for each studied polyline."); - SetDocLimitations("Since it does not rely on streaming process, take care of the size of input image before launching application."); - SetDocAuthors("OTB-Team"); - SetDocSeeAlso(" "); - AddDocTag(Tags::FeatureExtraction); - - AddParameter(ParameterType_InputImage, "in", "Input Image"); - SetParameterDescription("in", "An image to compute the descriptors on."); - - AddParameter(ParameterType_InputVectorData, "vd", "Vector Data"); - SetParameterDescription("vd", "Vector data containing the polylines where the features will be computed."); - - // Elevation - ElevationParametersHandler::AddElevationParameters(this, "elev"); - - AddParameter(ParameterType_String, "expr", "Feature expression"); - SetParameterDescription("expr", "The feature formula (b1 < 0.3) where b1 is the standard name of input image first band"); - - AddParameter(ParameterType_String, "field", "Feature name"); - SetParameterDescription("field", "The field name corresponding to the feature codename (NONDVI, ROADSA...)"); - - AddParameter(ParameterType_OutputVectorData, "out", "Output Vector Data"); - SetParameterDescription("out", "The output vector data containing polylines with a new field"); - - // Doc example parameter settings - SetDocExampleParameterValue("in", "NDVI.TIF"); - SetDocExampleParameterValue("vd", "roads_ground_truth.shp"); - SetDocExampleParameterValue("expr", "\"(b1 > 0.4)\""); - SetDocExampleParameterValue("field", "NONDVI"); - SetDocExampleParameterValue("out", "PolylineFeatureFromImage_LI_NONDVI_gt.shp"); - - SetOfficialDocLink(); - } - - void DoUpdateParameters() override - { - // Nothing to do here : all parameters are independent - } - - void DoExecute() override - { - // Vector Data into Image projection - FloatVectorImageType::Pointer inImage = GetParameterImage("in"); - - inImage->UpdateOutputInformation(); - try - { - inImage->Update(); - } - catch (...) - { - itkGenericExceptionMacro(<< "Error during image update, maybe your image is to big."); - } - - otbAppLogDEBUG( << "Starting PolylineFeature extraction process" ) - - // Vector Data into Image projection - //// Read the Vectordata - - VectorDataType* inVectorData = GetParameterVectorData("vd"); - inVectorData->Update(); - //// Projection - VectorDataIntoImageProjType::Pointer vprojIm = VectorDataIntoImageProjType::New(); - vprojIm->SetInputVectorData(inVectorData); - vprojIm->SetInputImage(inImage); - - // Setup the DEM Handler - otb::Wrapper::ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(this,"elev"); - - vprojIm->SetUseOutputSpacingAndOriginFromImage(true); // we want index as input; - vprojIm->Update(); - - // Add description - ParserConditionFeatureFunctionType::Pointer vdescriptor = ParserConditionFeatureFunctionType::New(); - vdescriptor->SetExpression(GetParameterString("expr")); - vdescriptor->SetInputImage(inImage); - - m_OutVectorData = VectorDataType::New(); - // Retrieving root node - DataNodeType::Pointer root = m_OutVectorData->GetDataTree()->GetRoot()->Get(); - // Create the document node - DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - // Adding the layer to the data tree - m_OutVectorData->GetDataTree()->Add(document, root); - // Create the folder node - DataNodeType::Pointer folder = DataNodeType::New(); - folder->SetNodeType(otb::FOLDER); - // Adding the layer to the data tree - m_OutVectorData->GetDataTree()->Add(folder, document); - - TreeIteratorType itVector(vprojIm->GetOutput()->GetDataTree()); - itVector.GoToBegin(); - - while (!itVector.IsAtEnd()) - { - vdescriptor->SetInputImage(inImage); - if (!itVector.Get()->IsRoot() && !itVector.Get()->IsDocument() && !itVector.Get()->IsFolder()) - { - DataNodeType::Pointer currentGeometry = itVector.Get(); - currentGeometry->SetFieldAsDouble(GetParameterString("field"), - (double) (vdescriptor->Evaluate(*(currentGeometry.GetPointer()))[0])); - m_OutVectorData->GetDataTree()->Add(currentGeometry, folder); - } - ++itVector; - } - - /* - * Reprojection of the output VectorData - * - * The output of VectorDataToRoadDescription is in image index coordinates - * - * 3 cases : - * - input image has no geo-information : pass through - * - input image is in cartographic projection : apply image spacing and origin, and set the ProjectionRef - * - input image is in sensor model geometry : reproject in WGS84 - * - */ - - std::string projRef = inImage->GetProjectionRef(); - ImageKeywordlist kwl; - itk::ExposeMetaData<ImageKeywordlist>(inImage->GetMetaDataDictionary(), MetaDataKey::OSSIMKeywordlistKey, kwl); - - if (!projRef.empty()) - { - // image is in cartographic projection - // apply spacing and origin + set projection WKT - // The VectorData in output of the chain is in image index coordinate, - // and the projection information is lost - // Apply an affine transform to apply image origin and spacing, - // and arbitrarily set the ProjectionRef to the input image ProjectionRef - - typedef itk::AffineTransform<VectorDataType::PrecisionType, 2> TransformType; - typedef otb::VectorDataTransformFilter<VectorDataType, VectorDataType> VDTransformType; - - TransformType::ParametersType params; - params.SetSize(6); - params[0] = inImage->GetSignedSpacing()[0]; - params[1] = 0; - params[2] = 0; - params[3] = inImage->GetSignedSpacing()[1]; - params[4] = inImage->GetOrigin()[0]; - params[5] = inImage->GetOrigin()[1]; - - TransformType::Pointer transform = TransformType::New(); - transform->SetParameters(params); - - VDTransformType::Pointer vdTransform = VDTransformType::New(); - vdTransform->SetTransform(transform); - vdTransform->SetInput(m_OutVectorData); - vdTransform->Update(); - - m_ProjectedVectorData = vdTransform->GetOutput(); - - m_ProjectedVectorData->SetProjectionRef(inImage->GetProjectionRef()); - } - else - if (kwl.GetSize() > 0) - { - // image is in sensor model geometry - - // Reproject VectorData in image projection - VectorDataProjectionFilterType::Pointer vproj = VectorDataProjectionFilterType::New(); - vproj->SetInput(m_OutVectorData); - - vproj->SetOutputKeywordList(inImage->GetImageKeywordlist()); - vproj->SetOutputProjectionRef(inImage->GetProjectionRef()); - vproj->SetOutputOrigin(inImage->GetOrigin()); - vproj->SetOutputSpacing(inImage->GetSignedSpacing()); - - // Setup the DEM Handler - otb::Wrapper::ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(this,"elev"); - - vproj->Update(); - m_ProjectedVectorData = vproj->GetOutput(); - } - else - { - // no georeferencing information - m_ProjectedVectorData = m_OutVectorData; - } - - // Set the output vectorData - SetParameterOutputVectorData("out", m_ProjectedVectorData); - - }; - - VectorDataType::Pointer m_ProjectedVectorData; - VectorDataType::Pointer m_OutVectorData; - -}; - -} -} - -OTB_APPLICATION_EXPORT(otb::Wrapper::ComputePolylineFeatureFromImage) - - diff --git a/Modules/Applications/AppClassification/app/otbDSFuzzyModelEstimation.cxx b/Modules/Applications/AppClassification/app/otbDSFuzzyModelEstimation.cxx deleted file mode 100644 index 2804718d78036f2a3c21a8c1661a948b2538b8a4..0000000000000000000000000000000000000000 --- a/Modules/Applications/AppClassification/app/otbDSFuzzyModelEstimation.cxx +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#include <iostream> - -#include "otbWrapperApplication.h" -#include "otbWrapperApplicationFactory.h" -#include "otbWrapperStringListParameter.h" -#include "otbImageToEnvelopeVectorDataFilter.h" -#include "otbVectorDataToRandomLineGenerator.h" -#include "itkAmoebaOptimizer.h" -#include "otbStandardDSCostFunction.h" - - -namespace otb -{ - -namespace Wrapper -{ - -#include "itkCommand.h" -class CommandIterationUpdate : public itk::Command -{ -public: -typedef CommandIterationUpdate Self; -typedef itk::Command Superclass; -typedef itk::SmartPointer<Self> Pointer; -itkNewMacro( Self ); -protected: -CommandIterationUpdate() {}; -public: -typedef itk::AmoebaOptimizer OptimizerType; -typedef const OptimizerType * OptimizerPointer; - - -void Execute(itk::Object *caller, const itk::EventObject & event) override -{ - Execute( (const itk::Object *)caller, event); -} - -void Execute(const itk::Object * object, const itk::EventObject & event) override -{ - OptimizerPointer optimizer = - dynamic_cast< OptimizerPointer >( object ); - if( ! itk::IterationEvent().CheckEvent( &event ) ) - { - return; - } - std::ostringstream message; - message << optimizer->GetCachedValue() << " "; - message << optimizer->GetCachedCurrentPosition() << std::endl; - std::cout<<message.str()<<std::endl; -} - - -}; - - -class DSFuzzyModelEstimation: public Application -{ -public: - /** Standard class typedefs. */ - typedef DSFuzzyModelEstimation Self; - typedef Application Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - typedef VectorData<double> VectorDataType; - - typedef VectorDataType::DataTreeType DataTreeType; - typedef VectorDataType::DataNodeType DataNodeType; - - typedef VectorDataType::ValuePrecisionType PrecisionType; - typedef VectorDataType::PrecisionType CoordRepType; - - typedef otb::Wrapper::StringListParameter::StringListType StringListType; - - typedef otb::VectorDataToDSValidatedVectorDataFilter<VectorDataType, PrecisionType> - ValidationFilterType; - typedef otb::StandardDSCostFunction<ValidationFilterType> CostFunctionType; - typedef CostFunctionType::LabelSetType LabelSetType; - - typedef itk::AmoebaOptimizer OptimizerType; - - typedef otb::FuzzyDescriptorsModelManager::DescriptorsModelType - DescriptorsModelType; - typedef otb::FuzzyDescriptorsModelManager::DescriptorListType - DescriptorListType; - - typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> - TreeIteratorType; - - - /** Standard macro */ - itkNewMacro(Self); - - itkTypeMacro(DSFuzzyModelEstimation, otb::Application); - -private: - void DoInit() override - { - SetName("DSFuzzyModelEstimation"); - SetDescription("Estimate feature fuzzy model parameters using 2 vector data (ground truth samples and wrong samples)."); - - SetDocName("Fuzzy Model estimation"); - SetDocLongDescription("Estimate feature fuzzy model parameters using 2 vector data (ground truth samples and wrong samples)."); - SetDocLimitations("None."); - SetDocAuthors("OTB-Team"); - SetDocSeeAlso(" "); - - AddDocTag(Tags::FeatureExtraction); - - AddParameter(ParameterType_InputVectorData, "psin", "Input Positive Vector Data"); - SetParameterDescription("psin", "Ground truth vector data for positive samples"); - - AddParameter(ParameterType_InputVectorData, "nsin", "Input Negative Vector Data"); - SetParameterDescription("nsin", "Ground truth vector data for negative samples"); - - AddParameter(ParameterType_StringList, "belsup", "Belief Support"); - SetParameterDescription("belsup", "Dempster Shafer study hypothesis to compute belief"); - - AddParameter(ParameterType_StringList, "plasup", "Plausibility Support"); - SetParameterDescription("plasup", "Dempster Shafer study hypothesis to compute plausibility"); - - AddParameter(ParameterType_OutputFilename, "out", "Output filename"); - SetParameterDescription("out", "Output model file name (xml file) contains the optimal model to perform information fusion."); - - AddParameter(ParameterType_String, "cri", "Criterion"); - SetParameterDescription("cri", "Dempster Shafer criterion (by default (belief+plausibility)/2)"); - MandatoryOff("cri"); - SetParameterString("cri","((Belief + Plausibility)/2.)"); - - AddParameter(ParameterType_Float,"wgt","Weighting"); - SetParameterDescription("wgt","Coefficient between 0 and 1 to promote undetection or false detections (default 0.5)"); - MandatoryOff("wgt"); - SetParameterFloat("wgt",0.5); - - AddParameter(ParameterType_InputFilename,"initmod","initialization model"); - SetParameterDescription("initmod","Initialization model (xml file) to be used. If the xml initialization model is set, the descriptor list is not used (specified using the option -desclist)"); - MandatoryOff("initmod"); - - AddParameter(ParameterType_StringList, "desclist","Descriptor list"); - SetParameterDescription("desclist","List of the descriptors to be used in the model (must be specified to perform an automatic initialization)"); - MandatoryOff("desclist"); - - AddParameter(ParameterType_Int,"maxnbit","Maximum number of iterations"); - MandatoryOff("maxnbit"); - SetParameterDescription("maxnbit","Maximum number of optimizer iteration (default 200)"); - SetParameterInt("maxnbit",200); - - AddParameter(ParameterType_Bool,"optobs","Optimizer Observer"); - SetParameterDescription("optobs","Activate the optimizer observer"); - - // Doc example parameter settings - SetDocExampleParameterValue("psin", "cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp"); - SetDocExampleParameterValue("nsin", "cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp"); - SetDocExampleParameterValue("belsup", "\"ROADSA\""); - SetDocExampleParameterValue("plasup", "\"NONDVI\" \"ROADSA\" \"NOBUIL\""); - SetDocExampleParameterValue("initmod", "Dempster-Shafer/DSFuzzyModel_Init.xml"); - SetDocExampleParameterValue("maxnbit", "4"); - SetDocExampleParameterValue("optobs", "true"); - SetDocExampleParameterValue("out", "DSFuzzyModelEstimation.xml"); - - SetOfficialDocLink(); - } - - void DoUpdateParameters() override - { - // Nothing to do here : all parameters are independent - - - // .. // - - - } - - void DoExecute() override - { - - //Instantiate - m_CostFunction = CostFunctionType::New(); - m_Optimizer = OptimizerType::New(); - - //Read the vector datas - VectorDataType::Pointer psVectorData = GetParameterVectorData("psin"); - psVectorData->Update(); - VectorDataType::Pointer nsVectorData = GetParameterVectorData("nsin"); - nsVectorData->Update(); - - // Load the initial descriptor model - DescriptorListType descList; - DescriptorsModelType descMod; - if (IsParameterEnabled("initmod")) - { - std::string descModFile = GetParameterString("initmod"); - descMod = FuzzyDescriptorsModelManager::Read(descModFile); - descList = FuzzyDescriptorsModelManager::GetDescriptorList(descMod); - } - else - { - StringListType stringList = GetParameterStringList("desclist"); - int nbsdDesc = stringList.size(); - for (int i = 0; i < nbsdDesc; i++) - { - descList.push_back(stringList[i]); - } - } - - m_CostFunction->SetDescriptorList(descList); - - // Compute statistics of all the descriptors - - std::vector<double> accFirstOrderPS, accSecondOrderPS, minPS, maxPS; - accFirstOrderPS.resize(descList.size()); - accSecondOrderPS.resize(descList.size()); - std::fill(accFirstOrderPS.begin(), accFirstOrderPS.end(), 0); - std::fill(accSecondOrderPS.begin(), accSecondOrderPS.end(), 0); - minPS.resize(descList.size()); - maxPS.resize(descList.size()); - unsigned int accNbElemPS = 0; - - TreeIteratorType itVectorPS(psVectorData->GetDataTree()); - for (itVectorPS.GoToBegin(); !itVectorPS.IsAtEnd(); ++itVectorPS) - { - if (!itVectorPS.Get()->IsRoot() && !itVectorPS.Get()->IsDocument() && !itVectorPS.Get()->IsFolder()) - { - DataNodeType::Pointer currentGeometry = itVectorPS.Get(); - - for (unsigned int i = 0; i < descList.size(); ++i) - { - double desc = currentGeometry->GetFieldAsDouble(descList[i]); - - accFirstOrderPS[i] += desc; - accSecondOrderPS[i] += desc * desc; - - if (desc < minPS[i]) - { - minPS[i] = desc; - } - if (desc > maxPS[i]) - { - maxPS[i] = desc; - } - - } - accNbElemPS++; - } - } - if (accNbElemPS == 0) - { - otbAppLogFATAL(<< "Error : no element found in positive vector data!"); - } - - TreeIteratorType itVectorNS(nsVectorData->GetDataTree()); - std::vector<double> accFirstOrderNS, accSecondOrderNS, minNS, maxNS; - minNS.resize(descList.size()); - maxNS.resize(descList.size()); - accFirstOrderNS.resize(descList.size()); - accSecondOrderNS.resize(descList.size()); - std::fill(accFirstOrderNS.begin(), accFirstOrderNS.end(), 0); - std::fill(accSecondOrderNS.begin(), accSecondOrderNS.end(), 0); - std::fill(minNS.begin(), minNS.end(), 1); - std::fill(maxNS.begin(), maxNS.end(), 0); - unsigned int accNbElemNS = 0; - - for (itVectorNS.GoToBegin(); !itVectorNS.IsAtEnd(); ++itVectorNS) - { - if (!itVectorNS.Get()->IsRoot() && !itVectorNS.Get()->IsDocument() && !itVectorNS.Get()->IsFolder()) - { - DataNodeType::Pointer currentGeometry = itVectorNS.Get(); - - for (unsigned int i = 0; i < descList.size(); ++i) - { - double desc = currentGeometry->GetFieldAsDouble(descList[i]); - - accFirstOrderNS[i] += desc; - accSecondOrderNS[i] += desc * desc; - - if (desc < minNS[i]) - { - minNS[i] = desc; - } - if (desc > maxNS[i]) - { - maxNS[i] = desc; - } - - } - accNbElemNS++; - } - } - if (accNbElemNS == 0) - { - otbAppLogFATAL(<< "Error : no element found in negative vector data!"); - } - otbAppLogINFO( << "Descriptors Stats : "); - otbAppLogINFO( << "Positive Samples"); - for (unsigned int i = 0; i < descList.size(); ++i) - { - double mean = accFirstOrderPS[i] / accNbElemPS; - double stddev = std::sqrt(accSecondOrderPS[i] / accNbElemPS - mean * mean); - otbAppLogINFO( << descList[i] << " : " << mean << " +/- " << stddev << " (min: " << minPS[i] << " max: " << maxPS[i] << ")"<< std::endl); - } - - otbAppLogINFO( << "Negative Samples" << std::endl); - for (unsigned int i = 0; i < descList.size(); ++i) - { - double mean = accFirstOrderNS[i] / accNbElemNS; - double stddev = std::sqrt(accSecondOrderNS[i] / accNbElemNS - mean * mean); - otbAppLogINFO(<< descList[i] << " : " << mean << " +/- " << stddev << " (min: " << minNS[i] << " max: " << maxNS[i] << ")"<< std::endl); - } - - OptimizerType::ParametersType initialPosition(4 * descList.size()); - - if (IsParameterEnabled("initmod")) - { - - for (unsigned int i = 0; i < 4; i++) - { - for (unsigned int j = 0; j < descList.size(); j++) - { - initialPosition.SetElement( - i + 4 * j, - otb::FuzzyDescriptorsModelManager::GetDescriptor(descList[j].c_str(), descMod).second[i]); - } - } - } - else - { - for (unsigned int j = 0; j < descList.size(); j++) - { - initialPosition.SetElement((j * 4), std::min(minNS[j], maxPS[j])); - initialPosition.SetElement((j * 4) + 2, std::max(minNS[j], maxPS[j])); - initialPosition.SetElement( - (j * 4) + 1, - 0.5 - * (initialPosition.GetElement((j * 4)) + initialPosition.GetElement((j * 4) + 2))); - initialPosition.SetElement((j * 4) + 3, 0.95); - } - } - - otbAppLogINFO(<<"Initial model: "<<initialPosition); - - //Cost Function - //Format Hypothesis - LabelSetType Bhyp, Phyp; - int nbSet; - - StringListType stringList = GetParameterStringList("belsup"); - nbSet = stringList.size(); - - for (int i = 0; i < nbSet; i++) - { - std::string str = stringList[i]; - Bhyp.insert(str); - } - m_CostFunction->SetBeliefHypothesis(Bhyp); - stringList = GetParameterStringList("plasup"); - nbSet = stringList.size(); - for (int i = 0; i < nbSet; i++) - { - std::string str = stringList[i]; - Phyp.insert(str); - } - m_CostFunction->SetPlausibilityHypothesis(Phyp); - - m_CostFunction->SetWeight(GetParameterFloat("wgt")); - - m_CostFunction->SetCriterionFormula(GetParameterString("cri")); - - m_CostFunction->SetGTVectorData(psVectorData); - m_CostFunction->SetNSVectorData(nsVectorData); - //Optimizer - m_Optimizer->SetCostFunction(m_CostFunction); - - m_Optimizer->SetMaximumNumberOfIterations(GetParameterInt("maxnbit")); - - OptimizerType::ParametersType simplexDelta(m_CostFunction->GetNumberOfParameters()); - simplexDelta.Fill(0.1); - - m_Optimizer->AutomaticInitialSimplexOff(); - m_Optimizer->SetInitialSimplexDelta(simplexDelta); - - m_Optimizer->SetInitialPosition(initialPosition); - - // Create the Command observer and register it with the optimizer. - CommandIterationUpdate::Pointer observer = CommandIterationUpdate::New(); - if (GetParameterInt("optobs")) - { - m_Optimizer->AddObserver(itk::IterationEvent(), observer); - } - - try - { - // do the optimization - m_Optimizer->StartOptimization(); - } - catch (itk::ExceptionObject& err) - { - // An error has occurred in the optimization. - // Update the parameters - otbAppLogFATAL("ERROR: Exception Caught : "<< err.GetDescription() << std::endl - << "numberOfIterations : " << m_Optimizer->GetOptimizer()->get_num_evaluations() << std::endl - << "Results : " << m_Optimizer->GetCurrentPosition() << std::endl); - } - // get the results - const unsigned int numberOfIterations = m_Optimizer->GetOptimizer()->get_num_evaluations(); - otbAppLogINFO("numberOfIterations : " << numberOfIterations << std::endl); - otbAppLogINFO("Results : " << m_Optimizer->GetCurrentPosition() << std::endl); - - for (unsigned int i = 0; i < descList.size(); i++) - { - otb::FuzzyDescriptorsModelManager::ParameterType tmpParams; - for (unsigned int j = 0; j < 4; j++) - { - tmpParams.push_back(m_Optimizer->GetCurrentPosition()[(i * 4) + j]); - } - otb::FuzzyDescriptorsModelManager::AddDescriptor(descList[i], tmpParams, m_Model); - } - otb::FuzzyDescriptorsModelManager::Save(GetParameterString("out"), m_Model); - - }; - - CostFunctionType::Pointer m_CostFunction; - OptimizerType::Pointer m_Optimizer; - otb::FuzzyDescriptorsModelManager::DescriptorsModelType m_Model; -}; - -} -} - -OTB_APPLICATION_EXPORT(otb::Wrapper::DSFuzzyModelEstimation) - diff --git a/Modules/Applications/AppClassification/app/otbVectorDataDSValidation.cxx b/Modules/Applications/AppClassification/app/otbVectorDataDSValidation.cxx deleted file mode 100644 index 64001c6a135e44b17e39ed920cef41a329b9d2bf..0000000000000000000000000000000000000000 --- a/Modules/Applications/AppClassification/app/otbVectorDataDSValidation.cxx +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#include "otbVectorDataToDSValidatedVectorDataFilter.h" -#include "otbWrapperApplication.h" -#include "otbWrapperApplicationFactory.h" -#include "otbWrapperStringListParameter.h" - - -namespace otb -{ -namespace Wrapper -{ - -class VectorDataDSValidation: public Application -{ - - -public: - /** Standard class typedefs. */ - typedef VectorDataDSValidation Self; - typedef Application Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - - typedef double PrecisionType; - typedef otb::VectorData<PrecisionType> VectorDataType; - typedef otb::VectorDataToDSValidatedVectorDataFilter<VectorDataType, PrecisionType> - VectorDataValidationFilterType; - typedef VectorDataValidationFilterType::LabelSetType - LabelSetType; - typedef FuzzyDescriptorsModelManager::DescriptorsModelType DescriptorsModelType; - - typedef otb::Wrapper::StringListParameter::StringListType StringListType; - - /** Standard macro */ - itkNewMacro(Self); - - itkTypeMacro(VectorDataDSValidation, otb::Application); - -private: - void DoInit() override - { - SetName("VectorDataDSValidation"); - SetDescription("Vector data validation based on the fusion of features using Dempster-Shafer evidence theory framework."); - - SetDocName("Vector Data validation"); - SetDocLongDescription("This application validates or unvalidate the studied samples using the Dempster-Shafer theory."); - SetDocLimitations("None."); - SetDocAuthors("OTB-Team"); - SetDocSeeAlso("http://en.wikipedia.org/wiki/Dempster-Shafer_theory"); - - AddDocTag(Tags::FeatureExtraction); - - - AddParameter(ParameterType_InputVectorData, "in", "Input Vector Data"); - SetParameterDescription("in", "Input vector data to validate"); - - AddParameter(ParameterType_InputFilename, "descmod", "Descriptors model filename"); - SetParameterDescription("descmod", "Fuzzy descriptors model (xml file)"); - - AddParameter(ParameterType_StringList, "belsup", "Belief Support"); - SetParameterDescription("belsup", "Dempster Shafer study hypothesis to compute belief"); - - AddParameter(ParameterType_StringList, "plasup", "Plausibility Support"); - SetParameterDescription("plasup", "Dempster Shafer study hypothesis to compute plausibility"); - - AddParameter(ParameterType_OutputVectorData, "out", "Output Vector Data"); - SetParameterDescription("out", "Output VectorData containing only the validated samples"); - - AddParameter(ParameterType_String, "cri", "Criterion"); - SetParameterDescription("cri", "Dempster Shafer criterion (by default (belief+plausibility)/2)"); - MandatoryOff("cri"); - SetParameterString("cri", "((Belief + Plausibility)/2.)"); - - AddParameter(ParameterType_Float, "thd", "Criterion threshold"); - SetParameterDescription("thd", "Criterion threshold (default 0.5)"); - MandatoryOff("thd"); - SetParameterFloat("thd",0.5); - - // Doc example parameter settings - SetDocExampleParameterValue("in", "cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp"); - SetDocExampleParameterValue("belsup", "cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp"); - SetDocExampleParameterValue("descmod", "DSFuzzyModel.xml"); - SetDocExampleParameterValue("out", "VectorDataDSValidation.shp"); - - SetOfficialDocLink(); - } - - void DoUpdateParameters() override - { - // Nothing to do here : all parameters are independent - - - // .. // - - - } - - void DoExecute() override - { - - //Read the vector data - VectorDataType::Pointer inVectorData = GetParameterVectorData("in"); - inVectorData->Update(); - - // Load the descriptors model - std::string descModFile = GetParameterString("descmod"); - DescriptorsModelType descMod = FuzzyDescriptorsModelManager::Read(descModFile); - - LabelSetType Bhyp, Phyp; - int nbSet; - - StringListType stringList = GetParameterStringList("belsup"); - nbSet = stringList.size(); - - for (int i = 0; i < nbSet; i++) - { - std::string str = stringList[i]; - Bhyp.insert(str); - } - stringList = GetParameterStringList("plasup"); - nbSet = stringList.size(); - for (int i = 0; i < nbSet; i++) - { - std::string str = stringList[i]; - Phyp.insert(str); - } - - // Process - m_ValidationFilter = VectorDataValidationFilterType::New(); - m_ValidationFilter->SetInput(inVectorData); - m_ValidationFilter->SetDescriptorModels(descMod); - m_ValidationFilter->SetBeliefHypothesis(Bhyp); - m_ValidationFilter->SetPlausibilityHypothesis(Phyp); - - m_ValidationFilter->SetCriterionFormula(GetParameterString("cri")); - m_ValidationFilter->SetCriterionThreshold(GetParameterFloat("thd")); - - // Set the output image - SetParameterOutputVectorData("out", m_ValidationFilter->GetOutput()); - - }; - - VectorDataValidationFilterType::Pointer m_ValidationFilter; - - -}; -} -} - -OTB_APPLICATION_EXPORT(otb::Wrapper::VectorDataDSValidation); diff --git a/Modules/Applications/AppClassification/test/CMakeLists.txt b/Modules/Applications/AppClassification/test/CMakeLists.txt index 556cc57987594132598622a258bc9019e23037f7..2379deb501c3c6233fb1a1a6b34e8fe99a78c6e0 100644 --- a/Modules/Applications/AppClassification/test/CMakeLists.txt +++ b/Modules/Applications/AppClassification/test/CMakeLists.txt @@ -563,104 +563,6 @@ otb_test_application(NAME apTvFusionOfClassificationsMV2Inputs ${OTBAPP_BASELINE}/apTvFusionOfClassifications2InputsOutput.tif ${TEMP}/apTvFusionOfClassificationsMV2InputsOutput.tif) - -#----------- ComputePolylineFeatureFromImage TESTS ---------------- -otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_wr - APP ComputePolylineFeatureFromImage - OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/NDVI.TIF} - -vd LARGEINPUT{DEMPSTER-SHAFER/wrongroads.shp} - -expr "(b1 > 0.4)" - -field "NONDVI" - -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_wr.shp) - -# FIXME cascade dependencies to largeinput repository -if(OTB_DATA_USE_LARGEINPUT) - otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_RoadExtractionApplication - APP ComputePolylineFeatureFromImage - OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/SpectralAngleRoad.TIF} - -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_RoadExtractionApplication.shp - -expr "(b1 > 0.25)" - -field "ROADSA" - -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_RoadExtractionApplication.shp) - - set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_RoadExtractionApplication PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_RoadExtractionApplication) - - otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_wr - APP ComputePolylineFeatureFromImage - OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/SpectralAngleRoad.TIF} - -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_wr.shp - -expr "(b1 > 0.25)" - -field "ROADSA" - -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_wr.shp) - - set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_wr PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_wr) - - otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_wr - APP ComputePolylineFeatureFromImage - OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/BUILDINGS.TIF} - -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_wr.shp - -expr "(b1 == 0)" - -field "NOBUIL" - -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp - VALID --compare-ogr ${EPSILON_9} - ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp - ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp) - - set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_wr PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_wr) - - otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_RoadExtractionApplication - APP ComputePolylineFeatureFromImage - OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/NDVI.TIF} - -vd LARGEINPUT{DEMPSTER-SHAFER/road_extraction.shp} - -expr "(b1 > 0.4)" - -field "NONDVI" - -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_RoadExtractionApplication.shp) - - otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_gt - APP ComputePolylineFeatureFromImage - OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/NDVI.TIF} - -vd LARGEINPUT{DEMPSTER-SHAFER/roads_ground_truth.shp} - -expr "(b1 > 0.4)" - -field NONDVI - -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage.shp) - - otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_gt - APP ComputePolylineFeatureFromImage - OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/SpectralAngleRoad.TIF} - -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage.shp - -expr "(b1 > 0.25)" - -field "ROADSA" - -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_gt.shp) - - set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_gt PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_gt) - - otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_gt - APP ComputePolylineFeatureFromImage - OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/BUILDINGS.TIF} - -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_gt.shp - -expr "(b1 == 0)" - -field "NOBUIL" - -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp - VALID --compare-ogr ${EPSILON_9} - ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp - ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp) - - set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_gt PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_gt) - - otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication - APP ComputePolylineFeatureFromImage - OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/BUILDINGS.TIF} - -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_RoadExtractionApplication.shp - -expr "(b1 == 0)" - -field "NOBUIL" - -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp - VALID --compare-ogr ${EPSILON_9} - ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp - ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp) - - set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_RoadExtractionApplication) -endif() - #----------- KMeansClassification TESTS ---------------- if(OTB_USE_SHARK) otb_test_application(NAME apTvClKMeansImageClassification_composite @@ -788,30 +690,6 @@ if(OTB_USE_LIBSVM) ${TEMP}/clsvmConfMatQB1_allOpt.svm) endif() -#----------- DSFuzzyModelEstimation TESTS ---------------- -otb_test_application(NAME apTvCdbDSFuzzyModelEstimation_LI_autoInit - APP DSFuzzyModelEstimation - OPTIONS -psin ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp - -nsin ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp - -belsup "ROADSA" - -plasup "NONDVI" "ROADSA" "NOBUIL" - -desclist "NONDVI" "ROADSA" "NOBUIL" - -maxnbit 4 - -optobs true - -out ${TEMP}/apTvCdbDSFuzzyModelEstimatorOutput_LI_autoInit.xml) - -otb_test_application(NAME apTvCdbDSFuzzyModelEstimation_LI - APP DSFuzzyModelEstimation - OPTIONS -psin ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp - -nsin ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp - -belsup "ROADSA" - -plasup "NONDVI" "ROADSA" "NOBUIL" - -initmod ${OTB_DATA_ROOT}/Input/Dempster-Shafer/DSFuzzyModel_Init.xml - -maxnbit 4 - -optobs true - -out ${TEMP}/apTvCdbDSFuzzyModelEstimatorOutput_LI.xml) - - #----------- ClassificationMapRegularization TESTS ---------------- otb_test_application(NAME apTvClassificationMapRegularization APP ClassificationMapRegularization @@ -872,38 +750,6 @@ otb_test_application(NAME apTvClComputeImagesStatisticsQB123 ${OTBAPP_BASELINE_FILES}/clImageStatisticsQB123.xml ${TEMP}/apTvClEstimateImageStatisticsQB123.xml) - -#----------- VectorDataDSValidation TESTS ---------------- -otb_test_application(NAME cdbTvVectorDataDSValidationGroundTruth_LI - APP VectorDataDSValidation - OPTIONS -in ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp - -belsup "ROADSA" - -plasup "NONDVI" "ROADSA" "NOBUIL" - -descmod ${OTB_DATA_ROOT}/Input/Dempster-Shafer/DSFuzzyModel.xml - -out ${TEMP}/cdbTvVectorDataDSValidationOutpout_LI_gt.shp - VALID --compare-ogr 0.0 - ${OTBAPP_BASELINE_FILES}/cdbTvVectorDataDSValidationOutpout_LI_gt.shp - ${TEMP}/cdbTvVectorDataDSValidationOutpout_LI_gt.shp) - -otb_test_application(NAME apTvCdbVectorDataDSValidationRoadExtractionApplication_LI - APP VectorDataDSValidation - OPTIONS -in ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp - -belsup "ROADSA" - -plasup "NONDVI" "ROADSA" "NOBUIL" - -descmod ${OTB_DATA_ROOT}/Input/Dempster-Shafer/DSFuzzyModel.xml - -out ${TEMP}/apTvCdbVectorDataDSValidationOutpout_LI_RoadExtractionApplication.shp) - -otb_test_application(NAME cdbTvVectorDataDSValidationWrongRoads_LI - APP VectorDataDSValidation - OPTIONS -in ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp - -belsup "ROADSA" - -plasup "NONDVI" "ROADSA" "NOBUIL" - -descmod ${OTB_DATA_ROOT}/Input/Dempster-Shafer/DSFuzzyModel.xml - -out ${TEMP}/cdbTvVectorDataDSValidationOutpout_LI_wr.shp - VALID --compare-ogr 0.0 - ${OTBAPP_BASELINE_FILES}/cdbTvVectorDataDSValidationOutpout_LI_wr.shp - ${TEMP}/cdbTvVectorDataDSValidationOutpout_LI_wr.shp) - if(OTB_USE_OPENCV) #----------- TrainRegression TESTS ---------------- # y = 0.01*x^2 + 1.5*x - 300 diff --git a/Modules/Core/LabelMap/test/CMakeLists.txt b/Modules/Core/LabelMap/test/CMakeLists.txt index 068325e08e42cce455f0d61cd27a8d1764ede388..be4639ecdd26f58a333f08f6164bb8c54c8b4992 100644 --- a/Modules/Core/LabelMap/test/CMakeLists.txt +++ b/Modules/Core/LabelMap/test/CMakeLists.txt @@ -41,8 +41,8 @@ otb_module_target_label(otbLabelMapTestDriver) otb_add_test(NAME obTvLabelObjectMapVectorizer COMMAND otbLabelMapTestDriver otbLabelObjectMapVectorizer - ${INPUTDATA}/rcc8_mire1.png - rcc8_mire1_label_vectorizer.gml) + ${INPUTDATA}/labelImage_UnsignedChar.tif + otbLabelObjectMapVectorizerOutput.gml) otb_add_test(NAME obTvLabelImageToLabelMapWithAdjacencyFilter COMMAND otbLabelMapTestDriver --compare-ascii ${NOTOL} @@ -64,13 +64,13 @@ otb_add_test(NAME obTvKMeansAttributesLabelMapFilter COMMAND otbLabelMapTestDriv ${TEMP}/obTvKMeansAttributesLabelMapFilter.txt) otb_add_test(NAME obTvLabelMapToSampleListFilter COMMAND otbLabelMapTestDriver otbLabelMapToSampleListFilter - ${OTB_DATA_ROOT}/Input/rcc8_mire1.png + ${OTB_DATA_ROOT}/Input/labelImage_UnsignedChar.tif SHAPE::Flusser01 SHAPE::Flusser02 SHAPE::Flusser03 SHAPE::Flusser04 SHAPE::Flusser05 SHAPE::Flusser06 SHAPE::Flusser07 SHAPE::Flusser08 SHAPE::Flusser09 SHAPE::Flusser10 SHAPE::Flusser11) otb_add_test(NAME obTvLabelMapWithClassLabelToLabeledSampleListFilter COMMAND otbLabelMapTestDriver otbLabelMapWithClassLabelToLabeledSampleListFilter - ${OTB_DATA_ROOT}/Input/rcc8_mire1.png + ${OTB_DATA_ROOT}/Input/labelImage_UnsignedChar.tif SHAPE::Flusser01 SHAPE::Flusser02 SHAPE::Flusser03 SHAPE::Flusser04 SHAPE::Flusser05 SHAPE::Flusser06 SHAPE::Flusser07 SHAPE::Flusser08 SHAPE::Flusser09 SHAPE::Flusser10 SHAPE::Flusser11) diff --git a/Modules/Core/LabelMap/test/otbLabelMapWithClassLabelToLabeledSampleListFilter.cxx b/Modules/Core/LabelMap/test/otbLabelMapWithClassLabelToLabeledSampleListFilter.cxx index 695a24f06d7db8c3dc9d71871ab38b78d4d9f525..31d6b9a066c0e57d9f111e7173699d4d0bd146b6 100644 --- a/Modules/Core/LabelMap/test/otbLabelMapWithClassLabelToLabeledSampleListFilter.cxx +++ b/Modules/Core/LabelMap/test/otbLabelMapWithClassLabelToLabeledSampleListFilter.cxx @@ -62,7 +62,7 @@ int otbLabelMapWithClassLabelToLabeledSampleListFilter(int argc, char* argv[]) LabelMapFilterType::Pointer labelMapFilter = LabelMapFilterType::New(); labelMapFilter->SetInput(lreader->GetOutput()); - labelMapFilter->SetInputForegroundValue(255); + labelMapFilter->SetInputForegroundValue(1); ShapeLabelMapFilterType::Pointer shapeLabelMapFilter = ShapeLabelMapFilterType::New(); shapeLabelMapFilter->SetInput(labelMapFilter->GetOutput()); diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.h b/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.h deleted file mode 100644 index 4406a107fb9c43269b30bffa577d9e5a73de37c4..0000000000000000000000000000000000000000 --- a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.h +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbDataNodeImageFunction_h -#define otbDataNodeImageFunction_h - -#include "otbDataNodeFunctionBase.h" -#include "otbDataNode.h" -#include "itkContinuousIndex.h" -#include "itkImageBase.h" - -namespace otb -{ -/** \class DataNodeImageFunction - * \brief TODO - * - * - * - * \ingroup Functions - * \sa NDVIDataNodeFeatureFunction - * - * \ingroup OTBVectorDataBase - */ - -template < -class TImage, -class TOutput, -class TCoordRep = double, -class TPrecision = double -> -class ITK_EXPORT DataNodeImageFunction : - public DataNodeFunctionBase<DataNode<TCoordRep, - TImage::ImageDimension, - TPrecision>, - TOutput> -{ -public: - /** Dimension underlying input image. */ - itkStaticConstMacro(ImageDimension, unsigned int, - TImage::ImageDimension); - - /** Standard class typedefs. */ - typedef DataNodeImageFunction Self; - typedef DataNodeFunctionBase<DataNode<TCoordRep, - itkGetStaticConstMacro(ImageDimension), - TPrecision>, - TOutput> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Run-time type information (and related methods). */ - itkTypeMacro(DataNodeImageFunction, DataNodeFunctionBase); - - /** Some typedefs. */ - typedef TImage InputImageType; - typedef typename InputImageType::PixelType InputPixelType; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - - typedef TOutput OutputType; - - /** CoordRepType typedef support. */ - typedef TCoordRep CoordRepType; - - /** PrecisionType typedef support. */ - typedef TPrecision PrecisionType; - - /** Index Type. */ - typedef typename InputImageType::IndexType IndexType; - typedef typename InputImageType::IndexValueType IndexValueType; - - /** ContinuousIndex Type. */ - typedef itk::ContinuousIndex<CoordRepType, itkGetStaticConstMacro(ImageDimension)> - ContinuousIndexType; - - /** DataNode Type */ - typedef typename Superclass::DataNodeType DataNodeType; - - /** Point Type */ - typedef typename DataNodeType::PointType PointType; - - /** Set the input image. - * \warning this method caches BufferedRegion information. - * If the BufferedRegion has changed, user must call - * SetInputImage again to update cached values. */ - virtual void SetInputImage( const InputImageType * ptr ); - - /** Get the input image. */ - const InputImageType * GetInputImage() const - { return m_Image.GetPointer(); } - - /** Evaluate the function at specified DataNode position. - * Subclasses must provide this method. */ - TOutput Evaluate( const DataNodeType& node ) const override = 0; - - /** Check if an index is inside the image buffer. - * we take into account the fact that each voxel has its - * center at the integer coordinate and extends half way - * to the next integer coordinate. - * \warning For efficiency, no validity checking of - * the input image is done. */ - virtual bool IsInsideBuffer( const IndexType & index ) const - { - for( unsigned int j = 0; j < ImageDimension; ++j ) - { - if( index[j] < m_StartIndex[j] ) - { - return false; - } - if( index[j] > m_EndIndex[j] ) - { - return false; - } - } - return true; - } - - /** Check if a continuous index is inside the image buffer. - * \warning For efficiency, no validity checking of - * the input image is done. */ - virtual bool IsInsideBuffer( const ContinuousIndexType & index ) const - { - for( unsigned int j = 0; j < ImageDimension; ++j ) - { - if( index[j] < m_StartContinuousIndex[j] ) - { - return false; - } - if( index[j] >= m_EndContinuousIndex[j] ) - //Comment this instruction after itkv4 migration (correct - //usage of centered-pixel coordinates) - //if( index[j] > m_EndContinuousIndex[j] ) - { - return false; - } - } - return true; - } - - /** Check if a point is inside the image buffer. - * \warning For efficiency, no validity checking of - * the input image pointer is done. */ - virtual bool IsInsideBuffer( const PointType & point ) const - { - ContinuousIndexType index; - m_Image->TransformPhysicalPointToContinuousIndex( point, index ); - return this->IsInsideBuffer( index ); - } - - /** Convert point to continuous index */ - void ConvertPointToContinuousIndex( const PointType & point, - ContinuousIndexType & cindex ) const - { - m_Image->TransformPhysicalPointToContinuousIndex( point, cindex ); - } - - /** Convert continuous index to nearest index. */ - inline void ConvertContinuousIndexToNearestIndex( const ContinuousIndexType & cindex, - IndexType & index ) const - { - index.CopyWithRound( cindex ); - } - - /** Set/Get methods */ - itkGetConstReferenceMacro(StartIndex, IndexType); - itkGetConstReferenceMacro(EndIndex, IndexType); - - itkGetConstReferenceMacro(StartContinuousIndex, ContinuousIndexType); - itkGetConstReferenceMacro(EndContinuousIndex, ContinuousIndexType); - -protected: - DataNodeImageFunction(); - ~DataNodeImageFunction() override {} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - - /** Const pointer to the input image. */ - InputImageConstPointer m_Image; - - /** Cache some values for testing if indices are inside buffered region. */ - IndexType m_StartIndex; - IndexType m_EndIndex; - ContinuousIndexType m_StartContinuousIndex; - ContinuousIndexType m_EndContinuousIndex; - -private: - DataNodeImageFunction(const Self&) = delete; - void operator=(const Self&) = delete; - -}; - -} -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbDataNodeImageFunction.hxx" -#endif - -#endif diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.hxx b/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.hxx deleted file mode 100644 index b06e770312b5cf63b3bc4b59708aa40c5334e706..0000000000000000000000000000000000000000 --- a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.hxx +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbDataNodeImageFunction_hxx -#define otbDataNodeImageFunction_hxx - -#include "otbDataNodeImageFunction.h" - -namespace otb -{ - -/** - * Constructor - */ -template <class TImage, class TOutput, class TCoordRep, class TPrecision> -DataNodeImageFunction<TImage, TOutput, TCoordRep, TPrecision> -::DataNodeImageFunction() -{ - m_Image = nullptr; - m_StartIndex.Fill(0); - m_EndIndex.Fill(0); - m_StartContinuousIndex.Fill(0.0f); - m_EndContinuousIndex.Fill(0.0f); -} - - -/** - * Standard "PrintSelf" method - */ -template <class TImage, class TOutput, class TCoordRep, class TPrecision> -void -DataNodeImageFunction<TImage, TOutput, TCoordRep, TPrecision> -::PrintSelf( - std::ostream& os, - itk::Indent indent) const -{ - Superclass::PrintSelf( os, indent ); - os << indent << "InputImage: " << m_Image.GetPointer() << std::endl; - os << indent << "StartIndex: " << m_StartIndex << std::endl; - os << indent << "EndIndex: " << m_EndIndex << std::endl; - os << indent << "StartContinuousIndex: " << m_StartContinuousIndex << std::endl; - os << indent << "EndContinuousIndex: " << m_EndContinuousIndex << std::endl; -} - - -/** - * Initialize by setting the input image - */ -template <class TImage, class TOutput, class TCoordRep, class TPrecision> -void -DataNodeImageFunction<TImage, TOutput, TCoordRep, TPrecision> -::SetInputImage( - const InputImageType * ptr ) -{ - // set the input image - m_Image = ptr; - - if ( ptr ) - { - typename InputImageType::SizeType size = ptr->GetBufferedRegion().GetSize(); - m_StartIndex = ptr->GetBufferedRegion().GetIndex(); - - for ( unsigned int j = 0; j < ImageDimension; ++j ) - { - m_EndIndex[j] = m_StartIndex[j] + static_cast<IndexValueType>( size[j] ) - 1; - m_StartContinuousIndex[j] = static_cast<CoordRepType>( m_StartIndex[j] - 0.5 ); - m_EndContinuousIndex[j] = static_cast<CoordRepType>( m_EndIndex[j] + 0.5 ); - - //Comment these instructions after migration to ITKv4 where there is a correct - //usage of centered-pixel coordinates - //(ITK_USE_CENTERED_PIXEL_COORDINATES_CONSISTENTLY always ON) - //m_StartContinuousIndex[j] = static_cast<CoordRepType>( m_StartIndex[j] ); - //m_EndContinuousIndex[j] = static_cast<CoordRepType>( m_EndIndex[j] ); - } - } -} - - -} // end namespace itk - -#endif diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.h b/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.h deleted file mode 100644 index c99f15d0b23334b25ec307b7fcb53e93d764ba26..0000000000000000000000000000000000000000 --- a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbDataNodeVectorDataFunction_h -#define otbDataNodeVectorDataFunction_h - -#include "otbDataNodeFunctionBase.h" -#include "otbVectorDataProperties.h" - - -namespace otb -{ -/** \class DataNodeVectorDataFunction - * \brief TODO - * - * - * - * \ingroup Functions - * \sa - * - * \ingroup OTBVectorDataBase - */ - -template < -class TOutput, -class TCoordRep = double, -class TPrecision = double -> -class ITK_EXPORT DataNodeVectorDataFunction : - public DataNodeFunctionBase<DataNode<TCoordRep, - 2, - TPrecision>, - TOutput> -{ -public: - /** Standard class typedefs. */ - typedef DataNodeVectorDataFunction Self; - typedef DataNodeFunctionBase<DataNode<TCoordRep, - 2, - TPrecision>, - TOutput> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Run-time type information (and related methods). */ - itkTypeMacro(DataNodeVetorDataFunction, DataNodeFunctionBase); - - /** Some typedefs. */ - typedef VectorData<TCoordRep, 2, TPrecision> VectorDataType; - typedef typename VectorDataType::ConstPointer VectorDataConstPointerType; - typedef TOutput OutputType; - - /** CoordRepType typedef support. */ - typedef TCoordRep CoordRepType; - - /** PrecisionType typedef support. */ - typedef TPrecision PrecisionType; - - /** DataNode Type */ - typedef typename Superclass::DataNodeType DataNodeType; - - /** Point Type */ - typedef typename DataNodeType::PointType PointType; - - /** Set the input VetorData. */ - virtual void SetInputVectorData( const VectorDataType * ptr ); - - /** Get the input VectorData. */ - const VectorDataType * GetInputVectorData() const - { return m_VectorData.GetPointer(); } - - /** Evaluate the function at specified DataNode position. - * Subclasses must provide this method. */ - TOutput Evaluate( const DataNodeType& node ) const override = 0; - -protected: - DataNodeVectorDataFunction(); - ~DataNodeVectorDataFunction() override {} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - - /** Const pointer to the input VectorData. */ - VectorDataConstPointerType m_VectorData; - -private: - DataNodeVectorDataFunction(const Self&) = delete; - void operator=(const Self&) = delete; - -}; - -} -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbDataNodeVectorDataFunction.hxx" -#endif - -#endif diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.hxx b/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.hxx deleted file mode 100644 index 9ca52e1798d94b391825ca5629ba3e37a35dc1d9..0000000000000000000000000000000000000000 --- a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.hxx +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbDataNodeVectorDataFunction_hxx -#define otbDataNodeVectorDataFunction_hxx - -#include "otbDataNodeVectorDataFunction.h" - -namespace otb -{ - -/** - * Constructor - */ -template <class TOutput, class TCoordRep, class TPrecision> -DataNodeVectorDataFunction<TOutput, TCoordRep, TPrecision> -::DataNodeVectorDataFunction() -{ - m_VectorData = nullptr; -} - - -/** - * Standard "PrintSelf" method - */ -template <class TOutput, class TCoordRep, class TPrecision> -void -DataNodeVectorDataFunction<TOutput, TCoordRep, TPrecision> -::PrintSelf( - std::ostream& os, - itk::Indent indent) const -{ - Superclass::PrintSelf( os, indent ); - os << indent << "VetorData: " << m_VectorData.GetPointer() << std::endl; -} - - -/** - * Initialize by setting the input VectorData - */ -template <class TOutput, class TCoordRep, class TPrecision> -void -DataNodeVectorDataFunction<TOutput, TCoordRep, TPrecision> -::SetInputVectorData( - const VectorDataType * ptr ) -{ - // set the input VectorData - m_VectorData = ptr; -} - -} // end namespace otb - -#endif diff --git a/Modules/Core/VectorDataBase/include/otbGISConnectionImplementation.h b/Modules/Core/VectorDataBase/include/otbGISConnectionImplementation.h deleted file mode 100644 index ba09b76b6d314c30615c420b164e74c0588488b5..0000000000000000000000000000000000000000 --- a/Modules/Core/VectorDataBase/include/otbGISConnectionImplementation.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbGISConnectionImplementation_h -#define otbGISConnectionImplementation_h - -#include "itkDataObject.h" -#include "itkObjectFactory.h" -#include <string> - -namespace otb -{ -/** \class GISConnectionImplementation - * \brief Base class for GIS DB connection implementations - * - * - * - * \ingroup OTBVectorDataBase - */ - -template <class TransactorType> -class ITK_EXPORT GISConnectionImplementation - : public itk::DataObject -{ -public: - /** Standard class typedefs */ - typedef GISConnectionImplementation Self; - typedef itk::DataObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Standard macros */ - itkNewMacro(Self); - itkTypeMacro(GISConnectionImplementation, itk::DataObject); - - /** Acessors */ - itkGetMacro(Host, std::string); - itkSetMacro(Host, std::string); - - itkGetMacro(DBName, std::string); - itkSetMacro(DBName, std::string); - - itkGetMacro(User, std::string); - itkSetMacro(User, std::string); - - itkGetMacro(Password, std::string); - itkSetMacro(Password, std::string); - - itkGetMacro(Port, std::string); - itkSetMacro(Port, std::string); - - itkGetMacro(Options, std::string); - itkSetMacro(Options, std::string); - - /** Using the connection */ - - virtual void ConnectToDB(){} - - virtual void PerformTransaction(const TransactorType& itkNotUsed(theTransaction)) const {} - -protected: - /** Constructor */ - GISConnectionImplementation(){}; - /** Destructor */ - virtual ~GISConnectionImplementation(){}; - -private: - GISConnectionImplementation(const Self &) = delete; - void operator =(const Self&) = delete; - - std::string m_Host; - std::string m_DBName; - std::string m_User; - std::string m_Password; - std::string m_Port; - std::string m_Options; - -}; -} // end namespace otb - -#endif diff --git a/Modules/Detection/ObjectDetection/CMakeLists.txt b/Modules/Detection/ObjectDetection/CMakeLists.txt deleted file mode 100644 index e43a781cad9f8f9c4566a125e2023eb9444e3b6f..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -project(OTBObjectDetection) -otb_module_impl() diff --git a/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.h b/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.h deleted file mode 100644 index 6432b507d125bbc7c51e331341c884a5da73a6b3..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.h +++ /dev/null @@ -1,378 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbDescriptorsListSampleGenerator_h -#define otbDescriptorsListSampleGenerator_h - -#include <vector> - -#include "itkVariableLengthVector.h" -#include "itkImageRegion.h" -#include "itkFunctionBase.h" -#include "itkListSample.h" -#include "itkSimpleDataObjectDecorator.h" - -#include "otbListSampleSource.h" -#include "otbVectorData.h" -#include "otbPersistentImageFilter.h" -#include "otbPersistentFilterStreamingDecorator.h" - -namespace otb -{ - -template <class TOutputPrecision> -class DefaultDescriptorsType -{ -public: - typedef itk::VariableLengthVector<TOutputPrecision> Type; -}; - -/** \class PersistentDescriptorsListSampleGenerator - * \brief [internal] Helper class for the implementation of DescriptorsListSampleGenerator - * - * This class inherits PersistentImageFilter and provides the Reset/Synthesize functions, - * plus the ThreadedGenerateData function implementing the image function evaluation - * - * \ingroup OTBObjectDetection - */ -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabel> -class ITK_EXPORT PersistentDescriptorsListSampleGenerator : - public PersistentImageFilter<TInputImage, TInputImage> -{ -public: - /** Standard Self typedef */ - typedef PersistentDescriptorsListSampleGenerator Self; - typedef PersistentImageFilter<TInputImage, TInputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Runtime information support. */ - itkTypeMacro(PersistentDescriptorsListSampleGenerator, PersistentImageFilter); - - /** Image related typedefs. */ - typedef TInputImage InputImageType; - typedef typename TInputImage::Pointer InputImagePointer; - typedef typename TInputImage::RegionType RegionType; - typedef typename TInputImage::SizeType SizeType; - typedef typename TInputImage::IndexType IndexType; - typedef typename TInputImage::PixelType PixelType; - - itkStaticConstMacro(InputImageDimension, unsigned int, - TInputImage::ImageDimension); - - /** Image related typedefs. */ - itkStaticConstMacro(ImageDimension, unsigned int, - TInputImage::ImageDimension); - - /** Smart Pointer type to a DataObject. */ - typedef itk::ProcessObject::DataObjectPointerArraySizeType DataObjectPointerArraySizeType; - typedef typename itk::DataObject::Pointer DataObjectPointer; - - /** Input VectorData */ - typedef TVectorData VectorDataType; - typedef typename VectorDataType::Pointer VectorDataPointerType; - typedef typename VectorDataType::DataNodeType VectorDataNodeType; - typedef typename VectorDataType::DataNodePointerType VectorDataNodePointerType; - typedef typename VectorDataType::DataTreeType VectorDataTreeType; - typedef typename VectorDataType::DataTreePointerType VectorDataTreePointerType; - typedef typename VectorDataNodeType::PointType VectorDataPointType; - typedef typename VectorDataNodeType::LineType VectorDataLineType; - typedef typename VectorDataNodeType::PolygonType VectorDataPolygonType; - typedef itk::PreOrderTreeIterator<VectorDataTreeType> VectorDataTreeIteratorType; - - /** Function type for descriptors extraction */ - typedef TFunctionType DescriptorsFunctionType; - typedef typename DescriptorsFunctionType::Pointer DescriptorsFunctionPointerType; - typedef typename DescriptorsFunctionType::InputType DescriptorsFunctionPointType; - - typedef itk::ContinuousIndex - <typename DescriptorsFunctionPointType::ValueType, - itkGetStaticConstMacro(InputImageDimension)> ContinuousIndexType; - - /** ListSample output */ - typedef TListSample ListSampleType; - typedef typename ListSampleType::Pointer ListSamplePointerType; - typedef typename ListSampleType::MeasurementVectorType SampleMeasurementVectorType; - typedef typename ListSampleType::MeasurementType SampleMeasurementType; - - /** LabelListSample output */ - typedef TLabel LabelType; - typedef itk::FixedArray<LabelType,1> LabelSampleType; - typedef itk::Statistics::ListSample<LabelSampleType> LabelListSampleType; - typedef typename LabelListSampleType::Pointer LabelListSamplePointerType; - typedef typename LabelListSampleType::MeasurementVectorType LabelMeasurementVectorType; - typedef typename LabelListSampleType::MeasurementType LabelMeasurementType; - - /** ListSamplePositions output */ - typedef std::vector<DescriptorsFunctionPointType> SamplesPositionType; - typedef itk::SimpleDataObjectDecorator<SamplesPositionType> SamplesPositionObjectType; - typedef typename SamplesPositionObjectType::Pointer SamplesPositionObjectPointerType; - - void SetSamplesLocations(VectorDataType * input); - VectorDataType * GetSamplesLocations(void); - - /** The function to evaluate */ - itkSetObjectMacro(DescriptorsFunction, DescriptorsFunctionType); - itkGetObjectMacro(DescriptorsFunction, DescriptorsFunctionType); - itkGetConstObjectMacro(DescriptorsFunction, DescriptorsFunctionType); - - /** Output sample list */ - ListSampleType* GetListSample(); - - /** Output label list */ - LabelListSampleType* GetLabelListSample(); - - /** Output sample position list */ - SamplesPositionType& GetSamplesPositions(); - SamplesPositionObjectType* GetSamplesPositionsObject(); - - itkSetMacro( NeighborhoodRadius, unsigned int ); - itkGetConstReferenceMacro( NeighborhoodRadius, unsigned int ); - - /** Make a DataObject of the correct type to be used as the specified - * output. */ - itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx) override; - using Superclass::MakeOutput; - - void AllocateOutputs() override; - void GenerateOutputInformation() override; - void Reset(void) override; - void Synthetize(void) override; - - void AddInput(itk::DataObject * dataObject) override - { - Superclass::AddInput(dataObject); - } - -protected: - PersistentDescriptorsListSampleGenerator(); - ~PersistentDescriptorsListSampleGenerator() override; - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - - void GenerateInputRequestedRegion() override; - - void BeforeThreadedGenerateData() override; - - /** Multi-thread version GenerateData. */ - void ThreadedGenerateData(const RegionType& outputRegionForThread, - itk::ThreadIdType threadId) override; - -private: - PersistentDescriptorsListSampleGenerator(const Self &) = delete; - void operator =(const Self&) = delete; - - bool IsInsideWithNeighborhoodRadius(const RegionType& region, const ContinuousIndexType &index) const - { - typedef typename IndexType::IndexValueType IndexValueType; - typedef typename ContinuousIndexType::ValueType ContinuousIndexValueType; - - for(unsigned int i=0; i<ImageDimension; ++i) - { - if( itk::Math::RoundHalfIntegerUp<IndexValueType>(index[i]) < static_cast<IndexValueType>( region.GetIndex(i) ) + static_cast<IndexValueType>(m_NeighborhoodRadius) ) - //Comment this instruction after itkv4 migration (correct - //usage of centered-pixel coordinates) - //if( index[i] < static_cast<IndexValueType>( region.GetIndex(i) ) + m_NeighborhoodRadius ) - { - return false; - } - // bound is the last valid pixel location - const ContinuousIndexValueType bound = static_cast<ContinuousIndexValueType>( - region.GetIndex(i) + region.GetSize(i) - 0.5); - //Comment this instruction after itkv4 migration (correct - //usage of centered-pixel coordinates) - //const ContinuousIndexValueType bound = static_cast<ContinuousIndexValueType>( - // region.GetIndex(i) + static_cast<IndexValueType>(region.GetSize(i)) - 1); - - if( index[i] > bound - m_NeighborhoodRadius ) - { - return false; - } - } - return true; - } - typedef std::vector<ListSamplePointerType> ListSampleArray; - typedef std::vector<LabelListSamplePointerType> LabelListSampleArray; - typedef std::vector<SamplesPositionType> SamplesPositionArray; - - ListSampleArray m_ThreadListSample; - LabelListSampleArray m_ThreadLabelListSample; - SamplesPositionArray m_ThreadSamplesPosition; - - DescriptorsFunctionPointerType m_DescriptorsFunction; - - unsigned int m_NeighborhoodRadius; -}; - - -/** \class DescriptorsListSampleGenerator - * \brief This class generates a ListSample by computing local descriptors - * on an image at specified positions. - * - * Given an image (by SetInputImage()) and a vector data containing points (by SetSamplesLocations()), - * this class evaluates an ImageFunction (set by SetDescriptorsFunction()) at each point of the vector data - * over the image. - * It generates a ListSample containing the descriptors values for each sample, - * along with a label ListSample containing the label associated with each sample. - * The label is read from the vector data using the data field "Class", read as an int - * - * This class is streaming capable and multithreaded - * - * \ingroup OTBObjectDetection - */ -template <class TInputImage, class TVectorData, class TListSample, class TLabel, class TOutputPrecision = double, class TCoordRep = double> -class ITK_EXPORT DescriptorsListSampleGenerator : - public PersistentFilterStreamingDecorator< - PersistentDescriptorsListSampleGenerator< TInputImage, - TVectorData, - itk::FunctionBase< itk::Point<TCoordRep, 2>, - typename DefaultDescriptorsType<TOutputPrecision>::Type >, - TListSample, - TLabel > > -{ -public: - /** Standard Self typedef */ - typedef DescriptorsListSampleGenerator Self; - typedef PersistentFilterStreamingDecorator - < PersistentDescriptorsListSampleGenerator - <TInputImage, - TVectorData, - itk::FunctionBase< itk::Point<TCoordRep, 2>, typename DefaultDescriptorsType<TOutputPrecision>::Type >, - TListSample, - TLabel> > Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(DescriptorsListSampleGenerator, PersistentFilterStreamingDecorator); - - typedef TInputImage InputImageType; - typedef TVectorData InputVectorDataType; - typedef TListSample ListSampleType; - typedef TCoordRep CoordRepType; - typedef TOutputPrecision OutputPrecision; - - /** The coordinates used when evaluating function */ - typedef itk::Point<TCoordRep, 2> PointType; - - /** The return value of the function */ - typedef typename DefaultDescriptorsType<TOutputPrecision>::Type DescriptorType; - - /** The function evaluated on the input image at locations specified by the vector data */ - typedef itk::FunctionBase<PointType, DescriptorType> DescriptorsFunctionType; - typedef typename DescriptorsFunctionType::Pointer DescriptorsFunctionPointerType; - - typedef typename Superclass::FilterType PersistentFilterType; - typedef typename PersistentFilterType::LabelListSampleType LabelListSampleType; - typedef typename PersistentFilterType::SamplesPositionObjectType SamplesPositionObjectType; - typedef typename PersistentFilterType::SamplesPositionType SamplesPositionType; - - - /** Input image to extract feature */ - void SetInputImage(InputImageType * input) - { - this->GetFilter()->SetInput(input); - } - - /** Input image to extract feature */ - InputImageType * GetInputImage() - { - return this->GetFilter()->GetInput(); - } - - void AddInput(itk::DataObject * dataObject) override - { - this->GetFilter()->AddInput(dataObject); - } - - /** Sample locations as a VectorData of points. The label is in the ClassKey feature */ - void SetSamplesLocations(InputVectorDataType * input) - { - this->GetFilter()->SetSamplesLocations(input); - } - - /** Sample locations as a VectorData of points. The label is in the ClassKey feature */ - InputImageType * GetSamplesLocations() - { - return this->GetFilter()->GetSamplesLocations(); - } - - /** The function to evaluate */ - void SetDescriptorsFunction(DescriptorsFunctionType * input) - { - this->GetFilter()->SetDescriptorsFunction(input); - } - - /** The function to evaluate */ - DescriptorsFunctionType * GetDescriptorsFunction() - { - return this->GetFilter()->GetDescriptorsFunction(); - } - - /** Final sample list */ - ListSampleType* GetListSample() - { - return this->GetFilter()->GetListSample(); - } - - /** Final label list */ - LabelListSampleType* GetLabelListSample() - { - return this->GetFilter()->GetLabelListSample(); - } - - /** Final label list */ - SamplesPositionType& GetSamplesPositions() - { - return this->GetFilter()->GetSamplesPositions(); - } - - SamplesPositionObjectType* GetSamplesPositionsObject() - { - return this->GetFilter()->GetSamplesPositionsObject(); - } - - otbSetObjectMemberMacro(Filter, NeighborhoodRadius, unsigned int); - otbGetObjectMemberMacro(Filter, NeighborhoodRadius, unsigned int); - - protected: - /** Constructor */ - DescriptorsListSampleGenerator(); - - /** Destructor */ - ~DescriptorsListSampleGenerator() override; - - private: - DescriptorsListSampleGenerator(const Self &) = delete; - void operator =(const Self&) = delete; -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbDescriptorsListSampleGenerator.hxx" -#endif - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.hxx b/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.hxx deleted file mode 100644 index 7fb7b6f55ec2d70ed30d592b63fba40da9513e0a..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.hxx +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbDescriptorsListSampleGenerator_hxx -#define otbDescriptorsListSampleGenerator_hxx - -#include "otbDescriptorsListSampleGenerator.h" - -#include "itkContinuousIndex.h" - -namespace otb -{ - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::PersistentDescriptorsListSampleGenerator() - : m_NeighborhoodRadius(0) -{ - // Need 2 inputs : a vector image and a vectordata - this->SetNumberOfRequiredInputs(2); - - // Have 4 outputs : the image created by Superclass, - // the sample list, the label sample list, the positions of the samples - this->SetNumberOfRequiredOutputs(3); - this->itk::ProcessObject::SetNthOutput(1, this->MakeOutput(1).GetPointer()); - this->itk::ProcessObject::SetNthOutput(2, this->MakeOutput(2).GetPointer()); - this->itk::ProcessObject::SetNthOutput(3, this->MakeOutput(3).GetPointer()); -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::~PersistentDescriptorsListSampleGenerator() -{ -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -void -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::AllocateOutputs() -{ - // This is commented to prevent the streaming of the whole image for the first stream strip - // It shall not cause any problem because the output image of this filter is not intended to be used. - //InputImagePointer image = const_cast< TInputImage * >( this->GetInput() ); - //this->GraftOutput( image ); - // Nothing that needs to be allocated for the remaining outputs -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -void -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::GenerateOutputInformation() -{ - Superclass::GenerateOutputInformation(); - if (this->GetInput()) - { - this->GetOutput()->CopyInformation(this->GetInput()); - this->GetOutput()->SetLargestPossibleRegion(this->GetInput()->GetLargestPossibleRegion()); - - if (this->GetOutput()->GetRequestedRegion().GetNumberOfPixels() == 0) - { - this->GetOutput()->SetRequestedRegion(this->GetOutput()->GetLargestPossibleRegion()); - } - } -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -void -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::SetSamplesLocations(VectorDataType* location) -{ - this->SetNthInput(1, location); -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -typename PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>::VectorDataType* -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::GetSamplesLocations() -{ - - return static_cast<VectorDataType*>(this->itk::ProcessObject::GetInput(1)); -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -typename PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>::ListSampleType* -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::GetListSample() -{ - return dynamic_cast<ListSampleType*>(this->itk::ProcessObject::GetOutput(1)); -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -typename PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>::LabelListSampleType* -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::GetLabelListSample() -{ - return dynamic_cast<LabelListSampleType*>( this->itk::ProcessObject::GetOutput(2) ); -} - - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -typename PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>::SamplesPositionType& -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::GetSamplesPositions() -{ - return this->GetSamplesPositionsObject()->Get(); -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -typename PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>::SamplesPositionObjectType* -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::GetSamplesPositionsObject() -{ - return dynamic_cast<SamplesPositionObjectType*>(this->itk::ProcessObject::GetOutput(3)); -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -itk::DataObject::Pointer -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::MakeOutput(DataObjectPointerArraySizeType idx) -{ - itk::DataObject::Pointer output; - switch (idx) - { - case 0: - output = static_cast<itk::DataObject*>(InputImageType::New().GetPointer()); - break; - case 1: - { - ListSamplePointerType listSample = ListSampleType::New(); - output = static_cast<itk::DataObject*>(listSample.GetPointer()); - break; - } - case 2: - { - LabelListSamplePointerType labelListSample = LabelListSampleType::New(); - output = static_cast<itk::DataObject*>(labelListSample.GetPointer()); - break; - } - case 3: - { - SamplesPositionObjectPointerType samplesPositions = SamplesPositionObjectType::New(); - output = static_cast<itk::DataObject*>(samplesPositions.GetPointer()); - break; - } - default: - output = static_cast<itk::DataObject*>(InputImageType::New().GetPointer()); - break; - } - return output; -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -void -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::Reset() -{ - m_ThreadListSample = ListSampleArray(this->GetNumberOfThreads()); - for (unsigned int i = 0; i < this->GetNumberOfThreads(); ++i) - { - m_ThreadListSample[i] = ListSampleType::New(); - } - - m_ThreadLabelListSample = LabelListSampleArray(this->GetNumberOfThreads()); - for (unsigned int i = 0; i < this->GetNumberOfThreads(); ++i) - { - m_ThreadLabelListSample[i] = LabelListSampleType::New(); - } - - m_ThreadSamplesPosition = SamplesPositionArray(this->GetNumberOfThreads()); - - this->GetListSample()->Clear(); - this->GetLabelListSample()->Clear(); - this->GetSamplesPositions().clear(); -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -void -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::Synthetize() -{ - // Merge the ListSample from all the threads - ListSampleType* listSample = this->GetListSample(); - LabelListSampleType* labelListSample = this->GetLabelListSample(); - SamplesPositionType& samplesPosition = this->GetSamplesPositions(); - VectorDataPointType ref; - - // Get the output list measurement vector sample sizes once - listSample->SetMeasurementVectorSize(m_ThreadListSample[0]->GetMeasurementVectorSize()); - labelListSample->SetMeasurementVectorSize(m_ThreadLabelListSample[0]->GetMeasurementVectorSize()); - - // Copy the first thread elements into lists - ListSampleType* threadListSample = m_ThreadListSample[0]; - LabelListSampleType* threadLabelListSample = m_ThreadLabelListSample[0]; - SamplesPositionType& threadSamplesPosition = m_ThreadSamplesPosition[0]; - for (unsigned int i = 0; i < threadListSample->Size(); ++i) - { - listSample->PushBack( threadListSample->GetMeasurementVector(i) ); - labelListSample->PushBack( threadLabelListSample->GetMeasurementVector(i) ); - samplesPosition.push_back( threadSamplesPosition[i] ); - } - - // Add the other thread element checking if the point dosn't already exist - for (itk::ThreadIdType threadId = 1; threadId < this->GetNumberOfThreads(); ++threadId ) - { - threadListSample = m_ThreadListSample[threadId]; - threadLabelListSample = m_ThreadLabelListSample[threadId]; - threadSamplesPosition = m_ThreadSamplesPosition[threadId]; - - for (unsigned int i = 0; i < threadListSample->Size(); ++i) - { - const DescriptorsFunctionPointType & curSamplesPosition = threadSamplesPosition[i]; - if( std::find(samplesPosition.begin(), samplesPosition.end(), curSamplesPosition) == samplesPosition.end() ) - { - listSample->PushBack( threadListSample->GetMeasurementVector(i) ); - labelListSample->PushBack( threadLabelListSample->GetMeasurementVector(i) ); - samplesPosition.push_back( curSamplesPosition ); - } - } - } -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -void -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -void -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::GenerateInputRequestedRegion() -{ - Superclass::GenerateInputRequestedRegion(); - - // get pointers to the input and output - typename Superclass::InputImagePointer inputPtr = - const_cast< TInputImage * >( this->GetInput() ); - typename Superclass::OutputImagePointer outputPtr = this->GetOutput(); - - if ( !inputPtr || !outputPtr ) - { - return; - } - - // get a copy of the input requested region (should equal the output - // requested region) - typename TInputImage::RegionType inputRequestedRegion; - inputRequestedRegion = inputPtr->GetRequestedRegion(); - - // pad the input requested region by the operator radius - inputRequestedRegion.PadByRadius( m_NeighborhoodRadius + 5 ); - - // crop the input requested region at the input's largest possible region - if ( inputRequestedRegion.Crop(inputPtr->GetLargestPossibleRegion()) ) - { - inputPtr->SetRequestedRegion( inputRequestedRegion ); - return; - } - else - { - // Couldn't crop the region (requested region is outside the largest - // possible region). Throw an exception. - - // store what we tried to request (prior to trying to crop) - inputPtr->SetRequestedRegion( inputRequestedRegion ); - } -} - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -void -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::BeforeThreadedGenerateData() -{} - - -template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample> -void -PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample> -::ThreadedGenerateData(const RegionType& outputRegionForThread, - itk::ThreadIdType threadId) -{ - ListSampleType* listSample = m_ThreadListSample[threadId]; - LabelListSampleType* labelListSample = m_ThreadLabelListSample[threadId]; - SamplesPositionType& samplesPosition = m_ThreadSamplesPosition[threadId]; - - VectorDataTreeIteratorType vectorDataIt(this->GetSamplesLocations()->GetDataTree()); - bool isInitialized = false; - - for (vectorDataIt.GoToBegin(); !vectorDataIt.IsAtEnd(); ++vectorDataIt) - { - if (vectorDataIt.Get()->IsPointFeature()) - { - VectorDataPointType point = vectorDataIt.Get()->GetPoint(); - ContinuousIndexType cidx; - this->GetInput()->TransformPhysicalPointToContinuousIndex(point, cidx); - - RegionType paddedRegion = outputRegionForThread; - paddedRegion.PadByRadius(m_NeighborhoodRadius); - if (this->IsInsideWithNeighborhoodRadius(paddedRegion, cidx)) - { - // Set the Measurement Vector Size of the samplelists, once - if(!isInitialized) - { - // output list sample - listSample->SetMeasurementVectorSize(m_DescriptorsFunction->Evaluate(point).Size()); - labelListSample->SetMeasurementVectorSize(LabelMeasurementVectorType::Length); - isInitialized = true; - } - - SampleMeasurementVectorType sample(m_DescriptorsFunction->Evaluate(point)); - listSample->PushBack( sample ); - - LabelMeasurementVectorType label; - label[0] = static_cast<LabelMeasurementType>(vectorDataIt.Get()->GetFieldAsInt("Class")); - labelListSample->PushBack( label ); - - samplesPosition.push_back(point); - } - } - } -} - - -template <class TInputImage, class TVectorData, class TListSample, class TLabelListSample, class TOutputPrecision, class TCoordRep> -DescriptorsListSampleGenerator<TInputImage, TVectorData, TListSample, TLabelListSample, TOutputPrecision, TCoordRep> -::DescriptorsListSampleGenerator() -{ - - -} - -template <class TInputImage, class TVectorData, class TListSample, class TLabelListSample, class TOutputPrecision, class TCoordRep> -DescriptorsListSampleGenerator<TInputImage, TVectorData, TListSample, TLabelListSample, TOutputPrecision, TCoordRep> -::~DescriptorsListSampleGenerator() -{ - -} - - -} // end namespace otb - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.h b/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.h deleted file mode 100644 index f4c79f003f9b7a1c7e5c3841720e9b9979bac03e..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbFlusserMomentsIFFactory_h -#define otbFlusserMomentsIFFactory_h - -#include "itkLightObject.h" - -#include "otbMetaImageFunction.h" -#include "itkDataObject.h" -#include "otbImage.h" -#include "otbImageFunctionAdaptor.h" -#include "otbFlusserMomentsImageFunction.h" - - -namespace otb -{ -/** \class FlusserMomentsFFactory - * \brief add a FlusserMoments image function to a - * MetaImageFunction - * - * This class aims at adding an adapted - * FlusserMomentsImageFunction to an existing - * MetaImageFunction through the method Create. - * - * - * \ingroup OTBObjectDetection - */ - -template <class TImageType, class TCoordRep = double, class TPrecision = double> -class ITK_EXPORT FlusserMomentsIFFactory : - public itk::LightObject -{ -public: - /** Standard class typedefs. */ - typedef FlusserMomentsIFFactory Self; - typedef itk::LightObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - // New macro - itkNewMacro(Self); - - // RTTI typeinfo - itkTypeMacro(FlusserMomentsIFFactory, itk::LightObject); - - // Input and output typedef - typedef TImageType InputImageType; - typedef TCoordRep CoordRepType; - typedef TPrecision PrecisionType; - - // Other typedef - typedef typename MetaImageFunction<TPrecision>::Pointer MetaImageFunctionPointerType; - typedef typename std::vector<itk::DataObject::Pointer> DataObjectContainerType; - typedef typename std::vector<PrecisionType> ParamContainerType; - typedef FlusserMomentsImageFunction<InputImageType, CoordRepType> - FlusserMomentsIF; - typedef ImageFunctionAdaptor<FlusserMomentsIF, TPrecision> - AdaptedFlusserMomentsIF; - - void Create(InputImageType * image, - ParamContainerType param, - MetaImageFunctionPointerType metaIF, - DataObjectContainerType * container); - -protected: - FlusserMomentsIFFactory(){} - ~FlusserMomentsIFFactory() override{} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - FlusserMomentsIFFactory(const Self& ) = delete; - void operator=(const Self& ) = delete; - -}; - -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbFlusserMomentsIFFactory.hxx" -#endif - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.hxx b/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.hxx deleted file mode 100644 index 6aa08394d2145baf8474c072587f9b2757430419..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.hxx +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbFlusserMomentsIFFactory_hxx -#define otbFlusserMomentsIFFactory_hxx - -#include "otbFlusserMomentsIFFactory.h" - - -namespace otb -{ -template <class TImageType, class TCoordRep, class TPrecision> -void -FlusserMomentsIFFactory<TImageType, TCoordRep, TPrecision> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -template <class TImageType, class TCoordRep, class TPrecision> -void -FlusserMomentsIFFactory<TImageType, TCoordRep, TPrecision> -::Create(InputImageType * image, - ParamContainerType param, - MetaImageFunctionPointerType metaIF, - DataObjectContainerType * container) -{ - typename AdaptedFlusserMomentsIF::Pointer function = AdaptedFlusserMomentsIF::New(); - - function->SetInputImage(image); - function->GetInternalImageFunction()->SetNeighborhoodRadius(param[0]); - - metaIF->AddFunction(function); - container->push_back(image); -} - -}//end namespace -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.h b/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.h deleted file mode 100644 index e89dbcf376b2d11fc590b07ce0012e6045c35cab..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbFourierMellinDescriptorsIFFactory_h -#define otbFourierMellinDescriptorsIFFactory_h - -#include "itkLightObject.h" - -#include "otbMetaImageFunction.h" -#include "itkDataObject.h" -#include "otbImageFunctionAdaptor.h" -#include "otbFourierMellinDescriptorsImageFunction.h" - - -namespace otb -{ -/** \class FourierMellinDescriptorsFFactory - * \brief add a FourierMellinDescriptors image function to a - * MetaImageFunction - * - * This class aims at adding an adapted - * FourierMellinDescriptorsImageFunction to an existing - * MetaImageFunction through the method Create. - * - * - * \ingroup OTBObjectDetection - */ - -template <class TImageType, class TCoordRep = double, class TPrecision = double> -class ITK_EXPORT FourierMellinDescriptorsIFFactory : - public itk::LightObject -{ -public: - /** Standard class typedefs. */ - typedef FourierMellinDescriptorsIFFactory Self; - typedef itk::LightObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - // New macro - itkNewMacro(Self); - - // RTTI typeinfo - itkTypeMacro(FourierMellinDescriptorsIFFactory, itk::LightObject); - - // Input and output typedef - typedef TImageType InputImageType; - typedef TCoordRep CoordRepType; - typedef TPrecision PrecisionType; - - // Other typedef - typedef typename MetaImageFunction<TPrecision>::Pointer MetaImageFunctionPointerType; - typedef typename std::vector<itk::DataObject::Pointer> DataObjectContainerType; - typedef typename std::vector<PrecisionType> ParamContainerType; - typedef FourierMellinDescriptorsImageFunction<InputImageType, CoordRepType> - FourierMellinDescriptorsIF; - typedef ImageFunctionAdaptor<FourierMellinDescriptorsIF, TPrecision> - AdaptedFourierMellinDescriptorsIF; - - void Create(InputImageType * image, - ParamContainerType param, - MetaImageFunctionPointerType metaIF, - DataObjectContainerType * container); - -protected: - FourierMellinDescriptorsIFFactory(){} - ~FourierMellinDescriptorsIFFactory() override{} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - FourierMellinDescriptorsIFFactory(const Self& ) = delete; - void operator=(const Self& ) = delete; - -}; - -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbFourierMellinDescriptorsIFFactory.hxx" -#endif - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.hxx b/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.hxx deleted file mode 100644 index bb19f36cf7a608203ca02e2fffd12a8bbb729951..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.hxx +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbFourierMellinDescriptorsIFFactory_hxx -#define otbFourierMellinDescriptorsIFFactory_hxx - -#include "otbFourierMellinDescriptorsIFFactory.h" - - -namespace otb -{ -template <class TImageType, class TCoordRep, class TPrecision> -void -FourierMellinDescriptorsIFFactory<TImageType, TCoordRep, TPrecision> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -template <class TImageType, class TCoordRep, class TPrecision> -void -FourierMellinDescriptorsIFFactory<TImageType, TCoordRep, TPrecision> -::Create(InputImageType * image, - ParamContainerType param, - MetaImageFunctionPointerType metaIF, - DataObjectContainerType * container) -{ - typename AdaptedFourierMellinDescriptorsIF::Pointer function = AdaptedFourierMellinDescriptorsIF::New(); - - function->SetInputImage(image); - function->GetInternalImageFunction()->SetNeighborhoodRadius(param[0]); - function->GetInternalImageFunction()->SetPmax(param[1]); - function->GetInternalImageFunction()->SetQmax(param[2]); - - metaIF->AddFunction(function); - container->push_back(image); -} - -}//end namespace -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.h b/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.h deleted file mode 100644 index b00367a73b0b655ddfc57f2305cc15e18922636e..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbHaralickTexturesIFFactory_h -#define otbHaralickTexturesIFFactory_h - -#include "itkLightObject.h" - -#include "otbMetaImageFunction.h" -#include "itkDataObject.h" -#include "otbImage.h" -#include "otbImageFunctionAdaptor.h" -#include "otbHaralickTexturesImageFunction.h" - - -namespace otb -{ -/** \class HaralickTexturesFFactory - * \brief add a HaralickTextures image function to a - * MetaImageFunction - * - * This class aims at adding an adapted - * HaralickTexturesImageFunction to an existing - * MetaImageFunction through the method Create. - * - * - * \ingroup OTBObjectDetection - */ - -template <class TImageType, class TCoordRep = double, class TPrecision = double> -class ITK_EXPORT HaralickTexturesIFFactory : - public itk::LightObject -{ -public: - /** Standard class typedefs. */ - typedef HaralickTexturesIFFactory Self; - typedef itk::LightObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - // New macro - itkNewMacro(Self); - - // RTTI typeinfo - itkTypeMacro(haralickTexturesIFFactory, itk::LightObject); - - // Input and output typedef - typedef TImageType InputImageType; - typedef TCoordRep CoordRepType; - typedef TPrecision PrecisionType; - - // Other typedef - typedef typename MetaImageFunction<TPrecision>::Pointer MetaImageFunctionPointerType; - typedef typename std::vector<itk::DataObject::Pointer> DataObjectContainerType; - typedef typename std::vector<PrecisionType> ParamContainerType; - typedef HaralickTexturesImageFunction<InputImageType, CoordRepType> - HaralickTexturesIF; - typedef typename HaralickTexturesIF::OffsetType OffsetType; - typedef ImageFunctionAdaptor<HaralickTexturesIF, TPrecision> - AdaptedHaralickTexturesIF; - - void Create(InputImageType * image, - ParamContainerType param, - MetaImageFunctionPointerType metaIF, - DataObjectContainerType * container); - -protected: - HaralickTexturesIFFactory(){} - ~HaralickTexturesIFFactory() override{} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - HaralickTexturesIFFactory(const Self& ) = delete; - void operator=(const Self& ) = delete; - -}; - -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbHaralickTexturesIFFactory.hxx" -#endif - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.hxx b/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.hxx deleted file mode 100644 index fe1d2934f0fce071bc89d7bd8d7f66964c21a8a7..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.hxx +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbHaralickTexturesIFFactory_hxx -#define otbHaralickTexturesIFFactory_hxx - -#include "otbHaralickTexturesIFFactory.h" - - -namespace otb -{ -template <class TImageType, class TCoordRep, class TPrecision> -void -HaralickTexturesIFFactory<TImageType, TCoordRep, TPrecision> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -template <class TImageType, class TCoordRep, class TPrecision> -void -HaralickTexturesIFFactory<TImageType, TCoordRep, TPrecision> -::Create(InputImageType * image, - ParamContainerType param, - MetaImageFunctionPointerType metaIF, - DataObjectContainerType * container) -{ - typename AdaptedHaralickTexturesIF::Pointer function = AdaptedHaralickTexturesIF::New(); - - function->SetInputImage(image); - function->GetInternalImageFunction()->SetNeighborhoodRadius(param[0]); - function->SetInputImageMinimum(param[1]); - function->SetInputImageMaximum(param[2]); - function->SetNumberOfBinsPerAxis(param[3]); - - OffsetType offset; - offset.Fill(param[4]); - function->GetInternalImageFunction()->SetOffset(offset); - - metaIF->AddFunction(function); - container->push_back(image); -} - -}//end namespace -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.h b/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.h deleted file mode 100644 index 9dd970997cbdc27a374e2fd22f6a8c59070f01eb..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbLabeledSampleLocalizationGenerator_h -#define otbLabeledSampleLocalizationGenerator_h - -#include "otbVectorDataSource.h" -#include "otbVectorData.h" -#include "itkPreOrderTreeIterator.h" -#include "itkMersenneTwisterRandomVariateGenerator.h" -#include "itkEuclideanDistanceMetric.h" -#include <string> - - -namespace otb -{ -/** \class LabeledSampleLocalizationGenerator - * \brief Produces a VectorData from potentialy multiple VectorData - * - * This generator produces a unique vector data containing labeled positions - * extracted from inputs. - * - * Input points are transmitted to the output. In addition, 'no class' - * points are randomly picked inside input polygons making sure - * they are at least at a given distance (InhibitionRadius) of every - * known points. - * - * Classes are specified by the VectorData with a metadata field identified by - * a specific key. This key can be provided by the SetClassKey() method - * (using "Class" as a default key). - * The field is retrieved by GetFieldAsInt(), thus must be int-compatible - * - * - * \ingroup OTBObjectDetection - */ -template <class TVectorData> -class ITK_EXPORT LabeledSampleLocalizationGenerator : - public VectorDataSource<TVectorData> -{ -public: - /** Standard class typedefs */ - typedef LabeledSampleLocalizationGenerator Self; - typedef VectorDataSource<TVectorData> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Run-time type information (and related methods). */ - itkTypeMacro(LabeledSampleLocalizationGenerator, VectorDataSource); - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - typedef TVectorData VectorDataType; - typedef typename VectorDataType::Pointer VectorDataPointerType; - typedef typename VectorDataType::DataNodeType DataNodeType; - typedef typename DataNodeType::PolygonType::RegionType RegionType; - typedef typename DataNodeType::PointType PointType; - typedef typename DataNodeType::PolygonType::VertexType VertexType; - typedef typename std::vector<PointType> PointVectorType; - - typedef itk::PreOrderTreeIterator<typename VectorDataType::DataTreeType> TreeIteratorType; - - typedef itk::Statistics::MersenneTwisterRandomVariateGenerator RandomGeneratorType; - typedef itk::Statistics::EuclideanDistanceMetric<PointType> EuclideanDistanceMetricType; - - /** Connects the VectorDatas from which the localizations are going to be extracted. */ - using Superclass::PushBackInput; - void PushBackInput(const VectorDataType *); - const VectorDataType * GetInput(unsigned int idx) const; - - /** Field name containing the class identifier */ - itkGetConstMacro(ClassKey, std::string); - itkSetMacro(ClassKey, std::string); - - /** Identifier for the negative samples class */ - itkGetConstMacro(NoClassIdentifier, int); - itkSetMacro(NoClassIdentifier, int); - - /** The density of auto-generated negative samples inside the polygons */ - itkGetConstMacro(RandomLocalizationDensity, double); - itkSetMacro(RandomLocalizationDensity, double); - - /** The minimum distance between a generated negative sample and positive samples */ - itkGetConstMacro(InhibitionRadius, double); - itkSetMacro(InhibitionRadius, double); - - /** The maximum iteration number during negative sample positions */ - itkGetConstMacro(NbMaxIteration, unsigned long int); - itkSetMacro(NbMaxIteration, unsigned long int); - - /** Set the number of samples position to generate inside the inhibition radius window around a positive point */ - itkGetConstMacro(NumberOfPositiveSamplesPerPoint, unsigned int); - itkSetMacro(NumberOfPositiveSamplesPerPoint, unsigned int); - - /** Set the seed for random number generator */ - void SetSeed(unsigned int seed) - { - m_RandomGenerator->SetSeed(seed); - } - -protected: - LabeledSampleLocalizationGenerator(); - ~LabeledSampleLocalizationGenerator() override {} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - - /** Triggers the Computation of the sample list */ - void GenerateData(void) override; - - PointVectorType RandomPointsGenerator(DataNodeType * node); - - PointVectorType PointDensification(DataNodeType * node); - -private: - LabeledSampleLocalizationGenerator(const Self &) = delete; - void operator =(const Self&) = delete; - - std::string GetNextID() - { - std::ostringstream oss; - oss << m_CurrentID++; - return oss.str(); - } - - RandomGeneratorType::Pointer m_RandomGenerator; - - std::string m_ClassKey; - int m_NoClassIdentifier; - double m_RandomLocalizationDensity; - double m_InhibitionRadius; - unsigned long int m_NbMaxIteration; - unsigned int m_NumberOfPositiveSamplesPerPoint; - unsigned int m_CurrentID; -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbLabeledSampleLocalizationGenerator.hxx" -#endif - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.hxx b/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.hxx deleted file mode 100644 index dc0869fc214e889a64dc9f410a6b106545e14574..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.hxx +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbLabeledSampleLocalizationGenerator_hxx -#define otbLabeledSampleLocalizationGenerator_hxx - -#include "otbLabeledSampleLocalizationGenerator.h" - -#include "otbMath.h" - -namespace otb -{ -template<class TVectorData> -LabeledSampleLocalizationGenerator<TVectorData> -::LabeledSampleLocalizationGenerator() : - m_ClassKey("Class"), - m_NoClassIdentifier(0), - m_RandomLocalizationDensity(.005), - m_InhibitionRadius(5.0), - m_NbMaxIteration(10000), - m_NumberOfPositiveSamplesPerPoint(50), - m_CurrentID(0) -{ - this->SetNumberOfRequiredInputs(1); - this->SetNumberOfRequiredOutputs(1); - - m_RandomGenerator = RandomGeneratorType::GetInstance(); -} - -template <class TVectorData> -void -LabeledSampleLocalizationGenerator<TVectorData> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - this->Superclass::PrintSelf(os, indent); - os << indent << "Class Key: " << m_ClassKey << std::endl; - os << indent << "Negative Class Identifier: " << m_NoClassIdentifier << std::endl; - os << indent << "Sampling Density: " << m_RandomLocalizationDensity << std::endl; - os << indent << "Inhibition Radius: " << m_InhibitionRadius << std::endl; -} - - -template <class TVectorData> -void -LabeledSampleLocalizationGenerator<TVectorData> -::PushBackInput(const VectorDataType * vectorData) -{ - this->Superclass::SetNthInput(this->GetNumberOfIndexedInputs(), const_cast<VectorDataType *>(vectorData)); -} - -template <class TVectorData> -const TVectorData * -LabeledSampleLocalizationGenerator<TVectorData> -::GetInput(unsigned int idx) const -{ - if (this->GetNumberOfInputs() < idx) - { - return nullptr; - } - - return static_cast<const VectorDataType *>(this->Superclass::GetInput(idx)); -} - -template <class TVectorData> -typename LabeledSampleLocalizationGenerator<TVectorData> -::PointVectorType -LabeledSampleLocalizationGenerator<TVectorData> -::PointDensification(DataNodeType * node) -{ - - PointVectorType pPoint; - PointType centerPoint = node->GetPoint(); - - for(unsigned int i = 0; i < m_NumberOfPositiveSamplesPerPoint; ++i) - { - PointType point; - for(unsigned int dim = 0; dim < 2; ++dim) - { - point[dim] = centerPoint[dim]+this->m_RandomGenerator->GetUniformVariate(-m_InhibitionRadius, m_InhibitionRadius); - } - pPoint.push_back(point); - } - return pPoint; -} - -template <class TVectorData> -typename LabeledSampleLocalizationGenerator<TVectorData> -::PointVectorType -LabeledSampleLocalizationGenerator<TVectorData> -::RandomPointsGenerator(DataNodeType * node) -{ - // Output - PointVectorType vPoint; - - // Euclidean distance - typename EuclideanDistanceMetricType::Pointer euclideanDistanceMetric = EuclideanDistanceMetricType::New(); - - // Gathering Information - RegionType generatorRegion = node->GetPolygonExteriorRing()->GetBoundingRegion(); - typename RegionType::SizeType generatorRegionSize = generatorRegion.GetSize(); - typename RegionType::IndexType generatorRegionIndex = generatorRegion.GetIndex(); - //typename RegionType::IndexType generatorRegionOrigin = generatorRegion.GetOrigin(); - - // Identify inside known points - std::vector<PointType> insiders; - typename VectorDataType::ConstPointer vectorData = static_cast<const VectorDataType *>(this->GetOutput(0)); - TreeIteratorType itVector(vectorData->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsPointFeature() && itVector.Get()->GetFieldAsInt(m_ClassKey) != m_NoClassIdentifier) - { - VertexType vertex; - vertex[0] = itVector.Get()->GetPoint()[0]; - vertex[1] = itVector.Get()->GetPoint()[1]; - - if(node->GetPolygonExteriorRing()->IsInside(vertex)) - { - insiders.push_back(itVector.Get()->GetPoint()); - } - } - ++itVector; - } - - // Generation - unsigned int nbMaxPosition = (unsigned int)(node->GetPolygonExteriorRing()->GetArea() - * this->GetRandomLocalizationDensity()); - unsigned long int nbIter = this->GetNbMaxIteration(); - unsigned int nbPosition = nbMaxPosition; - - PointType rangeMin, rangeMax; - - for(unsigned int dim = 0; dim < 2; ++dim) - { - rangeMin[dim] = generatorRegionIndex[dim]; - rangeMax[dim] = generatorRegionIndex[dim] + generatorRegionSize[dim]; - } - - while(nbIter > 0 && nbPosition > 0) - { - VertexType candidate; - for(unsigned int dim = 0; dim < 2; ++dim) - { - candidate[dim] = this->m_RandomGenerator->GetUniformVariate(rangeMin[dim], rangeMax[dim]); - } - - if(node->GetPolygonExteriorRing()->IsInside(candidate)) - { - typename PointVectorType::const_iterator pit = insiders.begin(); - bool valid = true; - - while(valid && pit!=insiders.end()) - { - valid = (euclideanDistanceMetric->Evaluate(candidate, *pit) > this->GetInhibitionRadius()); - ++pit; - } - PointType point; - point[0] = candidate[0]; - point[1] = candidate[1]; - if(valid) - { - vPoint.push_back(point); - } - nbPosition --; - } - nbIter --; - } - return vPoint; -} - -template <class TVectorData> -void -LabeledSampleLocalizationGenerator<TVectorData> -::GenerateData() -{ - unsigned int nbInputs = this->GetNumberOfInputs(); - - this->GetOutput(0)->SetMetaDataDictionary(this->GetInput(0)->GetMetaDataDictionary()); - - // Retrieving root node - typename DataNodeType::Pointer root = this->GetOutput(0)->GetDataTree()->GetRoot()->Get(); - // Create the document node - typename DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - // Adding the layer to the data tree - this->GetOutput(0)->GetDataTree()->Add(document, root); - - std::string positiveClassIdentifier; - bool firstFeature = true; - // Copy all point feature in output VectorData - for (unsigned int i=0; i<nbInputs; ++i) - { - typename VectorDataType::ConstPointer vectorData = static_cast<const VectorDataType *>(this->GetInput(i)); - - TreeIteratorType itVector(vectorData->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsPointFeature()) - { - //Get the value of the positive value of - if (firstFeature) - { - positiveClassIdentifier = itVector.Get()->GetFieldAsString(m_ClassKey); - firstFeature = false; - } - // Duplicate input feature - typename DataNodeType::Pointer currentGeometry = DataNodeType::New(); - currentGeometry->SetNodeId(this->GetNextID()); - currentGeometry->SetNodeType(otb::FEATURE_POINT); - currentGeometry->SetPoint(itVector.Get()->GetPoint()); - - std::vector<std::string> fields = itVector.Get()->GetFieldList(); - for (std::vector<std::string>::const_iterator it = fields.begin(); it != fields.end(); ++it) - { - currentGeometry->SetFieldAsString( *it, itVector.Get()->GetFieldAsString(*it) ); - // The PositiveClass identifier must be an attribute of the class - - } - - this->GetOutput(0)->GetDataTree()->Add(currentGeometry, document); - } - ++itVector; - } - } - - // Iterates through the polygon features and generates random point inside the polygon with - // the "NoClass" identifier - for (unsigned int i=0; i<nbInputs; ++i) - { - typename VectorDataType::ConstPointer vectorData = static_cast<const VectorDataType *>(this->GetInput(i)); - - TreeIteratorType itVector(vectorData->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsPolygonFeature()) - { - PointVectorType vPoints = RandomPointsGenerator(itVector.Get()); - - for (typename PointVectorType::const_iterator it = vPoints.begin(); it != vPoints.end(); ++it) - { - typename DataNodeType::Pointer currentGeometry = DataNodeType::New(); - currentGeometry->SetNodeId(this->GetNextID()); - currentGeometry->SetNodeType(otb::FEATURE_POINT); - currentGeometry->SetPoint(*it); - currentGeometry->SetFieldAsInt(this->GetClassKey(), this->GetNoClassIdentifier()); - this->GetOutput(0)->GetDataTree()->Add(currentGeometry, document); - } - } - ++itVector; - } - } - // Densify positive points - for (unsigned int i=0; i<nbInputs; ++i) - { - typename VectorDataType::ConstPointer vectorData = static_cast<const VectorDataType *>(this->GetInput(i)); - - TreeIteratorType itVector(vectorData->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsPointFeature()) - { - PointVectorType pPoints = PointDensification(itVector.Get()); - - for (typename PointVectorType::const_iterator it = pPoints.begin(); it != pPoints.end(); ++it) - { - typename DataNodeType::Pointer currentGeometry = DataNodeType::New(); - currentGeometry->SetNodeId(this->GetNextID()); - currentGeometry->SetNodeType(otb::FEATURE_POINT); - currentGeometry->SetPoint(*it); - currentGeometry->SetFieldAsInt(this->GetClassKey(), atoi(positiveClassIdentifier.c_str()) ); - this->GetOutput(0)->GetDataTree()->Add(currentGeometry, document); - } - } - ++itVector; - } - } -} - -} // end namespace otb - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.h b/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.h deleted file mode 100644 index 1747e5912b28fce922d3a4a04633ac461138b703..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbLocalHistogramIFFactory_h -#define otbLocalHistogramIFFactory_h - -#include "itkLightObject.h" - -#include "otbMetaImageFunction.h" -#include "itkDataObject.h" -#include "otbImage.h" -#include "otbImageFunctionAdaptor.h" -#include "otbLocalHistogramImageFunction.h" - - -namespace otb -{ -/** \class LocalHistogramIFFactory - * \brief add a LocalHistogram image function to a - * MetaImageFunction - * - * This class aims at adding an adapted - * LocalHistogramImageFunction to an existing MetaImageFunction - * through the method Create. - * - * - * \ingroup OTBObjectDetection - */ - -template <class TImageType, class TCoordRep = double, class TPrecision = double> -class ITK_EXPORT LocalHistogramIFFactory : - public itk::LightObject -{ -public: - /** Standard class typedefs. */ - typedef LocalHistogramIFFactory Self; - typedef itk::LightObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - // New macro - itkNewMacro(Self); - - // RTTI typeinfo - itkTypeMacro(LocalHistogramIFFactory, itk::LightObject); - - // Input and output typedef - typedef TImageType InputImageType; - typedef TCoordRep CoordRepType; - typedef TPrecision PrecisionType; - - // Other typedef - typedef typename MetaImageFunction<TPrecision>::Pointer MetaImageFunctionPointerType; - typedef typename std::vector<itk::DataObject::Pointer> DataObjectContainerType; - typedef typename std::vector<PrecisionType> ParamContainerType; - typedef LocalHistogramImageFunction<InputImageType, CoordRepType> - LocalHistogramIF; - typedef ImageFunctionAdaptor<LocalHistogramIF, TPrecision> - AdaptedLocalHistogramIF; - - void Create(InputImageType * image, - ParamContainerType param, - MetaImageFunctionPointerType metaIF, - DataObjectContainerType * container); - -protected: - LocalHistogramIFFactory(){} - ~LocalHistogramIFFactory() override{} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - LocalHistogramIFFactory(const Self& ) = delete; - void operator=(const Self& ) = delete; - -}; - -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbLocalHistogramIFFactory.hxx" -#endif - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.hxx b/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.hxx deleted file mode 100644 index c3c8d27695fc7d38089f79700f988ef4b7a1ccda..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.hxx +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbLocalHistogramIFFactory_hxx -#define otbLocalHistogramIFFactory_hxx - -#include "otbLocalHistogramIFFactory.h" - - -namespace otb -{ -template <class TImageType, class TCoordRep, class TPrecision> -void -LocalHistogramIFFactory<TImageType, TCoordRep, TPrecision> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -template <class TImageType, class TCoordRep, class TPrecision> -void -LocalHistogramIFFactory<TImageType, TCoordRep, TPrecision> -::Create(InputImageType * image, - ParamContainerType param, - MetaImageFunctionPointerType metaIF, - DataObjectContainerType * container) -{ - typename AdaptedLocalHistogramIF::Pointer function = AdaptedLocalHistogramIF::New(); - - function->SetInputImage(image); - function->GetInternalImageFunction()->SetNeighborhoodRadius(param[0]); - function->GetInternalImageFunction()->SetNumberOfHistogramBins(param[1]); - function->GetInternalImageFunction()->SetHistogramMin(param[2]); - function->GetInternalImageFunction()->SetHistogramMax(param[3]); - - metaIF->AddFunction(function); - container->push_back(image); -} - -}//end namespace -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbMultiChannelIFFactory.h b/Modules/Detection/ObjectDetection/include/otbMultiChannelIFFactory.h deleted file mode 100644 index a99de90d24b8365f194f87f2966e227d4b7abb3e..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbMultiChannelIFFactory.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMultiChannelIFFactory_h -#define otbMultiChannelIFFactory_h - -#include "otbVectorImageToImageListFilter.h" -#include "otbVectorImage.h" -#include "otbImage.h" -#include "otbImageList.h" -#include "itkDataObject.h" -#include "otbMetaImageFunction.h" - - -namespace otb -{ -/** \class MultiChannelIFFactory - * \brief Yhis class handle the image type before the use of an - * image function factory - * - * According to the image type, the Create method of this class can - * call an ImageFunctionFactory for each band of the input image or - * once if the image type is otb::Image. - * - * - * \ingroup OTBObjectDetection - */ - -template <class TIFFactory, class TInputImage> -class MultiChannelIFFactory -{ -public: - typedef TIFFactory IFFactoryType; - typedef TInputImage InputImageType; - typedef typename IFFactoryType::Pointer IFFactoryPointerType; - typedef typename IFFactoryType::InputImageType ImageType; - typedef typename IFFactoryType::CoordRepType CoordRepType; - typedef typename IFFactoryType::PrecisionType PrecisionType; - typedef typename std::vector<PrecisionType> ParameterContainerType; - typedef typename std::vector<itk::DataObject::Pointer> ImageContainer; - typedef typename MetaImageFunction<PrecisionType>::Pointer MetaIFPointerType; - - typedef ImageList<ImageType> ImageListType; - typedef VectorImageToImageListFilter<InputImageType, - ImageListType> VIToILFilterType; - - void Create(InputImageType * image, - ParameterContainerType param, - MetaIFPointerType metaIF, - ImageContainer * container) - { - m_Factory->Create(image, param, metaIF, container); - } - - MultiChannelIFFactory() - { - m_Factory = IFFactoryType::New(); - } - - virtual ~MultiChannelIFFactory(){}; - -private: - IFFactoryPointerType m_Factory; - -}; - - -template <class TIFFactory, typename TPixel, unsigned int VImageDimension> -class MultiChannelIFFactory<TIFFactory, otb::VectorImage<TPixel, VImageDimension> > -{ -public: - typedef TIFFactory IFFactoryType; - typedef typename IFFactoryType::Pointer IFFactoryPointerType; - typedef typename IFFactoryType::InputImageType ImageType; - typedef typename IFFactoryType::CoordRepType CoordRepType; - typedef typename IFFactoryType::PrecisionType PrecisionType; - typedef VectorImage<TPixel, 2> InputImageType; - - typedef typename std::vector<PrecisionType> ParameterContainerType; - typedef typename std::vector<itk::DataObject::Pointer> ImageContainer; - typedef typename MetaImageFunction<PrecisionType>::Pointer MetaIFPointerType; - - typedef ImageList<ImageType> ImageListType; - typedef VectorImageToImageListFilter<InputImageType, - ImageListType> VIToILFilterType; - - void Create(InputImageType * image, - ParameterContainerType param, - MetaIFPointerType metaIF, - ImageContainer * container) - { - unsigned int nbBand; - typename VIToILFilterType::Pointer filter = VIToILFilterType::New(); - - filter->SetInput(image); - filter->UpdateOutputInformation(); - nbBand = filter->GetOutput()->Size(); - - for (unsigned int i=0; i<nbBand; ++i) - { - filter->GetOutput()->GetNthElement(i)->UpdateOutputInformation(); - m_Factory->Create(filter->GetOutput()->GetNthElement(i), param, metaIF, container); - } - } - - MultiChannelIFFactory() - { - m_Factory = IFFactoryType::New(); - } - - virtual ~MultiChannelIFFactory(){}; - -private: - IFFactoryPointerType m_Factory; - -}; -} //end namespace - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.h b/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.h deleted file mode 100644 index 01d371d964df9245b8c225f546f4c09429cf1730..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.h +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbObjectDetectionClassifier_h -#define otbObjectDetectionClassifier_h - -#include <vector> -#include <string> - -#include "itkImageRegion.h" -#include "itkFixedArray.h" -#include "itkVariableLengthVector.h" -#include "itkListSample.h" -#include "itkDataObjectDecorator.h" -#include "itkSimpleDataObjectDecorator.h" -#include "itkFunctionBase.h" - -#include "otbVectorData.h" -#include "otbMachineLearningModel.h" -#include "otbPersistentImageFilter.h" -#include "otbPersistentFilterStreamingDecorator.h" - -namespace otb -{ - -template <class TFunctionPrecision> -class DefaultDescriptorType -{ -public: - typedef itk::VariableLengthVector<TFunctionPrecision> Type; -}; - -/** \class PersistentObjectDetectionClassifier - * \brief [internal] Helper class for the implementation of ObjectDetectionClassifier - * with streaming capabilities - * - * This class inherits PersistentImageFilter and provides the Reset/Synthesize functions, - * plus the ThreadedGenerateData function implementing the image function evaluation - * - * - * \ingroup OTBObjectDetection - */ -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -class ITK_EXPORT PersistentObjectDetectionClassifier : - public PersistentImageFilter<TInputImage, TInputImage> -{ -public: - /** Standard Self typedef */ - typedef PersistentObjectDetectionClassifier Self; - typedef PersistentImageFilter<TInputImage, TInputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Runtime information support. */ - itkTypeMacro(PersistentObjectDetectionClassifier, PersistentImageFilter); - - /** Image related typedefs. */ - typedef TInputImage InputImageType; - typedef typename TInputImage::Pointer InputImagePointer; - typedef typename TInputImage::RegionType RegionType; - typedef typename TInputImage::SizeType SizeType; - typedef typename TInputImage::IndexType IndexType; - typedef typename TInputImage::PixelType PixelType; - - itkStaticConstMacro(InputImageDimension, unsigned int, - TInputImage::ImageDimension); - - /** Image related typedefs. */ - itkStaticConstMacro(ImageDimension, unsigned int, - TInputImage::ImageDimension); - - /** Smart Pointer type to a DataObject. */ - typedef typename itk::DataObject::Pointer DataObjectPointer; - typedef itk::ProcessObject::DataObjectPointerArraySizeType DataObjectPointerArraySizeType; - - /** Input VectorData */ - typedef TOutputVectorData VectorDataType; - typedef typename VectorDataType::Pointer VectorDataObjectType; - typedef typename VectorDataType::DataNodeType VectorDataNodeType; - typedef typename VectorDataType::DataNodePointerType VectorDataNodePointerType; - typedef typename VectorDataType::DataTreeType VectorDataTreeType; - typedef typename VectorDataType::DataTreePointerType VectorDataTreePointerType; - typedef typename VectorDataNodeType::PointType VectorDataPointType; - typedef typename VectorDataNodeType::LineType VectorDataLineType; - typedef typename VectorDataNodeType::PolygonType VectorDataPolygonType; - typedef itk::PreOrderTreeIterator<VectorDataTreeType> VectorDataTreeIteratorType; - - /** Function type for descriptors extraction */ - typedef TFunctionType DescriptorsFunctionType; - typedef typename DescriptorsFunctionType::Pointer DescriptorsFunctionPointerType; - typedef typename DescriptorsFunctionType::InputType DescriptorsFunctionPointType; - typedef typename DescriptorsFunctionType::OutputType DescriptorType; - typedef typename DescriptorType::ValueType DescriptorPrecision; - - typedef itk::ContinuousIndex - <typename DescriptorsFunctionPointType::ValueType, - itkGetStaticConstMacro(InputImageDimension)> ContinuousIndexType; - - /** TLabel output */ - typedef TLabel LabelType; - typedef MachineLearningModel<DescriptorPrecision, LabelType> ModelType; - typedef typename ModelType::Pointer ModelPointerType; - typedef typename ModelType::InputSampleType ModelMeasurementType; - - typedef itk::Statistics::ListSample<DescriptorType> ListSampleType; - - void AddInput(itk::DataObject * dataObject) override - { - this->Superclass::AddInput(dataObject); - } - - /** learning model used for classification */ - void SetModel(ModelType * model); - - const ModelType* GetModel(void) const; - - VectorDataType* GetOutputVectorData(void); - - /** The function to evaluate */ - itkSetObjectMacro(DescriptorsFunction, DescriptorsFunctionType); - itkGetObjectMacro(DescriptorsFunction, DescriptorsFunctionType); - itkGetConstObjectMacro(DescriptorsFunction, DescriptorsFunctionType); - - itkSetMacro( NeighborhoodRadius, unsigned int ); - itkGetConstReferenceMacro( NeighborhoodRadius, unsigned int ); - - itkGetConstMacro(ClassKey, std::string); - itkSetMacro(ClassKey, std::string); - - itkGetMacro(NoClassLabel, LabelType); - itkSetMacro(NoClassLabel, LabelType); - - /** Set/Get the Shifts for this sample list */ - itkGetMacro(Shifts, DescriptorType); - itkSetMacro(Shifts, DescriptorType); - itkGetMacro(Scales, DescriptorType); - itkSetMacro(Scales, DescriptorType); - - /** Set/Get the grid step for detection */ - itkSetMacro(GridStep, unsigned int); - itkGetMacro(GridStep, unsigned int); - - /** Make a DataObject of the correct type to be used as the specified - * output. */ - itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx) override; - using Superclass::MakeOutput; - - void AllocateOutputs() override; - - void GenerateOutputInformation() override; - - void Reset(void) override; - - void Synthetize(void) override; - -protected: - PersistentObjectDetectionClassifier(); - ~PersistentObjectDetectionClassifier() override; - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - - void GenerateInputRequestedRegion() override; - - void BeforeThreadedGenerateData() override; - - /** Multi-thread version GenerateData. */ - void ThreadedGenerateData(const RegionType& outputRegionForThread, - itk::ThreadIdType threadId) override; - -private: - PersistentObjectDetectionClassifier(const Self &) = delete; - void operator =(const Self&) = delete; - - template <typename TCoordRepType> - bool - IsInsideWithNeighborhoodRadius(const RegionType& region, const ContinuousIndexType &index) const - { - typedef typename IndexType::IndexValueType IndexValueType; - - for(unsigned int i=0; i<ImageDimension; ++i) - { - if( itk::Math::RoundHalfIntegerUp<IndexValueType>(index[i]) < static_cast<IndexValueType>( region.GetIndex(i) ) + m_NeighborhoodRadius + 1 ) - //Comment this instruction after itkv4 migration (correct - //usage of centered-pixel coordinates) - //if( index[i] < static_cast<TCoordRepType>( region.GetIndex(i) ) + m_NeighborhoodRadius ) - { - return false; - } - // bound is the last valid pixel location - const TCoordRepType bound = static_cast<TCoordRepType>( - region.GetIndex(i) + region.GetSize(i) - 0.5); - //Comment this instruction after itkv4 migration (correct - //usage of centered-pixel coordinates) - //const TCoordRepType bound = static_cast<TCoordRepType>( - // region.GetIndex(i) + static_cast<IndexValueType>(region.GetSize(i)) - 1); - if( index[i] > bound - m_NeighborhoodRadius - 1 ) - { - return false; - } - } - return true; - } - - typedef std::pair<DescriptorsFunctionPointType, LabelType> DetectedPoint; - typedef std::vector<DetectedPoint> PointArray; - typedef std::vector<PointArray> PointArrayContainer; - PointArrayContainer m_ThreadPointArray; - - DescriptorsFunctionPointerType m_DescriptorsFunction; - - unsigned int m_NeighborhoodRadius; - std::string m_ClassKey; - LabelType m_NoClassLabel; - DescriptorType m_Shifts; - DescriptorType m_Scales; - DescriptorType m_InvertedScales; - - /** Step of the detection grid */ - unsigned int m_GridStep; - - /** classification model */ - ModelPointerType m_Model; - -}; - - -/** \class ObjectDetectionClassifier - * \brief This class detects object in an image, given a ML model and a local descriptors function - * - * Given an image (by SetInputImage()), a ML model (by SetModel) and an local descriptors ImageFunction - * (set by SetDescriptorsFunction()), this class computes the local descriptors on a regular grid - * over the image, and evaluates the class label of the corresponding sample. - * It outputs a vector data with the points for which the descriptors are not classified as "negative", - * the negative class label being given by SetNoClassLabel() - * - * This class is streaming capable and multithreaded - * - * \ingroup OTBObjectDetection - */ -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionPrecision = double, class TCoordRep = double> -class ITK_EXPORT ObjectDetectionClassifier : - public PersistentFilterStreamingDecorator< - PersistentObjectDetectionClassifier< TInputImage, - TOutputVectorData, - TLabel, - itk::FunctionBase< itk::Point<TCoordRep, 2>, - typename DefaultDescriptorType<TFunctionPrecision>::Type> > - > -{ -public: - /** Standard Self typedef */ - typedef ObjectDetectionClassifier Self; - typedef PersistentFilterStreamingDecorator - < PersistentObjectDetectionClassifier - <TInputImage, - TOutputVectorData, - TLabel, - itk::FunctionBase< itk::Point<TCoordRep, 2>, - typename DefaultDescriptorType<TFunctionPrecision>::Type> > - > Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(ObjectDetectionClassifier, PersistentFilterStreamingDecorator); - - typedef TInputImage InputImageType; - typedef TOutputVectorData OutputVectorDataType; - typedef TLabel LabelType; - typedef TCoordRep CoordRepType; - typedef TFunctionPrecision FunctionPrecision; - - /** The coordinates used when evaluating function */ - typedef itk::Point<TCoordRep, 2> PointType; - - /** The return value of the function */ - typedef typename DefaultDescriptorType<FunctionPrecision>::Type DescriptorType; - - /** The function evaluated on the input image at locations specified by the vector data */ - typedef itk::FunctionBase<PointType, DescriptorType> DescriptorsFunctionType; - typedef typename DescriptorsFunctionType::Pointer DescriptorsFunctionPointerType; - - typedef typename Superclass::FilterType PersistentFilterType; - - typedef typename PersistentFilterType::ModelType ModelType; - typedef typename PersistentFilterType::ModelPointerType ModelPointerType; - - /** Input image to extract feature */ - void SetInputImage(InputImageType* input) - { - this->GetFilter()->SetInput(input); - } - - /** Sample locations as a VectorData of points. The label is in the ClassKey feature */ - OutputVectorDataType* GetOutputVectorData() - { - return this->GetFilter()->GetOutputVectorData(); - } - - void AddInput(itk::DataObject * dataObject) override - { - this->GetFilter()->AddInput(dataObject); - } - - /** The function to evaluate */ - void SetDescriptorsFunction(DescriptorsFunctionType * input) - { - this->GetFilter()->SetDescriptorsFunction(input); - } - - /** The function to evaluate */ - DescriptorsFunctionType * GetDescriptorsFunction() - { - return this->GetFilter()->GetDescriptorsFunction(); - } - - /** The function to evaluate */ - void SetModel(ModelType* model) - { - this->GetFilter()->SetModel(model); - } - - /** The classification model */ - const ModelType* GetModel() - { - return this->GetFilter()->GetModel(); - } - - otbSetObjectMemberMacro(Filter, NeighborhoodRadius, unsigned int); - otbGetObjectMemberMacro(Filter, NeighborhoodRadius, unsigned int); - - /** Set/Get the name of the field containing the class information */ - otbGetObjectMemberMacro(Filter, ClassKey, std::string); - otbSetObjectMemberMacro(Filter, ClassKey, std::string); - - /** Set/Get the label of the negative samples */ - otbGetObjectMemberMacro(Filter, NoClassLabel, LabelType); - otbSetObjectMemberMacro(Filter, NoClassLabel, LabelType); - - /** Set/Get the Shifts for this sample list */ - otbGetObjectMemberMacro(Filter, Shifts, DescriptorType); - otbSetObjectMemberMacro(Filter, Shifts, DescriptorType); - - /** Set/Get the Scales for this sample list */ - otbGetObjectMemberMacro(Filter, Scales, DescriptorType); - otbSetObjectMemberMacro(Filter, Scales, DescriptorType); - - /** Set/Get the grid step for detection */ - otbSetObjectMemberMacro(Filter, GridStep, unsigned int); - otbGetObjectMemberMacro(Filter, GridStep, unsigned int); - - - protected: - /** Constructor */ - ObjectDetectionClassifier(); - - /** Destructor */ - ~ObjectDetectionClassifier() override; - - private: - ObjectDetectionClassifier(const Self &) = delete; - void operator =(const Self&) = delete; -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbObjectDetectionClassifier.hxx" -#endif - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.hxx b/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.hxx deleted file mode 100644 index 97781629e68ef470e1f35b8aeac6ccb1d273f1dd..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.hxx +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbObjectDetectionClassifier_hxx -#define otbObjectDetectionClassifier_hxx - -#include "otbObjectDetectionClassifier.h" - -#include "itkContinuousIndex.h" - -namespace otb -{ - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::PersistentObjectDetectionClassifier() - : m_NeighborhoodRadius(0), - m_ClassKey("Class"), - m_NoClassLabel(0), - m_GridStep(10) -{ - this->SetNumberOfRequiredInputs(1); - - // Have 2 outputs : the image created by Superclass, a vector data with points - this->SetNumberOfRequiredOutputs(3); - this->itk::ProcessObject::SetNthOutput(1, this->MakeOutput(1).GetPointer()); - this->itk::ProcessObject::SetNthOutput(2, this->MakeOutput(2).GetPointer()); -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::~PersistentObjectDetectionClassifier() -{ -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -void -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::AllocateOutputs() -{ - // This is commented to prevent the streaming of the whole image for the first stream strip - // It shall not cause any problem because the output image of this filter is not intended to be used. - //InputImagePointer image = const_cast< TInputImage * >( this->GetInput() ); - //this->GraftOutput( image ); - // Nothing that needs to be allocated for the remaining outputs -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -void -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::GenerateOutputInformation() -{ - Superclass::GenerateOutputInformation(); - if (this->GetInput()) - { - this->GetOutput()->CopyInformation(this->GetInput()); - this->GetOutput()->SetLargestPossibleRegion(this->GetInput()->GetLargestPossibleRegion()); - - if (this->GetOutput()->GetRequestedRegion().GetNumberOfPixels() == 0) - { - this->GetOutput()->SetRequestedRegion(this->GetOutput()->GetLargestPossibleRegion()); - } - } -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -void -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::SetModel(ModelType* model) -{ - if (model != m_Model) - { - m_Model = model; - this->Modified(); - } -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -const typename PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>::ModelType* -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::GetModel(void) const -{ - return m_Model; -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -typename PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>::VectorDataType* -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::GetOutputVectorData() -{ - return static_cast<VectorDataType*>(this->itk::ProcessObject::GetOutput(1)); -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -itk::DataObject::Pointer -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::MakeOutput(DataObjectPointerArraySizeType idx) -{ - itk::DataObject::Pointer output; - switch (idx) - { - case 0: - output = static_cast<itk::DataObject*>(InputImageType::New().GetPointer()); - break; - case 1: - { - output = static_cast<itk::DataObject*>(VectorDataType::New().GetPointer()); - break; - } - default: - output = static_cast<itk::DataObject*>(InputImageType::New().GetPointer()); - break; - } - return output; -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -void -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::Reset() -{ - m_ThreadPointArray = PointArrayContainer(this->GetNumberOfThreads()); - -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -void -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::Synthetize() -{ - // merge all points in a single vector data - //std::copy(m_ThreadPointArray[0].begin(), m_ThreadPointArray[0].end(), - //std::ostream_iterator<DescriptorsFunctionPointType>(std::cout, "\n") ); - - VectorDataType* vdata = this->GetOutputVectorData(); - - // Retrieving root node - VectorDataNodePointerType root = vdata->GetDataTree()->GetRoot()->Get(); - // Create the document node - VectorDataNodePointerType document = VectorDataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - VectorDataNodePointerType folder = VectorDataNodeType::New(); - folder->SetNodeType(otb::FOLDER); - // Adding the layer to the data tree - vdata->GetDataTree()->Add(document, root); - vdata->GetDataTree()->Add(folder, document); - - for (itk::ThreadIdType threadId = 0; threadId < m_ThreadPointArray.size(); ++threadId) - { - PointArray& pointArray = m_ThreadPointArray[threadId]; - typename PointArray::const_iterator it = pointArray.begin(); - typename PointArray::const_iterator end = pointArray.end(); - - for (; it != end; ++it) - { - VectorDataNodePointerType currentGeometry = VectorDataNodeType::New(); - currentGeometry->SetNodeId("FEATURE_POINT"); - currentGeometry->SetNodeType(otb::FEATURE_POINT); - VectorDataPointType p; - p[0] = it->first[0]; - p[1] = it->first[1]; - currentGeometry->SetPoint(p); - currentGeometry->SetFieldAsInt(m_ClassKey, it->second); - vdata->GetDataTree()->Add(currentGeometry, folder); - } - } -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -void -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -void -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::GenerateInputRequestedRegion() -{ - Superclass::GenerateInputRequestedRegion(); - - // get pointers to the input and output - typename Superclass::InputImagePointer inputPtr = - const_cast< TInputImage * >( this->GetInput() ); - typename Superclass::OutputImagePointer outputPtr = this->GetOutput(); - - if ( !inputPtr || !outputPtr ) - { - return; - } - - // get a copy of the input requested region (should equal the output - // requested region) - typename TInputImage::RegionType inputRequestedRegion; - inputRequestedRegion = inputPtr->GetRequestedRegion(); - - // pad the input requested region by the operator radius - inputRequestedRegion.PadByRadius( m_NeighborhoodRadius + 1 ); - - // crop the input requested region at the input's largest possible region - if ( inputRequestedRegion.Crop(inputPtr->GetLargestPossibleRegion()) ) - { - inputPtr->SetRequestedRegion( inputRequestedRegion ); - return; - } - else - { - // Couldn't crop the region (requested region is outside the largest - // possible region). Throw an exception. - - // store what we tried to request (prior to trying to crop) - inputPtr->SetRequestedRegion( inputRequestedRegion ); - } -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -void -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::BeforeThreadedGenerateData() -{ - // Compute the 1/(sigma) vector - m_InvertedScales = m_Scales; - for(unsigned int idx = 0; idx < m_Scales.Size(); ++idx) - { - if(m_Scales[idx]-1e-10 < 0.) - m_InvertedScales[idx] = 0.; - else - m_InvertedScales[idx] = 1 / m_Scales[idx]; - } - -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType> -void -PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType> -::ThreadedGenerateData(const RegionType& outputRegionForThread, - itk::ThreadIdType threadId) -{ - InputImageType* input = static_cast<InputImageType*>(this->itk::ProcessObject::GetInput(0)); - const ModelType* model = this->GetModel(); - - IndexType begin = outputRegionForThread.GetIndex(); - IndexType end = begin; - end[0] += outputRegionForThread.GetSize(0); - end[1] += outputRegionForThread.GetSize(1); - - IndexType current = begin; - for (; current[1] != end[1]; current[1]++) - { - if (current[1] % m_GridStep == 0) - { - for(current[0] = begin[0]; current[0] != end[0]; current[0]++) - { - if (current[0] % m_GridStep == 0) - { - DescriptorsFunctionPointType point; - input->TransformIndexToPhysicalPoint(current, point); - - DescriptorType descriptor = m_DescriptorsFunction->Evaluate(point); - ModelMeasurementType modelMeasurement(descriptor.GetSize()); - for (unsigned int i = 0; i < descriptor.GetSize(); ++i) - { - modelMeasurement[i] = (descriptor[i] - m_Shifts[i]) * m_InvertedScales[i]; - } - LabelType label = (model->Predict(modelMeasurement))[0]; - - if (label != m_NoClassLabel) - { - m_ThreadPointArray[threadId].push_back(std::make_pair(point, label)); - } - } - } - } - } -} - - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionPrecision, class TCoordRep> -ObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionPrecision, TCoordRep> -::ObjectDetectionClassifier() -{ - -} - -template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionPrecision, class TCoordRep> -ObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionPrecision, TCoordRep> -::~ObjectDetectionClassifier() -{ - -} - - -} // end namespace otb - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.h b/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.h deleted file mode 100644 index a40dfbed7341939bc664d29410bebf526de9d640..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRadiometricMomentsIFFactory_h -#define otbRadiometricMomentsIFFactory_h - -#include "itkLightObject.h" - -#include "otbMetaImageFunction.h" -#include "itkDataObject.h" -#include "otbImage.h" -#include "otbImageFunctionAdaptor.h" -#include "otbRadiometricMomentsImageFunction.h" - - -namespace otb -{ -/** \class RadiometricMomentsIFFactory - * \brief add a RadiometricMoments image function to a - * MetaImageFunction - * - * This class aims at adding an adapted - * RadiometricMomentsImageFunction to an existing MetaImageFunction - * through the method Create. - * - * - * \ingroup OTBObjectDetection - */ - -template <class TImageType, class TCoordRep = double, class TPrecision = double> -class ITK_EXPORT RadiometricMomentsIFFactory : - public itk::LightObject -{ -public: - /** Standard class typedefs. */ - typedef RadiometricMomentsIFFactory Self; - typedef itk::LightObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - // New macro - itkNewMacro(Self); - - // RTTI typeinfo - itkTypeMacro(RadiometricMomentsIFFactory, itk::LightObject); - - // Input and output typedef - typedef TImageType InputImageType; - typedef TCoordRep CoordRepType; - typedef TPrecision PrecisionType; - - // Other typedef - typedef typename MetaImageFunction<TPrecision>::Pointer MetaImageFunctionPointerType; - typedef typename std::vector<itk::DataObject::Pointer> DataObjectContainerType; - typedef typename std::vector<PrecisionType> ParamContainerType; - typedef RadiometricMomentsImageFunction<InputImageType, CoordRepType> - RadiometricMomentsIF; - typedef ImageFunctionAdaptor<RadiometricMomentsIF, TPrecision> - AdaptedRadiometricMomentsIF; - - void Create(InputImageType * image, - ParamContainerType param, - MetaImageFunctionPointerType metaIF, - DataObjectContainerType * container); - -protected: - RadiometricMomentsIFFactory(){} - ~RadiometricMomentsIFFactory() override{} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - RadiometricMomentsIFFactory(const Self& ) = delete; - void operator=(const Self& ) = delete; - -}; - -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRadiometricMomentsIFFactory.hxx" -#endif - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.hxx b/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.hxx deleted file mode 100644 index 18f0bc730a5b998d856e8052d63a289075c1e2d9..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.hxx +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRadiometricMomentsIFFactory_hxx -#define otbRadiometricMomentsIFFactory_hxx - -#include "otbRadiometricMomentsIFFactory.h" - - -namespace otb -{ -template <class TImageType, class TCoordRep, class TPrecision> -void -RadiometricMomentsIFFactory<TImageType, TCoordRep, TPrecision> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -template <class TImageType, class TCoordRep, class TPrecision> -void -RadiometricMomentsIFFactory<TImageType, TCoordRep, TPrecision> -::Create(InputImageType * image, - ParamContainerType param, - MetaImageFunctionPointerType metaIF, - DataObjectContainerType * container) -{ - typename AdaptedRadiometricMomentsIF::Pointer function = AdaptedRadiometricMomentsIF::New(); - - function->SetInputImage(image); - function->GetInternalImageFunction()->SetNeighborhoodRadius(param[0]); - - metaIF->AddFunction(function); - container->push_back(image); -} - -}//end namespace -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.h b/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.h deleted file mode 100644 index 4ff7757898791d4a8a4324f3ecbce7f1429868d4..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.h +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbStandardMetaImageFunctionBuilder_h -#define otbStandardMetaImageFunctionBuilder_h - - -#include "itkVariableLengthVector.h" - -#include "otbMultiChannelIFFactory.h" - -#include "otbLocalHistogramIFFactory.h" -#include "otbFlusserMomentsIFFactory.h" -#include "otbRadiometricMomentsIFFactory.h" -#include "otbFourierMellinDescriptorsIFFactory.h" -#include "otbHaralickTexturesIFFactory.h" - - -namespace otb -{ -/** \class StandardMetaImageFunctionBuilder - * \brief Build a Standard MetaImageFunction - * - * The StandardMetaImageFunctionBuilder class allows calling multiple - * ImageFunctions: - * - otbRadiometricMomentsImageFunction - * - otbFlusserMomentsImageFunction - * - otbFourierMellinDescriptorsImageFunction - * - otbLocalHistogramImageFunction - * On Multiple Images (and VectorImages Processed as ImageList). - * - * Each ImageFunction can be parametrized. The only thing to do to - * complete the MetaImageFunction is to AddImages. - * - * - * - * - * \ingroup OTBObjectDetection - */ - -template <class TPrecision = double, class TCoordRep = double> -class ITK_EXPORT StandardMetaImageFunctionBuilder : - public itk::LightObject -{ -public: - /** Standard class typedefs. */ - typedef StandardMetaImageFunctionBuilder Self; - typedef itk::LightObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - // New macro - itkNewMacro(Self); - - // RTTI typeinfo - itkTypeMacro(StandardMetaImageFunctionBuilder, itk::LightObject); - - // Input and output typedef - typedef TPrecision ValueType; - typedef TCoordRep CoordRepType; - - // Other typedef - typedef MetaImageFunction<TPrecision, CoordRepType> MetaImageFunctionType; - typedef typename MetaImageFunctionType::Pointer MetaImageFunctionPointerType; - typedef typename std::vector<itk::DataObject::Pointer> DataObjectContainerType; - typedef typename std::vector<ValueType> ParamContainerType; - - //Accessors - unsigned int GetNeighborhoodRadius(); - void SetNeighborhoodRadius(unsigned int radius); - - ParamContainerType GetFlusserMomentsIFParameters(); - void SetFlusserMomentsIFParameters(ParamContainerType Param); - - ParamContainerType GetLocalHistogramIFParameters(); - void SetLocalHistogramIFParameters(ParamContainerType Param); - - ParamContainerType GetRadiometricMomentsIFParameters(); - void SetRadiometricMomentsIFParameters(ParamContainerType Param); - - ParamContainerType GetFourierMellinDescriptorsIFParameters(); - void SetFourierMellinDescriptorsIFParameters(ParamContainerType Param); - - ParamContainerType GetHaralickTexturesIFParameters(); - void SetHaralickTexturesIFParameters(ParamContainerType Param); - - MetaImageFunctionPointerType GetMetaImageFunction(); - DataObjectContainerType GetDataObjectContainer(); - - // Adding Image - template <class TInputImage> - void AddImage(TInputImage * image) - { - typedef TInputImage InputImageType; - typedef typename InputImageType::InternalPixelType InternalPixelType; - typedef Image<InternalPixelType, 2> ImageType; - - //Mono-Channel Factories - typedef LocalHistogramIFFactory<ImageType, - CoordRepType, TPrecision> LocalHistogramIFFactoryType; - typedef FlusserMomentsIFFactory<ImageType, - CoordRepType, TPrecision> FlusserMomentsIFFactoryType; - typedef RadiometricMomentsIFFactory<ImageType, - CoordRepType, TPrecision> RadiometricMomentsIFFactoryType; - typedef FourierMellinDescriptorsIFFactory<ImageType, - CoordRepType, TPrecision> FourierMellinDescriptorsIFFactoryType; - typedef HaralickTexturesIFFactory<ImageType, - CoordRepType, TPrecision> HaralickTexturesIFFactoryType; - - //Multi-Channel Factories - typedef MultiChannelIFFactory<LocalHistogramIFFactoryType, InputImageType> - MCLocalHistogramIFFactoryType; - typedef MultiChannelIFFactory<FlusserMomentsIFFactoryType, InputImageType> - MCFlusserMomentsIFFactoryType; - typedef MultiChannelIFFactory<RadiometricMomentsIFFactoryType, InputImageType> - MCRadiometricMomentsIFFactoryType; - typedef MultiChannelIFFactory<FourierMellinDescriptorsIFFactoryType, InputImageType> - MCFourierMellinDescriptorsIFFactoryType; - typedef MultiChannelIFFactory<HaralickTexturesIFFactoryType, InputImageType> - MCHaralickTexturesIFFactoryType; - - MCLocalHistogramIFFactoryType MCLocalHistogramIFFactory; - MCFlusserMomentsIFFactoryType MCFlusserMomentsIFFactory; - MCRadiometricMomentsIFFactoryType MCRadiometricMomentsIFFactory; - MCFourierMellinDescriptorsIFFactoryType MCFourierMellinDescriptorsIFFactory; - MCHaralickTexturesIFFactoryType MCHaralickTexturesIFFactory; - - - MCRadiometricMomentsIFFactory.Create(image, - this->GetRadiometricMomentsIFParameters(), - m_MetaImageFunction, - &m_DataObjectContainer); - MCFlusserMomentsIFFactory.Create(image, - this->GetFlusserMomentsIFParameters(), - m_MetaImageFunction, - &m_DataObjectContainer); - - MCFourierMellinDescriptorsIFFactory.Create(image, - this->GetFourierMellinDescriptorsIFParameters(), - m_MetaImageFunction, - &m_DataObjectContainer); - - //MCLocalHistogramIFFactory.Create(image, - // m_LocalHistogramParam, - // m_MetaImageFunction, - // &m_DataObjectContainer); - - //MCHaralickTexturesIFFactory.Create(image, - // m_HaralickTexturesParam, - // m_MetaImageFunction, - // &m_DataObjectContainer); - } - -protected: - StandardMetaImageFunctionBuilder(); - ~StandardMetaImageFunctionBuilder() override; - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - StandardMetaImageFunctionBuilder(const Self& ) = delete; - void operator=(const Self& ) = delete; - - MetaImageFunctionPointerType m_MetaImageFunction; - DataObjectContainerType m_DataObjectContainer; - unsigned int m_NeighborhoodRadius; - ParamContainerType m_FlusserMomentsParam; //[NeighborhoodRadius] - ParamContainerType m_RadiometricMomentsParam; //[NeighborhoodRadius] - ParamContainerType m_LocalHistogramParam; //[NeighborhoodRadius; nbBins; minHistogram; maxHistogram] - ParamContainerType m_FourierMellinDescriptorsParam; //[NeighborhoodRadius; PMax; QMax] - ParamContainerType m_HaralickTexturesParam; //[NeighborhoodRadius; ImageMin; ImageMax; NbBinPerAxis; Offset] - -}; - -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbStandardMetaImageFunctionBuilder.hxx" -#endif - -#endif diff --git a/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.hxx b/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.hxx deleted file mode 100644 index 27313af0c10e0cc27a1b56e0915ba747c374a79f..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.hxx +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbStandardMetaImageFunctionBuilder_hxx -#define otbStandardMetaImageFunctionBuilder_hxx - -#include "otbStandardMetaImageFunctionBuilder.h" - - -namespace otb -{ -template <class TPrecision, class TCoordRep> -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::StandardMetaImageFunctionBuilder() -{ - m_NeighborhoodRadius = 4; - - m_MetaImageFunction = MetaImageFunctionType::New(); - - m_FlusserMomentsParam.push_back(static_cast<ValueType>(this->GetNeighborhoodRadius())); - - m_RadiometricMomentsParam.push_back(static_cast<ValueType>(this->GetNeighborhoodRadius())); - - m_LocalHistogramParam.push_back(static_cast<ValueType>(this->GetNeighborhoodRadius())); - m_LocalHistogramParam.push_back(16); - m_LocalHistogramParam.push_back(0); - m_LocalHistogramParam.push_back(4096); - - m_FourierMellinDescriptorsParam.push_back(static_cast<ValueType>(this->GetNeighborhoodRadius())); - m_FourierMellinDescriptorsParam.push_back(3); - m_FourierMellinDescriptorsParam.push_back(3); - - m_HaralickTexturesParam.push_back(static_cast<ValueType>(this->GetNeighborhoodRadius())); - m_HaralickTexturesParam.push_back(0); - m_HaralickTexturesParam.push_back(4096); - m_HaralickTexturesParam.push_back(30); - m_HaralickTexturesParam.push_back(2); -} - -template <class TPrecision, class TCoordRep> -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::~StandardMetaImageFunctionBuilder() -{ - -} - -template <class TPrecision, class TCoordRep> -void -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -template <class TPrecision, class TCoordRep> -unsigned int -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::GetNeighborhoodRadius() -{ - return m_NeighborhoodRadius; -} - -template <class TPrecision, class TCoordRep> -void -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::SetNeighborhoodRadius(unsigned int radius) -{ - if (radius>0) - { - m_NeighborhoodRadius = radius; - - m_FlusserMomentsParam[0] = static_cast<ValueType>(radius); - m_RadiometricMomentsParam[0] = static_cast<ValueType>(radius); - m_LocalHistogramParam[0] = static_cast<ValueType>(radius); - m_FourierMellinDescriptorsParam[0] = static_cast<ValueType>(radius); - m_HaralickTexturesParam[0] = static_cast<ValueType>(radius); - } -} - -template <class TPrecision, class TCoordRep> -typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::ParamContainerType -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::GetFlusserMomentsIFParameters() -{ - return m_FlusserMomentsParam; -} - -template <class TPrecision, class TCoordRep> -void -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::SetFlusserMomentsIFParameters(ParamContainerType Param) -{ - if (Param.size()==1) - { - m_FlusserMomentsParam[0] = Param[0]; - } -} - - -template <class TPrecision, class TCoordRep> -typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::ParamContainerType -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::GetLocalHistogramIFParameters() -{ - return m_LocalHistogramParam; -} - -template <class TPrecision, class TCoordRep> -void -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::SetLocalHistogramIFParameters(ParamContainerType Param) -{ - if (Param.size()==4) - { - m_LocalHistogramParam[0] = Param[0]; - m_LocalHistogramParam[1] = Param[1]; - m_LocalHistogramParam[2] = Param[2]; - m_LocalHistogramParam[3] = Param[3]; - } -} - -template <class TPrecision, class TCoordRep> -typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::ParamContainerType -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::GetRadiometricMomentsIFParameters() -{ - return m_RadiometricMomentsParam; -} - -template <class TPrecision, class TCoordRep> -void -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::SetRadiometricMomentsIFParameters(ParamContainerType Param) -{ - if (Param.size()==1) - { - m_RadiometricMomentsParam[0] = Param[0]; - } -} - -template <class TPrecision, class TCoordRep> -typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::ParamContainerType -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::GetFourierMellinDescriptorsIFParameters() -{ - return m_FourierMellinDescriptorsParam; -} - -template <class TPrecision, class TCoordRep> -void -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::SetFourierMellinDescriptorsIFParameters(ParamContainerType Param) -{ - if (Param.size()==3) - { - m_FourierMellinDescriptorsParam[0] = Param[0]; - m_FourierMellinDescriptorsParam[1] = Param[1]; - m_FourierMellinDescriptorsParam[2] = Param[2]; - } -} - -template <class TPrecision, class TCoordRep> -typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::ParamContainerType -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::GetHaralickTexturesIFParameters() -{ - return m_HaralickTexturesParam; -} - -template <class TPrecision, class TCoordRep> -void -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::SetHaralickTexturesIFParameters(ParamContainerType Param) -{ - if (Param.size()==5) - { - m_HaralickTexturesParam[0] = Param[0]; - m_HaralickTexturesParam[1] = Param[1]; - m_HaralickTexturesParam[2] = Param[2]; - m_HaralickTexturesParam[3] = Param[3]; - m_HaralickTexturesParam[4] = Param[4]; - } -} - -template <class TPrecision, class TCoordRep> -typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::MetaImageFunctionPointerType -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::GetMetaImageFunction() -{ - return m_MetaImageFunction; -} - -template <class TPrecision, class TCoordRep> -typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::DataObjectContainerType -StandardMetaImageFunctionBuilder<TPrecision, TCoordRep> -::GetDataObjectContainer() -{ - return m_DataObjectContainer; -} - -}//end namespace -#endif diff --git a/Modules/Detection/ObjectDetection/otb-module.cmake b/Modules/Detection/ObjectDetection/otb-module.cmake deleted file mode 100644 index 5033f185dab2dc5e272c9fa280517f193a8cacfe..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/otb-module.cmake +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -set(DOCUMENTATION "This module contains useful classes for object detection.") - -otb_module(OTBObjectDetection - DEPENDS - OTBCommon - OTBDescriptors - OTBITK - OTBImageBase - OTBMoments - OTBObjectList - OTBStatistics - OTBStreaming - OTBSupervised - OTBTextures - OTBVectorDataBase - - TEST_DEPENDS - OTBIOXML - OTBImageIO - OTBLibSVM - OTBTestKernel - OTBVectorDataIO - - DESCRIPTION - "${DOCUMENTATION}" -) diff --git a/Modules/Detection/ObjectDetection/test/CMakeLists.txt b/Modules/Detection/ObjectDetection/test/CMakeLists.txt deleted file mode 100644 index 14989ab892c009f4f2ddbc0a61ac0d650ad74509..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/test/CMakeLists.txt +++ /dev/null @@ -1,117 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -otb_module_test() - -set(OTBObjectDetectionTests -otbObjectDetectionTestDriver.cxx -otbLabeledSampleLocalizationGenerator.cxx -otbStandardMetaImageFunctionBuilder.cxx -otbDescriptorsListSampleGenerator.cxx -otbObjectDetectionClassifier.cxx -) - -add_executable(otbObjectDetectionTestDriver ${OTBObjectDetectionTests}) -target_link_libraries(otbObjectDetectionTestDriver ${OTBObjectDetection-Test_LIBRARIES}) -otb_module_target_label(otbObjectDetectionTestDriver) - -# Tests Declaration - - -otb_add_test(NAME odTvLabeledSampleLocalizationGenerator COMMAND otbObjectDetectionTestDriver - --compare-ogr ${NOTOL} - ${BASELINE_FILES}/TvLabeledSampleLocalizationGeneratorOutput.shp - ${TEMP}/TvLabeledSampleLocalizationGeneratorOutput.shp - otbLabeledSampleLocalizationGenerator - ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01LabeledPoints.shp - ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01Polygons.shp - ${TEMP}/TvLabeledSampleLocalizationGeneratorOutput.shp - ) - - -otb_add_test(NAME odTvStandardMetaImageFunctionBuilder COMMAND otbObjectDetectionTestDriver - otbStandardMetaImageFunctionBuilder - ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01.tif - ) - -otb_add_test(NAME odTvDescriptorsListSampleGeneratorStreaming COMMAND otbObjectDetectionTestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt - ${TEMP}/TvDescriptorsListSampleGeneratorStreamingOutput.txt - otbDescriptorsListSampleGenerator - ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01_amplitude.tif - ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01Samples.shp - ${TEMP}/TvDescriptorsListSampleGeneratorStreamingOutput.txt - 50 # streaming - 5 # neighborhood radius - ) - -#otb_add_test(NAME odTvDescriptorsSVMModelCreation COMMAND otbObjectDetectionTestDriver - #--compare-ascii ${NOTOL} - #${BASELINE_FILES}/TvDescriptorsSVMModelCreation.svm - #${TEMP}/TvDescriptorsSVMModelCreation.svm - #otbDescriptorsSVMModelCreation - #${INPUTDATA}/ObjectReco/Boats/maur_B010202_01_amplitude.tif - #${INPUTDATA}/ObjectReco/Boats/maur_B010202_01Samples.shp - #${INPUTDATA}/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml - #${TEMP}/TvDescriptorsSVMModelCreation.svm - #0 # streaming - #5 # neighborhood radius - #) - -otb_add_test(NAME odTvDescriptorsListSampleGeneratorNoStreaming COMMAND otbObjectDetectionTestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt - ${TEMP}/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt - otbDescriptorsListSampleGenerator - ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01_amplitude.tif - ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01Samples.shp - ${TEMP}/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt - 0 # streaming - 5 # neighborhood radius - ) - - - -otb_add_test(NAME odTvObjectDetectionClassifierStreaming COMMAND otbObjectDetectionTestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/TvObjectDetectionClassifierOutput.txt - ${TEMP}/TvObjectDetectionClassifierOutputStreaming.txt - otbObjectDetectionClassifier - ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01_extract_amplitude.tif - ${INPUTDATA}/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml - ${BASELINE_FILES}/TvDescriptorsSVMModelCreation.svm - ${TEMP}/TvObjectDetectionClassifierOutputStreaming.txt - 50 # streaming - 5 # neighborhood radius - ) - -otb_add_test(NAME odTvObjectDetectionClassifier COMMAND otbObjectDetectionTestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/TvObjectDetectionClassifierOutput.txt - ${TEMP}/TvObjectDetectionClassifierOutput.txt - otbObjectDetectionClassifier - ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01_extract_amplitude.tif - ${INPUTDATA}/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml - ${BASELINE_FILES}/TvDescriptorsSVMModelCreation.svm - ${TEMP}/TvObjectDetectionClassifierOutput.txt - 0 # streaming - 5 # neighborhood radius - ) diff --git a/Modules/Detection/ObjectDetection/test/otbDescriptorsListSampleGenerator.cxx b/Modules/Detection/ObjectDetection/test/otbDescriptorsListSampleGenerator.cxx deleted file mode 100644 index ac0e7c21549ee6a301db2fddd7a745d51b00ce38..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/test/otbDescriptorsListSampleGenerator.cxx +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include <iterator> - -#include "otbImage.h" -#include "otbRadiometricMomentsImageFunction.h" -#include "otbDescriptorsListSampleGenerator.h" -#include "otbImageFileReader.h" -#include "otbVectorDataFileReader.h" -#include "otbImageFunctionAdaptor.h" - -#include "otbStatisticsXMLFileReader.h" -#include "otbShiftScaleSampleListFilter.h" -#include "otbLibSVMMachineLearningModel.h" - -const unsigned int Dimension = 2; -typedef int LabelType; -typedef double PixelType; -typedef double FunctionPrecisionType; -typedef double CoordRepType; - -typedef otb::Image<PixelType, Dimension> ImageType; -typedef otb::VectorData<> VectorDataType; -typedef otb::RadiometricMomentsImageFunction<ImageType, CoordRepType> FunctionType; -typedef otb::ImageFunctionAdaptor<FunctionType, FunctionPrecisionType> AdaptedFunctionType; - -typedef itk::VariableLengthVector<FunctionPrecisionType> SampleType; -typedef itk::Statistics::ListSample<SampleType> ListSampleType; -typedef itk::FixedArray<LabelType, 1> LabelSampleType; -typedef itk::Statistics::ListSample<LabelSampleType> LabelListSampleType; - -typedef otb::DescriptorsListSampleGenerator - < ImageType, - VectorDataType, - ListSampleType, - LabelType, - FunctionPrecisionType, - CoordRepType > DescriptorsListSampleGeneratorType; - -typedef otb::ImageFileReader<ImageType> ImageReaderType; -typedef otb::VectorDataFileReader<VectorDataType> VectorDataReaderType; - -typedef otb::StatisticsXMLFileReader<SampleType> StatisticsReader; -typedef otb::Statistics::ShiftScaleSampleListFilter<ListSampleType> ShiftScaleListSampleFilterType; - -typedef otb::LibSVMMachineLearningModel<FunctionPrecisionType, LabelType> SVMType; - -typedef FunctionType::PointType PointType; -typedef DescriptorsListSampleGeneratorType::SamplesPositionType SamplesPositionType; - -struct SampleEntry -{ - PointType position; - LabelType label; - SampleType measurement; -}; - -struct CompareSampleEntry -{ - bool operator () (SampleEntry p, SampleEntry q) - { - // order with the y axis position - if (p.position[1] < q.position[1]) - return true; - if (p.position[1] > q.position[1]) - return false; - - // If one the same line, - // order with the x axis position - if (p.position[0] < q.position[0]) - return true; - - return false; - } -}; - -std::ostream &operator<<(std::ostream &stream, SampleEntry entry) -{ - stream << "---" << std::endl - << "Label : " << entry.label << std::endl - << "Position : " << entry.position << std::endl - << "Measurements : " << entry.measurement; - return stream; -} - - -int otbDescriptorsListSampleGenerator(int argc, char* argv[]) -{ - if (argc != 6) - { - std::cerr << "Wrong number of arguments" << std::endl; - return EXIT_FAILURE; - } - - const char* inputImageFileName = argv[1]; - const char* inputSamplesLocation = argv[2]; - const char* outputFileName = argv[3]; - int streaming = atoi(argv[4]); - int neighborhood = atoi(argv[5]); - - ImageReaderType::Pointer imageReader = ImageReaderType::New(); - imageReader->SetFileName(inputImageFileName); - - VectorDataReaderType::Pointer vectorDataReader = VectorDataReaderType::New(); - vectorDataReader->SetFileName(inputSamplesLocation); - - //imageReader->Update(); - //vectorDataReader->Update(); - - AdaptedFunctionType::Pointer descriptorsFunction = AdaptedFunctionType::New(); - descriptorsFunction->SetInputImage(imageReader->GetOutput()); - descriptorsFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); - - DescriptorsListSampleGeneratorType::Pointer descriptorsGenerator = DescriptorsListSampleGeneratorType::New(); - descriptorsGenerator->SetInputImage(imageReader->GetOutput()); - descriptorsGenerator->SetSamplesLocations(vectorDataReader->GetOutput()); - descriptorsGenerator->SetDescriptorsFunction(descriptorsFunction.GetPointer()); - descriptorsGenerator->SetNeighborhoodRadius(neighborhood); - descriptorsGenerator->GetStreamer()->SetNumberOfLinesStrippedStreaming( streaming ); - descriptorsGenerator->Update(); - - ListSampleType::Pointer samples = descriptorsGenerator->GetListSample(); - LabelListSampleType::Pointer labels = descriptorsGenerator->GetLabelListSample(); - SamplesPositionType& positions = descriptorsGenerator->GetSamplesPositions(); - - ListSampleType::Iterator sampleIt = samples->Begin(); - LabelListSampleType::Iterator labelIt = labels->Begin(); - SamplesPositionType::const_iterator posIt = positions.begin(); - - ListSampleType::Iterator sampleEnd = samples->End(); - LabelListSampleType::Iterator labelEnd = labels->End(); - SamplesPositionType::const_iterator posEnd = positions.end(); - - std::vector<SampleEntry> entries; - - while (sampleIt != sampleEnd && labelIt != labelEnd && posIt != posEnd) - { - SampleEntry entry; - entry.position = *posIt; - entry.label = labelIt.GetMeasurementVector()[0]; - entry.measurement = sampleIt.GetMeasurementVector(); - - entries.push_back(entry); - - ++sampleIt; - ++labelIt; - ++posIt; - } - - std::sort(entries.begin(), entries.end(), CompareSampleEntry()); - std::ofstream file(outputFileName); - std::copy(entries.begin(), entries.end(), std::ostream_iterator<SampleEntry>(file, "\n")); - file.close(); - - return EXIT_SUCCESS; -} - - - -int otbDescriptorsSVMModelCreation(int argc, char* argv[]) -{ - if (argc != 7) - { - std::cerr << "Wrong number of arguments" << std::endl; - return EXIT_FAILURE; - } - - const char* inputImageFileName = argv[1]; - const char* inputSamplesLocation = argv[2]; - const char* featureStatisticsFileName = argv[3]; - const char* outputFileName = argv[4]; - int streaming = atoi(argv[5]); - int neighborhood = atoi(argv[6]); - - ImageReaderType::Pointer imageReader = ImageReaderType::New(); - imageReader->SetFileName(inputImageFileName); - - VectorDataReaderType::Pointer vectorDataReader = VectorDataReaderType::New(); - vectorDataReader->SetFileName(inputSamplesLocation); - - //imageReader->Update(); - //vectorDataReader->Update(); - - AdaptedFunctionType::Pointer descriptorsFunction = AdaptedFunctionType::New(); - descriptorsFunction->SetInputImage(imageReader->GetOutput()); - descriptorsFunction->GetInternalImageFunction()->SetNeighborhoodRadius(neighborhood); - - DescriptorsListSampleGeneratorType::Pointer descriptorsGenerator = DescriptorsListSampleGeneratorType::New(); - descriptorsGenerator->SetInputImage(imageReader->GetOutput()); - descriptorsGenerator->SetSamplesLocations(vectorDataReader->GetOutput()); - descriptorsGenerator->SetDescriptorsFunction(descriptorsFunction.GetPointer()); - descriptorsGenerator->SetNeighborhoodRadius(5); - descriptorsGenerator->GetStreamer()->SetNumberOfLinesStrippedStreaming( streaming ); - descriptorsGenerator->Update(); - - // Normalize the samples - // Read the mean and variance form the XML file - StatisticsReader::Pointer statisticsReader = StatisticsReader::New(); - statisticsReader->SetFileName(featureStatisticsFileName); - SampleType meanMeasurentVector = statisticsReader->GetStatisticVectorByName("mean"); - SampleType varianceMeasurentVector = statisticsReader->GetStatisticVectorByName("stddev"); - - // Shift scale the samples - ShiftScaleListSampleFilterType::Pointer shiftscaleFilter = ShiftScaleListSampleFilterType::New(); - shiftscaleFilter->SetInput(descriptorsGenerator->GetListSample()); - shiftscaleFilter->SetShifts(meanMeasurentVector); - shiftscaleFilter->SetScales(varianceMeasurentVector); - shiftscaleFilter->Update(); - - SVMType::Pointer svmEstimator = SVMType::New(); - svmEstimator->SetInputListSample(shiftscaleFilter->GetOutput()); - svmEstimator->SetTargetListSample(descriptorsGenerator->GetLabelListSample()); - svmEstimator->Train(); - svmEstimator->Save(outputFileName); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/ObjectDetection/test/otbLabeledSampleLocalizationGenerator.cxx b/Modules/Detection/ObjectDetection/test/otbLabeledSampleLocalizationGenerator.cxx deleted file mode 100644 index 5497da01d457c7889ac52c691c5e59cdd535201f..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/test/otbLabeledSampleLocalizationGenerator.cxx +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include "otbVectorDataFileReader.h" -#include "otbVectorDataFileWriter.h" -#include "otbLabeledSampleLocalizationGenerator.h" - - -int otbLabeledSampleLocalizationGenerator(int itkNotUsed(argc), char* argv[]) -{ - const char * inputVD1 = argv[1]; - const char * inputVD2 = argv[2]; - const char * outputVD = argv[3]; - - typedef otb::VectorData<> VectorDataType; - typedef otb::VectorDataFileReader<VectorDataType> VectorDataReaderType; - typedef otb::VectorDataFileWriter<VectorDataType> VectorDataWriterType; - typedef otb::LabeledSampleLocalizationGenerator<VectorDataType> GeneratorType; - - // instantiation - VectorDataReaderType::Pointer reader1 = VectorDataReaderType::New(); - VectorDataReaderType::Pointer reader2 = VectorDataReaderType::New(); - VectorDataWriterType::Pointer writer = VectorDataWriterType::New(); - GeneratorType::Pointer generator = GeneratorType::New(); - - reader1->SetFileName(inputVD1); - //reader1->Update(); - - reader2->SetFileName(inputVD2); - //reader2->Update(); - - generator->PushBackInput(reader1->GetOutput()); - generator->PushBackInput(reader2->GetOutput()); - - generator->SetSeed(0); // enable reproducible random number sequence - generator->SetClassKey("Class"); - generator->SetNoClassIdentifier(0); - generator->SetInhibitionRadius(5); - generator->SetRandomLocalizationDensity(0.004); - generator->SetNbMaxIteration(1000); - generator->SetNumberOfPositiveSamplesPerPoint(2); - - //generator->Update(); - - writer->SetFileName(outputVD); - writer->SetInput(generator->GetOutput()); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/ObjectDetection/test/otbObjectDetectionClassifier.cxx b/Modules/Detection/ObjectDetection/test/otbObjectDetectionClassifier.cxx deleted file mode 100644 index ee37856db93074bef43637baea584286c4b2959a..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/test/otbObjectDetectionClassifier.cxx +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include <iostream> -#include <iterator> - -#include "otbImage.h" -#include "otbRadiometricMomentsImageFunction.h" -#include "itkListSample.h" -#include "itkVariableLengthVector.h" -#include "otbObjectDetectionClassifier.h" -#include "otbImageFileReader.h" -#include "otbImageFunctionAdaptor.h" -#include "otbStatisticsXMLFileReader.h" -#include "itkPreOrderTreeIterator.h" -#include "otbLibSVMMachineLearningModel.h" - -const unsigned int Dimension = 2; -typedef int LabelType; -typedef double PixelType; -typedef double FunctionPrecisionType; -typedef double CoordRepType; - -typedef otb::Image<PixelType, Dimension> ImageType; -typedef otb::VectorData<> VectorDataType; -typedef VectorDataType::PointType PointType; -typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> TreeIteratorType; - -typedef otb::ObjectDetectionClassifier - < ImageType, - VectorDataType, - LabelType, - FunctionPrecisionType, - CoordRepType > ObjectDetectionClassifierType; - -typedef otb::RadiometricMomentsImageFunction<ImageType, CoordRepType> FunctionType; -typedef otb::ImageFunctionAdaptor<FunctionType, FunctionPrecisionType> AdaptedFunctionType; - -typedef otb::ImageFileReader<ImageType> ImageReaderType; - -typedef otb::LibSVMMachineLearningModel<PixelType,LabelType> SVMModelType; -typedef SVMModelType::Pointer SVMModelPointerType; - -typedef otb::StatisticsXMLFileReader<AdaptedFunctionType::OutputType> StatisticsXMLFileReaderType; - - -struct ComparePoint -{ - bool operator () (PointType p, PointType q) - { - // order with the y axis position - if (p[1] < q[1]) - return true; - if (p[1] > q[1]) - return false; - - // If one the same line, - // order with the x axis position - if (p[0] < q[0]) - return true; - - return false; - } -}; - -std::ostream &operator<<(std::ostream &stream, PointType p) -{ - stream << p[0] << " " << p[1]; - return stream; -} - - - -int otbObjectDetectionClassifier(int argc, char* argv[]) -{ - if (argc != 7) - { - std::cerr << "Wrong number of arguments" << std::endl; - return EXIT_FAILURE; - } - - const char* inputImageFileName = argv[1]; - const char* inputFeatureStats = argv[2]; - const char* inputSVMModel = argv[3]; - const char* outputVectorDataFileName = argv[4]; - int streaming = atoi(argv[5]); - int neighborhood = atoi(argv[6]); - - ImageReaderType::Pointer imageReader = ImageReaderType::New(); - imageReader->SetFileName(inputImageFileName); - - StatisticsXMLFileReaderType::Pointer statisticsReader = StatisticsXMLFileReaderType::New(); - statisticsReader->SetFileName(inputFeatureStats); - - - SVMModelPointerType svmModel = SVMModelType::New(); - svmModel->Load(inputSVMModel); - - AdaptedFunctionType::Pointer descriptorsFunction = AdaptedFunctionType::New(); - descriptorsFunction->SetInputImage(imageReader->GetOutput()); - descriptorsFunction->GetInternalImageFunction()->SetNeighborhoodRadius(neighborhood); - - ObjectDetectionClassifierType::Pointer classifier = ObjectDetectionClassifierType::New(); - classifier->SetInputImage(imageReader->GetOutput()); - classifier->SetNeighborhoodRadius(neighborhood); - classifier->SetModel(svmModel); - classifier->SetDescriptorsFunction(descriptorsFunction); - classifier->SetNoClassLabel(0); - classifier->SetClassKey("Class"); - classifier->SetShifts(statisticsReader->GetStatisticVectorByName("mean")); - classifier->SetScales(statisticsReader->GetStatisticVectorByName("stddev")); - classifier->GetStreamer()->SetNumberOfLinesStrippedStreaming( streaming ); - classifier->SetGridStep(neighborhood/2); - classifier->Update(); - - std::vector<ObjectDetectionClassifierType::PointType> points; - VectorDataType::Pointer vectorData = classifier->GetOutputVectorData(); - - TreeIteratorType itVector(vectorData->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsPointFeature()) - { - points.push_back(itVector.Get()->GetPoint()); - } - ++itVector; - } - - std::sort(points.begin(), points.end(), ComparePoint()); - std::ofstream file(outputVectorDataFileName); - std::copy(points.begin(), points.end(), std::ostream_iterator<PointType>(file, "\n")); - file.close(); - - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/ObjectDetection/test/otbObjectDetectionTestDriver.cxx b/Modules/Detection/ObjectDetection/test/otbObjectDetectionTestDriver.cxx deleted file mode 100644 index 3d7686897dff2f713650bcf46755b97571e1b22a..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/test/otbObjectDetectionTestDriver.cxx +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbTestMain.h" - -void RegisterTests() -{ - REGISTER_TEST(otbLabeledSampleLocalizationGenerator); - REGISTER_TEST(otbStandardMetaImageFunctionBuilder); - REGISTER_TEST(otbDescriptorsListSampleGenerator); - REGISTER_TEST(otbDescriptorsSVMModelCreation); - REGISTER_TEST(otbObjectDetectionClassifier); -} diff --git a/Modules/Detection/ObjectDetection/test/otbStandardMetaImageFunctionBuilder.cxx b/Modules/Detection/ObjectDetection/test/otbStandardMetaImageFunctionBuilder.cxx deleted file mode 100644 index 5ac5d938059ae6671036b2e206ca820c3d17ebf2..0000000000000000000000000000000000000000 --- a/Modules/Detection/ObjectDetection/test/otbStandardMetaImageFunctionBuilder.cxx +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include "otbStandardMetaImageFunctionBuilder.h" -#include "otbVectorImage.h" -#include "otbImageFileReader.h" - -#include "otbImageFunctionAdaptor.h" -#include "otbFlusserMomentsImageFunction.h" -#include "otbRadiometricMomentsImageFunction.h" -#include "otbFourierMellinDescriptorsImageFunction.h" -#include "otbLocalHistogramImageFunction.h" -#include "otbHaralickTexturesImageFunction.h" - - - -int otbStandardMetaImageFunctionBuilder(int itkNotUsed(argc), char* argv[]) -{ - const char * inputFilename = argv[1]; - - std::vector<double> p1, p2, p3, p4, p5; - - typedef double PrecisionType; - typedef double CoordRepType; - typedef otb::StandardMetaImageFunctionBuilder<PrecisionType, - CoordRepType> BuilderType; - - typedef otb::Image<PrecisionType, 2> ImageType; - typedef otb::VectorImage<PrecisionType, 2> VectorImageType; - typedef otb::ImageFileReader<ImageType> ImageReaderType; - typedef otb::ImageFileReader<VectorImageType> VectorImageReaderType; - - typedef BuilderType::MetaImageFunctionType MetaImageFunctionType; - typedef BuilderType::DataObjectContainerType DataObjectContainerType; - - typedef otb::FlusserMomentsImageFunction<ImageType, CoordRepType> FlusserMomentsIF; - typedef otb::ImageFunctionAdaptor<FlusserMomentsIF, PrecisionType> AdaptedFlusserMomentsIF; - - typedef otb::RadiometricMomentsImageFunction<ImageType, CoordRepType> RadiometricMomentsIF; - typedef otb::ImageFunctionAdaptor<RadiometricMomentsIF, PrecisionType> AdaptedRadiometricMomentsIF; - typedef otb::FourierMellinDescriptorsImageFunction<ImageType, CoordRepType> FourierMellinDescriptorsIF; - typedef otb::ImageFunctionAdaptor<FourierMellinDescriptorsIF, PrecisionType> AdaptedFourierMellinDescriptorsIF; - - p1.push_back(7); - p1.push_back(128); - p1.push_back(0); - p1.push_back(1500); - - p2.push_back(6); - - p3.push_back(5); - - p4.push_back(9); - p4.push_back(5); - p4.push_back(5); - - p5.push_back(10); - p5.push_back(1); - p5.push_back(1500); - p5.push_back(16); - p5.push_back(4); - - // instantiation - ImageReaderType::Pointer Ireader = ImageReaderType::New(); - VectorImageReaderType::Pointer VIreader = VectorImageReaderType::New(); - - BuilderType::Pointer builder = BuilderType::New(); - - Ireader->SetFileName(inputFilename); - VIreader->SetFileName(inputFilename); - - builder->AddImage(Ireader->GetOutput()); - builder->SetNeighborhoodRadius(8); - - builder->SetLocalHistogramIFParameters(p1); - builder->SetFlusserMomentsIFParameters(p2); - builder->SetRadiometricMomentsIFParameters(p3); - builder->SetFourierMellinDescriptorsIFParameters(p4); - builder->SetHaralickTexturesIFParameters(p5); - - builder->AddImage(VIreader->GetOutput()); - - MetaImageFunctionType::Pointer MIF = builder->GetMetaImageFunction(); - std::cout << MIF << std::endl; - - DataObjectContainerType DOC = builder->GetDataObjectContainer(); - std::cout << "DataObjectContainer.size(): " << DOC.size() << std::endl; - - std::cout << static_cast<AdaptedRadiometricMomentsIF *>(MIF->GetNthFunction(0))->GetInternalImageFunction() - << std::endl; - std::cout << static_cast<AdaptedRadiometricMomentsIF *>(MIF->GetNthFunction(3))->GetInternalImageFunction() - << std::endl; - - - std::cout << static_cast<AdaptedFlusserMomentsIF *>(MIF->GetNthFunction(1))->GetInternalImageFunction() - << std::endl; - std::cout << static_cast<AdaptedFlusserMomentsIF *>(MIF->GetNthFunction(7))->GetInternalImageFunction() - << std::endl; - - std::cout << static_cast<AdaptedFourierMellinDescriptorsIF *>(MIF->GetNthFunction(2))->GetInternalImageFunction() - << std::endl; - std::cout << static_cast<AdaptedFourierMellinDescriptorsIF *>(MIF->GetNthFunction(11))->GetInternalImageFunction() - << std::endl; - -/* - std::cout << static_cast<AdaptedLocalHistogramIF *>(MIF->GetNthFunction())->GetInternalImageFunction() - << std::endl; - std::cout << static_cast<AdaptedLocalHistogramIF *>(MIF->GetNthFunction(5))->GetInternalImageFunction() - << std::endl; - - std::cout << static_cast<AdaptedHaralickTexturesIF *>(MIF->GetNthFunction(4))->GetInternalImageFunction() - << std::endl; - std::cout << static_cast<AdaptedHaralickTexturesIF *>(MIF->GetNthFunction(21))->GetInternalImageFunction() - << std::endl; -*/ - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/CMakeLists.txt b/Modules/Detection/RoadExtraction/CMakeLists.txt deleted file mode 100644 index 7bb7b02fa9cc2361802ec609782cd7bb9488749b..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -project(OTBRoadExtraction) -otb_module_impl() diff --git a/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.h deleted file mode 100644 index fda5cfa3c111a11ce9354629dee45f43d47137e4..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbBreakAngularPathListFilter_h -#define otbBreakAngularPathListFilter_h - -#include "otbPathListToPathListFilter.h" -#include "otbMacro.h" - -namespace otb -{ -/** \class BreakAngularPathListFilter - * \brief CBase class for breaking angulars the input PathList, returning a PathList. - * - * \example FeatureExtraction/ExtractRoadByStepsExample.cxx - * - * - * \ingroup OTBRoadExtraction - */ -template <class TPath> -class ITK_EXPORT BreakAngularPathListFilter - : public PathListToPathListFilter<TPath> -{ -public: - /** Standard typedefs */ - typedef BreakAngularPathListFilter Self; - typedef PathListToPathListFilter<TPath> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(BreakAngularPathListFilter, PathListToPathListFilter); - - /** Template parameters typedefs */ - typedef typename Superclass::PathType PathType; - typedef typename Superclass::PathListType PathListType; - typedef typename Superclass::PathPointerType PathPointerType; - typedef typename PathListType::Pointer PathListPointerType; - - typedef double MaxAngleType; - - /** Set/Get the max angle */ - itkSetMacro(MaxAngle, MaxAngleType); - itkGetConstMacro(MaxAngle, MaxAngleType); - -protected: - /** Constructor */ - BreakAngularPathListFilter(); - /** Destructor */ - ~BreakAngularPathListFilter() override {} - /** GenerateData method */ - void GenerateData() override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - BreakAngularPathListFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - /** Calculate break angular for a path */ - void BreakAngularPath(const MaxAngleType maxAngle, - const PathPointerType inputPath, - PathListPointerType outputPathList); - - /** Max angle value */ - MaxAngleType m_MaxAngle; - -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbBreakAngularPathListFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.hxx b/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.hxx deleted file mode 100644 index 5fcec599fd55dc345d293a089f3d070f24dddf8e..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.hxx +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbBreakAngularPathListFilter_hxx -#define otbBreakAngularPathListFilter_hxx - -#include "otbBreakAngularPathListFilter.h" -#include "otbMath.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TPath> -BreakAngularPathListFilter<TPath> -::BreakAngularPathListFilter() -{ -} - -template <class TPath> -void -BreakAngularPathListFilter<TPath> -::BreakAngularPath(const MaxAngleType maxAngle, const PathPointerType inputPath, PathListPointerType outputPathList) -{ - typename PathType::VertexListType::ConstPointer vertexList = inputPath->GetVertexList(); - typename PathType::VertexListType::ConstIterator pathIt = vertexList->Begin(); - - typename PathType::VertexType pixel1, pixel2, pixel3; - - // Initialization - PathPointerType newPath = PathType::New(); - newPath->Initialize(); - - double alpha1(0.), alpha2(0.); - - while (pathIt != vertexList->End()) - { - // Add Pixel 1 - newPath->AddVertex(pathIt.Value()); - pixel1 = pathIt.Value(); - ++pathIt; - if (pathIt != vertexList->End()) - { - pixel2 = pathIt.Value(); - ++pathIt; - if (pathIt != vertexList->End()) - { - pixel3 = pathIt.Value(); - - alpha1 = std::atan2((pixel1[1] - pixel2[1]), (pixel1[0] - pixel2[0])); - alpha2 = std::atan2((pixel2[1] - pixel3[1]), (pixel2[0] - pixel3[0])); - alpha1 = (alpha1 >= 0) ? alpha1 : (alpha1 + CONST_2PI); - alpha2 = (alpha2 >= 0) ? alpha2 : (alpha2 + CONST_2PI); - if (std::abs(alpha1 - alpha2) > static_cast<double>(maxAngle)) - { - // Add Pixel 2 - newPath->AddVertex(pixel2); - //Create new PathType in the out path list - outputPathList->PushBack(newPath); - // Reinit - newPath = PathType::New(); - - } - --pathIt; // Return previous pixel - } - else - { - // Add last Pixel (Pixel 2) - newPath->AddVertex(pixel2); - } - } - } - //Create new PathType in the out list - outputPathList->PushBack(newPath); -} - -template <class TPath> -void -BreakAngularPathListFilter<TPath> -::GenerateData() -{ - const PathListType * inputPathList = this->GetInput(); - PathListType * outputPathList = this->GetOutput(); - - typename PathListType::ConstIterator listIt = inputPathList->Begin(); - outputPathList->Clear(); - - PathListPointerType newTempPathList = PathListType::New(); - while (listIt != inputPathList->End()) - { - (void) BreakAngularPath(m_MaxAngle, listIt.Get(), outputPathList); - ++listIt; - } -} - -/** - * PrintSelf Method - */ -template <class TPath> -void -BreakAngularPathListFilter<TPath> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "Angular max value : " << m_MaxAngle << std::endl; -} - -} // End namespace otb -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.h b/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.h deleted file mode 100644 index 6c57fa13c9c52783693e4e699eaf689fbaf2ff7d..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.h +++ /dev/null @@ -1,255 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbGenericRoadExtractionFilter_h -#define otbGenericRoadExtractionFilter_h - -#include "itkUnaryFunctorImageFilter.h" -#include "itkGradientRecursiveGaussianImageFilter.h" - -#include "otbVectorImage.h" -#include "otbImageToPathListFilter.h" -#include "itkSqrtImageFilter.h" -#include "otbNeighborhoodScalarProductFilter.h" -#include "otbNonMaxRemovalByDirectionFilter.h" -#include "otbVectorizationPathListFilter.h" -#include "otbSimplifyPathListFilter.h" -#include "otbBreakAngularPathListFilter.h" -#include "otbRemoveTortuousPathListFilter.h" -#include "otbLinkPathListFilter.h" -#include "otbRemoveIsolatedByDirectionFilter.h" -#include "otbRemoveWrongDirectionFilter.h" -#include "otbLikelihoodPathListFilter.h" - -namespace otb -{ -/** - * \class GenericRoadExtractionFilter - * \brief This class performs the extraction of roads from an image. - * - * This composite filter implements a fast and robust road extraction - * for high resolution satellite images. The line - * detection is done using a Gaussian gradient with a scalar product to find - * the road directions. Finally, extracted roads are vectorized and - * processed to improve the results removing some occultations and false - * detections. - * - * The full method is detailed in E. Christophe and J. Inglada, "Robust Road - * Extraction for High Resolution Satellite Images," in IEEE International - * Conference on Image Processing, ICIP'07, 2007. - * - * This filter is fast, as the detection typically takes 3 seconds for a - * 1000 \f$ \times \f$ 1000 images with four spectral bands. Results can be - * used as an initialization for more complex algorithms. - * - * \sa itk::SqrtImageFilter - * \sa itk::GradientRecursiveGaussianImageFilter - * \sa NeighborhoodScalarProductFilter - * \sa RemoveIsolatedByDirectionFilter - * \sa RemoveWrongDirectionFilter - * \sa NonMaxRemovalByDirectionFilter - * \sa VectorizationPathListFilter - * \sa SimplifyPathListFilter - * \sa BreakAngularPathListFilter - * \sa RemoveTortuousPathListFilter - * \sa LinkPathListFilter - * \sa LikelihoodPathListFilter - * - * \ingroup OTBRoadExtraction - */ -template <class TInputImage, class TOutputPath> -class ITK_EXPORT GenericRoadExtractionFilter - : public ImageToPathListFilter<TInputImage, TOutputPath> -{ -public: - /** Standard typedefs */ - typedef GenericRoadExtractionFilter Self; - typedef ImageToPathListFilter<TInputImage, TOutputPath> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Creation through object factory macro */ - itkNewMacro(Self); - /** Type macro */ - itkTypeMacro(GenericRoadExtractionFilter, ImageToPathListFilter); - /** Template parameters typedefs */ - typedef typename Superclass::InputImageType InputImageType; - typedef typename Superclass::OutputPathType OutputPathType; - typedef typename Superclass::OutputPathListType OutputPathListType; - typedef typename InputImageType::PixelType InputPixelType; - typedef double InternalPixelType; - - typedef otb::VectorImage<InternalPixelType, InputImageType::ImageDimension> VectorImageType; - typedef otb::Image<InternalPixelType, InputImageType::ImageDimension> ModulusType; - typedef otb::Image<InternalPixelType, InputImageType::ImageDimension> DirectionType; - - typedef itk::CovariantVector<InternalPixelType, InputImageType::ImageDimension> - VectorPixelType; - typedef otb::Image<VectorPixelType, InputImageType::ImageDimension> CovariantVectorImageType; - - typedef itk::SqrtImageFilter< - InputImageType, - InputImageType> SquareRootImageFilterType; - - typedef itk::GradientRecursiveGaussianImageFilter< - InputImageType, - CovariantVectorImageType> GradientFilterType; - - typedef NeighborhoodScalarProductFilter< - CovariantVectorImageType, - ModulusType, - DirectionType> NeighborhoodScalarProductFilterType; - - typedef RemoveIsolatedByDirectionFilter< - ModulusType, - DirectionType, - ModulusType> RemoveIsolatedByDirectionFilterType; - - typedef RemoveWrongDirectionFilter< - ModulusType, - DirectionType, - ModulusType> RemoveWrongDirectionFilterType; - - typedef NonMaxRemovalByDirectionFilter< - ModulusType, - DirectionType, - ModulusType> NonMaxRemovalByDirectionFilterType; - - typedef VectorizationPathListFilter< - ModulusType, - DirectionType, - OutputPathType> VectorizationPathListFilterType; - - typedef SimplifyPathListFilter<OutputPathType> SimplifyPathListFilterType; - typedef BreakAngularPathListFilter<OutputPathType> BreakAngularPathListFilterType; - typedef RemoveTortuousPathListFilter<OutputPathType> RemoveTortuousPathListFilterType; - typedef LinkPathListFilter<OutputPathType> LinkPathListFilterType; - typedef LikelihoodPathListFilter<OutputPathType, ModulusType> LikelihoodPathListFilterType; - - /** Template parameters typedefs for internals filters */ - typedef typename GradientFilterType::RealType SigmaType; - typedef typename VectorizationPathListFilterType::InputPixelType AmplitudeThresholdType; -// typedef typename SimplifyPathListFilterType::ToleranceType ToleranceType; - typedef double ToleranceType; - typedef typename BreakAngularPathListFilterType::MaxAngleType MaxAngleType; -// typedef typename RemoveTortuousPathListFilterType::MeanDistanceThresholdType MeanDistanceThresholdType; - typedef double MeanDistanceThresholdType; - typedef typename LinkPathListFilterType::RealType LinkRealType; - - /** Get/Set the alpha value */ - itkGetConstReferenceMacro(Alpha, double); - itkSetMacro(Alpha, double); - - /** Get/Set the amplitude threshold to start following a path (use by the VectorizationPathListFilter)*/ - itkSetMacro(AmplitudeThreshold, AmplitudeThresholdType); - itkGetMacro(AmplitudeThreshold, AmplitudeThresholdType); - - /** Get/Set the tolerance for segment consistency (tolerance in terms of distance) (use by the SimplifyPathListFilter)*/ - itkGetMacro(Tolerance, ToleranceType); - itkSetMacro(Tolerance, ToleranceType); - - /** Get/Set the resolution */ - itkGetMacro(Resolution, double); - itkSetMacro(Resolution, double); - - /** Set/Get the max angle (use bye the BreakAngularPathListFilter)*/ - itkSetMacro(MaxAngle, MaxAngleType); - itkGetConstMacro(MaxAngle, MaxAngleType); - - /** Get/Set the tolerance for segment consistency (tolerance in terms of distance) (use by RemoveTortuousPathListFilter)*/ - itkGetMacro(FirstMeanDistanceThreshold, MeanDistanceThresholdType); - itkSetMacro(FirstMeanDistanceThreshold, MeanDistanceThresholdType); - itkGetMacro(SecondMeanDistanceThreshold, MeanDistanceThresholdType); - itkSetMacro(SecondMeanDistanceThreshold, MeanDistanceThresholdType); - - /** Get/Set the angular threshold (use by LinkPathFilter)*/ - itkSetMacro(AngularThreshold, LinkRealType); - itkGetMacro(AngularThreshold, LinkRealType); - /** Get/Set the distance threshold (use by LinkPathFilter)*/ - itkSetMacro(DistanceThreshold, LinkRealType); - itkGetMacro(DistanceThreshold, LinkRealType); - -protected: - /** Constructor */ - GenericRoadExtractionFilter(); - /** Destructor */ - ~GenericRoadExtractionFilter() override {} - - /** Prepare main computation method - * Note : this function isn't called - */ - void BeforeGenerateData(void); - - /** Main computation method */ - void GenerateData(void) override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - - GenericRoadExtractionFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - typename SquareRootImageFilterType::Pointer m_SquareRootImageFilter; - typename GradientFilterType::Pointer m_GradientFilter; - typename NeighborhoodScalarProductFilterType::Pointer m_NeighborhoodScalarProductFilter; - typename RemoveIsolatedByDirectionFilterType::Pointer m_RemoveIsolatedByDirectionFilter; - typename RemoveWrongDirectionFilterType::Pointer m_RemoveWrongDirectionFilter; - typename NonMaxRemovalByDirectionFilterType::Pointer m_NonMaxRemovalByDirectionFilter; - typename VectorizationPathListFilterType::Pointer m_VectorizationPathListFilter; - typename SimplifyPathListFilterType::Pointer m_FirstSimplifyPathListFilter; - typename SimplifyPathListFilterType::Pointer m_SecondSimplifyPathListFilter; - typename BreakAngularPathListFilterType::Pointer m_BreakAngularPathListFilter; - typename RemoveTortuousPathListFilterType::Pointer m_FirstRemoveTortuousPathListFilter; - typename RemoveTortuousPathListFilterType::Pointer m_SecondRemoveTortuousPathListFilter; - typename LinkPathListFilterType::Pointer m_LinkPathListFilter; - typename LikelihoodPathListFilterType::Pointer m_LikelihoodPathListFilter; - - /** Amplitude threshold to start following a path (use by the VectorizationPathListFilter)*/ - AmplitudeThresholdType m_AmplitudeThreshold; - /** Tolerance for segment consistency (tolerance in terms of distance) (use by the SimplifyPathListFilter)*/ - ToleranceType m_Tolerance; - /** Max angle (use bye the BreakAngularPathListFilter)*/ - MaxAngleType m_MaxAngle; - /** Tolerance for segment consistency (tolerance in terms of distance) (use by RemoveTortuousPathListFilter)*/ - MeanDistanceThresholdType m_FirstMeanDistanceThreshold; - MeanDistanceThresholdType m_SecondMeanDistanceThreshold; - /** The angular threshold (use by LinkPathListFilter) */ - LinkRealType m_AngularThreshold; - - /** The distance threshold (use by LinkPathListFilter) */ - double m_DistanceThreshold; - - /** Alpha. Use to calculate the sigma value used by the GradientRecursiveGaussianImageFilter */ - double m_Alpha; - - /** Resolution of the image. Use to calculate the sigma value used by the GradientRecursiveGaussianImageFilter - and the m_DistanceThreshold value used by the LinkPathListFilter - This value is set bye the image's spacing.*/ - double m_Resolution; - -}; - -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbGenericRoadExtractionFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.hxx b/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.hxx deleted file mode 100644 index fe69fd3c7894a61ffd07e7a942c54a78e7ef8f14..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.hxx +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbGenericRoadExtractionFilter_hxx -#define otbGenericRoadExtractionFilter_hxx - -#include "otbGenericRoadExtractionFilter.h" -#include "otbMath.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TInputImage, class TOutputPath> -GenericRoadExtractionFilter<TInputImage, TOutputPath> -::GenericRoadExtractionFilter() -{ - this->SetNumberOfRequiredInputs(1); - this->SetNumberOfRequiredOutputs(1); - - m_SquareRootImageFilter = SquareRootImageFilterType::New(); - m_GradientFilter = GradientFilterType::New(); - m_NeighborhoodScalarProductFilter = NeighborhoodScalarProductFilterType::New(); - m_RemoveIsolatedByDirectionFilter = RemoveIsolatedByDirectionFilterType::New(); - m_RemoveWrongDirectionFilter = RemoveWrongDirectionFilterType::New(); - m_NonMaxRemovalByDirectionFilter = NonMaxRemovalByDirectionFilterType::New(); - m_VectorizationPathListFilter = VectorizationPathListFilterType::New(); - m_FirstSimplifyPathListFilter = SimplifyPathListFilterType::New(); - m_SecondSimplifyPathListFilter = SimplifyPathListFilterType::New(); - m_BreakAngularPathListFilter = BreakAngularPathListFilterType::New(); - m_FirstRemoveTortuousPathListFilter = RemoveTortuousPathListFilterType::New(); - m_SecondRemoveTortuousPathListFilter = RemoveTortuousPathListFilterType::New(); - m_LinkPathListFilter = LinkPathListFilterType::New(); - m_LikelihoodPathListFilter = LikelihoodPathListFilterType::New(); - - /** Amplitude threshold to start following a path (use by the VectorizationPathListFilter)*/ - m_AmplitudeThreshold = static_cast<AmplitudeThresholdType>(0.00005); - /** Tolerance for segment consistency (tolerance in terms of distance) (use by the SimplifyPathFilter)*/ - m_Tolerance = static_cast<ToleranceType>(1.); - /** Max angle (use bye the BreakAngularPathListFilter)*/ - m_MaxAngle = static_cast<MaxAngleType>(CONST_PI_8); - /** Tolerance for segment consistency (tolerance in terms of distance) (use by RemoveTortuousPathFilter)*/ - m_FirstMeanDistanceThreshold = static_cast<MeanDistanceThresholdType>(1.); - m_SecondMeanDistanceThreshold = static_cast<MeanDistanceThresholdType>(10.); - /** The angular threshold (use by LinkPathFilter) */ - m_AngularThreshold = static_cast<LinkRealType>(CONST_PI_8); - - /** The distance threshold (use by LinkPathFilter) */ - m_DistanceThreshold = 25.; - - /** Alpha value */ - /** Use to calculate the sigma value use by the GradientRecursiveGaussianImageFilter */ - m_Alpha = 1.0; - - /** Resolution of the image */ - m_Resolution = 1.; -} -/** - * Prepare main computation method - */ -template <class TInputImage, class TOutputPath> -void -GenericRoadExtractionFilter<TInputImage, TOutputPath> -::BeforeGenerateData() -{ - /** Calculation of resolution value */ - typename InputImageType::SpacingType spacing = this->GetInput()->GetSignedSpacing(); - // Getting x Spacing for the resolution - m_Resolution = static_cast<double>(spacing[0]); - if (m_Resolution == 0.) - { - itkWarningMacro(<< "The image spacing is zero. So the resolution used in the filter is forced to 1."); - m_Resolution = 1.; - } - -} - -/** - * Main computation method - */ -template <class TInputImage, class TOutputPath> -void -GenericRoadExtractionFilter<TInputImage, TOutputPath> -::GenerateData() -{ - // // Input images pointers - typename InputImageType::ConstPointer inputImage = this->GetInput(); - typename OutputPathListType::Pointer outputPathList = this->GetOutput(); - - /////////////////////////////////////// - //// Algorithm for road extraction //// - /////////////////////////////////////// - - // - - m_SquareRootImageFilter->SetInput(inputImage); - - m_GradientFilter->SetInput(m_SquareRootImageFilter->GetOutput()); - /** Sigma calculated with the alpha and image resolution parameters */ - m_GradientFilter->SetSigma(static_cast<SigmaType>(m_Alpha * (1.2 / m_Resolution + 1.))); - m_GradientFilter->SetUseImageDirection(false); - - m_NeighborhoodScalarProductFilter->SetInput(m_GradientFilter->GetOutput()); - - m_RemoveIsolatedByDirectionFilter->SetInput(m_NeighborhoodScalarProductFilter->GetOutput()); - m_RemoveIsolatedByDirectionFilter->SetInputDirection(m_NeighborhoodScalarProductFilter->GetOutputDirection()); - - m_RemoveWrongDirectionFilter->SetInput(m_RemoveIsolatedByDirectionFilter->GetOutput()); - m_RemoveWrongDirectionFilter->SetInputDirection(m_NeighborhoodScalarProductFilter->GetOutputDirection()); - - m_NonMaxRemovalByDirectionFilter->SetInput(m_RemoveWrongDirectionFilter->GetOutput()); - m_NonMaxRemovalByDirectionFilter->SetInputDirection(m_NeighborhoodScalarProductFilter->GetOutputDirection()); - - m_VectorizationPathListFilter->SetInput(m_NonMaxRemovalByDirectionFilter->GetOutput()); - m_VectorizationPathListFilter->SetInputDirection(m_NeighborhoodScalarProductFilter->GetOutputDirection()); - m_VectorizationPathListFilter->SetAmplitudeThreshold(m_AmplitudeThreshold); - - m_FirstSimplifyPathListFilter->SetInput(m_VectorizationPathListFilter->GetOutput()); - m_FirstSimplifyPathListFilter->GetFunctor().SetTolerance(m_Tolerance); - - m_BreakAngularPathListFilter->SetInput(m_FirstSimplifyPathListFilter->GetOutput()); - m_BreakAngularPathListFilter->SetMaxAngle(m_MaxAngle); - - m_FirstRemoveTortuousPathListFilter->SetInput(m_BreakAngularPathListFilter->GetOutput()); - m_FirstRemoveTortuousPathListFilter->GetFunctor().SetThreshold(m_FirstMeanDistanceThreshold); - - m_LinkPathListFilter->SetInput(m_FirstRemoveTortuousPathListFilter->GetOutput()); - m_LinkPathListFilter->SetAngularThreshold(m_AngularThreshold); - m_LinkPathListFilter->SetDistanceThreshold(static_cast<LinkRealType>(m_DistanceThreshold / m_Resolution)); - - m_SecondSimplifyPathListFilter->SetInput(m_LinkPathListFilter->GetOutput()); - m_SecondSimplifyPathListFilter->GetFunctor().SetTolerance(m_Tolerance); - - m_SecondRemoveTortuousPathListFilter->SetInput(m_SecondSimplifyPathListFilter->GetOutput()); - m_SecondRemoveTortuousPathListFilter->GetFunctor().SetThreshold(m_SecondMeanDistanceThreshold); - - m_LikelihoodPathListFilter->SetInput(m_SecondRemoveTortuousPathListFilter->GetOutput()); - m_LikelihoodPathListFilter->SetInputImage(m_NonMaxRemovalByDirectionFilter->GetOutput()); - - // Graft output seems to be broken for PolylineParametricPath - // So we use update, and copy the path to the output path list. - // m_LikelihoodPathListFilter->GraftOutput(this->GetOutput()); - m_LikelihoodPathListFilter->Update(); - // outputPathList = m_LikelihoodPathListFilter->GetOutput(); - for (typename LikelihoodPathListFilterType::PathListType::ConstIterator it - = m_LikelihoodPathListFilter->GetOutput()->Begin(); - it != m_LikelihoodPathListFilter->GetOutput()->End(); - ++it) - { - outputPathList->PushBack(it.Get()); - } -} -/** - * PrintSelf method - */ -template <class TInputImage, class TOutputPath> -void -GenericRoadExtractionFilter<TInputImage, TOutputPath> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "m_Alpha:" << m_Alpha << std::endl; - os << indent << "m_Resolution:" << m_Resolution << std::endl; - os << indent << "m_AmplitudeThreshold: " << m_AmplitudeThreshold << std::endl; - os << indent << "m_Tolerance: " << m_Tolerance << std::endl; - os << indent << "m_MaxAngle: " << m_MaxAngle << std::endl; - os << indent << "m_FirstMeanDistanceThreshold: " << m_FirstMeanDistanceThreshold << std::endl; - os << indent << "m_SecondMeanDistanceThreshold: " << m_SecondMeanDistanceThreshold << std::endl; - os << indent << "m_DistanceThreshold: " << m_DistanceThreshold << std::endl; - os << indent << "m_AngularThreshold: " << m_AngularThreshold << std::endl; - -} -} // End namespace otb -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.h b/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.h deleted file mode 100644 index bdb44cf1f065d6f29f879f5e6da32b08fea2ca2b..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbImageToPathListAlignFilter_h -#define otbImageToPathListAlignFilter_h - -#include "itkImageSource.h" -#include "itkConceptChecking.h" -#include "otbImage.h" -#include "otbImageToPathListFilter.h" -#include <vector> - -namespace otb -{ - -/** \class ImageToPathListAlignFilter - * \brief Base class used to implement filter to extract align points or group of points and give the coordinates. - * - * - * \ingroup OTBRoadExtraction - */ -template <class TInputImage, class TOutputPath> -class ITK_EXPORT ImageToPathListAlignFilter : public ImageToPathListFilter<TInputImage, TOutputPath> -{ -public: - /** Standard class typedefs. */ - typedef ImageToPathListAlignFilter Self; - typedef ImageToPathListFilter<TInputImage, TOutputPath> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(ImageToPathListAlignFilter, ImageToPathListFilter); -// itkTypeMacro(ImageToPathListAlignFilter, itk::ImageSource); - - /** ImageDimension constants */ - itkStaticConstMacro(InputImageDimension, unsigned int, - TInputImage::ImageDimension); - - /** Some convenient typedefs. */ - typedef typename Superclass::OutputPathListType OutputPathListType; - - typedef typename Superclass::InputImageType InputImageType; - typedef typename Superclass::InputImageRegionType InputImageRegionType; - typedef typename InputImageType::Pointer InputImagePointer; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - - typedef typename InputImageType::SizeType SizeType; - typedef typename InputImageType::ValueType ValueType; - typedef typename InputImageType::PixelType PixelType; - - typedef typename Superclass::OutputPathType OutputPathType; - // typedef typename Superclass::OutputPathListType OutputPathListType; - typedef typename Superclass::OutputPathPointerType OutputPathPointerType; - -// typedef float RealType; -//typedef typename itk::NumericTraits<PixelType>::RealType RealType; - typedef double RealType; -// typedef typename itk::Image<RealType, InputImageDimension> RealImageType; - typedef typename otb::Image<RealType, InputImageDimension> RealImageType; - typedef typename RealImageType::Pointer RealImageTypePointer; - typedef typename RealImageType::IndexType RealImageTypeIndexType; - - /** Spacing (size of a pixel) of the output image. The - * spacing is the geometric distance between image samples. - * It is stored internally as double, but may be set from - * float. \sa GetSpacing() */ - virtual void SetSpacing(const double* spacing); - virtual void SetSpacing(const float* spacing); - virtual const double* GetSpacing() const; - - /** Set/Get the value for pixels on and off the path. - * By default, this filter will return a "0" image with path pixels set to 1 */ - itkSetMacro(PathValue, ValueType); - itkGetMacro(PathValue, ValueType); - itkSetMacro(BackgroundValue, ValueType); - itkGetMacro(BackgroundValue, ValueType); - - /** The origin of the output image. The origin is the geometric - * coordinates of the index (0, 0, ..., 0). It is stored internally - * as double but may be set from float. - * \sa GetOrigin() */ - virtual void SetOrigin(const double* origin); - virtual void SetOrigin(const float* origin); - virtual const double * GetOrigin() const; - - /** Set/Get Size */ - itkSetMacro(Size, SizeType); - itkGetMacro(Size, SizeType); - - itkSetMacro(isMeaningfulSegment, bool); - itkSetMacro(NbGradDirection, int); - itkSetMacro(NbLineDirection, int); - itkSetMacro(MinGradNorm, double); - itkSetMacro(Eps, double); - itkGetConstReferenceMacro(isMeaningfulSegment, bool); - itkGetConstReferenceMacro(NbGradDirection, int); - itkGetConstReferenceMacro(NbLineDirection, int); - itkGetConstReferenceMacro(MinGradNorm, double); - itkGetConstReferenceMacro(Eps, double); - -protected: - ImageToPathListAlignFilter(); - ~ImageToPathListAlignFilter() override; - - void GenerateOutputInformation() override {} // do nothing - void GenerateData() override; - virtual std::vector<double> tab(int n, double p, double m); - virtual void AngleCalculate(const InputImageType* InputImageIn); - - SizeType m_Size; - double m_Spacing[InputImageDimension]; - double m_Origin[InputImageDimension]; - ValueType m_PathValue; - ValueType m_BackgroundValue; - - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - ImageToPathListAlignFilter(const Self &) = delete; - void operator =(const Self&) = delete; - bool m_isMeaningfulSegment; /// to get all meaningful segments (maximal or not - int m_NbGradDirection; /// Number of allowed gradient direction, default 16 - int m_NbLineDirection; /// Number of line directions to scan, default 96) - double m_MinGradNorm; /// Minimum gradient norm to define a direction, default 2. - double m_Eps; /// -log10(max. number of false alarms), default 0 - std::vector<double> m_seglist; - - RealImageType * m_AngleImage; //Angle image use by GenerateData and AngleCalculate methods -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbImageToPathListAlignFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.hxx b/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.hxx deleted file mode 100644 index 3ba3ef83d435c64c28995b047ffcfe72a7316c79..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.hxx +++ /dev/null @@ -1,585 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbImageToPathListAlignFilter_hxx -#define otbImageToPathListAlignFilter_hxx - -#include "otbImageToPathListAlignFilter.h" -#include "itkImageRegionIteratorWithIndex.h" -#include "itkConstNeighborhoodIterator.h" -#include "itkPathIterator.h" -#include "itkNumericTraits.h" -#include "itkImageLinearIteratorWithIndex.h" -#include "otbMath.h" - -namespace otb -{ - -struct one_segment -{ - short start; /* starting position (distance from border) */ - short end; /* ending position (hence, length is end-start+1) */ - double nfa; /* number of false alarms */ - char ok; -}; - -/** Constructor */ -template <class TInputImage, class TOutputPath> -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::ImageToPathListAlignFilter() -{ - this->SetNumberOfRequiredInputs(1); - m_Size.Fill(0); - m_isMeaningfulSegment = false; - m_NbGradDirection = 16; - m_NbLineDirection = 96; - m_MinGradNorm = 2.0; - m_Eps = 0.0; - - for (unsigned int i = 0; i < InputImageDimension; ++i) - { - // Set an image spacing for the user - m_Spacing[i] = 1.0; - m_Origin[i] = 0; - } - - m_PathValue = itk::NumericTraits<ValueType>::One; - m_BackgroundValue = itk::NumericTraits<ValueType>::Zero; -} - -/** Destructor */ -template <class TInputImage, class TOutputPath> -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::~ImageToPathListAlignFilter() -{ -} - -//---------------------------------------------------------------------------- -template <class TInputImage, class TOutputPath> -void -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::SetSpacing(const double* spacing) -{ - unsigned int i; - for (i = 0; i < InputImageDimension; ++i) - { - if (spacing[i] != m_Spacing[i]) - { - break; - } - } - if (i < InputImageDimension) - { - for (i = 0; i < InputImageDimension; ++i) - { - m_Spacing[i] = spacing[i]; - } - this->Modified(); - } -} - -template <class TInputImage, class TOutputPath> -void -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::SetSpacing(const float* spacing) -{ - unsigned int i; - for (i = 0; i < InputImageDimension; ++i) - { - if ((double) spacing[i] != m_Spacing[i]) - { - break; - } - } - if (i < InputImageDimension) - { - for (i = 0; i < InputImageDimension; ++i) - { - m_Spacing[i] = spacing[i]; - } - this->Modified(); - } -} - -template <class TInputImage, class TOutputPath> -const double * -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::GetSpacing() const -{ - return m_Spacing; -} - -//---------------------------------------------------------------------------- -template <class TInputImage, class TOutputPath> -void -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::SetOrigin(const double* origin) -{ - unsigned int i; - for (i = 0; i < InputImageDimension; ++i) - { - if (origin[i] != m_Origin[i]) - { - break; - } - } - if (i < InputImageDimension) - { - for (i = 0; i < InputImageDimension; ++i) - { - m_Origin[i] = origin[i]; - } - } -} - -template <class TInputImage, class TOutputPath> -void -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::SetOrigin(const float* origin) -{ - unsigned int i; - for (i = 0; i < InputImageDimension; ++i) - { - if ((double) origin[i] != m_Origin[i]) - { - break; - } - } - if (i < InputImageDimension) - { - for (i = 0; i < InputImageDimension; ++i) - { - m_Origin[i] = origin[i]; - } - } -} - -template <class TInputImage, class TOutputPath> -const double * -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::GetOrigin() const -{ - return m_Origin; -} - -//---------------------------------------------------------------------------- -/* Algorithm */ -template <class TInputImage, class TOutputPath> -std::vector<double> -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::tab(int n, double p, double m) -{ - std::vector<double> out; - int adr1, adr2, x, y; -// double lambda; - double q; - - q = 1.0 - p; - out.resize((n + 1) * (n + 1)); - adr1 = 0; - - /*** compute proba (=x among y) ***/ - out[0] = 1.0; - for (y = 1, adr2 = 0; y <= n; ++y) - { - adr1 = adr2; - adr2 += n + 1; - out[adr2] = q * out[adr1]; - for (x = 1; x <= y; ++x) - out[adr2 + x] = p * out[adr1 + x - 1] + q * out[adr1 + x]; - } - - /*** sum to obtain proba (>=k among y) ***/ - for (y = 1, adr1 = n + 1; y <= n; ++y, adr1 += n + 1) - for (x = y - 1; x >= 0; x--) - out[adr1 + x] += out[adr1 + x + 1]; - - /*** multiply by m (number of segments) to obtain expectation***/ - for (adr1 = (n + 1) * (n + 1); --adr1 >= 0; ) - out[adr1] *= m; - - return out; -} - -template <class TInputImage, class TOutputPath> -void -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::AngleCalculate(const InputImageType* InputImage) -{ - double threshold; - int n, p, x, y; - - typename InputImageType::SizeType Taille; - typename RealImageType::IndexType IndexOut; - - Taille = InputImage->GetLargestPossibleRegion().GetSize(); - - typename RealImageType::RegionType region; - region.SetSize(InputImage->GetLargestPossibleRegion().GetSize()); - IndexOut[0] = 0; - IndexOut[1] = 0; -// region.SetIndex(InputImage->GetLargestPossibleRegion().GetIndex()); - region.SetIndex(IndexOut); - m_AngleImage->SetRegions(region); - m_AngleImage->SetOrigin(InputImage->GetOrigin()); - m_AngleImage->SetSignedSpacing(InputImage->GetSignedSpacing()); - m_AngleImage->Allocate(); - - n = Taille[0]; - p = Taille[1]; - - threshold = m_MinGradNorm; - threshold *= threshold; - - typename InputImageType::IndexType idx; - - for (x = 0; x < p; ++x) - { - idx[0] = (n - 1); - idx[1] = x; -// indice = (n-1)*p +x - m_AngleImage->SetPixel(idx, static_cast<RealType>(-1000.0)); - } - for (y = 0; y < n; ++y) - { - idx[0] = y; - idx[1] = p - 1; -// indice = p*y+p-1 - m_AngleImage->SetPixel(idx, static_cast<RealType>(-1000.0)); - } - - typename InputImageType::IndexType adr; - RealType PixelA, PixelB, PixelC, PixelD; - RealType com1, com2, gx, gy, norm; - - for (x = 0; x < p - 1; ++x) - for (y = 0; y < n - 1; ++y) - { -// indice = y*p+x - adr[0] = y; - adr[1] = x; - idx[0] = adr[0] + 1; - idx[1] = adr[1] + 1; - PixelA = static_cast<RealType>(InputImage->GetPixel(idx)); - idx[0] = adr[0]; - idx[1] = adr[1]; - assert(idx[0] < n); - assert(idx[1] < p); - assert(idx[0] >= 0); - assert(idx[1] >= 0); - PixelB = static_cast<RealType>(InputImage->GetPixel(idx)); - idx[0] = adr[0] + 1; - idx[1] = adr[1]; - assert(idx[0] < n); - assert(idx[1] < p); - assert(idx[0] >= 0); - assert(idx[1] >= 0); - PixelC = static_cast<RealType>(InputImage->GetPixel(idx)); - idx[0] = adr[0]; - idx[1] = adr[1] + 1; - assert(idx[0] < n); - assert(idx[1] < p); - assert(idx[0] >= 0); - assert(idx[1] >= 0); - PixelD = static_cast<RealType>(InputImage->GetPixel(idx)); - com1 = PixelA - PixelB; - com2 = PixelC - PixelD; - gx = 0.5 * (com1 + com2); - gy = 0.5 * (com1 - com2); - norm = gx * gx + gy * gy; - - if (norm <= threshold) m_AngleImage->SetPixel(adr, static_cast<RealType>(-1000.0)); - else m_AngleImage->SetPixel(adr, static_cast<RealType>(std::atan2(gx, -gy))); - } -} - -template <class TInputImage, class TOutputPath> -void -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::GenerateData(void) -{ -// SizeType size; -// double origin[InputImageDimension]; - typename InputImageType::SizeType Taille; - RealImageTypeIndexType indexAngle; -// Flist result; - int iseglist, size_seglist; /* associated counter and dynamic size */ - int iseg, size_seg; - double nfa, max_nfa; - std::vector<double> test; - std::vector<int> count, startbloc, endbloc; - std::vector<double> seglist; /* list of recorded segments */ - std::vector<one_segment> seg; - int mx, my, ox, oy, nx, ny, n; - int xx, yy, pos, posmax, nblocs, inbloc, max_nblocs; - int cur, i, j, side, l, lphase; - // int tmp; - int itheta, ntheta; - double theta, theta0, dtheta, dx, dy, prec; - double error = 0.0; - itkDebugMacro(<< "ImageToPathListAlignFilter::GenerateData() called"); - - // Get the input and output pointers - const InputImageType * InputImage = this->GetInput(); - OutputPathListType * OutputPath = this->GetOutput(); - // Generate the image - - /* Filter algorithm */ - - Taille = InputImage->GetLargestPossibleRegion().GetSize(); - nx = Taille[0]; - ny = Taille[1]; - max_nfa = std::pow(10.0, -(m_Eps)); - -// typename InputImageType::IndexType adr; - - /*** maximal length for a line */ - n = (int) std::ceil(hypot((double) nx, (double) ny)) + 1; - - /*** compute angle map of u ***/ - RealImageTypePointer lAngleImagePointer = RealImageType::New(); - m_AngleImage = static_cast<RealImageType*>(lAngleImagePointer.GetPointer()); - this->AngleCalculate(InputImage); - - /*** compute P(k, l) ***/ - test = tab(n, 1.0 / (double) (m_NbGradDirection), (double) (nx * ny) * (double) (nx * ny)); - - /*** initialization ***/ - prec = CONST_PI / (double) (m_NbGradDirection); - ntheta = m_NbLineDirection / 2; /* i.e. # directions of NON-ORIENTED lines */ - dtheta = CONST_PI / (double) ntheta; - - /******************** memory allocation ********************/ - - max_nblocs = n / 2 + 1; /* maximal number of blocs */ - count.resize(max_nblocs); - startbloc.resize(max_nblocs); - endbloc.resize(max_nblocs); - - size_seg = 10000; /* initial allocation (may reallocate later) */ - seg.resize(size_seg); - - size_seglist = 10000; /* initial allocation (may reallocate later) */ - seglist.resize(5 * size_seglist); - - /* counter for recorded segments (seglist) */ - iseglist = 0; - - /******************** first loop : the four sides ********************/ - - for (side = 0; side < 4; side++) - { - printf("side %d/4 ", side + 1); - - theta0 = CONST_PI_2 * (double) side; - mx = ((side == 0 || side == 2) ? 1 : 0); - my = ((side == 1 || side == 3) ? 1 : 0); - ox = ((side == 1) ? nx - 1 : 0); - oy = ((side == 2) ? ny - 1 : 0); - - posmax = nx * mx + ny * my; - - /*** second loop : angles ***/ - for (itheta = 0; itheta < ntheta; itheta++) - { - printf("."); - fflush(stdout); - theta = theta0 + (double) (itheta) * dtheta; - dx = (double) std::cos((double) theta); - dy = (double) std::sin((double) theta); - - /*** third loop : start positions ***/ - for (pos = 0; pos < posmax; ++pos) - { - - /* clear segment array */ - iseg = 0; - - /*** fourth loop : phase for two-spaced pixels ***/ - for (lphase = 0; lphase < 2; lphase++) - { - - /*** detect aligned points by blocs ***/ - inbloc = nblocs = cur = l = count[0] = 0; - xx = ox + pos * mx + (int) (dx * (double) (l * 2 + lphase)); - yy = oy + pos * my + (int) (dy * (double) (l * 2 + lphase)); - - for (; xx >= 0 && xx < nx && yy >= 0 && yy < ny; ) - { - indexAngle[0] = xx; - indexAngle[1] = yy; - // indice = yy*nx+xx - assert(indexAngle[0] < nx); - assert(indexAngle[1] < ny); - assert(indexAngle[0] >= 0); - assert(indexAngle[1] >= 0); - - error = static_cast<double>(m_AngleImage->GetPixel(indexAngle)); - if (error > -100.0) - { - error -= theta; - while (error <= -CONST_PI) - error += CONST_2PI; - while (error > CONST_PI) - error -= CONST_2PI; - if (error < 0.0) error = -error; - if (error < prec) - { - ++cur; - if (!inbloc) - { - startbloc[nblocs] = l; - inbloc = 1; - } - } - else - { - if (inbloc) - { - endbloc[nblocs] = l - 1; - ++nblocs; - count[nblocs] = cur; - } - inbloc = 0; - } - } - /* compute next point */ - ++l; - xx = ox + pos * mx + (int) (dx * (double) (l * 2 + lphase)); - yy = oy + pos * my + (int) (dy * (double) (l * 2 + lphase)); - } - - /*** detect meaningful segments ***/ - for (i = 0; i < nblocs; ++i) - for (j = i; j < nblocs; ++j) - if ((nfa = test[count[j + 1] - count[i] - + (n + 1) * (1 + endbloc[j] - startbloc[i])]) < max_nfa) - { - seg[iseg].start = startbloc[i] * 2 + lphase; - seg[iseg].end = endbloc[j] * 2 + lphase; - seg[iseg].nfa = nfa; - seg[iseg].ok = 1; - iseg++; - /* reallocate if necessary */ - if (iseg == size_seg) - { - size_seg = (size_seg * 3) / 2; - seg.resize(size_seg); -// if (!seg) -// mwerror(FATAL, 1,"Not enough memory."); - } - } - } - /*** end of phase loop ***/ - - /*** remove non-maximal segments ***/ - if (!m_isMeaningfulSegment) - for (i = 0; i < iseg; ++i) - for (j = 0; j < iseg; ++j) - if (i != j) - - /* seg[i] is included in seg[j] ? */ - if (seg[i].start >= seg[j].start && seg[i].end <= seg[j].end) - { - - /* remove the less meaningful of seg[i] and seg[j] */ - if (seg[i].nfa < seg[j].nfa) seg[j].ok = 0; - else seg[i].ok = 0; - - } - - /*** store detected segments ***/ - for (i = 0; i < iseg; ++i) - if (seg[i].ok) - { - seglist[iseglist * 5] = (double) (ox + pos * mx) + dx * (double) (seg[i].start); - seglist[iseglist * 5 + 1] = (double) (oy + pos * my) + dy * (double) (seg[i].start); - seglist[iseglist * 5 + 2] = (double) (ox + pos * mx) + dx * (double) (seg[i].end); - seglist[iseglist * 5 + 3] = (double) (oy + pos * my) + dy * (double) (seg[i].end); - seglist[iseglist * 5 + 4] = -(double) log10(seg[i].nfa); - iseglist++; - /* reallocate seglist if necessary */ - if (iseglist == size_seglist) - { - size_seglist = (size_seglist * 3) / 2; - seglist.resize(size_seglist); -// if (!seglist) -// mwerror(FATAL, 1,"Not enough memory."); - } - } - } - } - /*** end of second loop ***/ - - printf(" nb de segments: %d\n", iseglist); - } - /******************** end of first loop ********************/ - - seg.clear(); - endbloc.clear(); - startbloc.clear(); - count.clear(); - test.clear(); - - /* build segments list */ - seglist.resize(5 * iseglist); - - /* build segments list */ - OutputPath->Clear(); -// OutputPath->Resize(iseglist); - - typedef typename OutputPathType::ContinuousIndexType ContinuousIndexType; - typename InputImageType::PointType point; - - ContinuousIndexType cindex; - for (i = 0; i < iseglist; ++i) - { - - OutputPathPointerType path = OutputPathType::New(); - - path->Initialize(); - point[0] = seglist[i * 5]; - point[1] = seglist[i * 5 + 1]; - InputImage->TransformPhysicalPointToContinuousIndex(point, cindex); - path->AddVertex(cindex); - cindex[0] = seglist[i * 5 + 2]; - cindex[1] = seglist[i * 5 + 3]; - path->AddVertex(cindex); - - OutputPath->PushBack(path); - } - itkDebugMacro(<< "ImageToPathListAlignFilter::GenerateData() finished"); - -} // end update function - -template <class TInputImage, class TOutputPath> -void -ImageToPathListAlignFilter<TInputImage, TOutputPath> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -// os << indent << "Size : " << m_Size << std::endl; -// os << indent << "Path Value : " << m_PathValue << std::endl; -// os << indent << "Background Value : " << m_BackgroundValue << std::endl; -} - -} // end namespace otb - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.h deleted file mode 100644 index 26b8f1c84b1ba6ab47644027d48b28e7d124a64f..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbLikelihoodPathListFilter_h -#define otbLikelihoodPathListFilter_h - -#include "otbPathListToPathListFilter.h" -#include "otbMacro.h" -#include <string> - -namespace otb -{ -/** \class LikelihoodPathListFilter - * \brief Affect a value to each path of the list based on the image - * - * PathList and image are given as an input, the filter affect a value to each - * path: this value is equal to the sum of the pixels crossed by the path - * (using a PolyLineImageConstIterator) divided by the number of points in the - * path - * - * - * \ingroup OTBRoadExtraction - */ -template <class TPath, class TImage> -class ITK_EXPORT LikelihoodPathListFilter - : public PathListToPathListFilter<TPath> -{ -public: - /** Standard typedefs */ - typedef LikelihoodPathListFilter Self; - typedef PathListToPathListFilter<TPath> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(LikelihoodPathListFilter, PathListToPathListFilter); - - /** Template parameters typedefs */ - typedef typename Superclass::PathType PathType; - typedef typename Superclass::PathListType PathListType; - typedef typename Superclass::PathPointerType PathPointerType; - typedef typename PathListType::Pointer PathListPointerType; - typedef typename PathListType::ConstIterator IteratorType; - typedef typename PathType::VertexType VertexType; - typedef typename PathType::VertexListType VertexListType; - typedef typename VertexListType::ConstIterator VertexIteratorType; - typedef double RealType; - - typedef TImage ImageType; - typedef typename ImageType::Pointer ImagePointerType; - typedef typename ImageType::ConstPointer ImageConstPointerType; - - /** - * Set the input Likelihood image. - * \param image The Likelihood image. - */ - void SetInputImage(const ImageType * image); - - /** - * Get the input Likelihood image. - * \return The input Likelihood image. - */ - const ImageType * GetInputImage(void); - -protected: - /** Constructor */ - LikelihoodPathListFilter(); - /** Destructor */ - ~LikelihoodPathListFilter() override {} - /** GenerateData method */ - void GenerateData() override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - LikelihoodPathListFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - std::string m_Key; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbLikelihoodPathListFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.hxx b/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.hxx deleted file mode 100644 index f1bcde145d843ae512d228c20b78da49c740f6ad..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.hxx +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbLikelihoodPathListFilter_hxx -#define otbLikelihoodPathListFilter_hxx - -#include "otbLikelihoodPathListFilter.h" -#include "otbPolyLineImageConstIterator.h" -#include "itkMetaDataObject.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TPath, class TImage> -LikelihoodPathListFilter<TPath, TImage> -::LikelihoodPathListFilter() -{ - m_Key = "Value"; - this->SetNumberOfRequiredInputs(2); - this->SetNumberOfRequiredInputs(2); -} -template <class TPath, class TImage> -void -LikelihoodPathListFilter<TPath, TImage> -::SetInputImage(const ImageType * image) -{ - this->itk::ProcessObject::SetNthInput(1, const_cast<ImageType *>(image)); -} -template <class TPath, class TImage> -const typename LikelihoodPathListFilter<TPath, TImage> -::ImageType * -LikelihoodPathListFilter<TPath, TImage> -::GetInputImage(void) -{ - if (this->GetNumberOfInputs() < 1) - { - return nullptr; - } - return static_cast<const ImageType *>(this->itk::ProcessObject::GetInput(1)); -} - -template <class TPath, class TImage> -void -LikelihoodPathListFilter<TPath, TImage> -::GenerateData() -{ - // I/O wiring - ImageConstPointerType inputImagePtr = this->GetInputImage(); - const PathListType * inputPtr = this->GetInput(); - PathListType * outputPtr = this->GetOutput(); - - typedef otb::PolyLineImageConstIterator<ImageType, PathType> ImageIteratorType; - - for (IteratorType it = inputPtr->Begin(); it != inputPtr->End(); ++it) - { - PathPointerType path = it.Get(); - ImageIteratorType imageIt(inputImagePtr, path); - double cumulatedValues = 0.0; - double nbPoints = 0.0; - for (imageIt.GoToBegin(); !imageIt.IsAtEnd(); ++imageIt, ++nbPoints) - { - cumulatedValues += static_cast<double>(imageIt.Get()); - } - itk::MetaDataDictionary& dict = path->GetMetaDataDictionary(); - itk::EncapsulateMetaData<double>(dict, m_Key, cumulatedValues / nbPoints); - outputPtr->PushBack(path); - } -} -/** - * PrintSelf Method - */ -template <class TPath, class TImage> -void -LikelihoodPathListFilter<TPath, TImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -} // End namespace otb -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.h deleted file mode 100644 index 6fb1aef06fff2f50bd862718d6a8763357afe71e..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbLinkPathListFilter_h -#define otbLinkPathListFilter_h - -#include "otbPathListToPathListFilter.h" -#include "otbMacro.h" - -namespace otb -{ -/** \class LinkPathListFilter - * \brief This filters link path from the input path list according to distance and angular criterions. - * - * This filter examines both ends of each path to link and is able to link several path into one single path. - * The two criterions to link a path are : - * - The two ends to link must be closer than the user defined threshold in terms of euclidean distance, - * - The angle at the link must not be sharp (less than the user defined threshold). - * - * Please note that this filter may invert the order of the vertices in the newly created path. - * - * This filter is part of the road extraction framework. - * - * \sa ParallelLinePathListFilter - * - * \ingroup PathFilters - * - * - * \ingroup OTBRoadExtraction - */ -template <class TPath> -class ITK_EXPORT LinkPathListFilter - : public PathListToPathListFilter<TPath> -{ -public: - /** Standard typedefs */ - typedef LinkPathListFilter Self; - typedef PathListToPathListFilter<TPath> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(LinkPathListFilter, PathListToPathListFilter); - - /** Template parameters typedefs */ - typedef typename Superclass::PathType PathType; - typedef typename Superclass::PathListType PathListType; - typedef typename Superclass::PathPointerType PathPointerType; - typedef typename PathListType::Pointer PathListPointerType; - typedef typename PathListType::ConstIterator IteratorType; - typedef typename PathType::VertexType VertexType; - typedef typename PathType::VertexListType VertexListType; - typedef typename VertexListType::ConstIterator VertexIteratorType; - typedef double RealType; - - itkSetMacro(AngularThreshold, RealType); - itkGetMacro(AngularThreshold, RealType); - itkSetMacro(DistanceThreshold, RealType); - itkGetMacro(DistanceThreshold, RealType); - itkSetMacro(ModuloPI, bool); - itkGetMacro(ModuloPI, bool); - -protected: - /** Constructor */ - LinkPathListFilter(); - /** Destructor */ - ~LinkPathListFilter() override {} - /** GenerateData method */ - void GenerateData() override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - - /** - * Verify the angular condition to link a path. - * \param v1 First vertex (before first path ending), - * \param v2 second vertex (first path ending), - * \param v3 third vertex (second path beginning), - * \param v4 fourth vertex (second path after beginning), - * \return True or false whether the condition is verified or not. - **/ - bool VerifyAngularCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4); - - /** - * Actually link the end of path p1 to the beginning of path p2. - * \param p1 First path to link, - * \param revert1 whether p1 need to be reverted or not, - * \param p2 second path to link, - * \param revert2 whether p2 need to be reverted or not, - * \return the linked path. - */ - PathPointerType LinkPath(PathPointerType p1, bool revert1, PathPointerType p2, bool revert2); - -private: - LinkPathListFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - RealType m_AngularThreshold; - RealType m_DistanceThreshold; - - /// Do not use the sign of the orientation of the lines - bool m_ModuloPI; - -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbLinkPathListFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.hxx b/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.hxx deleted file mode 100644 index 7b2570338264626746d1614b3c6967d9718877b4..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.hxx +++ /dev/null @@ -1,317 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbLinkPathListFilter_hxx -#define otbLinkPathListFilter_hxx - -#include "otbLinkPathListFilter.h" -#include "otbMath.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TPath> -LinkPathListFilter<TPath> -::LinkPathListFilter() -{ - m_DistanceThreshold = 10.; - m_AngularThreshold = 3.14; - m_ModuloPI = false; -} - -template <class TPath> -void -LinkPathListFilter<TPath> -::GenerateData() -{ - // IO - const PathListType * inputPtr = this->GetInput(); - PathListType * outputPtr = this->GetOutput(); - - // Input iterator - IteratorType inputIt = inputPtr->Begin(); - - std::vector<bool> eraseFlagVector; - - // First we copy all input path to output - while (inputIt != inputPtr->End()) - { - outputPtr->PushBack(inputIt.Get()); - eraseFlagVector.push_back(false); - ++inputIt; - } - - IteratorType outputIt1 = outputPtr->Begin(); - unsigned int index1 = 0; - - while (outputIt1 != outputPtr->End()) - { - if (!eraseFlagVector[index1]) - { - IteratorType outputIt2 = outputIt1; - ++outputIt2; - // indicate if a path was found and wath is its index - unsigned int pathToLinkIndex = 0; - double distance = -1.0; - unsigned int index2 = index1 + 1; - bool found = false; - bool revert1 = false; - bool revert2 = false; - if (!eraseFlagVector[index1]) - { - while (outputIt2 != outputPtr->End()) - { - if (!eraseFlagVector[index2]) - { - //otbMsgDevMacro(<<"Examining links between path "<<index1<<" and path "<<index2); - // Examining end of path1 with beginning of path2 - VertexIteratorType vSourceIt = outputIt1.Get()->GetVertexList()->End(); - VertexIteratorType vTargetIt = outputIt2.Get()->GetVertexList()->Begin(); - --vSourceIt; - VertexType v2 = vSourceIt.Value(); - --vSourceIt; - VertexType v1 = vSourceIt.Value(); - VertexType v3 = vTargetIt.Value(); - ++vTargetIt; - VertexType v4 = vTargetIt.Value(); - double tmpDistance = std::sqrt(std::pow(v2[0] - v3[0], 2) + std::pow(v2[1] - v3[1], 2)); - if ((tmpDistance < static_cast<double>(m_DistanceThreshold)) && ((!found) || (tmpDistance < distance))) - { - if (VerifyAngularCondition(v1, v2, v3, v4)) - { - // we found a better candidate - //otbMsgDevMacro(<<"Link between end of path "<<index1<<" and beginning of path "<<index2<<" is currently the best choice"); - distance = tmpDistance; - pathToLinkIndex = index2; - revert1 = false; - revert2 = false; - if (!found) - { - found = true; - } - } - } - // Examining end of path1 with end of path2 - vTargetIt = outputIt2.Get()->GetVertexList()->End(); - --vTargetIt; - v3 = vTargetIt.Value(); - --vTargetIt; - v4 = vTargetIt.Value(); - tmpDistance = std::sqrt(std::pow(v2[0] - v3[0], 2) + std::pow(v2[1] - v3[1], 2)); - - if ((tmpDistance < static_cast<double>(m_DistanceThreshold)) && ((!found) || (tmpDistance < distance))) - { - if (VerifyAngularCondition(v1, v2, v3, v4)) - { - // we found a better candidate - //otbMsgDevMacro(<<"Link between end of path "<<index1<<" and end of path "<<index2<<" is currently the best choice"); - distance = tmpDistance; - pathToLinkIndex = index2; - revert1 = false; - revert2 = true; - if (!found) - { - found = true; - } - } - } - // Examining beginning of path1 with end of path2 - vSourceIt = outputIt1.Get()->GetVertexList()->Begin(); - v2 = vSourceIt.Value(); - ++vSourceIt; - v1 = vSourceIt.Value(); - tmpDistance = std::sqrt(std::pow(v2[0] - v3[0], 2) + std::pow(v2[1] - v3[1], 2)); - - if ((tmpDistance < static_cast<double>(m_DistanceThreshold)) && ((!found) || (tmpDistance < distance))) - { - if (VerifyAngularCondition(v1, v2, v3, v4)) - { - // we found a better candidate - //otbMsgDevMacro(<<"Link between beginning of path "<<index1<<" and end of path "<<index2<<" is currently the best choice"); - distance = tmpDistance; - pathToLinkIndex = index2; - revert1 = true; - revert2 = true; - if (!found) - { - found = true; - } - } - } - // Examining beginning of path1 with beginning of path2 - vTargetIt = outputIt2.Get()->GetVertexList()->Begin(); - v3 = vTargetIt.Value(); - ++vTargetIt; - v4 = vTargetIt.Value(); - tmpDistance = std::sqrt(std::pow(v2[0] - v3[0], 2) + std::pow(v2[1] - v3[1], 2)); - if ((tmpDistance < static_cast<double>(m_DistanceThreshold)) && ((!found) || (tmpDistance < distance))) - { - if (VerifyAngularCondition(v1, v2, v3, v4)) - { - // we found a better candidate - //otbMsgDevMacro(<<"Link between beginning of path "<<index1<<" and beginning of path "<<index2<<" is currently the best choice"); - distance = tmpDistance; - pathToLinkIndex = index2; - revert1 = true; - revert2 = false; - if (!found) - { - found = true; - } - } - } - } - ++index2; - ++outputIt2; - } - if (found) - { - //otbMsgDevMacro(<<"Search ended, merging path "<<index1<<" and path "<<pathToLinkIndex); - // an appropriate path was found - outputIt2 = outputPtr->Begin() + pathToLinkIndex; - PathPointerType newPath = this->LinkPath(outputIt1.Get(), revert1, outputIt2.Get(), revert2); - outputPtr->PushBack(newPath); - // add a non erased flag for the new path - eraseFlagVector.push_back(false); - // mark the old path as erased - eraseFlagVector[index1] = true; - eraseFlagVector[pathToLinkIndex] = true; - } - } - } - ++index1; - // This replaces ++outputIt1 because the iterators is somehow invalidated by a pushback. - outputIt1 = outputPtr->Begin() + index1; - } - - // search ended, now removing the erased path - typename std::vector<bool>::reverse_iterator it = eraseFlagVector.rbegin(); - index1 = eraseFlagVector.size() - 1; - while (it != eraseFlagVector.rend()) - { - if (eraseFlagVector[index1]) - { - outputPtr->Erase(index1); - } - --index1; - ++it; - } -} -/** - * Verify the angular condition to link a path. - * \param v1 First vertex (before first path ending), - * \param v2 second vertex (first path ending), - * \param v3 third vertex (second path beginning), - * \param v4 fourth vertex (second path after beginning), - * \return True or false whether the condition is verified or not. - **/ -template <class TPath> -bool -LinkPathListFilter<TPath> -::VerifyAngularCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4) -{ - double alpha1 = std::atan2((v2[1] - v1[1]), (v2[0] - v1[0])); - double alpha2 = std::atan2((v4[1] - v3[1]), (v4[0] - v3[0])); - double alpha3 = std::atan2((v3[1] - v2[1]), (v3[0] - v2[0])); - - if (m_ModuloPI) - { - alpha1 = (alpha1 >= 0) ? alpha1 : (alpha1 + CONST_PI); - alpha2 = (alpha2 >= 0) ? alpha2 : (alpha2 + CONST_PI); - alpha3 = (alpha3 >= 0) ? alpha3 : (alpha3 + CONST_PI); - } - else - { - alpha1 = (alpha1 >= 0) ? alpha1 : (alpha1 + CONST_2PI); - alpha2 = (alpha2 >= 0) ? alpha2 : (alpha2 + CONST_2PI); - alpha3 = (alpha3 >= 0) ? alpha3 : (alpha3 + CONST_2PI); - } - - bool resp = (std::abs(alpha1 - alpha2) < static_cast<double>(m_AngularThreshold)) - && (std::abs(alpha1 - alpha3) < static_cast<double>(m_AngularThreshold)) - && (std::abs(alpha2 - alpha3) < static_cast<double>(m_AngularThreshold)); - return resp; -} -/** - * Actually link the end of path p1 to the beginning of path p2. - * \param p1 First path to link, - * \param revert1 whether p1 need to be reverted or not, - * \param p2 second path to link, - * \param revert2 whether p2 need to be reverted or not, - * \return the linked path. - */ -template <class TPath> -typename LinkPathListFilter<TPath> -::PathPointerType -LinkPathListFilter<TPath> -::LinkPath(PathPointerType p1, bool revert1, PathPointerType p2, bool revert2) -{ - PathPointerType resp = PathType::New(); - - VertexIteratorType it; - - if (revert1) - { - for (it = (p1->GetVertexList()->End()); it != p1->GetVertexList()->Begin(); ) - { - --it; - resp->AddVertex((it).Value()); - } - } - else - { - for (it = p1->GetVertexList()->Begin(); it != p1->GetVertexList()->End(); ++it) - { - resp->AddVertex((it).Value()); - } - } - - if (revert2) - { - for (it = (p2->GetVertexList()->End()); it != p2->GetVertexList()->Begin(); ) - { - --it; - resp->AddVertex((it).Value()); - } - } - else - { - for (it = p2->GetVertexList()->Begin(); it != p2->GetVertexList()->End(); ++it) - { - resp->AddVertex(it.Value()); - } - } - return resp; -} -/** - * PrintSelf Method - */ -template <class TPath> -void -LinkPathListFilter<TPath> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -} // End namespace otb -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.h b/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.h deleted file mode 100644 index 9406349db143cd333c4ad3359a4196c38667bde8..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbModulusAndDirectionImageToImageFilter_h -#define otbModulusAndDirectionImageToImageFilter_h - -#include "itkImageToImageFilter.h" - -namespace otb -{ - -/** \class ModulusAndDirectionImageToImageFilter - * - * \brief Base class for modulus and direction image filters. - * - * This is the base class for alls class' generate an image dulus and - * by using an modulus and a direction images intputs. - * SetInput() method set the modulus image input and - * SetInputDirection() set the image direction input. - * - * - * \ingroup OTBRoadExtraction - */ -template <class TInputImage, - class TInputImageDirection, - class TOutputImage> -class ITK_EXPORT ModulusAndDirectionImageToImageFilter : public itk::ImageToImageFilter<TInputImage, TOutputImage> -{ -public: - /** Extract dimensions as well of the images of entry of exit. */ - itkStaticConstMacro(InputImageDimension, - unsigned int, - TInputImage::ImageDimension); - itkStaticConstMacro(OutputImageDimension, - unsigned int, - TOutputImage::ImageDimension); - - /** typedef for the classes standards. */ - typedef ModulusAndDirectionImageToImageFilter Self; - typedef itk::ImageToImageFilter<TInputImage, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for management of the object factory. */ - itkNewMacro(Self); - - /** Return the name of the class. */ - itkTypeMacro(ModulusAndDirectionImageToImageFilter, itk::ImageToImageFilter); - - typedef typename Superclass::InputImageType InputImageType; - typedef TInputImageDirection InputImageDirectionType; - typedef typename Superclass::OutputImageType OutputImageType; - - /** Set/Get the image input of this process object. */ - using Superclass::SetInput; - void SetInput(const InputImageType *input) override; - virtual void SetInputDirection(const InputImageDirectionType *direction); - const InputImageType * GetInput(void); - const InputImageDirectionType * GetInputDirection(void); - -protected: - ModulusAndDirectionImageToImageFilter(); - ~ModulusAndDirectionImageToImageFilter() override {} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - ModulusAndDirectionImageToImageFilter(const Self &) = delete; - void operator =(const Self&) = delete; - -}; -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbModulusAndDirectionImageToImageFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.hxx b/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.hxx deleted file mode 100644 index 159b2b95d789e01d3d855e773007fa7ad30e51e1..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.hxx +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbModulusAndDirectionImageToImageFilter_hxx -#define otbModulusAndDirectionImageToImageFilter_hxx - -#include "otbModulusAndDirectionImageToImageFilter.h" -#include "itkProcessObject.h" - -namespace otb -{ - -/** - * - */ -template <class TInputImage, class TOutputImage, class TOutputImageDirection> -ModulusAndDirectionImageToImageFilter<TInputImage, TOutputImage, TOutputImageDirection>:: -ModulusAndDirectionImageToImageFilter() -{ - this->SetNumberOfRequiredInputs(2); - this->SetNumberOfRequiredInputs(2); - this->SetNumberOfRequiredOutputs(1); - this->SetNumberOfRequiredOutputs(1); - - this->SetNthOutput(0, OutputImageType::New()); -} - -template <class TInputImage, class TInputImageDirection, class TOutputImage> -void -ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>:: -SetInput(const InputImageType *input) -{ - // Process object is not const-correct so the const_cast is required here - this->itk::ProcessObject::SetNthInput(0, - const_cast<InputImageType *>(input)); -} - -template <class TInputImage, class TInputImageDirection, class TOutputImage> -void -ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>:: -SetInputDirection(const InputImageDirectionType *direction) -{ - // Process object is not const-correct so the const_cast is required here - this->itk::ProcessObject::SetNthInput(1, - const_cast<InputImageDirectionType *>(direction)); -} - -/** Return the input image modulus */ -template <class TInputImage, class TInputImageDirection, class TOutputImage> -const typename ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>::InputImageType * -ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>:: -GetInput(void) -{ - if (this->GetNumberOfInputs() < 1) - { - return nullptr; - } - - return static_cast<const TInputImage *> - (this->itk::ProcessObject::GetInput(0)); -} - -/** Return the intput image direction */ -template <class TInputImage, class TInputImageDirection, class TOutputImage> -const typename ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, - TOutputImage>::InputImageDirectionType * -ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>:: -GetInputDirection(void) -{ - if (this->GetNumberOfInputs() < 2) - { - return nullptr; - } - - return static_cast<const TInputImageDirection *> - (this->itk::ProcessObject::GetInput(1)); - -} - -/** - * Standard "PrintSelf" method - */ -template <class TInputImage, class TInputImageDirection, class TOutputImage> -void -ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>:: -PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - -} - -} // end namespace otb - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.h b/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.h deleted file mode 100644 index b5f2ccb57daa26d30ec5aa8ab1137b312f3e8db6..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNeighborhoodScalarProductFilter_h -#define otbNeighborhoodScalarProductFilter_h - -#include "otbImageToModulusAndDirectionImageFilter.h" - -namespace otb -{ -/** \class NeighborhoodScalarProductFilter - * \brief This filter is designed to be part of a pipeline aiming at linear feature extraction, such as roads. - * - * This filter takes as input a two-band image resulting from a gradient operator. The first channel contains - * the gradient value in the first image direction, the second contains the gradient value in the second image direction. - * - * Assuming that the linear feature we want to detect is darker than its surrounding environnement, we can deduce that - * the gradient direction will be opposite on each side of the road. Therefore, we compute for each pixel to compute the scalar - * product of the gradient vector for each opposite pixels in the neighborhood of radius 1 of the pixel to compute. - * - * The lower negativ scalar product value along these four pairs of pixel gives us the direction in which there is most - * likely a linear feature. - * - * This filters has two outputs : - * - The first output (from the GetOutput() method) gives the modulus of the lower negativ scalar product value for this pixel. - * - The second output (from the GetOutputDirection() method) gives the direction in radian of this linear feature. - * - * Please note that there are only 8 possible values for the direction image, corresponding to two directions for each pair of opposite - * pixels. In our conventions, negatives angle values represent opposite gradient vectors, whereas positive angle values represent convergent - * gradient vectors. - * \ingroup Streamed - * \ingroup Threaded - * - * \ingroup OTBRoadExtraction - */ -template <class TInputImage, class TOutputModulus, class TOutputDirection> -class ITK_EXPORT NeighborhoodScalarProductFilter - : public ImageToModulusAndDirectionImageFilter<TInputImage, TOutputModulus, TOutputDirection> -{ -public: - /** Standard typedefs */ - typedef NeighborhoodScalarProductFilter Self; - typedef ImageToModulusAndDirectionImageFilter<TInputImage, TOutputModulus, TOutputDirection> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(NeighborhoodScalarProductFilter, ImageToModulusAndDirectionImageFilter); - - /** Template parameters typedefs */ - typedef TInputImage InputImageType; - typedef typename InputImageType::ConstPointer InputImageConstPointerType; - typedef typename InputImageType::PixelType InputPixelType; - typedef TOutputModulus OutputModulusType; - typedef typename OutputModulusType::Pointer OutputModulusPointerType; - typedef typename OutputModulusType::RegionType RegionType; - typedef typename OutputModulusType::SizeType SizeType; - typedef typename OutputModulusType::IndexType IndexType; - typedef TOutputDirection OutputDirectionType; - typedef typename OutputDirectionType::Pointer OutputDirectionPointerType; - typedef typename OutputDirectionType::RegionType OutputImageRegionType; - -protected: - /** Constructor */ - NeighborhoodScalarProductFilter(); - /** Destructor */ - ~NeighborhoodScalarProductFilter() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** NeighborhoodScalarProductImageFilter can be implemented as a multithreaded filter. - * Therefore, this implementation provides a ThreadedGenerateData() routine - * which is called for each processing thread. The output image data is - * allocated automatically by the superclass prior to calling - * ThreadedGenerateData(). ThreadedGenerateData can only write to the - * portion of the output image specified by the parameter - * "outputRegionForThread" - * - * \sa ImageToImageFilter::ThreadedGenerateData(), - * ImageToImageFilter::GenerateData() */ - void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, - itk::ThreadIdType threadId) override; -private: - NeighborhoodScalarProductFilter(const Self &) = delete; - void operator =(const Self&) = delete; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbNeighborhoodScalarProductFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.hxx b/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.hxx deleted file mode 100644 index a2f66c9a02e6430f105d371e4ff41002f8b8beba..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.hxx +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNeighborhoodScalarProductFilter_hxx -#define otbNeighborhoodScalarProductFilter_hxx - -#include "otbNeighborhoodScalarProductFilter.h" -#include "itkImageRegionIterator.h" -#include "itkConstNeighborhoodIterator.h" -#include "itkNeighborhoodAlgorithm.h" -#include "itkProgressReporter.h" - -#include "otbMath.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TInputImage, class TOutputModulus, class TOutputDirection> -NeighborhoodScalarProductFilter<TInputImage, TOutputModulus, TOutputDirection> -::NeighborhoodScalarProductFilter() -{} - -template <class TInputImage, class TOutputModulus, class TOutputDirection> -void -NeighborhoodScalarProductFilter<TInputImage, TOutputModulus, TOutputDirection> -::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) -{ - // some typedefs - typedef itk::ConstNeighborhoodIterator<InputImageType> NeighborhoodIteratorType; - typedef typename NeighborhoodIteratorType::RadiusType RadiusType; - typedef typename NeighborhoodIteratorType::OffsetType OffsetType; - typedef itk::ImageRegionIterator<OutputModulusType> OutputIteratorType; - typedef itk::ImageRegionIterator<OutputDirectionType> OutputDirectionIteratorType; - typedef itk::NeighborhoodAlgorithm::ImageBoundaryFacesCalculator<InputImageType> BoundaryFacesCalculatorType; - typedef typename BoundaryFacesCalculatorType::FaceListType FaceListType; - typedef typename FaceListType::iterator FaceListIteratorType; - - // Pointers on inputs/outputs - InputImageType * inputPtr = const_cast<InputImageType *>(this->GetInput()); - OutputModulusPointerType outputPtr = this->GetOutput(); - OutputDirectionPointerType outputDirPtr = this->GetOutputDirection(); - - // Neighborhood radius - RadiusType r; - r.Fill(1); - - // Find the data-set boundary "faces" - BoundaryFacesCalculatorType bC; - FaceListType faceList = bC(inputPtr, outputRegionForThread, r); - FaceListIteratorType fit; - - // support progress methods/callbacks - itk::ProgressReporter progress(this, threadId, outputRegionForThread.GetNumberOfPixels()); - - // Process each of the boundary faces. These are N-d regions which border - // the edge of the buffer. - for (fit = faceList.begin(); fit != faceList.end(); ++fit) - { - NeighborhoodIteratorType neighInputIt(r, inputPtr, *fit); - OutputIteratorType outputIt(outputPtr, *fit); - OutputDirectionIteratorType outputDirIt(outputDirPtr, *fit); - neighInputIt.GoToBegin(); - outputIt.GoToBegin(); - outputDirIt.GoToBegin(); - - while ((!neighInputIt.IsAtEnd()) && (!outputIt.IsAtEnd()) && (!outputDirIt.IsAtEnd())) - { - // local variable initialization - int neighborhoodNumberMax = 0; - double scalarMaxValue = 0; - //TODO for a more general algorithm this might be replaced by: - //double scalarMaxValue = itk::NumericTraits<double>::NonpositiveMin(); - int flagPosNegDirection = 0; - - // walk through each case - for (int neighborhoodNumber = 0; neighborhoodNumber < 4; ++neighborhoodNumber) - { - double scalarCurrentValue = 0.0; - OffsetType offset1; - OffsetType offset2; - switch (neighborhoodNumber) - { - case 0: - offset1[0] = 1; - offset1[1] = -1; - offset2[0] = -1; - offset2[1] = 1; - break; - case 1: - offset1[0] = 1; - offset1[1] = 0; - offset2[0] = -1; - offset2[1] = 0; - break; - case 2: - offset1[0] = 1; - offset1[1] = 1; - offset2[0] = -1; - offset2[1] = -1; - break; - case 3: - offset1[0] = 0; - offset1[1] = 1; - offset2[0] = 0; - offset2[1] = -1; - break; - } - // Get the gradient values - InputPixelType pixel1 = neighInputIt.GetPixel(offset1); - InputPixelType pixel2 = neighInputIt.GetPixel(offset2); - - // Compute the scalar product - scalarCurrentValue = -(pixel1[0] * pixel2[0] + pixel1[1] * pixel2[1]); - - // If the value is higher than the current max value - if (scalarCurrentValue > scalarMaxValue) - { - // keep this configuration - scalarMaxValue = scalarCurrentValue; - neighborhoodNumberMax = neighborhoodNumber; - - // Also keep the direction - if (pixel1[0] < 0) - { - flagPosNegDirection = 1; - } - else - { - flagPosNegDirection = 0; - } - - } - } - // Compute the direction - double angle = static_cast<double>((1 + neighborhoodNumberMax)) * static_cast<double>(CONST_PI_4); - if (flagPosNegDirection) - { - angle -= CONST_PI; - } - - // Set the output values - outputIt.Set(scalarMaxValue); - outputDirIt.Set(angle); - ++neighInputIt; - ++outputIt; - ++outputDirIt; - progress.CompletedPixel(); - } - } -} -/** - * PrintSelf Method - */ -template <class TInputImage, class TOutputModulus, class TOutputDirection> -void -NeighborhoodScalarProductFilter<TInputImage, TOutputModulus, TOutputDirection> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbNonMaxRemovalByDirectionFilter.h b/Modules/Detection/RoadExtraction/include/otbNonMaxRemovalByDirectionFilter.h deleted file mode 100644 index 4e6d12cce270fde7ccf6d77c7be4c8e4b55b7ae4..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbNonMaxRemovalByDirectionFilter.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNonMaxRemovalByDirectionFilter_h -#define otbNonMaxRemovalByDirectionFilter_h - -#include "otbModulusAndDirectionImageToImageFilter.h" -#include "otbBinaryFunctorNeighborhoodImageFilter.h" - -#include "otbMath.h" - -namespace otb -{ -namespace Functor -{ -/** \class NonMaxRemovalByDirectionFunctor - * \brief This functor is used by the NonMaxRemovalByDirectionFilter - * \sa NonMaxRemovalByDirectionFilter - * \ingroup Functor - * - * \ingroup OTBRoadExtraction - */ -template <class TInput1, class TInput2, class TOutput> -class NonMaxRemovalByDirectionFunctor -{ -public: - NonMaxRemovalByDirectionFunctor() {} - virtual ~NonMaxRemovalByDirectionFunctor() {} - inline TOutput operator ()(const TInput1& itA, const TInput2& itB) - { - TOutput resp = 0; - if (itA.GetCenterPixel() != 0) - { - typename TInput1::OffsetType offset1, offset2; - offset1.Fill(0); - offset2.Fill(0); - int neighborhoodNumber; - if (itB.GetCenterPixel() > 0) - { - neighborhoodNumber = static_cast<int>(itB.GetCenterPixel() / (CONST_PI_4) -1); - } - else - { - neighborhoodNumber = static_cast<int>((itB.GetCenterPixel() + CONST_PI) / (CONST_PI_4) -1); - } - switch (neighborhoodNumber) - { - case 0: - offset1[0] = 1; - offset1[1] = -1; - offset2[0] = -1; - offset2[1] = 1; - break; - case 1: - offset1[0] = 1; - offset1[1] = 0; - offset2[0] = -1; - offset2[1] = 0; - break; - case 2: - offset1[0] = 1; - offset1[1] = 1; - offset2[0] = -1; - offset2[1] = -1; - break; - case 3: - offset1[0] = 0; - offset1[1] = 1; - offset2[0] = 0; - offset2[1] = -1; - break; - } - if ((itA.GetCenterPixel() > itA.GetPixel(offset1)) - && (itA.GetCenterPixel() > itA.GetPixel(offset2))) - { - resp = itA.GetCenterPixel(); - } - } - return resp; - } -}; -} -/** \class NonMaxRemovalByDirectionFilter - * \brief This filters removes (sets to null intensity) pixels which are not the maxima of the - * scalar product modulus value in the given direction. - * - * \ingroup Streamed - * \ingroup Threaded - * - * \ingroup OTBRoadExtraction - */ -template <class TInputModulus, class TInputDirection, class TOutputImage> -class ITK_EXPORT NonMaxRemovalByDirectionFilter - : public ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage> -{ -public: - /** Standard typedefs */ - typedef NonMaxRemovalByDirectionFilter Self; - typedef ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(NonMaxRemovalByDirectionFilter, ModulusAndDirectionImageToImageFilter); - - /** typedef of the computing filter (this allows us to derive from ModulusAndDirectionToImageFilter as well as - using the BinaryFunctorNeighBorhoodImageFilter, which is appropriate here */ - typedef Functor::NonMaxRemovalByDirectionFunctor< - typename itk::ConstNeighborhoodIterator<TInputModulus>, - typename itk::ConstNeighborhoodIterator<TInputDirection>, - typename TOutputImage::PixelType> FunctorType; - typedef otb::BinaryFunctorNeighborhoodImageFilter<TInputModulus, TInputDirection, TOutputImage, - FunctorType> ComputingFilterType; - -protected: - /** Constructor */ - NonMaxRemovalByDirectionFilter() {}; - /** Destructor */ - ~NonMaxRemovalByDirectionFilter() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override - { - Superclass::PrintSelf(os, indent); - } - /** Main computation method */ - void GenerateData(void) override - { - typename ComputingFilterType::Pointer filter = ComputingFilterType::New(); - filter->SetInput1(this->GetInput()); - filter->SetInput2(this->GetInputDirection()); - filter->GraftOutput(this->GetOutput()); - filter->Update(); - this->GraftOutput(filter->GetOutput()); - } - -private: - NonMaxRemovalByDirectionFilter(const Self &) = delete; - void operator =(const Self&) = delete; -}; -} // End namespace otb -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.h b/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.h deleted file mode 100644 index 3cabe035adffb2aca8f72e1c236dbe930767dcf5..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbParallelLinePathListFilter_h -#define otbParallelLinePathListFilter_h - -#include "otbPathListToPathListFilter.h" -#include "otbMacro.h" - -namespace otb -{ -/** \class ParallelLinePathListFilter - * \brief Detects parallel lines in imagery, the required input data are a PathList object. - * - * The class consists of three basic functions that determine the angle between two lines, - * the distance between the lines and the common part of the lines. First, all input lines - * are checked if there is a second line running in the same direction. Thereafter, all line - * pairs that already fulfilled the angular criterion are checked whether they are close to - * each other or not, i.e. the orthogonal distance between them is calculated. Finally, it - * has to be verified if the two lines have a common part since lines may fulfill the two - * first criteria but be located in different parts of the image. In order to adapt the - * detection algorithm to the user's needs, the thresholds AngularThreshold, DistanceThreshold - * and CommonDistanceThreshold can be set. - * - * A possible processing chain would be to extract lines with a line detector, to convert the - * result to PathList object (an ObjectList of PolyLineParametricPath), to link short line - * segments with the otbLinkPathListFilter to longer lines and to finally detect all parallel - * long lines. - * - * \sa LinkPathListFilter - * - * \ingroup PathFilters - * - * - * \ingroup OTBRoadExtraction - */ -template <class TPath> -class ITK_EXPORT ParallelLinePathListFilter - : public PathListToPathListFilter<TPath> -{ -public: - /** Standard typedefs */ - typedef ParallelLinePathListFilter Self; - typedef PathListToPathListFilter<TPath> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(ParallelLinePathListFilter, PathListToPathListFilter); - - /** Template parameters typedefs */ - typedef typename Superclass::PathType PathType; - typedef typename Superclass::PathListType PathListType; - typedef typename Superclass::PathPointerType PathPointerType; - typedef typename PathListType::Pointer PathListPointerType; - typedef typename PathListType::ConstIterator IteratorType; - typedef typename PathType::VertexType VertexType; - typedef typename PathType::VertexListType VertexListType; - typedef typename VertexListType::ConstIterator VertexIteratorType; - typedef double RealType; - - itkSetMacro(AngularThreshold, RealType); - itkGetMacro(AngularThreshold, RealType); - itkSetMacro(DistanceThreshold, RealType); - itkGetMacro(DistanceThreshold, RealType); - itkSetMacro(CommonDistanceThreshold, RealType); - itkGetMacro(CommonDistanceThreshold, RealType); - -protected: - /** Constructor */ - ParallelLinePathListFilter(); - /** Destructor */ - ~ParallelLinePathListFilter() override {} - /** GenerateData method */ - void GenerateData() override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - - /** - * Verify the angular condition to find parallel lines. - * This function verifies if two lines are parallel by - * computing the angle in relation to the y-axis. - * First line segment: v1 is the first vertex, v2 the second one - * (not necessarily the path ending). - * Second line segment: v3 is the first vertex, v4 the second one - * (not necessarily the path ending). - * Return true if the condition is verified. - * - * This is the first criteria to be fulfilled. - **/ - bool VerifyAngularCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4); - - /** - * Verify the maximum distance condition to find parallel lines. - * The orthogonal distance between two parallel lines is calculated. - * First line segment: v1 is the first vertex, v2 the second one - * (not necessarily the path ending). - * Second line segment: v3 is the first vertex, v4 the second one - * (not necessarily the path ending). - * Return true if the condition is verified. - * - * This is the second criteria to be fulfilled. - **/ - bool VerifyMaxDistanceCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4); - - /** - * Verify the common distance condition to find parallel lines. - * The overlapping part of the parallel lines is computed. In case - * no overlapping part exists or the value is below the specified - * threshold, false is returned. - * First line segment: v1 is the first vertex, v2 the second one - * (not necessarily the path ending). - * Second line segment: v3 is the first vertex, v4 the second one - * (not necessarily the path ending). - * Return true if the condition is verified. - * - * This is the third criteria to be fulfilled. - **/ - bool VerifyCommonDistanceCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4); - - /** - * Write the first parallel path. - * p1: First parallel path (line segment), - */ - PathPointerType WriteParallelPath(PathPointerType p1); - -private: - ParallelLinePathListFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - RealType m_AngularThreshold; - RealType m_DistanceThreshold; - RealType m_CommonDistanceThreshold; - -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbParallelLinePathListFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.hxx b/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.hxx deleted file mode 100644 index 44eb3c082fa64a768954134cb6fa251f40f6e99f..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.hxx +++ /dev/null @@ -1,536 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbParallelLinePathListFilter_hxx -#define otbParallelLinePathListFilter_hxx - -#include "otbParallelLinePathListFilter.h" -#include "otbMath.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TPath> -ParallelLinePathListFilter<TPath> -::ParallelLinePathListFilter() -{ - m_DistanceThreshold = 100.; - m_CommonDistanceThreshold = 10.; - m_AngularThreshold = 3.14; -} - -template <class TPath> -void -ParallelLinePathListFilter<TPath> -::GenerateData() -{ - // IO - const PathListType * inputPtr = this->GetInput(); - PathListType * outputPtr = this->GetOutput(); - - // Input iterator - IteratorType inputIt = inputPtr->Begin(); - - std::vector<bool> eraseFlagVector1; - std::vector<unsigned int> parallelLineIndex; - - // First we copy all input path to output - while (inputIt != inputPtr->End()) - { - // Write the next input path always to the - // last element of the list. This last element is - // newly created. - outputPtr->PushBack(inputIt.Get()); - - // If a new element is copied to the output vector, - // "false" is written to the corresponding index of - // the vector eraseFlagVector. - eraseFlagVector1.push_back(false); - - ++inputIt; - } - - unsigned int VectorSize = static_cast<unsigned int>(eraseFlagVector1.size()); - //std::cout<<" Number of Lines: "<< VectorSize <<std::endl; - - IteratorType outputIt1 = outputPtr->Begin(); - unsigned int index1 = 0; - unsigned int firstLineCounter = 0, parallelLineCounter = 0; - unsigned int commonDistCounter = 0, maxDistCounter = 0; - -// Iterate through all lines of the pathlist - while (firstLineCounter < VectorSize) - { - if (!eraseFlagVector1[index1]) - { - IteratorType outputIt2 = outputIt1; - ++outputIt2; - unsigned int index2 = index1 + 1; - - // Check if any of the following lines are parallel - while (outputIt2 != outputPtr->End()) - { - - if (!eraseFlagVector1[index2]) - { // Read the first and the last vertex of each line pair that is checked - VertexIteratorType vSourceIt = outputIt1.Get()->GetVertexList()->Begin(); - VertexType v1 = vSourceIt.Value(); - vSourceIt = outputIt1.Get()->GetVertexList()->End(); - --vSourceIt; - VertexType v2 = vSourceIt.Value(); - - VertexIteratorType vTargetIt = outputIt2.Get()->GetVertexList()->Begin(); - VertexType v3 = vTargetIt.Value(); - vTargetIt = outputIt2.Get()->GetVertexList()->End(); - --vTargetIt; - VertexType v4 = vTargetIt.Value(); - - // Check for parallel lines - if (VerifyAngularCondition(v1, v2, v3, v4)) - { - ++parallelLineCounter; - if (VerifyMaxDistanceCondition(v1, v2, v3, v4)) - { - ++maxDistCounter; - if (VerifyCommonDistanceCondition(v1, v2, v3, v4)) - { - ++commonDistCounter; - // Write index of first parallel path - parallelLineIndex.push_back(index1); - - // Write index of second parallel path - parallelLineIndex.push_back(index2); - } - } - } - } - - ++index2; - ++outputIt2; - } - } - - // mark the old path as erased - eraseFlagVector1[index1] = true; - ++firstLineCounter; - ++index1; - ++outputIt1; - } // end of for loop - - otbMsgDevMacro( << "Number of line pairs that pass the angular condition: " << parallelLineCounter ); - otbMsgDevMacro( << "Number of line pairs that pass the maximum distance condition: " << maxDistCounter ); - otbMsgDevMacro( << "Number of line pairs that pass the common distance condition: " << commonDistCounter ); - - // Write all parallel lines and set the non-erase flagg. - typename std::vector<unsigned int>::iterator lineIt1 = parallelLineIndex.begin(); - unsigned int sortLineIndex = 0; - while (lineIt1 != parallelLineIndex.end()) - { - IteratorType outputIt3 = outputPtr->Begin() + parallelLineIndex[sortLineIndex]; - - PathPointerType newPath1 = this->WriteParallelPath(outputIt3.Get()); - outputPtr->PushBack(newPath1); - // add a non-erase flag for the new path - eraseFlagVector1.push_back(false); - ++sortLineIndex; - otbMsgDevMacro( << "Number of lines written in the path list: " << sortLineIndex ); - ++lineIt1; - } - - // Search ended, now removing the erased path from the first line pointer - typename std::vector<bool>::reverse_iterator it1 = eraseFlagVector1.rbegin(); - index1 = eraseFlagVector1.size() - 1; - while (it1 != eraseFlagVector1.rend()) - { - if (eraseFlagVector1[index1]) - { - outputPtr->Erase(index1); - } - - --index1; - ++it1; - } - -} -/** - * Verify the angular condition to find parallel lines. - * This function verifies if two lines are parallel by - * computing the angle in relation to the y-axis. - * First line segment: v1 is the first vertex, v2 the second one - * (not necessarily the path ending). - * Second line segment: v3 is the first vertex, v4 the second one - * (not necessarily the path ending). - * Return true if the condition is verified. - * - * This is the first criteria to be fulfilled. - **/ -template <class TPath> -bool -ParallelLinePathListFilter<TPath> -::VerifyAngularCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4) -{ - double alpha1 = std::atan2((v2[1] - v1[1]), (v2[0] - v1[0])); - double alpha2 = std::atan2((v4[1] - v3[1]), (v4[0] - v3[0])); - - alpha1 = (alpha1 >= 0) ? alpha1 : (alpha1 + CONST_PI); - alpha2 = (alpha2 >= 0) ? alpha2 : (alpha2 + CONST_PI); - - // Return true if the angle between the two lines is smaller than - // the specified threshold. - bool angle = (std::abs(alpha1 - alpha2) < static_cast<double>(m_AngularThreshold)); - - return angle; -} - -/** - * Verify the maximum distance condition to find parallel lines. - * The orthogonal distance between two parallel lines is calculated. - * First line segment: v1 is the first vertex, v2 the second one - * (not necessarily the path ending). - * Second line segment: v3 is the first vertex, v4 the second one - * (not necessarily the path ending). - * Return true if the condition is verified. - * - * This is the second criteria to be fulfilled. - **/ -template <class TPath> -bool -ParallelLinePathListFilter<TPath> -::VerifyMaxDistanceCondition(VertexType v1, VertexType v2, VertexType v3, VertexType itkNotUsed(v4)) -{ - // Compute the direction vector of the first line - VertexType vectorDir12; - - vectorDir12[0] = v2[0] - v1[0]; - vectorDir12[1] = v2[1] - v1[1]; - - // Compute the orthogonal distance between the two parallel lines - // with equation d = |(v3 - v1)X(v2 - v1)|/|v2 - v1| - double distance = 0., denominator = 0., nominator = 0.; - denominator = std::abs((v3[0] - v1[0]) * vectorDir12[1] - (v3[1] - v1[1]) * vectorDir12[0]); - nominator = sqrt(pow(vectorDir12[0], 2) + pow(vectorDir12[1], 2)); - distance = denominator / nominator; - //std::cout<< "Distance between two parallel lines: " << distance <<std::endl; - - // Check if the orthogonal distance between the lines - // is beneath the chosen threshold. - bool dist = (distance <= static_cast<double>(m_DistanceThreshold)); - - return dist; -} - -/** - * Verify the common distance condition to find parallel lines. - * The overlapping part of the parallel lines is computed. In case - * no overlapping part exists or the value is below the specified - * threshold, false is returned. - * First line segment: v1 is the first vertex, v2 the second one - * (not necessarily the path ending). - * Second line segment: v3 is the first vertex, v4 the second one - * (not necessarily the path ending). - * Return true if the condition is verified. - * - * This is the third criteria to be fulfilled. - **/ -template <class TPath> -bool -ParallelLinePathListFilter<TPath> -::VerifyCommonDistanceCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4) -{ -// Compute the length of each line - double length12 = 0.; - // double length34 = 0.; - length12 = sqrt(pow((v2[0] - v1[0]), 2) + pow((v2[1] - v1[1]), 2)); - //length34 = sqrt(pow((v4[0] - v3[0]), 2) + pow((v4[1] - v3[1]), 2)); - - // Set v1[0] to zero and align the y-axis of - // the new coordinate system with line one (v1 and v2). - // Compute the coordinates of the first and of the - // second line in the new coordinate system. - VertexType tempv1, tempv2, tempv3, tempv4; - - //Initialization - tempv1.Fill(0.); - tempv2.Fill(0.); - tempv3.Fill(0.); - tempv4.Fill(0.); - - if (v1[1] == v2[1]) - { - if (v1[0] < v2[0]) - { - tempv1[0] = 0., tempv1[1] = 0.; - tempv2[0] = 0., tempv2[1] = length12; - tempv3[0] = v3[0] - v1[0], tempv3[1] = v3[1] - v1[1]; - tempv4[0] = v4[0] - v1[0], tempv4[1] = v4[1] - v1[1]; - } - else - { - tempv2[0] = 0., tempv2[1] = 0.; - tempv1[0] = 0., tempv1[1] = length12; - tempv3[0] = v3[0] - v2[0], tempv3[1] = v3[1] - v2[1]; - tempv4[0] = v4[0] - v2[0], tempv4[1] = v4[1] - v2[1]; - } - } - // Check the direction of the line (vector). - // The origin of the new coordinate system is - // set to the smaller of the two vertices. - // Then, a rotation and translation of the vertices - // of the second line (v3 and v4) to the new coordinate - // system is performed. - - VertexType temptransv3, temptransv4; - - if (v1[1] < v2[1]) - { - if (v1[0] == v2[0]) - { - tempv1[0] = 0., tempv1[1] = 0.; - tempv2[0] = 0., tempv2[1] = length12; - tempv3[0] = v3[0] - v1[0], tempv3[1] = v3[1] - v1[1]; - tempv4[0] = v4[0] - v1[0], tempv4[1] = v4[1] - v1[1]; - } - - else - { - // Coordinates of the first line in the new coordinate system - tempv1[0] = 0.; - tempv1[1] = 0.; - tempv2[0] = 0.; - tempv2[1] = length12; - - // Rotate the system clockwise - double sinealpha; - if (v2[0] > v1[0]) - { - sinealpha = (v2[0] - v1[0]) / length12; - } - else - { - sinealpha = (v1[0] - v2[0]) / length12; - } - double alpha1 = std::asin(sinealpha); - - // Translation - temptransv3[0] = v3[0] - v1[0]; - temptransv3[1] = v3[1] - v1[1]; - temptransv4[0] = v4[0] - v1[0]; - temptransv4[1] = v4[1] - v1[1]; - - // Rotation - tempv3[0] = temptransv3[0] * cos(alpha1) + temptransv3[1] * sin(alpha1); - tempv3[1] = temptransv3[1] * cos(alpha1) - temptransv3[0] * sin(alpha1); - tempv4[0] = temptransv4[0] * cos(alpha1) + temptransv4[1] * sin(alpha1); - tempv4[1] = temptransv4[1] * cos(alpha1) - temptransv4[0] * sin(alpha1); - - otbMsgDevMacro(<< "tempv1[0], tempv1[1], tempv2[0], tempv2[1]: " ); - otbMsgDevMacro(<< tempv1[0] << ", " << tempv1[1] << ", " << tempv2[0] << ", " << tempv2[1] ); - otbMsgDevMacro(<< "Alpha: " << alpha1 ); - otbMsgDevMacro(<< "tempv3[0], tempv3[1], tempv4[0], tempv4[1]: " - << tempv3[0] << ", " << tempv3[1] << ", " - << tempv4[0] << ", " << tempv4[1] ); - otbMsgDevMacro(<< "Calculated length of the second line: " - << sqrt(pow((tempv4[0] - tempv3[0]), 2) + pow((tempv4[1] - tempv3[1]), 2)) ); - otbMsgDevMacro(<< "Original length of line 1: " << length12 ); - } - } - - if (v2[1] < v1[1]) - { - - if (v1[0] == v2[0]) - { - tempv2[0] = 0., tempv2[1] = 0.; - tempv1[0] = 0., tempv1[1] = length12; - tempv3[0] = v3[0] - v2[0], tempv3[1] = v3[1] - v2[1]; - tempv4[0] = v4[0] - v2[0], tempv4[1] = v4[1] - v2[1]; - } - else - { - tempv1[0] = 0.; - tempv1[1] = 0.; - tempv2[0] = 0.; - tempv2[1] = length12; - - // Rotate the system clockwise - double sinealpha; - if (v2[0] > v1[0]) - { - sinealpha = (v2[0] - v1[0]) / length12; - } - else - { - sinealpha = (v1[0] - v2[0]) / length12; - } - - double alpha1 = std::asin(sinealpha); - - // Translation - temptransv3[0] = v3[0] - v2[0]; - temptransv3[1] = v3[1] - v2[1]; - temptransv4[0] = v4[0] - v2[0]; - temptransv4[1] = v4[1] - v2[1]; - - // Rotation - tempv3[0] = temptransv3[0] * cos(alpha1) + temptransv3[1] * sin(alpha1); - tempv3[1] = temptransv3[1] * cos(alpha1) - temptransv3[0] * sin(alpha1); - tempv4[0] = temptransv4[0] * cos(alpha1) + temptransv4[1] * sin(alpha1); - tempv4[1] = temptransv4[1] * cos(alpha1) - temptransv4[0] * sin(alpha1); - - otbMsgDevMacro( << "tempv1[0], tempv1[1], tempv2[0], tempv2[1]: " ); - otbMsgDevMacro( << tempv1[0] << ", " << tempv1[1] << ", " << tempv2[0] << ", " << tempv2[1] ); - otbMsgDevMacro( << "Alpha: " << alpha1 ); - otbMsgDevMacro( << "tempv3[0], tempv3[1], tempv4[0], tempv4[1]: " - << tempv3[0] << ", " << tempv3[1] << ", " << tempv4[0] << ", " << tempv4[1] ); - otbMsgDevMacro( << "Calculated length of the second line: " - << sqrt(pow((tempv4[0] - tempv3[0]), 2) + pow((tempv4[1] - tempv3[1]), 2)) ); - otbMsgDevMacro( << "Original length of line 1: " << length12 ); - } - } - - // Compute the length of the overlapping part - // of the two lines. This is done by simply - // comparing the y-values of the lines (remember - // that both lines are parallel and also parallel - // to the new y-axis). - double commonDist = 0.; - - if (tempv3[1] >= tempv4[1]) - { - if (tempv3[1] >= 0 && tempv3[1] <= tempv2[1]) - { - if (tempv4[1] >= 0) - { - commonDist = std::abs(tempv4[1] - tempv3[1]); - } - - else if (tempv4[1] < 0) - { - commonDist = tempv3[1]; - } - } - else if (tempv3[1] >= 0 && tempv3[1] >= tempv2[1]) - { - if (tempv4[1] >= 0) - { - commonDist = tempv2[1] - tempv4[1]; - } - - else if (tempv4[1] < 0) - { - commonDist = tempv2[1]; - } - - } - else if (tempv4[1] >= tempv2[1]) - { // No overlapping parts exist. The (negative) distance - // between the two closest endpoints is calculated. - commonDist = -std::abs(tempv4[1] - tempv2[1]); - } - else if (tempv3[1] < 0) - { // No overlapping parts exist. The (negative) distance - // between the two closest endpoints is calculated. - commonDist = tempv3[1]; - } - } - - else - { - if (tempv4[1] >= 0 && tempv4[1] <= tempv2[1]) - { - if (tempv3[1] >= 0) - { - commonDist = std::abs(tempv3[1] - tempv4[1]); - } - - else if (tempv3[1] < 0) - { - commonDist = tempv4[1]; - } - } - else if (tempv4[1] >= 0 && tempv4[1] >= tempv2[1]) - { - if (tempv3[1] >= 0) - { - commonDist = tempv2[1] - tempv3[1]; - } - - else if (tempv3[1] < 0) - { - commonDist = tempv2[1]; - } - - } - else if (tempv3[1] >= tempv2[1]) - { // No overlapping parts exist. The (negative) distance - // between the two closest endpoints is calculated. - commonDist = -std::abs(tempv3[1] - tempv2[1]); - } - else if (tempv4[1] < 0) - { // No overlapping parts exist. The (negative) distance - // between the two closest endpoints is calculated. - commonDist = tempv4[1]; - } - } - // The common parallel parts of the two lines have to be greater than - // the provided threshold. - otbMsgDevMacro( << "Calculated common distance of the parallel lines: " << commonDist ); - bool common = (commonDist >= static_cast<double>(m_CommonDistanceThreshold)); - - return common; -} - -/** - * Write parallel line in a new path list. - * p1: First parallel path (line segment) - */ -template <class TPath> -typename ParallelLinePathListFilter<TPath> -::PathPointerType -ParallelLinePathListFilter<TPath> -::WriteParallelPath(PathPointerType p1) -{ - PathPointerType resp = PathType::New(); - - VertexIteratorType it; - - for (it = p1->GetVertexList()->Begin(); it != p1->GetVertexList()->End(); ++it) - { - resp->AddVertex((it).Value()); - } - - return resp; -} - -/** - * PrintSelf Method - */ -template <class TPath> -void -ParallelLinePathListFilter<TPath> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -} // End namespace otb -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbRemoveIsolatedByDirectionFilter.h b/Modules/Detection/RoadExtraction/include/otbRemoveIsolatedByDirectionFilter.h deleted file mode 100644 index cc60ea4b97a1a93fbf256effb390d614bb4e7a82..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbRemoveIsolatedByDirectionFilter.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRemoveIsolatedByDirectionFilter_h -#define otbRemoveIsolatedByDirectionFilter_h - -#include "otbModulusAndDirectionImageToImageFilter.h" -#include "otbBinaryFunctorNeighborhoodImageFilter.h" - -namespace otb -{ -namespace Functor -{ -/** \class RemoveIsolatedByDirectionFunctor - * \brief Binary neighborhood functor to remove isolated pixels by direction. - * Used by the RemoveIsolatedByDirectionFilter. - * \sa RemoveIsolatedByDirectionFilter - * \ingroup Functor - * - * \ingroup OTBRoadExtraction - */ -template <class TInput1, class TInput2, class TOutput> -class RemoveIsolatedByDirectionFunctor -{ -public: - RemoveIsolatedByDirectionFunctor() {} - virtual ~RemoveIsolatedByDirectionFunctor() {} - inline TOutput operator ()(const TInput1& itA, const TInput2& itB) - { - double currentDirection = itB.GetCenterPixel(); - int nEqualNeighbors = 0; - for (int neighborhoodIndex = 0; neighborhoodIndex < 9; ++neighborhoodIndex) - { - if (itB.GetPixel(neighborhoodIndex) == currentDirection) - { - ++nEqualNeighbors; - } - } - if (nEqualNeighbors <= 1) - { - //should never be 0 as it is at least equal to itself - return 0; - } - else - { - return static_cast<TOutput>(itA.GetCenterPixel()); - } - } -}; -} -/** \class RemoveIsolatedByDirectionFilter - * \brief This filter removes (sets to null intensity) pixels isolated by direction. - * - * For a given pixel, the filter walk through its neighborhood in direction image, counting pixels having - * the same direction as the center pixel. If there is no such a pixel, the center pixel is considered to be - * isolated in direction, and thus will be removed (set to 0). If the pixel is not isolated in direction, the output - * value is the value of the pixel in the modulus image. - * Of course this filter requires the direction to be discrete, in order to be able to count the directions. - * - * \ingroup Streamed - * \ingroup Threaded - * - * \ingroup OTBRoadExtraction - */ -template <class TInputModulus, class TInputDirection, class TOutputImage> -class ITK_EXPORT RemoveIsolatedByDirectionFilter - : public ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage> -{ -public: - /** Standard typedefs */ - typedef RemoveIsolatedByDirectionFilter Self; - typedef ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(RemoveIsolatedByDirectionFilter, ModulusAndDirectionImageToImageFilter); - - /** typedef of the computing filter (this allows us to derive from ModulusAndDirectionToImageFilter as well as - using the BinaryFunctorNeighBorhoodImageFilter, which is appropriate here */ - typedef Functor::RemoveIsolatedByDirectionFunctor< - typename itk::ConstNeighborhoodIterator<TInputModulus>, - typename itk::ConstNeighborhoodIterator<TInputDirection>, - typename TOutputImage::PixelType> FunctorType; - typedef otb::BinaryFunctorNeighborhoodImageFilter<TInputModulus, TInputDirection, TOutputImage, - FunctorType> ComputingFilterType; - -protected: - /** Constructor */ - RemoveIsolatedByDirectionFilter() {}; - /** Destructor */ - ~RemoveIsolatedByDirectionFilter() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override - { - Superclass::PrintSelf(os, indent); - } - /** Main computation method */ - void GenerateData(void) override - { - typename ComputingFilterType::Pointer filter = ComputingFilterType::New(); - filter->SetInput1(this->GetInput()); - filter->SetInput2(this->GetInputDirection()); - filter->GraftOutput(this->GetOutput()); - filter->Update(); - this->GraftOutput(filter->GetOutput()); - } - -private: - RemoveIsolatedByDirectionFilter(const Self &) = delete; - void operator =(const Self&) = delete; -}; -} // End namespace otb -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbRemoveTortuousPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbRemoveTortuousPathListFilter.h deleted file mode 100644 index abe69a7b58a8664696e69c5832a6e05102085dea..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbRemoveTortuousPathListFilter.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRemoveTortuousPathListFilter_h -#define otbRemoveTortuousPathListFilter_h - -#include "otbUnaryFunctorObjectListBooleanFilter.h" -#include "otbPathMeanDistanceFunctor.h" -#include "otbObjectList.h" - -namespace otb -{ -/** \class RemoveTortuousPathListFilter - * \brief This filter remove path considered as tortuous. - * - * A path is considered to be tortuous if the mean distance between each consecutive vertices - * is strictly lower than the user provided threshold. - * - * This class is just a shortcut to the UnaryFunctorObjectListBooleanFilter with - * the PathMeanDistanceFunctor. - * - *<b>Recent API changes:</b> - * Now part of the UnaryFunctorObjectListBooleanFilter hierarchy, replace call to SetMeanDistanceThreshold() - * by GetFunctor().SetThreshold(). - * - * The inequality is now a strict one. - * - * \sa BreakAngularPathListFilter - * \sa SimplifyPathFilter - * \sa UnaryFunctorObjectListBooleanFilter - * \sa PathMeanDistanceFunctor - * - * \example FeatureExtraction/ExtractRoadByStepsExample.cxx - * - * - * \ingroup OTBRoadExtraction - */ - -// template <class TPath> -template <class TPath> -class ITK_EXPORT RemoveTortuousPathListFilter : - public UnaryFunctorObjectListBooleanFilter< - ObjectList<TPath>, - ObjectList<TPath>, - PathMeanDistanceFunctor<typename TPath::Pointer> > -{}; - -} // End namespace otb - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbRemoveWrongDirectionFilter.h b/Modules/Detection/RoadExtraction/include/otbRemoveWrongDirectionFilter.h deleted file mode 100644 index b0d4fffb991f383be9bbec4f9a51c187e16ab0c6..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbRemoveWrongDirectionFilter.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRemoveWrongDirectionFilter_h -#define otbRemoveWrongDirectionFilter_h - -#include "otbModulusAndDirectionImageToImageFilter.h" -#include "itkBinaryFunctorImageFilter.h" -#include "otbMath.h" - -namespace otb -{ -namespace Functor -{ -/** \class RemoveWrongDirectionFunctor - * \brief This functor is used by the RemoveWrongDirectionFilter - * - * \sa RemoveWrongDirectionFilter - * \ingroup Functor - * - * \example FeatureExtraction/ExtractRoadByStepsExample.cxx - * - * - * \ingroup OTBRoadExtraction - */ -template <class TInput1, class TInput2, class TOutput> -class RemoveWrongDirectionFunctor -{ -public: - RemoveWrongDirectionFunctor() {} - virtual ~RemoveWrongDirectionFunctor() {} - inline TOutput operator ()(const TInput1& A, const TInput2& B) - { - if (B < CONST_PI_8) - { - return 0; - } - else - { - return A; - } - } -}; -} -/** \class RemoveWrongDirectionFilter - * \brief This filter removes (sets to null intensity) pixels with wrong direction. - * - * This filter is part of the road extraction framework. By using the Spectral Angle filter, - * we can assume that the direction of a road on our scalar product image is positive (greater - * than \f$ \pi/8 \f$). - * Therefore in the input modulus and direction images, pixels whose direction is lower than - * this threshold are suppressed - * (in fact, their intensity is set to 0). - * - * \sa NeighborhoodScalarProductFilter - * \ingroup Streamed - * \ingroup Threaded - * - * \ingroup OTBRoadExtraction - */ -template <class TInputModulus, class TInputDirection, class TOutputImage> -class ITK_EXPORT RemoveWrongDirectionFilter - : public ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage> -{ -public: - /** Standard typedefs */ - typedef RemoveWrongDirectionFilter Self; - typedef ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(RemoveWrongDirectionFilter, ModulusAndDirectionImageToImageFilter); - - /** typedef of the computing filter (this allows us to derive from ModulusAndDirectionToImageFilter as well as - using the BinaryFunctorImageFilter, which is appropriate here */ - typedef Functor::RemoveWrongDirectionFunctor< - typename TInputModulus::PixelType, - typename TInputDirection::PixelType, - typename TOutputImage::PixelType> FunctorType; - typedef itk::BinaryFunctorImageFilter<TInputModulus, TInputDirection, TOutputImage, FunctorType> ComputingFilterType; - -protected: - /** Constructor */ - RemoveWrongDirectionFilter() {}; - /** Destructor */ - ~RemoveWrongDirectionFilter() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override - { - Superclass::PrintSelf(os, indent); - } - /** Main computation method */ - void GenerateData(void) override - { - typename ComputingFilterType::Pointer filter = ComputingFilterType::New(); - filter->SetInput1(this->GetInput()); - filter->SetInput2(this->GetInputDirection()); - filter->GraftOutput(this->GetOutput()); - filter->Update(); - this->GraftOutput(filter->GetOutput()); - } - -private: - RemoveWrongDirectionFilter(const Self &) = delete; - void operator =(const Self&) = delete; -}; -} // End namespace otb -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.h b/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.h deleted file mode 100644 index 77c19f0ca336f0300b9d1349bed6951d2608467a..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRoadExtractionFilter_h -#define otbRoadExtractionFilter_h - - -#include "otbSpectralAngleDistanceImageFilter.h" -#include "otbGenericRoadExtractionFilter.h" - -namespace otb -{ -/** - * \class RoadExtractionFilter - * \brief This class performs the extraction of roads from an image. - * - * This composite filter implements a fast and robust road extraction - * for high resolution satellite images. This is a composite filter using the - * SpectralAngleDistanceImageFilter and the GenericRoadExtractionFilter and is - * intended to be used with optical high resolution data. The full method is - * described in E. Christophe and J. Inglada, "Robust Road Extraction for High - * Resolution Satellite Images," in IEEE International Conference on - * Image Processing, ICIP 2007. - * - * The algorithm uses all spectral - * bands based on the spectral angle with a reference pixel. Then, the line - * detection is done using a Gaussian gradient with a scalar product to find - * the road directions. Finally, extracted roads are vectorized and - * processed to improve the results removing some occultations and false - * detections. - * - * This filter is fast, as the detection typically takes 3 seconds for a - * 1000 \f$ \times \f$ 1000 images with four spectral bands. Results can be - * used as an initialization for more complex algorithms. - * - * \sa SpectralAngleDistanceImageFilter - * \sa GenericRoadExtractionFilter - * - * \example FeatureExtraction/ExtractRoadExample.cxx - * - * - * \ingroup OTBRoadExtraction - */ -template <class TInputImage, class TOutputPath> -class ITK_EXPORT RoadExtractionFilter - : public ImageToPathListFilter<TInputImage, TOutputPath> -{ -public: - /** Standard typedefs */ - typedef RoadExtractionFilter Self; - typedef ImageToPathListFilter<TInputImage, TOutputPath> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Creation through object factory macro */ - itkNewMacro(Self); - /** Type macro */ - itkTypeMacro(RoadExtractionFilter, ImageToPathListFilter); - /** Template parameters typedefs */ - typedef typename Superclass::InputImageType InputImageType; - typedef typename Superclass::OutputPathType OutputPathType; - typedef typename Superclass::OutputPathListType OutputPathListType; - typedef typename InputImageType::PixelType InputPixelType; - typedef double InternalPixelType; - - typedef otb::VectorImage<InternalPixelType, InputImageType::ImageDimension> VectorImageType; - typedef otb::Image<InternalPixelType, InputImageType::ImageDimension> SpectralAngleType; - typedef otb::Image<InternalPixelType, InputImageType::ImageDimension> ModulusType; - typedef otb::Image<InternalPixelType, InputImageType::ImageDimension> DirectionType; - - typedef itk::CovariantVector<InternalPixelType, InputImageType::ImageDimension> - VectorPixelType; - typedef otb::Image<VectorPixelType, InputImageType::ImageDimension> CovariantVectorImageType; - - /* Template parameters typedefs for composites filters */ - typedef SpectralAngleDistanceImageFilter< - InputImageType, - SpectralAngleType> SpectralAngleDistanceImageFilterType; - - typedef GenericRoadExtractionFilter<SpectralAngleType, OutputPathType> - GenericRoadExtractionFilterType; - - /** Template parameters typedefs for internals filters */ - typedef typename GenericRoadExtractionFilterType::SigmaType SigmaType; - typedef typename GenericRoadExtractionFilterType::AmplitudeThresholdType AmplitudeThresholdType; - typedef typename GenericRoadExtractionFilterType::ToleranceType ToleranceType; - typedef typename GenericRoadExtractionFilterType::MaxAngleType MaxAngleType; - typedef typename GenericRoadExtractionFilterType::MeanDistanceThresholdType MeanDistanceThresholdType; - typedef typename GenericRoadExtractionFilterType::LinkRealType LinkRealType; - - /** Get/Set the reference pixel (use by the SpectralAngleDistanceImageFilter)*/ - otbGetObjectMemberConstReferenceMacro(SpectralAngleDistanceImageFilter, ReferencePixel, InputPixelType); - otbSetObjectMemberMacro(SpectralAngleDistanceImageFilter, ReferencePixel, InputPixelType); - - /** Get/Set the alpha value */ - otbGetObjectMemberConstReferenceMacro(GenericRoadExtractionFilter, Alpha, double); - otbSetObjectMemberMacro(GenericRoadExtractionFilter, Alpha, double); - - /** Get/Set the amplitude threshold to start following a path (use by the VectorizationPathListFilter)*/ - otbSetObjectMemberMacro(GenericRoadExtractionFilter, AmplitudeThreshold, AmplitudeThresholdType); - otbGetObjectMemberMacro(GenericRoadExtractionFilter, AmplitudeThreshold, AmplitudeThresholdType); - - /** Get/Set the tolerance for segment consistency (tolerance in terms of distance) (use by the SimplifyPathListFilter)*/ - otbGetObjectMemberMacro(GenericRoadExtractionFilter, Tolerance, ToleranceType); - otbSetObjectMemberMacro(GenericRoadExtractionFilter, Tolerance, ToleranceType); - - /** Set/Get the max angle (use bye the BreakAngularPathListFilter)*/ - otbSetObjectMemberMacro(GenericRoadExtractionFilter, MaxAngle, MaxAngleType); - otbGetObjectMemberConstMacro(GenericRoadExtractionFilter, MaxAngle, MaxAngleType); - - /** Get/Set the tolerance for segment consistency (tolerance in terms of distance) (use by RemoveTortuousPathListFilter)*/ - otbGetObjectMemberMacro(GenericRoadExtractionFilter, FirstMeanDistanceThreshold, MeanDistanceThresholdType); - otbSetObjectMemberMacro(GenericRoadExtractionFilter, FirstMeanDistanceThreshold, MeanDistanceThresholdType); - otbGetObjectMemberMacro(GenericRoadExtractionFilter, SecondMeanDistanceThreshold, MeanDistanceThresholdType); - otbSetObjectMemberMacro(GenericRoadExtractionFilter, SecondMeanDistanceThreshold, MeanDistanceThresholdType); - - /** Get/Set the angular threshold (use by LinkPathFilter)*/ - otbSetObjectMemberMacro(GenericRoadExtractionFilter, AngularThreshold, LinkRealType); - otbGetObjectMemberMacro(GenericRoadExtractionFilter, AngularThreshold, LinkRealType); - /** Get/Set the distance threshold (use by LinkPathFilter)*/ - otbSetObjectMemberMacro(GenericRoadExtractionFilter, DistanceThreshold, LinkRealType); - otbGetObjectMemberMacro(GenericRoadExtractionFilter, DistanceThreshold, LinkRealType); - -protected: - /** Constructor */ - RoadExtractionFilter(); - /** Destructor */ - ~RoadExtractionFilter() override {} - - /** Prepare main computation method */ - void BeforeGenerateData(void); - - /** Main computation method */ - void GenerateData(void) override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - - RoadExtractionFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - /** SpectralAngleDistanceImageFilter use by the composite filter */ - typename SpectralAngleDistanceImageFilterType::Pointer m_SpectralAngleDistanceImageFilter; - typename GenericRoadExtractionFilterType::Pointer m_GenericRoadExtractionFilter; - -}; - -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRoadExtractionFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.hxx b/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.hxx deleted file mode 100644 index 67ee3a9fbbc7bce8f6aa09f2a87f88995a9e1613..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.hxx +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRoadExtractionFilter_hxx -#define otbRoadExtractionFilter_hxx - -#include "otbRoadExtractionFilter.h" -#include "otbMath.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TInputImage, class TOutputPath> -RoadExtractionFilter<TInputImage, TOutputPath> -::RoadExtractionFilter() -{ - this->SetNumberOfRequiredInputs(1); - this->SetNumberOfRequiredOutputs(1); - - m_SpectralAngleDistanceImageFilter = SpectralAngleDistanceImageFilterType::New(); - m_GenericRoadExtractionFilter = GenericRoadExtractionFilterType::New(); - -} - -/** - * Main computation method - */ -template <class TInputImage, class TOutputPath> -void -RoadExtractionFilter<TInputImage, TOutputPath> -::GenerateData() -{ - // Input images pointers - typename InputImageType::ConstPointer inputImage = this->GetInput(); - typename OutputPathListType::Pointer outputPathList = this->GetOutput(); - - m_SpectralAngleDistanceImageFilter->SetInput(inputImage); - - m_GenericRoadExtractionFilter->SetInput(m_SpectralAngleDistanceImageFilter->GetOutput()); - - m_GenericRoadExtractionFilter->Update(); - for (typename GenericRoadExtractionFilterType::OutputPathListType::ConstIterator it - = m_GenericRoadExtractionFilter->GetOutput()->Begin(); - it != m_GenericRoadExtractionFilter->GetOutput()->End(); - ++it) - { - outputPathList->PushBack(it.Get()); - } -} -/** - * PrintSelf method - */ -template <class TInputImage, class TOutputPath> -void -RoadExtractionFilter<TInputImage, TOutputPath> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "m_ReferencePixel: " << m_SpectralAngleDistanceImageFilter->GetReferencePixel() << std::endl; -} - -} // End namespace otb -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbSimplifyPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbSimplifyPathListFilter.h deleted file mode 100644 index 2c0f99fad114390d0c5517ddad580fc5da6f43b0..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbSimplifyPathListFilter.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbSimplifyPathListFilter_h -#define otbSimplifyPathListFilter_h - -#include "otbUnaryFunctorObjectListFilter.h" -#include "otbSimplifyPathFunctor.h" -#include "otbObjectList.h" - -namespace otb -{ -/** \class SimplifyPathListFilter - * \brief This filter performs a simplification of the path in the input list. - * - * It reduces the number of vertices in each path, according to a tolerance criterion. It aims at - * removing aligned vertices while keeping sharp angular points. - * - * In order to ensure the unicity of its output, each path is considered first from begin to end, then - * from begin to the first vertex before the end. At each step, the consistency of the path is checked : - * the equation of the line passing by the first and last vertices is computed. Then, for each - * vertices between them, the euclidean distance to this line is computed. If for one vertex, this distance - * is upper than the tolerance threshold, the path is considered to be inconsistent and no vertices can be removed. - * - * If the path is considered consistent (which will occur at least with a 2 vertices path), - * only the beginning and ending - * vertices are kept and a new search iteration begin at its end. - * - * This filter is part of the road extraction framework. - * - * This class is just a shortcut to the UnaryFunctorObjectListFilter with - * the SimplifyPathFunctor. - * - * <b>Recent API changes:</b> - * Now part of the UnaryFunctorObjectListFilter hierarchy, replace call to SetTolerance() - * by GetFunctor().SetTolerance(). - * - * - * \sa BreakAngularPathListFilter - * \sa RemoveTortuousPathFilter. - * \sa UnaryFunctorObjectListFilter - * \sa SimplifyPathFunctor - * - * \example FeatureExtraction/ExtractRoadByStepsExample.cxx - * - * - * \ingroup OTBRoadExtraction - */ - -template <class TPath> -class ITK_EXPORT SimplifyPathListFilter : - public UnaryFunctorObjectListFilter< - ObjectList<TPath>, - ObjectList<TPath>, - SimplifyPathFunctor<TPath, TPath> > -{}; - -} // End namespace otb - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.h b/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.h deleted file mode 100644 index 476725d3af8d4261353de5e8a2b61165305d9873..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbVectorDataToRoadDescriptionFilter_h -#define otbVectorDataToRoadDescriptionFilter_h - -#include "otbVectorDataToSpecificDescriptionFilterBase.h" -#include "otbVectorData.h" - -//#include "otbNDVIDataNodeFeatureFunction.h" -//#include "otbSpectralAngleDataNodeFeatureFunction.h" -#include "otbParserConditionDataNodeFeatureFunction.h" -#include "otbDBOverlapDataNodeFeatureFunction.h" - -namespace otb -{ -/** \class VectorDataToRoadDescriptionFilter - * \brief VectorDataToRoadDescriptionFilter associates a score to each - * adapted input VectorData DataNode. - * - * VectorDataToRoadDescriptionFilter is dedicated to road description. - * Input and output are both VectorDatas in index coordinate. - * Each DataNode of the output VectorData contains its scores - * regarding to the associated descriptors. - * The support is an Optical Image and the descriptor are: - * - (NDVI >= threshold) per cent along the tested lines - * - mean Spectral Angle regarding a reference pixel along the tested lines - * - DB Overlap compute the number of building crossed by the data node in percent - * regarding all the buildings within a data node neighborhood - * - * \ingroup VectorDataFilter - * \sa VectorDataToSpecificDescriptionFilterBase - * \sa VectorDataToBuildingDescriptionFilter - * - * \ingroup OTBRoadExtraction - */ - -template <class TVectorData, class TOpticalImage> -class ITK_EXPORT VectorDataToRoadDescriptionFilter : -public otb::VectorDataToSpecificDescriptionFilterBase<TVectorData> -{ -public: - /** Standard class typedefs. */ - typedef VectorDataToRoadDescriptionFilter Self; - typedef otb::VectorDataToSpecificDescriptionFilterBase<TVectorData> - Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(VectorDataToRoadDescriptionFilter, VectorDataToSpecificDescriptionFilterBase); - - /** Some typedefs. */ - typedef TVectorData VectorDataType; - typedef typename TVectorData::Pointer VectorDataPointer; - typedef typename VectorDataType::DataNodeType DataNodeType; - typedef itk::PreOrderTreeIterator<typename VectorDataType::DataTreeType> - TreeIteratorType; - typedef typename DataNodeType::ValuePrecisionType - PrecisionType; - typedef typename DataNodeType::PrecisionType - CoordRepType; - - typedef TOpticalImage OpticalImageType; - typedef typename TOpticalImage::Pointer OpticalImageTypePointer; - - typedef std::vector<std::string> DescriptorsListType; - - /* - typedef otb::NDVIDataNodeFeatureFunction<OpticalImageType, CoordRepType, PrecisionType> - NDVIFeatureFunctionType; - typedef otb::SpectralAngleDataNodeFeatureFunction<OpticalImageType, CoordRepType, PrecisionType> - SpectralAngleFeatureFunctionType; - */ - typedef otb::ParserConditionDataNodeFeatureFunction<OpticalImageType, CoordRepType, PrecisionType> - ParserConditionFeatureFunctionType; - - typedef otb::DBOverlapDataNodeFeatureFunction<CoordRepType, PrecisionType> - DBOverlapFeatureFunctionType; - - typedef itk::DataObject::Pointer DataObjectPointer; - typedef itk::DataObject DataObject; - - virtual void AddOpticalImage(const OpticalImageType * support); - const OpticalImageType * GetOpticalImage(); - - virtual void AddBuildingsDB(const VectorDataType * support); - const VectorDataType * GetBuildingsDB(); - - const DescriptorsListType& GetDescriptorsList() const - { - return m_DescriptorsList; - } - -protected: - /** Constructor */ - VectorDataToRoadDescriptionFilter(); - /** Destructor */ - ~VectorDataToRoadDescriptionFilter() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** Triggers the Computation of the Descriptors */ - void GenerateData(void) override; - -private: - VectorDataToRoadDescriptionFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - typename ParserConditionFeatureFunctionType::Pointer m_NDVIFeatureFunction; - typename ParserConditionFeatureFunctionType::Pointer m_SpectralAngleFeatureFunction; - typename DBOverlapFeatureFunctionType::Pointer m_DBOverlapFeatureFunction; - DescriptorsListType m_DescriptorsList; - -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbVectorDataToRoadDescriptionFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.hxx b/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.hxx deleted file mode 100644 index e58488f53621c3e3423510e7b750bd7c4cee54ca..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.hxx +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbVectorDataToRoadDescriptionFilter_hxx -#define otbVectorDataToRoadDescriptionFilter_hxx - -#include "otbVectorDataToRoadDescriptionFilter.h" - -namespace otb -{ - -// Constructor -template <class TVectorData, class TOpticalImage> -VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage> -::VectorDataToRoadDescriptionFilter() -{ - this->SetNumberOfRequiredInputs(3); - - m_NDVIFeatureFunction = ParserConditionFeatureFunctionType::New(); - m_NDVIFeatureFunction->SetExpression("ndvi(b3, b4) > 0.4"); - - m_SpectralAngleFeatureFunction = ParserConditionFeatureFunctionType::New(); - m_SpectralAngleFeatureFunction->SetExpression("spectralAngle > 0.25"); - - //Example for QuickBird images (on a specific image) - typename ParserConditionFeatureFunctionType::PixelType refPixel; - refPixel.SetSize(4); - refPixel[0] = 252; - refPixel[1] = 357; - refPixel[2] = 232; - refPixel[3] = 261; - m_SpectralAngleFeatureFunction->SetSpectralAngleReferencePixel(refPixel); - - m_DBOverlapFeatureFunction = DBOverlapFeatureFunctionType::New(); - - m_DescriptorsList.push_back("NONDVI"); - m_DescriptorsList.push_back("ROADSA"); - m_DescriptorsList.push_back("NOBUIL"); -} - -template <class TVectorData, class TOpticalImage> -void -VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage> -::AddOpticalImage(const OpticalImageType * support) -{ - this->AddSupport(const_cast<OpticalImageType *>(support), 0); -} - -template <class TVectorData, class TOpticalImage> -const typename VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage> -::OpticalImageType * -VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage> -::GetOpticalImage() -{ - return static_cast<const OpticalImageType *> - (this->GetSupport(0)); -} - - -template <class TVectorData, class TOpticalImage> -void -VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage> -::AddBuildingsDB(const VectorDataType * support) -{ - this->AddSupport(const_cast<VectorDataType *>(support), 1); -} - -template <class TVectorData, class TOpticalImage> -const typename VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage> -::VectorDataType * -VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage> -::GetBuildingsDB() -{ - return static_cast<const VectorDataType *> - (this->GetSupport(1)); -} - -template <class TVectorData, class TOpticalImage> -void -VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage> -::GenerateData() -{ - m_NDVIFeatureFunction->SetInputImage(const_cast<OpticalImageType *>(this->GetOpticalImage())); - m_SpectralAngleFeatureFunction->SetInputImage(const_cast<OpticalImageType *>(this->GetOpticalImage())); - m_DBOverlapFeatureFunction->SetInputVectorData(const_cast<VectorDataType *>(this->GetBuildingsDB())); - - // Retrieving root node - typename DataNodeType::Pointer root = this->GetOutput(0)->GetDataTree()->GetRoot()->Get(); - // Create the document node - typename DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - // Adding the layer to the data tree - this->GetOutput(0)->GetDataTree()->Add(document, root); - // Create the folder node - typename DataNodeType::Pointer folder = DataNodeType::New(); - folder->SetNodeType(otb::FOLDER); - // Adding the layer to the data tree - this->GetOutput(0)->GetDataTree()->Add(folder, document); - - TreeIteratorType itVector(this->GetInput()->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (!itVector.Get()->IsRoot() && !itVector.Get()->IsDocument() && !itVector.Get()->IsFolder()) - { - typename DataNodeType::Pointer currentGeometry = itVector.Get(); - currentGeometry->SetFieldAsDouble("NONDVI", (double)(m_NDVIFeatureFunction->Evaluate(*(currentGeometry.GetPointer()))[0])); - currentGeometry->SetFieldAsDouble("ROADSA", (double)(m_SpectralAngleFeatureFunction->Evaluate(*(currentGeometry.GetPointer()))[0])); - currentGeometry->SetFieldAsDouble("NOBUIL", (double)(m_DBOverlapFeatureFunction->Evaluate(*(currentGeometry.GetPointer()))[0])); - - this->GetOutput(0)->GetDataTree()->Add(currentGeometry, folder); - } - ++itVector; - } -} - -// PrintSelf Method -template <class TVectorData, class TOpticalImage> -void -VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -} // end namespace otb - -#endif diff --git a/Modules/Detection/RoadExtraction/otb-module.cmake b/Modules/Detection/RoadExtraction/otb-module.cmake deleted file mode 100644 index 0af2a5ba034b1c7a2444e4e744eac1921589de45..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/otb-module.cmake +++ /dev/null @@ -1,43 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -set(DOCUMENTATION "Everything users need to extract roads.") - -otb_module(OTBRoadExtraction - DEPENDS - OTBVectorDataBase - OTBITK - OTBImageBase - OTBVectorDataManipulation - OTBImageManipulation - OTBMathParser - OTBPath - OTBObjectList - OTBCommon - - TEST_DEPENDS - OTBTestKernel - OTBImageIO - OTBProjection - OTBVectorDataIO - - DESCRIPTION - "${DOCUMENTATION}" -) diff --git a/Modules/Detection/RoadExtraction/test/AlignementsQB.cxx b/Modules/Detection/RoadExtraction/test/AlignementsQB.cxx deleted file mode 100644 index 2188101cb207bdb24ff483f41d4fa3a71cbddd6e..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/AlignementsQB.cxx +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#include <iostream> -#include "itkPolyLineParametricPath.h" - -#include "otbImageFileWriter.h" -#include "otbImageFileReader.h" -#include "otbExtractROI.h" -#include "otbImageToPathListAlignFilter.h" -#include "otbDrawPathFilter.h" -//#include "otbColorImageViewer.h" - -#include <stdio.h> - -int main(int argc, char ** argv) -{ - if (argc != 3) - { - - std::cout << "Usage : " << argv[0] << " inputImage outputImage" << std::endl; - return 1; - - } - - const char * inputFilename = argv[1]; - const char * outputFilename = argv[2]; - - typedef unsigned char InputPixelType; - typedef unsigned char OutputPixelType; - - const unsigned int Dimension = 2; - - typedef otb::Image<InputPixelType, Dimension> InputImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - - typedef otb::ImageFileReader<InputImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - ReaderType::Pointer reader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - - reader->SetFileName(inputFilename); - writer->SetFileName(outputFilename); - - reader->Update(); - - std::cout << "Lecture terminee" << std::endl; - - typedef otb::ExtractROI<InputPixelType, InputPixelType> ROIFilterType; - - ROIFilterType::Pointer roiFilter = ROIFilterType::New(); - - roiFilter->SetInput(reader->GetOutput()); - roiFilter->SetStartX(10); - roiFilter->SetStartY(0); - roiFilter->SetSizeX(256); - roiFilter->SetSizeY(256); - - roiFilter->Update(); - - std::cout << "Extraction ROI" << std::endl; - - typedef itk::PolyLineParametricPath<Dimension> PathType; - typedef otb::ImageToPathListAlignFilter<InputImageType, PathType> ListAlignFilterType; - - ListAlignFilterType::Pointer alignFilter = ListAlignFilterType::New(); - - alignFilter->SetInput(roiFilter->GetOutput()); - - alignFilter->Update(); - - std::cout << "Alignements termines" << std::endl; - - typedef ROIFilterType::OutputImageType BackgroundImageType; - - typedef otb::DrawPathFilter<BackgroundImageType, PathType, OutputImageType> DrawPathFilterType; - - DrawPathFilterType::Pointer drawPathFilter = DrawPathFilterType::New(); - - typedef ListAlignFilterType::OutputPathListType ListType; - - ListType* listePaths = alignFilter->GetOutput(); - - ListType::Iterator listIt = listePaths->Begin(); - - BackgroundImageType::Pointer backgroundImage = roiFilter->GetOutput(); - - roiFilter->Update(); - - unsigned int color = 0; - - while (listIt != listePaths->End()) - { - - drawPathFilter->SetImageInput(backgroundImage); - drawPathFilter->SetInputPath(listIt.Get()); - //drawPathFilter->SetPathValue( color ); - - drawPathFilter->Update(); - - backgroundImage = drawPathFilter->GetOutput(); - - ++listIt; - ++color; - - } - - writer->SetInput(drawPathFilter->GetOutput()); - - writer->Update(); - -/* typedef otb::ColorImageViewer<unsigned char, double> ViewerType; - ViewerType viewer; - - viewer.SetLabel( "Input Image" ); - viewer.SetImage( drawPathFilter->GetOutput() ); - - viewer.Show(); - Fl::run(); -*/ - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/CMakeLists.txt b/Modules/Detection/RoadExtraction/test/CMakeLists.txt deleted file mode 100644 index 8c99e4420f49ffb44aa1701a95ad0c237988a736..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/CMakeLists.txt +++ /dev/null @@ -1,218 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -otb_module_test() - -set(OTBRoadExtractionTests -otbRoadExtractionTestDriver.cxx -otbLikelihoodPathListFilter.cxx -otbRemoveWrongDirectionFilter.cxx -otbSimplifyPathListFilter.cxx -otbAlignImageToPath.cxx -otbNonMaxRemovalByDirectionFilter.cxx -otbRoadExtractionFilter.cxx -otbLinkPathListFilter.cxx -otbRemoveTortuousPathListFilter.cxx -otbParallelLinePathListFilter.cxx -otbRemoveIsolatedByDirectionFilter.cxx -otbVectorDataToRoadDescriptionFilter.cxx -otbSimplifyManyPathListFilter.cxx -otbNeighborhoodScalarProductFilter.cxx -otbDrawPathAlign.cxx -otbBreakAngularPathListFilter.cxx -) - -add_executable(otbRoadExtractionTestDriver ${OTBRoadExtractionTests}) -target_link_libraries(otbRoadExtractionTestDriver ${OTBRoadExtraction-Test_LIBRARIES}) -otb_module_target_label(otbRoadExtractionTestDriver) - -# Tests Declaration - -otb_add_test(NAME feTvLikelihoodPathListFilter COMMAND otbRoadExtractionTestDriver - --compare-ascii ${EPSILON_3} - ${BASELINE_FILES}/feTvLikelihoodPathOutput.txt - ${TEMP}/feTvLikelihoodPathOutput.txt - otbLikelihoodPathListFilter - ${INPUTDATA}/InputForRoadDetection_NonMaxRem.raw.hdr - ${TEMP}/feTvLikelihoodPathOutput.txt - 157 335 204 376 | - 21 305 35 308 77 354 85 358 | - 73 160 126 173 - ) - -otb_add_test(NAME feTvRemoveWrongDirectionFilter COMMAND otbRoadExtractionTestDriver - --compare-image ${EPSILON_8} - ${BASELINE}/feTvRemoveWrongDirectionOutput.tif - ${TEMP}/feTvRemoveWrongDirectionOutput.tif - otbRemoveWrongDirectionFilter - ${INPUTDATA}/InputForRoadDetection_IsolatedRem.raw.hdr - ${INPUTDATA}/InputForRoadDetectionScalarProductDir.raw.hdr - ${TEMP}/feTvRemoveWrongDirectionOutput.tif - ) - -otb_add_test(NAME feTvSimplifyPathListFilter COMMAND otbRoadExtractionTestDriver - --compare-ascii ${EPSILON_3} - ${BASELINE_FILES}/feTvSimplifyPathOutput.txt - ${TEMP}/feTvSimplifyPathOutput.txt - otbSimplifyPathListFilter - ${TEMP}/feTvSimplifyPathOutput.txt - 1.0 - 1 1 5 1 7 1 11 1 21 1 31 1 | - 1 1 5 1 7 1 11 1 21 11 31 11 | - 1 1 5 5 7 7 11 11 21 21 31 31 41 41 | - 1 1 5 1 7 1 11 1 21 11 31 11 41 11 58 11 70 11 - ) - -otb_add_test(NAME feTvAlignMV2ITK COMMAND otbRoadExtractionTestDriver - --compare-ascii ${EPSILON_3} ${BASELINE_FILES}/feAlign.txt - ${TEMP}/feAlign.txt - otbAlignImageToPath - ${INPUTDATA}/poupees.raw.hdr - ${TEMP}/feAlign.txt) - -otb_add_test(NAME feTvNonMaxRemovalByDirectionFilter COMMAND otbRoadExtractionTestDriver - --compare-image ${EPSILON_8} - ${BASELINE}/feTvNonMaxRemovalByDirectionOutput.tif - ${TEMP}/feTvNonMaxRemovalByDirectionOutput.tif - otbNonMaxRemovalByDirectionFilter - ${INPUTDATA}/InputForRoadDetection_WrongRem.raw.hdr - ${INPUTDATA}/InputForRoadDetectionScalarProductDir.raw.hdr - ${TEMP}/feTvNonMaxRemovalByDirectionOutput.tif - ) - -otb_add_test(NAME feTvRoadExtractionFilter COMMAND otbRoadExtractionTestDriver - --compare-image ${EPSILON_8} - ${BASELINE}/feTvOutputRoadDetection.tif - ${TEMP}/feTvOutputRoadDetection.tif - otbRoadExtractionFilter - ${INPUTDATA}/qb_RoadExtract.img.hdr - ${TEMP}/feTvOutputRoadDetection.tif - 337 557 432 859 # ReferencePixel - 1.0 # Alpha - 0.00005 # AmplitudeThreshold - 1.0 # Tolerance - 22.5 # (degre) MaxAngle (3.14159265358979323846/8.) - 1.0 # FirstMeanDistanceThreshold - 10.0 # SecondMeanDistanceThreshold - 25. # DistanceThreshold for LinkPathFiler - 22.5 # AngularThreshold for LinkPathFiler - ) - -otb_add_test(NAME feTvLinkPathListFilter COMMAND otbRoadExtractionTestDriver - --compare-ascii ${EPSILON_3} - ${BASELINE_FILES}/feTvLinkPathOutput.txt - ${TEMP}/feTvLinkPathOutput.txt - otbLinkPathListFilter - ${TEMP}/feTvLinkPathOutput.txt - 30 40 - 1 1 51 1 | - 61 1 91 1 | - 111 11 211 11 | - 1 51 51 51 | - 71 71 71 91 | - 71 131 71 201 | - 141 111 101 111 | - 151 111 191 111 | - 111 71 141 71 | - 181 71 151 71 | - 11 131 11 101 | - 11 171 11 141 - ) - -otb_add_test(NAME feTvRemoveTortuousPathListFilter COMMAND otbRoadExtractionTestDriver - --compare-ascii ${EPSILON_3} - ${BASELINE_FILES}/feTvRemoveTortuousPathOutput.txt - ${TEMP}/feTvRemoveTortuousPathOutput.txt - otbRemoveTortuousPathListFilter - ${TEMP}/feTvRemoveTortuousPathOutput.txt - 10.0 - 1 1 1 11 | - 1 1 5 1 7 1 11 1 | - 1 1 7 7 21 21 31 31 41 41 | - 1 1 5 1 7 1 11 1 21 11 31 11 41 11 58 11 70 11 - ) - -otb_add_test(NAME feTvParallelLinePathListFilter COMMAND otbRoadExtractionTestDriver - otbParallelLinePathListFilter) - -otb_add_test(NAME feTvRemoveIsolatedByDirectionFilter COMMAND otbRoadExtractionTestDriver - --compare-image ${EPSILON_8} - ${BASELINE}/feTvRemoveIsolatedByDirectionOutput.tif - ${TEMP}/feTvRemoveIsolatedByDirectionOutput.tif - otbRemoveIsolatedByDirectionFilter - ${INPUTDATA}/InputForRoadDetectionScalarProductMod.raw.hdr - ${INPUTDATA}/InputForRoadDetectionScalarProductDir.raw.hdr - ${TEMP}/feTvRemoveIsolatedByDirectionOutput.tif - ) - -otb_add_test(NAME fzTvVectorDataToRoadDescriptionFilter COMMAND otbRoadExtractionTestDriver - --compare-ogr ${EPSILON_9} - ${BASELINE_FILES}/fzTvVectorDataToRoadDescriptionFilterOutput.shp - ${TEMP}/fzTvVectorDataToRoadDescriptionFilterOutput.shp - otbVectorDataToRoadDescriptionFilter - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp - ${TEMP}/fzTvVectorDataToRoadDescriptionFilterOutput.shp - ${INPUTDATA}/DEM/srtm_directory - 0 - ) - -otb_add_test(NAME feTpSimplifyManyPathListFilter COMMAND otbRoadExtractionTestDriver - otbSimplifyManyPathListFilter - ${TEMP}/feTvSimplifyManyPathOutput.txt - 1.0 - ) - -otb_add_test(NAME feTvNeighborhoodScalarProductFilter COMMAND otbRoadExtractionTestDriver - --compare-n-images ${EPSILON_6} 2 - ${BASELINE}/feTvNeighborhoodScalarProductModulusOutput.tif - ${TEMP}/feTvNeighborhoodScalarProductModulusOutput.tif - ${BASELINE}/feTvNeighborhoodScalarProductDirectionOutput.tif - ${TEMP}/feTvNeighborhoodScalarProductDirectionOutput.tif - otbNeighborhoodScalarProductFilter - ${INPUTDATA}/InputForRoadDetection_SpectralAngle.raw.hdr - ${TEMP}/feTvNeighborhoodScalarProductModulusOutput.tif - ${TEMP}/feTvNeighborhoodScalarProductDirectionOutput.tif - 1.0 - ) - -otb_add_test(NAME feTvDrawPathTestAlign COMMAND otbRoadExtractionTestDriver - --compare-image ${NOTOL} ${BASELINE}/feDrawPathAlignDeuxTraits.png - ${TEMP}/feDrawPathAlignDeuxTraits.png - otbDrawPathAlign - ${INPUTDATA}/DeuxTraits.png - ${TEMP}/feDrawPathAlignDeuxTraits.png) - -otb_add_test(NAME feTvBreakAngularPathListFilter COMMAND otbRoadExtractionTestDriver - --compare-ascii ${NOTOL} ${BASELINE_FILES}/feBreakAngularPathListOutput.txt - ${TEMP}/feBreakAngularPathListOutput.txt - otbBreakAngularPathListFilter - ${TEMP}/feBreakAngularPathListOutput.txt - 10 20 30 50 90 140 180 | - 1 1 5 1 7 1 11 1 21 1 31 1 | - 1 1 5 1 7 1 11 1 21 11 31 11 | - 1 1 5 1 7 1 11 1 21 11 31 11 41 11 | - 1 1 5 1 7 1 11 1 21 11 31 11 41 11 58 11 70 11 | - 1 11 5 11 7 11 11 11 21 1 31 1 41 1 | - 1 1 5 1 7 1 11 1 21 11 31 21 41 31 | - 1 1 5 1 5 11 5 21 | - 1 1 31 1 41 1 - ) diff --git a/Modules/Detection/RoadExtraction/test/otbAlignImageToPath.cxx b/Modules/Detection/RoadExtraction/test/otbAlignImageToPath.cxx deleted file mode 100644 index 567713ab741daf32e26794ade7f4be75cf9c8ffc..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbAlignImageToPath.cxx +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -#include <iostream> -#include "itkPolyLineParametricPath.h" - -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbImageToPathListAlignFilter.h" - -#include "itkPathSource.h" - -#include <stdio.h> - -int otbAlignImageToPath(int itkNotUsed(argc), char * argv[]) -{ - const char * inputFilename = argv[1]; - const char * outputFilename = argv[2]; - - typedef double InputPixelType; - typedef double OutputPixelType; - const unsigned int Dimension = 2; - - typedef otb::Image<InputPixelType, Dimension> InputImageType; - - typedef itk::PolyLineParametricPath<Dimension> PathType; - - PathType::Pointer ltoto = PathType::New(); - - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - - typedef otb::ImageFileReader<InputImageType> ReaderType; - - typedef otb::ImageToPathListAlignFilter<InputImageType, PathType> ListAlignFilterType; - typedef ListAlignFilterType::ValueType ValueType; - typedef ListAlignFilterType::SizeType SizeType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - ReaderType::Pointer reader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - InputImageType::Pointer ImageIn = InputImageType::New(); - - ListAlignFilterType::Pointer testList = ListAlignFilterType::New(); - - reader->SetFileName(inputFilename); - - //OTB-FA-00010-CS - testList->SetInput(reader->GetOutput()); - - typedef ListAlignFilterType::OutputPathListType ListAlignFilterOutputPathListType; - - otbGenericMsgDebugMacro(<< "Before update"); - testList->Update(); - otbGenericMsgDebugMacro(<< "After update"); - - ValueType pathValue; - pathValue = testList->GetPathValue(); - testList->SetPathValue(pathValue); - - ValueType backgroundValue; - backgroundValue = testList->GetBackgroundValue(); - testList->SetBackgroundValue(backgroundValue); - - SizeType size; - size = testList->GetSize(); - testList->SetSize(size); - - bool isMeaningfulSegment; - isMeaningfulSegment = testList->GetisMeaningfulSegment(); - testList->SetisMeaningfulSegment(isMeaningfulSegment); - - int NbGradDirection; - NbGradDirection = testList->GetNbGradDirection(); - testList->SetNbGradDirection(NbGradDirection); - - int NbLineDirection; - NbLineDirection = testList->GetNbLineDirection(); - testList->SetNbLineDirection(NbLineDirection); - - double MinGradNorm; - MinGradNorm = testList->GetMinGradNorm(); - testList->SetMinGradNorm(MinGradNorm); - - double Eps; - Eps = testList->GetEps(); - testList->SetEps(Eps); - - ListAlignFilterOutputPathListType * sortiePath = testList->GetOutput(); - - otbGenericMsgDebugMacro(<< "Writing :"); - - FILE *file = fopen(outputFilename, "w"); - if (file == nullptr) - { - fprintf(stderr, "Error, can't open file"); - exit(-1); - } - typedef itk::ContinuousIndex<double, 2> VertexType; - typedef itk::VectorContainer<unsigned, VertexType> VertexListType; - typedef VertexListType::ConstPointer VertexListTypePointer; - VertexListTypePointer vertexList; - VertexType cindex; - double x1, y1; - //double x2, y2; - - int nbPath = sortiePath->Size(); - otbGenericMsgDebugMacro(<< "NbSegment: " << nbPath); - fprintf(file, "Nb Segment: %d\n", nbPath); - for (int i = 0; i < nbPath; ++i) - { - vertexList = sortiePath->GetNthElement(i)->GetVertexList(); - cindex = vertexList->GetElement(0); - x1 = cindex[0]; - y1 = cindex[1]; - cindex = vertexList->GetElement(1); - //x2 = cindex[0]; - //y2 = cindex[1]; - fprintf(file, "%8.3f %8.3f\n", x1, y1); - } - fclose(file); - - // writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbBreakAngularPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbBreakAngularPathListFilter.cxx deleted file mode 100644 index dde12b6ad8d6082b5ca64fedfa9d9a6bb0b0ab05..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbBreakAngularPathListFilter.cxx +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbBreakAngularPathListFilter.h" - -#include "itkPolyLineParametricPath.h" -#include <fstream> -#include <vector> -#include "otbMath.h" -#include <cstdlib> - -int otbBreakAngularPathListFilter(int itkNotUsed(argc), char * argv[]) -{ - const char * outfname = argv[1]; - - typedef std::vector<double> PointsVectorType; - typedef std::vector<PointsVectorType> PointsMatrixType; - PointsMatrixType MatricePoints; - PointsVectorType ListPoints; - PointsVectorType ListMaxAngle; - - int cpt = 2; - - ListMaxAngle.clear(); - while (argv[cpt][0] != '|') - { - ListMaxAngle.push_back(static_cast<double>(::atof(argv[cpt]))); - ++cpt; - } - ++cpt; - ListPoints.clear(); - - while (argv[cpt] != nullptr) - { - if (argv[cpt][0] == '|') - { - if ((ListPoints.size() % 2) != 0) - { - itkGenericExceptionMacro(<< "Missing point in parameters !"); - } - MatricePoints.push_back(ListPoints); - ListPoints.clear(); - } - else - { - ListPoints.push_back(static_cast<double>(::atof(argv[cpt]))); - } - ++cpt; - } - MatricePoints.push_back(ListPoints); - - const unsigned int Dimension = 2; - typedef itk::PolyLineParametricPath<Dimension> PathType; - typedef otb::BreakAngularPathListFilter<PathType> BreakAngularPathListFilterType; - typedef BreakAngularPathListFilterType::PathListType PathListType; - PathType::ContinuousIndexType cindex; - - PathListType::Pointer InputPathList = PathListType::New(); - - //Generate PathList - for (PointsMatrixType::iterator listpos = MatricePoints.begin(); listpos != MatricePoints.end(); ++listpos) - { - PathType::Pointer path = PathType::New(); - //Generate PathList - std::cout << "List " << std::endl; - for (PointsVectorType::iterator it = (*listpos).begin(); it != (*listpos).end(); ++it) - { - cindex[0] = *it; - ++it; - cindex[1] = *it; - std::cout << "Point Index :" << cindex[0] << ";" << cindex[1] << std::endl; - path->AddVertex(cindex); - } - InputPathList->PushBack(path); - } - - // Instantiating object - BreakAngularPathListFilterType::Pointer breakAngularFilter = BreakAngularPathListFilterType::New(); - breakAngularFilter->SetInput(InputPathList); - - std::ofstream file; - file.open(outfname); - - for (PointsVectorType::iterator itAngle = ListMaxAngle.begin(); itAngle != ListMaxAngle.end(); ++itAngle) - { - - breakAngularFilter->SetMaxAngle((*itAngle) * otb::CONST_PI / 180.); - breakAngularFilter->Update(); - - PathListType::Pointer OutputPathList = breakAngularFilter->GetOutput(); - - typedef PathListType::ConstIterator PathListIteratorType; - typedef PathType::VertexListType VertexListType; - typedef VertexListType::ConstIterator VertexIteratorType; - - unsigned int counter = 1; - PathListIteratorType pathListIt = InputPathList->Begin(); - - file << "--------------------------------------------------------------------------" << std::endl; - file << "MAX ANGULAR :" << breakAngularFilter->GetMaxAngle() << "(" << (*itAngle) << " deg.)" << std::endl; - file << "INPUT list of Path " << ": " << std::endl; - while (pathListIt != InputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - - counter = 1; - pathListIt = OutputPathList->Begin(); - file << "OUTPUT list of Path " << ": " << std::endl; - while (pathListIt != OutputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - - } //Enf for angle - file.close(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbDrawPathAlign.cxx b/Modules/Detection/RoadExtraction/test/otbDrawPathAlign.cxx deleted file mode 100644 index c5847cc841ae136d46887fce8fd8b6e2c2d86fc1..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbDrawPathAlign.cxx +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -#include "itkMacro.h" -#include "itkPolyLineParametricPath.h" - -#include "otbImageFileReader.h" -#include "otbPathListSource.h" -#include "otbImageToPathListAlignFilter.h" -#include "otbDrawPathListFilter.h" -#include "otbImageFileWriter.h" - -int otbDrawPathAlign(int itkNotUsed(argc), char * argv[]) -{ - const char * inputFilename = argv[1]; - const char * outputFilename = argv[2]; - - typedef unsigned char InputPixelType; - typedef unsigned char OutputPixelType; - const unsigned int Dimension = 2; - - typedef otb::Image<InputPixelType, Dimension> InputImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - - typedef itk::PolyLineParametricPath<Dimension> PathType; - - typedef otb::ImageFileReader<InputImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - typedef otb::ImageToPathListAlignFilter<InputImageType, PathType> PathListType; - typedef PathListType::OutputPathListType OutputPathListType; - - typedef otb::DrawPathListFilter<InputImageType, PathType, OutputImageType> DrawPathFilterType; - - ReaderType::Pointer reader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - - DrawPathFilterType::Pointer DrawPath = DrawPathFilterType::New(); - PathType::Pointer VertexList = PathType::New(); - - reader->SetFileName(inputFilename); - writer->SetFileName(outputFilename); - - typedef otb::ImageToPathListAlignFilter<InputImageType, PathType> PathListAlignType; - PathListAlignType::Pointer testList = PathListAlignType::New(); - - //OTB-FA-00010-CS - testList->SetInput(reader->GetOutput()); - testList->Update(); - - OutputPathListType * sortiePath = testList->GetOutput(); - int nbPath = sortiePath->Size(); - std::cout << "NbPath: " << nbPath << std::endl; - - InputImageType::ConstPointer imageIn = reader->GetOutput(); - - DrawPath->SetInput(imageIn); - DrawPath->SetInputPath(sortiePath); - - writer->SetInput(DrawPath->GetOutput()); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbLikelihoodPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbLikelihoodPathListFilter.cxx deleted file mode 100644 index a1a7054b0fec3afe46e7d85c3451ad2cb38c598a..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbLikelihoodPathListFilter.cxx +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbLikelihoodPathListFilter.h" -#include "otbPolyLineParametricPathWithValue.h" -#include "otbImage.h" -#include "otbImageFileReader.h" -#include <fstream> - -int otbLikelihoodPathListFilter(int itkNotUsed(argc), char * argv[]) -{ - - std::cout << std::endl; - - const char * infname = argv[1]; - const char * outfname = argv[2]; - - typedef std::vector<double> PointsVectorType; - typedef std::vector<PointsVectorType> PointsMatrixType; - PointsMatrixType MatricePoints; - PointsVectorType ListPoints; - - int cpt = 3; - ListPoints.clear(); - - while (argv[cpt] != nullptr) - { - if (argv[cpt][0] == '|') - { - if ((ListPoints.size() % 2) != 0) - { - itkGenericExceptionMacro(<< "Missing point in parameters !"); - } - MatricePoints.push_back(ListPoints); - ListPoints.clear(); - } - else - { - ListPoints.push_back(static_cast<double>(::atof(argv[cpt]))); - } - ++cpt; - } - MatricePoints.push_back(ListPoints); - - const unsigned int Dimension = 2; - typedef double PixelType; - typedef otb::Image<PixelType, Dimension> ImageType; - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef otb::PolyLineParametricPathWithValue<double, Dimension> PathType; - typedef otb::LikelihoodPathListFilter<PathType, ImageType> LikelihoodPathListFilterType; - typedef LikelihoodPathListFilterType::PathListType PathListType; - PathType::ContinuousIndexType cindex; - - PathListType::Pointer InputPathList = PathListType::New(); - - //Generate PathList - for (PointsMatrixType::iterator listpos = MatricePoints.begin(); listpos != MatricePoints.end(); ++listpos) - { - PathType::Pointer path = PathType::New(); - //Generate PathList - std::cout << "List " << std::endl; - for (PointsVectorType::iterator it = (*listpos).begin(); it != (*listpos).end(); ++it) - { - cindex[0] = *it; - ++it; - cindex[1] = *it; - std::cout << "Point Index :" << cindex[0] << ";" << cindex[1] << std::endl; - path->AddVertex(cindex); - } - InputPathList->PushBack(path); - } - - //Instantiating object - LikelihoodPathListFilterType::Pointer filter = LikelihoodPathListFilterType::New(); - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(infname); - reader->Update(); - - filter->SetInput(InputPathList); - filter->SetInputImage(reader->GetOutput()); - filter->Update(); - - std::cout << "Filter execution ended" << std::endl; - - PathListType::Pointer OutputPathList = filter->GetOutput(); - - typedef PathListType::ConstIterator PathListIteratorType; - typedef PathType::VertexListType VertexListType; - typedef VertexListType::ConstIterator VertexIteratorType; - - std::ofstream file; - file.open(outfname); - unsigned int counter = 1; - PathListIteratorType pathListIt = InputPathList->Begin(); - - file << "INPUT list of Path " << ": " << std::endl; - while (pathListIt != InputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - counter = 1; - pathListIt = OutputPathList->Begin(); - file << "OUTPUT list of Path " << ": " << std::endl; - while (pathListIt != OutputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << " Value: " << pathListIt.Get()->GetValue(); - file << std::endl; - ++pathListIt; - ++counter; - } - file.close(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbLinkPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbLinkPathListFilter.cxx deleted file mode 100644 index c41995abfaa600794e2e725c52121ea06f1e47bb..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbLinkPathListFilter.cxx +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbLinkPathListFilter.h" -#include "itkPolyLineParametricPath.h" -#include "otbMath.h" -#include <fstream> -#include <cstdlib> - -int otbLinkPathListFilter(int itkNotUsed(argc), char * argv[]) -{ - - std::cout << std::endl; - - const char * outfname = argv[1]; - const double distance = atof(argv[2]); - const double angle = ::atof(argv[3]) * otb::CONST_PI / 180.; - - typedef std::vector<double> PointsVectorType; - typedef std::vector<PointsVectorType> PointsMatrixType; - PointsMatrixType MatricePoints; - PointsVectorType ListPoints; - - int cpt = 4; - ListPoints.clear(); - - while (argv[cpt] != nullptr) - { - if (argv[cpt][0] == '|') - { - if ((ListPoints.size() % 2) != 0) - { - itkGenericExceptionMacro(<< "Missing point in parameters !"); - } - MatricePoints.push_back(ListPoints); - ListPoints.clear(); - } - else - { - ListPoints.push_back(static_cast<double>(::atof(argv[cpt]))); - } - ++cpt; - } - MatricePoints.push_back(ListPoints); - - const unsigned int Dimension = 2; - typedef itk::PolyLineParametricPath<Dimension> PathType; - typedef otb::LinkPathListFilter<PathType> LinkPathListFilterType; - typedef LinkPathListFilterType::PathListType PathListType; - PathType::ContinuousIndexType cindex; - - PathListType::Pointer InputPathList = PathListType::New(); - - //Generate PathList - for (PointsMatrixType::iterator listpos = MatricePoints.begin(); listpos != MatricePoints.end(); ++listpos) - { - PathType::Pointer path = PathType::New(); - //Generate PathList - std::cout << "List " << std::endl; - for (PointsVectorType::iterator it = (*listpos).begin(); it != (*listpos).end(); ++it) - { - cindex[0] = *it; - ++it; - cindex[1] = *it; - std::cout << "Point Index :" << cindex[0] << ";" << cindex[1] << std::endl; - path->AddVertex(cindex); - } - InputPathList->PushBack(path); - } - //Instantiating object - LinkPathListFilterType::Pointer filter = LinkPathListFilterType::New(); - - filter->SetInput(InputPathList); - filter->SetDistanceThreshold(distance); - filter->SetAngularThreshold(angle); - filter->Update(); - - std::cout << "Filter execution ended" << std::endl; - - PathListType::Pointer OutputPathList = filter->GetOutput(); - - typedef PathListType::ConstIterator PathListIteratorType; - typedef PathType::VertexListType VertexListType; - typedef VertexListType::ConstIterator VertexIteratorType; - - std::ofstream file; - file.open(outfname); - unsigned int counter = 1; - PathListIteratorType pathListIt = InputPathList->Begin(); - - file << "Maximum distance threshold: " << filter->GetDistanceThreshold() << " (" << distance << ")" << std::endl; - file << "Maximum angle threshold: " << filter->GetAngularThreshold() << " (" << angle * 180 / otb::CONST_PI << ")" << - std::endl; - file << "INPUT list of Path " << ": " << std::endl; - while (pathListIt != InputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - counter = 1; - pathListIt = OutputPathList->Begin(); - file << "OUTPUT list of Path " << ": " << std::endl; - while (pathListIt != OutputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - file.close(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbNeighborhoodScalarProductFilter.cxx b/Modules/Detection/RoadExtraction/test/otbNeighborhoodScalarProductFilter.cxx deleted file mode 100644 index 75c62bb6ab0c1f770bdade075f0aabc90ad5cba7..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbNeighborhoodScalarProductFilter.cxx +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbNeighborhoodScalarProductFilter.h" -#include "otbImage.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "itkGradientRecursiveGaussianImageFilter.h" - -int otbNeighborhoodScalarProductFilter(int itkNotUsed(argc), char * argv[]) -{ - - const char * infname = argv[1]; - const char * outfname = argv[2]; - const char * diroutfname = argv[3]; - const double sigma = atof(argv[4]); - - const unsigned int Dimension = 2; - typedef double PixelType; - typedef itk::CovariantVector<PixelType, Dimension> VectorPixelType; - typedef otb::Image<VectorPixelType, Dimension> VectorImageType; - typedef otb::Image<PixelType, Dimension> ImageType; - typedef otb::NeighborhoodScalarProductFilter<VectorImageType, ImageType, ImageType> FilterType; - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef otb::ImageFileWriter<ImageType> WriterType; - typedef itk::GradientRecursiveGaussianImageFilter<ImageType, VectorImageType> GradientFilterType; - - // Instantiating object - FilterType::Pointer filter = FilterType::New(); - ReaderType::Pointer reader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - GradientFilterType::Pointer gradient = GradientFilterType::New(); - - reader->SetFileName(infname); - reader->Update(); - - gradient->SetInput(reader->GetOutput()); - gradient->SetSigma(sigma); - filter->SetInput(gradient->GetOutput()); - writer->SetInput(filter->GetOutput()); - writer->SetFileName(outfname); - writer->Update(); - writer = WriterType::New(); - writer->SetFileName(diroutfname); - writer->SetInput(filter->GetOutputDirection()); - writer->Update(); - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbNonMaxRemovalByDirectionFilter.cxx b/Modules/Detection/RoadExtraction/test/otbNonMaxRemovalByDirectionFilter.cxx deleted file mode 100644 index cb8970e5de831bd4818789b586443a52d29d468d..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbNonMaxRemovalByDirectionFilter.cxx +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbNonMaxRemovalByDirectionFilter.h" -#include "otbImage.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" - -int otbNonMaxRemovalByDirectionFilter(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - typedef double PixelType; - typedef otb::Image<PixelType, Dimension> ImageType; - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef otb::ImageFileWriter<ImageType> WriterType; - typedef otb::NonMaxRemovalByDirectionFilter<ImageType, ImageType, ImageType> NonMaxRemovalByDirectionFilterType; - - // Instantiating object - ReaderType::Pointer modReader = ReaderType::New(); - ReaderType::Pointer dirReader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - modReader->SetFileName(argv[1]); - dirReader->SetFileName(argv[2]); - writer->SetFileName(argv[3]); - NonMaxRemovalByDirectionFilterType::Pointer filter = NonMaxRemovalByDirectionFilterType::New(); - filter->SetInput(modReader->GetOutput()); - filter->SetInputDirection(dirReader->GetOutput()); - writer->SetInput(filter->GetOutput()); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbParallelLinePathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbParallelLinePathListFilter.cxx deleted file mode 100644 index f2b67fc6ad757b8e6e93f86608a698e1ed339880..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbParallelLinePathListFilter.cxx +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbParallelLinePathListFilter.h" -#include "itkPolyLineParametricPath.h" -#include <cstdlib> - -int otbParallelLinePathListFilter(int itkNotUsed(argc), char * itkNotUsed(argv) []) -{ - - // We create some lines - const unsigned int Dimension = 2; - typedef itk::PolyLineParametricPath<Dimension> PathType; - typedef otb::ObjectList<PathType> PathListType; - - PathListType::Pointer lineList = PathListType::New(); - PathListType::Pointer parallelList = PathListType::New(); - - typedef PathType::ContinuousIndexType ContinuousIndexType; - ContinuousIndexType cindex; - - /*-----*/ - PathType::Pointer aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 1; - cindex[1] = 1; - aLine->AddVertex(cindex); - - cindex[0] = 1; - cindex[1] = 100; - aLine->AddVertex(cindex); - - lineList->PushBack(aLine); - parallelList->PushBack(aLine); - - /*-----*/ - aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 10; - cindex[1] = 1; - aLine->AddVertex(cindex); - - cindex[0] = 10; - cindex[1] = 100; - aLine->AddVertex(cindex); - parallelList->PushBack(aLine); - lineList->PushBack(aLine); - - /*-----*/ - aLine = PathType::New(); - aLine->Initialize(); - cindex[0] = 174; - cindex[1] = 99; - aLine->AddVertex(cindex); - - cindex[0] = 281; - cindex[1] = 1; - aLine->AddVertex(cindex); - - lineList->PushBack(aLine); - - // Parallel lines are detected. - - typedef otb::ParallelLinePathListFilter<PathType> ParallelLinePathType; - ParallelLinePathType::Pointer parallelLinePathListFilter = ParallelLinePathType::New(); - parallelLinePathListFilter->SetDistanceThreshold(10); - parallelLinePathListFilter->SetAngularThreshold(10); - parallelLinePathListFilter->SetCommonDistanceThreshold(10); - parallelLinePathListFilter->SetInput(lineList); - parallelLinePathListFilter->Update(); - - PathListType::Pointer pathList = parallelLinePathListFilter->GetOutput(); - PathListType::Iterator listIt = pathList->Begin(); - - PathListType::Iterator parListIt = parallelList->Begin(); - - // A path is a line segment in this case. - while (listIt != pathList->End() && parListIt != parallelList->End()) - { - PathType::VertexListType::ConstPointer vertexList = (listIt.Get())->GetVertexList(); - - PathType::VertexListType::ConstPointer parVertexList = (parListIt.Get())->GetVertexList(); - - PathType::VertexListType::ConstIterator pathIt = vertexList->Begin(); - PathType::VertexListType::ConstIterator parPathIt = parVertexList->Begin(); - // Loop over all the vertices in one path - while (pathIt != vertexList->End() && - parPathIt != parVertexList->End()) - { - - if (pathIt.Value() != parPathIt.Value()) - { - std::cout << pathIt.Index() << pathIt.Value() << std::endl; - return EXIT_FAILURE; - - } - ++pathIt; - ++parPathIt; - } - ++listIt; - ++parListIt; - } - - return EXIT_SUCCESS; - -} diff --git a/Modules/Detection/RoadExtraction/test/otbRemoveIsolatedByDirectionFilter.cxx b/Modules/Detection/RoadExtraction/test/otbRemoveIsolatedByDirectionFilter.cxx deleted file mode 100644 index a2a9ade45086a8b60e17e1c71ab78a2d5dcc6cb9..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbRemoveIsolatedByDirectionFilter.cxx +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbRemoveIsolatedByDirectionFilter.h" -#include "otbImage.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" - -int otbRemoveIsolatedByDirectionFilter(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - typedef double PixelType; - typedef otb::Image<PixelType, Dimension> ImageType; - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef otb::ImageFileWriter<ImageType> WriterType; - typedef otb::RemoveIsolatedByDirectionFilter<ImageType, ImageType, ImageType> RemoveIsolatedByDirectionFilterType; - - // Instantiating object - ReaderType::Pointer modReader = ReaderType::New(); - ReaderType::Pointer dirReader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - modReader->SetFileName(argv[1]); - dirReader->SetFileName(argv[2]); - writer->SetFileName(argv[3]); - RemoveIsolatedByDirectionFilterType::Pointer filter = RemoveIsolatedByDirectionFilterType::New(); - filter->SetInput(modReader->GetOutput()); - filter->SetInputDirection(dirReader->GetOutput()); - writer->SetInput(filter->GetOutput()); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbRemoveTortuousPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbRemoveTortuousPathListFilter.cxx deleted file mode 100644 index 21b28e0c90ec845d6c0e37887d2876a4fca2b6ee..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbRemoveTortuousPathListFilter.cxx +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbRemoveTortuousPathListFilter.h" -#include "itkPolyLineParametricPath.h" -#include <fstream> -#include <cstdlib> - -int otbRemoveTortuousPathListFilter(int itkNotUsed(argc), char * argv[]) -{ - const char * outfname = argv[1]; - const double threshold = atof(argv[2]); - - typedef std::vector<double> PointsVectorType; - typedef std::vector<PointsVectorType> PointsMatrixType; - PointsMatrixType MatricePoints; - PointsVectorType ListPoints; - - int cpt = 3; - ListPoints.clear(); - - while (argv[cpt] != nullptr) - { - if (argv[cpt][0] == '|') - { - if ((ListPoints.size() % 2) != 0) - { - itkGenericExceptionMacro(<< "Missing point in parameters !"); - } - MatricePoints.push_back(ListPoints); - ListPoints.clear(); - } - else - { - ListPoints.push_back(static_cast<double>(::atof(argv[cpt]))); - } - ++cpt; - } - MatricePoints.push_back(ListPoints); - - const unsigned int Dimension = 2; - typedef itk::PolyLineParametricPath<Dimension> PathType; - typedef otb::RemoveTortuousPathListFilter<PathType> RemoveTortuousPathListFilterType; - typedef RemoveTortuousPathListFilterType::InputListType PathListType; - PathType::ContinuousIndexType cindex; - - PathListType::Pointer InputPathList = PathListType::New(); - - //Generate PathList - for (PointsMatrixType::iterator listpos = MatricePoints.begin(); listpos != MatricePoints.end(); ++listpos) - { - PathType::Pointer path = PathType::New(); - //Generate PathList - std::cout << "List " << std::endl; - for (PointsVectorType::iterator it = (*listpos).begin(); it != (*listpos).end(); ++it) - { - cindex[0] = *it; - ++it; - cindex[1] = *it; - std::cout << "Point Index :" << cindex[0] << ";" << cindex[1] << std::endl; - path->AddVertex(cindex); - } - InputPathList->PushBack(path); - } - // Instantiating object - RemoveTortuousPathListFilterType::Pointer filter = RemoveTortuousPathListFilterType::New(); - - filter->SetInput(InputPathList); - filter->GetFunctor().SetThreshold(threshold); - filter->Update(); - - PathListType::Pointer OutputPathList = filter->GetOutput(); - - typedef PathListType::ConstIterator PathListIteratorType; - typedef PathType::VertexListType VertexListType; - typedef VertexListType::ConstIterator VertexIteratorType; - - std::ofstream file; - file.open(outfname); - unsigned int counter = 1; - PathListIteratorType pathListIt = InputPathList->Begin(); - - file << "Minimum Mean Distance: " << filter->GetFunctor().GetThreshold() << " (" << threshold << ")" << std::endl; - file << "INPUT list of Path " << ": " << std::endl; - while (pathListIt != InputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - counter = 1; - pathListIt = OutputPathList->Begin(); - file << "OUTPUT list of Path " << ": " << std::endl; - while (pathListIt != OutputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - file.close(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbRemoveWrongDirectionFilter.cxx b/Modules/Detection/RoadExtraction/test/otbRemoveWrongDirectionFilter.cxx deleted file mode 100644 index 146623060c18a74dc415f0a51f8a939254d7c999..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbRemoveWrongDirectionFilter.cxx +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbRemoveWrongDirectionFilter.h" -#include "otbImage.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" - -int otbRemoveWrongDirectionFilter(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - typedef double PixelType; - typedef otb::Image<PixelType, Dimension> ImageType; - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef otb::ImageFileWriter<ImageType> WriterType; - typedef otb::RemoveWrongDirectionFilter<ImageType, ImageType, ImageType> RemoveWrongDirectionFilterType; - - // Instantiating object - ReaderType::Pointer modReader = ReaderType::New(); - ReaderType::Pointer dirReader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - modReader->SetFileName(argv[1]); - dirReader->SetFileName(argv[2]); - writer->SetFileName(argv[3]); - RemoveWrongDirectionFilterType::Pointer filter = RemoveWrongDirectionFilterType::New(); - filter->SetInput(modReader->GetOutput()); - filter->SetInputDirection(dirReader->GetOutput()); - writer->SetInput(filter->GetOutput()); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbRoadExtractionFilter.cxx b/Modules/Detection/RoadExtraction/test/otbRoadExtractionFilter.cxx deleted file mode 100644 index 80e757ab1b4a624493fbbab5b141e221ff63aff4..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbRoadExtractionFilter.cxx +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbImage.h" -#include "otbRoadExtractionFilter.h" -#include "otbDrawPathListFilter.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbPolyLineParametricPathWithValue.h" -#include "otbMath.h" - -int otbRoadExtractionFilter(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - typedef otb::VectorImage<double, Dimension> InputImageType; - typedef otb::Image<double, Dimension> OutputImageType; - typedef otb::PolyLineParametricPathWithValue<double, Dimension> PathType; - - typedef otb::ImageFileReader<InputImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - typedef otb::RoadExtractionFilter<InputImageType, PathType> RoadExtractionFilterType; - typedef RoadExtractionFilterType::InputPixelType InputPixelType; - typedef otb::DrawPathListFilter<OutputImageType, PathType, OutputImageType> DrawPathFilterType; - - //Parameters - const char * inputFileName(argv[1]); - const char * outputFileName(argv[2]); - InputPixelType ReferencePixel; - ReferencePixel.Reserve(4); - ReferencePixel.SetElement(0, ::atof(argv[3])); - ReferencePixel.SetElement(1, ::atof(argv[4])); - ReferencePixel.SetElement(2, ::atof(argv[5])); - ReferencePixel.SetElement(3, ::atof(argv[6])); - const double Alpha = ::atof(argv[7]); - const double AmplitudeThreshold = ::atof(argv[8]); - const double Tolerance = ::atof(argv[9]); - const double MaxAngle = ((otb::CONST_PI * ::atof(argv[10])) / 180.); - const double FirstMeanDistanceThreshold = ::atof(argv[11]); - const double SecondMeanDistanceThreshold = ::atof(argv[12]); - const double LinkAngularThreshold = ((otb::CONST_PI * ::atof(argv[13])) / 180.); - const double LinkDistanceThreshold = ::atof(argv[14]); - - // Instantiating object - ReaderType::Pointer reader = ReaderType::New(); - RoadExtractionFilterType::Pointer roadExtraction = RoadExtractionFilterType::New(); - DrawPathFilterType::Pointer draw = DrawPathFilterType::New(); - WriterType::Pointer writer = WriterType::New(); - - //Initialization parameters - reader->SetFileName(inputFileName); - - roadExtraction->SetInput(reader->GetOutput()); - roadExtraction->SetReferencePixel(ReferencePixel); - roadExtraction->SetAlpha(Alpha); - roadExtraction->SetAmplitudeThreshold(AmplitudeThreshold); - roadExtraction->SetTolerance(Tolerance); - roadExtraction->SetMaxAngle(MaxAngle); - roadExtraction->SetFirstMeanDistanceThreshold(FirstMeanDistanceThreshold); - roadExtraction->SetSecondMeanDistanceThreshold(SecondMeanDistanceThreshold); - roadExtraction->SetAngularThreshold(LinkAngularThreshold); - roadExtraction->SetDistanceThreshold(LinkDistanceThreshold); - - reader->GenerateOutputInformation(); - OutputImageType::Pointer image = OutputImageType::New(); - image->CopyInformation(reader->GetOutput()); - image->SetRegions(image->GetLargestPossibleRegion()); - image->Allocate(); - image->FillBuffer(0); - - draw->SetInput(image); - //Use internal value of path - draw->UseInternalPathValueOn(); - draw->SetInputPath(roadExtraction->GetOutput()); - - writer->SetFileName(outputFileName); - writer->SetInput(draw->GetOutput()); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbRoadExtractionTestDriver.cxx b/Modules/Detection/RoadExtraction/test/otbRoadExtractionTestDriver.cxx deleted file mode 100644 index 2765863108877e2fb1ecda2ec2914a4e15316586..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbRoadExtractionTestDriver.cxx +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbTestMain.h" - -void RegisterTests() -{ - REGISTER_TEST(otbLikelihoodPathListFilter); - REGISTER_TEST(otbRemoveWrongDirectionFilter); - REGISTER_TEST(otbSimplifyPathListFilter); - REGISTER_TEST(otbAlignImageToPath); - REGISTER_TEST(otbNonMaxRemovalByDirectionFilter); - REGISTER_TEST(otbRoadExtractionFilter); - REGISTER_TEST(otbLinkPathListFilter); - REGISTER_TEST(otbRemoveTortuousPathListFilter); - REGISTER_TEST(otbParallelLinePathListFilter); - REGISTER_TEST(otbRemoveIsolatedByDirectionFilter); - REGISTER_TEST(otbVectorDataToRoadDescriptionFilter); - REGISTER_TEST(otbSimplifyManyPathListFilter); - REGISTER_TEST(otbNeighborhoodScalarProductFilter); - REGISTER_TEST(otbDrawPathAlign); - REGISTER_TEST(otbBreakAngularPathListFilter); -} diff --git a/Modules/Detection/RoadExtraction/test/otbSimplifyManyPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbSimplifyManyPathListFilter.cxx deleted file mode 100644 index 12a79b10a8160ea6d9fb4af08c92acb764607d27..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbSimplifyManyPathListFilter.cxx +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbSimplifyPathListFilter.h" -#include "itkPolyLineParametricPath.h" -#include <fstream> -#include <cstdlib> - -/** - * This filter is intended to test the multithreading capabilities - * of the otb::UnaryFunctorObjectListFilter - */ - -int otbSimplifyManyPathListFilter(int itkNotUsed(argc), char * argv[]) -{ - const char * outfname = argv[1]; - const double tolerance = atof(argv[2]); - -// typedef std::vector<double> PointsVectorType; -// typedef std::vector< PointsVectorType > PointsMatrixType; -// PointsMatrixType MatricePoints; -// PointsVectorType ListPoints; - - const unsigned int Dimension = 2; - typedef itk::PolyLineParametricPath<Dimension> PathType; - typedef otb::SimplifyPathListFilter<PathType> SimplifyPathListFilterType; - typedef SimplifyPathListFilterType::InputListType PathListType; - PathType::ContinuousIndexType cindex; - - PathListType::Pointer InputPathList = PathListType::New(); - - //Generate PathList - unsigned long int numberOfPaths = 10000; - srand(123456); - - for (unsigned long int i = 0; i < numberOfPaths; ++i) - { - PathType::Pointer path = PathType::New(); - //Generate PathList - unsigned int numberOfPoints = static_cast<int>((rand() / (RAND_MAX + 1.0)) * 90) + 10; -// std::cout << "List :" << numberOfPoints << " points" << std::endl; - cindex[0] = 0; - cindex[1] = 0; - for (unsigned int j = 0; j < numberOfPoints; ++j) - { - cindex[0] += (rand() / (RAND_MAX + 1.0)) * 100 - 50; - cindex[1] += (rand() / (RAND_MAX + 1.0)) * 100 - 50; -// std::cout << "Point Index :"<<cindex[0]<<", "<<cindex[1]<<std::endl; - path->AddVertex(cindex); - } - InputPathList->PushBack(path); - } - // Instantiating object - SimplifyPathListFilterType::Pointer simplifyFilter = SimplifyPathListFilterType::New(); - - simplifyFilter->SetInput(InputPathList); - simplifyFilter->GetFunctor().SetTolerance(tolerance); - simplifyFilter->Update(); - - PathListType::Pointer OutputPathList = simplifyFilter->GetOutput(); - - typedef PathListType::ConstIterator PathListIteratorType; - typedef PathType::VertexListType VertexListType; - typedef VertexListType::ConstIterator VertexIteratorType; - - std::ofstream file; - file.open(outfname); - unsigned int counter = 1; - PathListIteratorType pathListIt = InputPathList->Begin(); - - file << "TOLERANCE: " << simplifyFilter->GetFunctor().GetTolerance() << "(" << tolerance << ")" << std::endl; - - pathListIt = OutputPathList->Begin(); - file << "OUTPUT list of Path " << ": " << std::endl; - while (pathListIt != OutputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - file.close(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbSimplifyPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbSimplifyPathListFilter.cxx deleted file mode 100644 index 54095a10ec232ab00a3ac9cc1e55fd27d27a822f..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbSimplifyPathListFilter.cxx +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbSimplifyPathListFilter.h" -#include "itkPolyLineParametricPath.h" -#include <fstream> -#include <cstdlib> - -int otbSimplifyPathListFilter(int itkNotUsed(argc), char * argv[]) -{ - const char * outfname = argv[1]; - const double tolerance = atof(argv[2]); - - typedef std::vector<double> PointsVectorType; - typedef std::vector<PointsVectorType> PointsMatrixType; - PointsMatrixType MatricePoints; - PointsVectorType ListPoints; - - int cpt = 3; - ListPoints.clear(); - - while (argv[cpt] != nullptr) - { - if (argv[cpt][0] == '|') - { - if ((ListPoints.size() % 2) != 0) - { - itkGenericExceptionMacro(<< "Missing point in parameters !"); - } - MatricePoints.push_back(ListPoints); - ListPoints.clear(); - } - else - { - ListPoints.push_back(static_cast<double>(::atof(argv[cpt]))); - } - ++cpt; - } - MatricePoints.push_back(ListPoints); - - const unsigned int Dimension = 2; - typedef itk::PolyLineParametricPath<Dimension> PathType; - typedef otb::SimplifyPathListFilter<PathType> SimplifyPathListFilterType; - typedef SimplifyPathListFilterType::InputListType PathListType; - PathType::ContinuousIndexType cindex; - - PathListType::Pointer InputPathList = PathListType::New(); - - //Generate PathList - for (PointsMatrixType::iterator listpos = MatricePoints.begin(); listpos != MatricePoints.end(); ++listpos) - { - PathType::Pointer path = PathType::New(); - //Generate PathList - std::cout << "List " << std::endl; - for (PointsVectorType::iterator it = (*listpos).begin(); it != (*listpos).end(); ++it) - { - cindex[0] = *it; - ++it; - cindex[1] = *it; - std::cout << "Point Index :" << cindex[0] << ";" << cindex[1] << std::endl; - path->AddVertex(cindex); - } - InputPathList->PushBack(path); - } - // Instantiating object - SimplifyPathListFilterType::Pointer simplifyFilter = SimplifyPathListFilterType::New(); - - simplifyFilter->SetInput(InputPathList); - simplifyFilter->GetFunctor().SetTolerance(tolerance); - simplifyFilter->Update(); - - PathListType::Pointer OutputPathList = simplifyFilter->GetOutput(); - - typedef PathListType::ConstIterator PathListIteratorType; - typedef PathType::VertexListType VertexListType; - typedef VertexListType::ConstIterator VertexIteratorType; - - std::ofstream file; - file.open(outfname); - unsigned int counter = 1; - PathListIteratorType pathListIt = InputPathList->Begin(); - - file << "TOLERANCE: " << simplifyFilter->GetFunctor().GetTolerance() << "(" << tolerance << ")" << std::endl; - file << "INPUT list of Path " << ": " << std::endl; - while (pathListIt != InputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - counter = 1; - pathListIt = OutputPathList->Begin(); - file << "OUTPUT list of Path " << ": " << std::endl; - while (pathListIt != OutputPathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - file.close(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/RoadExtraction/test/otbVectorDataToRoadDescriptionFilter.cxx b/Modules/Detection/RoadExtraction/test/otbVectorDataToRoadDescriptionFilter.cxx deleted file mode 100644 index 98715c2b867184293e7943a188a534c96a928222..0000000000000000000000000000000000000000 --- a/Modules/Detection/RoadExtraction/test/otbVectorDataToRoadDescriptionFilter.cxx +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include "otbVectorDataToRoadDescriptionFilter.h" - -#include "otbVectorImage.h" -#include "otbImageFileReader.h" -#include "otbVectorDataFileReader.h" -#include "otbVectorDataFileWriter.h" -#include "otbVectorDataProperties.h" -#include "otbRemoteSensingRegion.h" -#include "otbVectorDataIntoImageProjectionFilter.h" - - - - - -int otbVectorDataToRoadDescriptionFilter(int itkNotUsed(argc), char* argv[]) -{ - const char * inputVD = argv[1]; - const char * inputImg = argv[2]; - const char * inputDB = argv[3]; - const char * outputVD = argv[4]; - const char * DEMDirectory = argv[5]; - int DisplayWarnings = atoi(argv[6]); - - typedef double PrecisionType; - typedef otb::VectorData<PrecisionType, 2> VectorDataType; - typedef otb::VectorImage<PrecisionType> ImageType; - - typedef otb::VectorDataToRoadDescriptionFilter<VectorDataType, ImageType> - VectorDataToRoadDescriptionFilterType; - - typedef otb::ImageFileReader<ImageType> ImageReaderType; - typedef otb::VectorDataFileReader<VectorDataType> - VectorDataReaderType; - typedef otb::VectorDataFileWriter<VectorDataType> - VectorDataWriterType; - typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, ImageType> - VectorDataReProjFilter; - - - VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New(); - VectorDataReaderType::Pointer DBReader = VectorDataReaderType::New(); - ImageReaderType::Pointer reader = ImageReaderType::New(); - VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New(); - VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New(); - - VectorDataToRoadDescriptionFilterType::Pointer filter = - VectorDataToRoadDescriptionFilterType::New(); - - if (!DisplayWarnings) - { - reader->SetGlobalWarningDisplay(0); - } - otb::DEMHandler::Instance()->OpenDEMDirectory(DEMDirectory); - - reader->SetFileName(inputImg); - reader->UpdateOutputInformation(); - - DBReader->SetFileName(inputDB); - DBReader->Update(); - - vdReader->SetFileName(inputVD); - vdReader->Update(); - - vdReProjFilter->SetInputImage(reader->GetOutput()); - vdReProjFilter->SetInputVectorData(vdReader->GetOutput()); - vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true); - vdReProjFilter->Update(); - - filter->SetInput(vdReProjFilter->GetOutput()); - filter->AddOpticalImage(reader->GetOutput()); - filter->AddBuildingsDB(DBReader->GetOutput()); - - vdWriter->SetFileName(outputVD); - vdWriter->SetInput(filter->GetOutput()); - vdWriter->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/UrbanArea/CMakeLists.txt b/Modules/Detection/UrbanArea/CMakeLists.txt deleted file mode 100644 index 3bc279da0f37ffd74bdb90c4814be43d9ee1dec6..0000000000000000000000000000000000000000 --- a/Modules/Detection/UrbanArea/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -project(OTBUrbanArea) -otb_module_impl() diff --git a/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.h b/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.h deleted file mode 100644 index c178c9acc56ab65b4118729618177488b95368cd..0000000000000000000000000000000000000000 --- a/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.h +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbUrbanAreaDetectionImageFilter_h -#define otbUrbanAreaDetectionImageFilter_h - -#include "otbImage.h" -#include "otbWaterIndicesFunctor.h" -#include "otbVegetationIndicesFunctor.h" -#include "itkUnaryFunctorImageFilter.h" -#include "itkBinaryErodeImageFilter.h" -#include "itkBinaryDilateImageFilter.h" -#include "itkBinaryBallStructuringElement.h" -#include "itkMacro.h" -#include "itkSobelEdgeDetectionImageFilter.h" -#include "otbEdgeDetectorImageFilter.h" -#include "otbEdgeDensityImageFilter.h" -#include "otbBinaryImageDensityFunction.h" -#include "otbVectorImageToIntensityImageFilter.h" - -namespace otb -{ - -namespace Functor -{ - -/** \class RadiometricNonWaterNonVegetationIndexFunctor - * \brief This functor computes ndwi and ndvi of an image - * \brief in order to find urban areas and generate a grayscale image - * - * \ingroup OTBUrbanArea - */ -template<class TInput, class TOutput = double> -class RadiometricNonWaterNonVegetationIndexFunctor -{ -public: - typedef Functor::NDVI<double, double> VegetationFunctorType; - typedef Functor::NDWI2<double, double> WaterFunctorType; - typedef TOutput ValueType; - - VegetationFunctorType GetVegetationFunctor(){ return m_VegetationFunctor; } - WaterFunctorType GetWaterFunctor(){ return m_WaterFunctor; } - - void SetRedIndex(int id) - { - m_VegetationFunctor.SetBandIndex(CommonBandNames::RED, id); - } - void SetGreenIndex(int id) - { - m_WaterFunctor.SetBandIndex(CommonBandNames::GREEN, id); - } - void SetNIRIndex(int id) - { - m_VegetationFunctor.SetBandIndex(CommonBandNames::NIR, id); - m_WaterFunctor.SetBandIndex(CommonBandNames::NIR, id); - } - - RadiometricNonWaterNonVegetationIndexFunctor(){} - virtual ~RadiometricNonWaterNonVegetationIndexFunctor(){} - - inline TOutput operator ()(const TInput& pInPix) - { - TOutput lVIval, lWIval, lOutPix; - - TInput zero = pInPix; - zero.Fill(0); - if (pInPix != zero) - { - lVIval = static_cast<ValueType>(std::max(0., m_VegetationFunctor(pInPix))); - lWIval = static_cast<ValueType>(std::max(0., m_WaterFunctor(pInPix))); - - lOutPix = std::sqrt(std::abs((1 - lVIval) * (1 - lWIval))); - } - else lOutPix = 0; - - return lOutPix; - } - -protected: - VegetationFunctorType m_VegetationFunctor; - WaterFunctorType m_WaterFunctor; - -}; - -/** \class RadiometricNonWaterNonVegetationDetectionFunctor - * \brief This functor uses computes RadiometricNonWaterNonVegetationIndexFunctor - * \brief and appli a threshold to produce a binary image - * - * \ingroup OTBUrbanArea - */ -template<class TInput, class TOutput> -class RadiometricNonWaterNonVegetationDetectionFunctor -{ -public: - typedef RadiometricNonWaterNonVegetationIndexFunctor<TInput> RadiometricNonWaterNonVegetationIndexFunctorType; - - RadiometricNonWaterNonVegetationDetectionFunctor() - { - m_LowerThreshold = 0.0; - m_UpperThreshold = 1.0; - } - - virtual ~RadiometricNonWaterNonVegetationDetectionFunctor() {} - inline TOutput operator ()(const TInput& inPix) - { - // The vegetation and water areas are put to 0. - double indexesVal = static_cast<double>(m_RadiometricNonWaterNonVegetationIndexFunctor(inPix)); - - if ((indexesVal > m_LowerThreshold) && (indexesVal <= m_UpperThreshold)) - { - return static_cast<TOutput>(1); - } - else - { - return static_cast<TOutput>(0); - } - } - - void SetLowerThreshold(double threshold){ m_LowerThreshold = threshold; } - void SetUpperThreshold(double threshold){ m_UpperThreshold = threshold; } - double GetLowerThreshold(){ return m_LowerThreshold; } - double GetUpperThreshold(){ return m_UpperThreshold; } - - void SetRedIndex(int id){ m_RadiometricNonWaterNonVegetationIndexFunctor.SetRedIndex(id); } - void SetGreenIndex(int id){ m_RadiometricNonWaterNonVegetationIndexFunctor.SetGreenIndex(id); } - void SetNIRIndex(int id){ m_RadiometricNonWaterNonVegetationIndexFunctor.SetNIRIndex(id); } - -protected: - RadiometricNonWaterNonVegetationIndexFunctorType m_RadiometricNonWaterNonVegetationIndexFunctor; - double m_LowerThreshold; - double m_UpperThreshold; - -}; - -} //end namespace functor - -/** \class UrbanAreaDetectionImageFilter - * \brief This filter uses associated functors to produce a binary or grayscale image - * \brief where the white areas represents the urban areas. - * - * \ingroup OTBUrbanArea - */ -template <class TInputImage, class TOutputImage, - class TFunction = Functor::RadiometricNonWaterNonVegetationIndexFunctor< - typename TInputImage::PixelType, - typename TOutputImage::PixelType> > -class ITK_EXPORT UrbanAreaDetectionImageFilter : - public itk::ImageToImageFilter<TInputImage, TOutputImage> -{ -public: - /** Standard class typedefs. */ - typedef UrbanAreaDetectionImageFilter Self; - typedef itk::ImageToImageFilter<TInputImage, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(UrbanAreaDetectionImageFilter, itk::ImageToImageFilter); - - /** Images typedefs */ - typedef TInputImage VectorImageType; - typedef TOutputImage OutputImageType; - typedef double SingleImagePixelType; - typedef Image<SingleImagePixelType, 2> SingleImageType; - typedef SingleImageType::SizeType SizeType; - typedef typename OutputImageType::PixelType OutputImagePixelType; - typedef typename VectorImageType::PixelType VectorImagePixelType; - - /** Filters typedefs */ - // NonVegetationNonWaterIndexFilter - typedef Functor::RadiometricNonWaterNonVegetationDetectionFunctor<VectorImagePixelType, - OutputImagePixelType> FunctorType; - typedef itk::UnaryFunctorImageFilter <VectorImageType, OutputImageType, - FunctorType> UrbanAreaExtractionFilterType; - typedef typename UrbanAreaExtractionFilterType::Pointer - UrbanAreaExtrationFilterPointerType; - // Erode/Dilate Filters - typedef typename itk::BinaryBallStructuringElement<OutputImagePixelType, - 2> StructuringElementType; - typedef typename itk::BinaryErodeImageFilter<OutputImageType, OutputImageType, - StructuringElementType> ErodeFilterType; - typedef typename itk::BinaryDilateImageFilter<OutputImageType, OutputImageType, - StructuringElementType> DilateFilterType; - // Intensity - typedef VectorImageToIntensityImageFilter<VectorImageType, SingleImageType> IntensityFilterType; - typedef typename IntensityFilterType::Pointer IntensityFilterPointerType; - // EdgeDensityFilter - typedef BinaryImageDensityFunction<SingleImageType> - CountFunctionType; - typedef itk::SobelEdgeDetectionImageFilter<SingleImageType, SingleImageType> SobelType; - typedef EdgeDetectorImageFilter<SingleImageType, SingleImageType, - SobelType> SobelDetectorType; - typedef EdgeDensityImageFilter<SingleImageType, SingleImageType, SobelDetectorType, - CountFunctionType> EdgeDensityFilterType; - typedef typename EdgeDensityFilterType::Pointer - EdgeDensityFilterPointerType; - // Threshold - typedef itk::BinaryThresholdImageFilter<SingleImageType, OutputImageType> ThresholdFilterType; - typedef typename ThresholdFilterType::Pointer ThresholdFilterPointerType; - // Multiply - typedef itk::MultiplyImageFilter<VectorImageType, OutputImageType, VectorImageType> MultiplyImageFilterType; - typedef typename MultiplyImageFilterType::Pointer MultiplyImageFilterPointerType; - - /** Get/Set indices */ - void SetRedIndex(int id){ m_UrbanAreaExtractionFilter->GetFunctor().SetRedIndex(id); } - void SetGreenIndex(int id){ m_UrbanAreaExtractionFilter->GetFunctor().SetGreenIndex(id); } - void SetNIRIndex(int id){ m_UrbanAreaExtractionFilter->GetFunctor().SetNIRIndex(id); } - unsigned int GetRedIndex(){ return m_UrbanAreaExtractionFilter->GetFunctor().GetRedIndex(); } - unsigned int GetGreenIndex(){ return m_UrbanAreaExtractionFilter->GetFunctor().GetGreenIndex(); } - unsigned int GetNIRIndex(){ return m_UrbanAreaExtractionFilter->GetFunctor().GetNIRIndex(); } - /** Get/Set threshold values */ - itkGetMacro(ThresholdValue, double); - itkSetMacro(ThresholdValue, double); - itkGetMacro(ThresholdDensity, double); - itkSetMacro(ThresholdDensity, double); - itkGetMacro(SobelLowerThreshold, double); - itkSetMacro(SobelLowerThreshold, double); - itkGetMacro(SobelUpperThreshold, double); - itkSetMacro(SobelUpperThreshold, double); - - /** Methods */ - void GenerateData() override; - -protected: - UrbanAreaDetectionImageFilter(); - ~UrbanAreaDetectionImageFilter() override{} - -private: - UrbanAreaDetectionImageFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - /** Filters */ - IntensityFilterPointerType m_IntensityFilter; - EdgeDensityFilterType::Pointer m_EdgeDensityFilter; - SobelDetectorType::Pointer m_SobelFilter; - ThresholdFilterPointerType m_Thresholder; - UrbanAreaExtrationFilterPointerType m_UrbanAreaExtractionFilter; - MultiplyImageFilterPointerType m_MultiplyFilter; - - /** Thresholds */ - double m_ThresholdValue; - double m_ThresholdDensity; - - double m_SobelLowerThreshold; - double m_SobelUpperThreshold; - -}; // end class RadiometricNonWaterNonVegetationDetectionImageFilter - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbUrbanAreaDetectionImageFilter.hxx" -#endif - -#endif diff --git a/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.hxx b/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.hxx deleted file mode 100644 index f9cc85fd1fe317ae0122d7185a102200295b964c..0000000000000000000000000000000000000000 --- a/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.hxx +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbUrbanAreaDetectionImageFilter_hxx -#define otbUrbanAreaDetectionImageFilter_hxx - -#include "otbUrbanAreaDetectionImageFilter.h" -#include "itkProgressAccumulator.h" - -namespace otb -{ - -/** - * Constructor - */ -template <class TInputImage, class TOutputImage, class TFunction> -UrbanAreaDetectionImageFilter<TInputImage, TOutputImage, TFunction> -::UrbanAreaDetectionImageFilter() -{ - - m_IntensityFilter = IntensityFilterType::New(); - m_EdgeDensityFilter = EdgeDensityFilterType::New(); - m_SobelFilter = SobelDetectorType::New(); - m_Thresholder = ThresholdFilterType::New(); - m_UrbanAreaExtractionFilter = UrbanAreaExtractionFilterType::New(); - - m_MultiplyFilter = MultiplyImageFilterType::New(); - - /** Init the Pipeline */ - // EdgeDensity - m_EdgeDensityFilter->SetInput(m_IntensityFilter->GetOutput()); - m_EdgeDensityFilter->SetDetector(m_SobelFilter); - // Threshold - m_Thresholder->SetInput(m_EdgeDensityFilter->GetOutput()); - // Mask Image - m_MultiplyFilter->SetInput2(m_Thresholder->GetOutput()); - // NonVegetationNonWaterIndex - m_UrbanAreaExtractionFilter->SetInput(m_MultiplyFilter->GetOutput()); - - m_ThresholdValue = 0.5; - m_ThresholdDensity = 0.1; - m_SobelLowerThreshold = -100.0; - m_SobelUpperThreshold = 200.0; -} - -/** - * Parameters the filters of the pipeline - */ -template <class TInputImage, class TOutputImage, class TFunction> -void -UrbanAreaDetectionImageFilter<TInputImage, TOutputImage, TFunction> -::GenerateData() -{ - - // Intensity - m_IntensityFilter->SetInput(this->GetInput()); - - // Edge Density - m_SobelFilter->SetLowerThreshold(m_SobelLowerThreshold); - m_SobelFilter->SetUpperThreshold(m_SobelUpperThreshold); - SizeType lSize; - lSize[0] = static_cast<unsigned int>(10); - lSize[1] = static_cast<unsigned int>(10); - m_EdgeDensityFilter->SetNeighborhoodRadius(lSize); - - // Threshold - m_Thresholder->SetInsideValue(0); - m_Thresholder->SetOutsideValue(1); - m_Thresholder->SetLowerThreshold(-10.); - m_Thresholder->SetUpperThreshold(m_ThresholdDensity); - - // Apply the mask on the input image - m_MultiplyFilter->SetInput1(this->GetInput()); - - // Give a threshold to urbanAreaFilter - m_UrbanAreaExtractionFilter->GetFunctor().SetLowerThreshold(m_ThresholdValue); - - // Progress accumulator - itk::ProgressAccumulator::Pointer progress = itk::ProgressAccumulator::New(); - progress->SetMiniPipelineFilter(this); - progress->RegisterInternalFilter(m_UrbanAreaExtractionFilter, 0.5f); - - /** GraftOutput */ - m_UrbanAreaExtractionFilter->GraftOutput(this->GetOutput()); - m_UrbanAreaExtractionFilter->Update(); - this->GraftOutput(m_UrbanAreaExtractionFilter->GetOutput()); - -} - -} // end namespace otb - -#endif diff --git a/Modules/Detection/UrbanArea/otb-module.cmake b/Modules/Detection/UrbanArea/otb-module.cmake deleted file mode 100644 index fdbd78381f39a9606ef054a34b63afe218380753..0000000000000000000000000000000000000000 --- a/Modules/Detection/UrbanArea/otb-module.cmake +++ /dev/null @@ -1,38 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -set(DOCUMENTATION "This module is concerned with the detection of urban area.") - -otb_module(OTBUrbanArea - DEPENDS - OTBStatistics - OTBITK - OTBImageBase - OTBEdge - OTBImageManipulation - OTBIndices - - TEST_DEPENDS - OTBTestKernel - OTBImageIO - - DESCRIPTION - "${DOCUMENTATION}" -) diff --git a/Modules/Detection/UrbanArea/test/CMakeLists.txt b/Modules/Detection/UrbanArea/test/CMakeLists.txt deleted file mode 100644 index 48c2ed26443e5dd8564dfc84ecd9bceb0de148c8..0000000000000000000000000000000000000000 --- a/Modules/Detection/UrbanArea/test/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -otb_module_test() - -set(OTBUrbanAreaTests -otbUrbanAreaTestDriver.cxx -otbUrbanAreaDetectionImageFilter.cxx -) - -add_executable(otbUrbanAreaTestDriver ${OTBUrbanAreaTests}) -target_link_libraries(otbUrbanAreaTestDriver ${OTBUrbanArea-Test_LIBRARIES}) -otb_module_target_label(otbUrbanAreaTestDriver) - -# Tests Declaration - - -otb_add_test(NAME raTvUrbanAreaDetectionImageFilter COMMAND otbUrbanAreaTestDriver - --compare-image ${EPSILON_8} ${BASELINE}/raTvUrbanAreaDetection.png - ${TEMP}/raTvUrbanAreaDetection.png - otbUrbanAreaDetectionImageFilter - ${INPUTDATA}/qb_RoadExtract2sub200x200.tif - ${TEMP}/raTvUrbanAreaDetection.png - 3 # red - 2 # green - 4 # nir - 0.8 # threshold NDVI+NDWI - 0.005 # threshold EdgeDensity - ) - diff --git a/Modules/Detection/UrbanArea/test/otbUrbanAreaDetectionImageFilter.cxx b/Modules/Detection/UrbanArea/test/otbUrbanAreaDetectionImageFilter.cxx deleted file mode 100644 index cac601a228731321ee4f17e2f45577f310261e5d..0000000000000000000000000000000000000000 --- a/Modules/Detection/UrbanArea/test/otbUrbanAreaDetectionImageFilter.cxx +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbVectorImage.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbUrbanAreaDetectionImageFilter.h" - -int otbUrbanAreaDetectionImageFilter(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - typedef double PixelType; - typedef otb::VectorImage<PixelType, Dimension> InputVectorImageType; - typedef otb::Image<unsigned char, Dimension> OutputImageType; - - typedef otb::ImageFileReader<InputVectorImageType> ReaderType; - - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - typedef otb::UrbanAreaDetectionImageFilter<InputVectorImageType, - OutputImageType> UrbanAreaDetectionFilterType; - - // Instantiating objects - UrbanAreaDetectionFilterType::Pointer filter = UrbanAreaDetectionFilterType::New(); - ReaderType::Pointer reader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - - const char * inputFilename = argv[1]; - const char * outputFilename = argv[2]; - - reader->SetFileName(inputFilename); - writer->SetFileName(outputFilename); - - filter->SetInput(reader->GetOutput()); - filter->SetRedIndex(::atoi(argv[3])); - filter->SetGreenIndex(::atoi(argv[4])); - filter->SetNIRIndex(::atoi(argv[5])); - filter->SetThresholdValue(::atof(argv[6])); - filter->SetThresholdDensity(::atof(argv[7])); - - writer->SetInput(filter->GetOutput()); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Detection/UrbanArea/test/otbUrbanAreaTestDriver.cxx b/Modules/Detection/UrbanArea/test/otbUrbanAreaTestDriver.cxx deleted file mode 100644 index 2d035d4ce44de5ef7094525271d5d64fc6603460..0000000000000000000000000000000000000000 --- a/Modules/Detection/UrbanArea/test/otbUrbanAreaTestDriver.cxx +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbTestMain.h" - -void RegisterTests() -{ - REGISTER_TEST(otbUrbanAreaDetectionImageFilter); -} diff --git a/Modules/Feature/Edge/test/CMakeLists.txt b/Modules/Feature/Edge/test/CMakeLists.txt index 687442cbfefdfdabffaa329e34f29029d1cb5a25..171dbfe4c705dfb54e101cc0c9697fcad5cb3fd7 100644 --- a/Modules/Feature/Edge/test/CMakeLists.txt +++ b/Modules/Feature/Edge/test/CMakeLists.txt @@ -120,7 +120,7 @@ otb_add_test(NAME bfTvPersistentVectorizationImageFilter COMMAND otbEdgeTestDriv ${BASELINE_FILES}/bfTvPersistentVectorizationImageFilterOutput.txt ${TEMP}/bfTvPersistentVectorizationImageFilterOutput.txt otbPersistentVectorizationFilter - ${INPUTDATA}/Seg1InputForRCC8Graph.tif + ${INPUTDATA}/labelImage_UnsignedChar.tif ${TEMP}/bfTvPersistentVectorizationImageFilterOutput.txt ) diff --git a/Modules/Feature/SeamCarving/CMakeLists.txt b/Modules/Feature/SeamCarving/CMakeLists.txt deleted file mode 100644 index 48e2f8a8d73200ced3943178074537e8688b16ef..0000000000000000000000000000000000000000 --- a/Modules/Feature/SeamCarving/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -project(OTBSeamCarving) -otb_module_impl() diff --git a/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.h b/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.h deleted file mode 100644 index 7066a891f52719b0371d20eb5a13150e7a393def..0000000000000000000000000000000000000000 --- a/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbAddCarvingPathFilter_h -#define otbAddCarvingPathFilter_h - -#include "itkImageAndPathToImageFilter.h" -#include "itkImageSliceIteratorWithIndex.h" - -namespace otb -{ -/** \class AddCarvingPathFilter - * \brief This class add pixels given in one path - * - * This filter add pixels found by the otb::ImageToCarvingPathFilter - * thus increasing the image size. - * the image (if Direction is set to 0) or from left to right - * (if direction is set to 1). Pixel value is computed as the average - * between the neighborhood pixels. - * - * This is one component necessary to apply the seam carving algorithm - * published by Shai Avidan, Ariel Shamir, - * Seam Carving for Content-Aware Image Resizing, - * ACM Transactions on Graphics, Volume 26, Number 3, - * SIGGRAPH 2007 - * - * \par INPUTS - * The first input is an image, usually, the same one provided to the - * otb::ImageToCarvingPathFilter - * The second input is a path, typically the output of otb::ImageToCarvingPathFilter. - * - * \par OUTPUTS - * The output is an image with a bigger size than the input image. There is one more - * column if direction is 0 and one more line if direction is 1. - * - * \sa ImageToCarvingPathFilter - * - * - * \ingroup PathFilters - * \ingroup ImageFilters - * - * \ingroup OTBSeamCarving - */ - -template <class TInputImage, class TInputPath, class TOutputImage> -class ITK_EXPORT AddCarvingPathFilter : public itk::ImageAndPathToImageFilter<TInputImage, TInputPath, TOutputImage> -{ -public: - /** Standard class typedefs. */ - typedef AddCarvingPathFilter Self; - typedef itk::ImageAndPathToImageFilter<TInputImage, TInputPath, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(AddCarvingPathFilter, itk::ImageAndPathToImageFilter); - - /** Some convenient typedefs. */ - typedef TInputImage InputImageType; - typedef typename InputImageType::Pointer InputImagePointer; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - typedef typename InputImageType::RegionType InputImageRegionType; - typedef typename InputImageType::PixelType InputImagePixelType; - typedef TInputPath InputPathType; - typedef typename InputPathType::Pointer InputPathPointer; - typedef typename InputPathType::ConstPointer InputPathConstPointer; - typedef typename InputPathType::InputType InputPathInputType; - typedef typename InputPathType::OutputType InputPathOutputType; - typedef typename InputPathType::IndexType InputPathIndexType; - typedef typename InputPathType::OffsetType InputPathOffsetType; - typedef TOutputImage OutputImageType; - typedef typename OutputImageType::Pointer OutputImagePointer; - typedef typename OutputImageType::ConstPointer OutputImageConstPointer; - - typedef typename OutputImageType::RegionType OutputImageRegionType; - typedef typename OutputImageType::PixelType OutputImagePixelType; - typedef typename OutputImageType::ValueType OutputImageValueType; - -// typedef typename itk::ImageRegionConstIterator<InputImageType> InputIteratorType; -// typedef typename itk::ImageRegionIterator<OutputImageType> OutputIteratorType; - typedef typename itk::ImageSliceConstIteratorWithIndex<InputImageType> InputIteratorType; - typedef typename itk::ImageSliceIteratorWithIndex<OutputImageType> OutputIteratorType; - - /** Set/Get the path input of this process object. - Note: these methods are adding to get the proper name */ - void SetInputPath(const TInputPath * path); - - const TInputPath * GetInputPath(void); - - itkSetMacro(Value, OutputImagePixelType); - itkGetConstReferenceMacro(Value, OutputImagePixelType); - - /** Set and Get direction value */ - itkSetMacro(Direction, unsigned int); - itkGetConstMacro(Direction, unsigned int); - - void GenerateOutputInformation() override; - void GenerateInputRequestedRegion() override; - -protected: - AddCarvingPathFilter(); - ~AddCarvingPathFilter() override {} - - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - void GenerateData() override; - -private: - AddCarvingPathFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - OutputImagePixelType m_Value; - unsigned int m_Direction; -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbAddCarvingPathFilter.hxx" -#endif - -#endif diff --git a/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.hxx b/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.hxx deleted file mode 100644 index 5864bc0917135aa882a10265d23c3d21ed8a57cf..0000000000000000000000000000000000000000 --- a/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.hxx +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#ifndef otbAddCarvingPathFilter_hxx -#define otbAddCarvingPathFilter_hxx - -#include "otbAddCarvingPathFilter.h" -#include "itkMacro.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TInputImage, class TInputPath, class TOutputImage> -AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::AddCarvingPathFilter() -{ - m_Value = static_cast<OutputImagePixelType>(255.0); - m_Direction = 0; -} -/** - * Main computation method. - */ -template <class TInputImage, class TInputPath, class TOutputImage> -inline void -AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::SetInputPath(const TInputPath * path) -{ - this->SetPathInput(path); -} -template <class TInputImage, class TInputPath, class TOutputImage> -const TInputPath * -AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::GetInputPath(void) -{ - return this->GetPathInput(); -} - -template <class TInputImage, class TInputPath, class TOutputImage> -void -AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::GenerateData(void) -{ - - const InputImageType * inputImage = this->GetImageInput(); - const InputPathType * inputPath = this->GetPathInput(); - OutputImageType * outputImage = this->GetOutput(); - - outputImage->SetBufferedRegion(outputImage->GetRequestedRegion()); - outputImage->Allocate(); - - InputIteratorType inputIterator(inputImage, - inputImage->GetLargestPossibleRegion()); - OutputIteratorType outputIterator(outputImage, - outputImage->GetLargestPossibleRegion()); - - unsigned int dir0; - unsigned int dir1; - - if (m_Direction == 0) - { - dir0 = 0; - dir1 = 1; - } - else - { - dir0 = 1; - dir1 = 0; - } - - inputIterator.SetFirstDirection(dir0); - inputIterator.SetSecondDirection(dir1); - inputIterator.GoToBegin(); - outputIterator.SetFirstDirection(dir0); - outputIterator.SetSecondDirection(dir1); - outputIterator.GoToBegin(); - - int line = -1; - typename InputImageType::IndexType index; - typename InputPathType::VertexListType::ConstPointer vertexList = inputPath->GetVertexList(); - typename InputPathType::VertexListType::ConstIterator pathIterator; - typename InputImageType::IndexType indexToAdd; - typedef typename InputImageType::IndexType::IndexValueType IndexValueType; - - typename InputImageType::SizeType inputSize; - inputSize = inputImage->GetLargestPossibleRegion().GetSize(); - - //go to the end of the path - pathIterator = vertexList->Begin(); - while (pathIterator != vertexList->End()) - { - ++pathIterator; - } - --pathIterator; - - while (!outputIterator.IsAtEnd()) - { - while (!outputIterator.IsAtEndOfSlice()) - { - bool flag = false; - while (!outputIterator.IsAtEndOfLine()) - { - index = outputIterator.GetIndex(); - - if (index[dir1] != line) - { - line = index[dir1]; - typename InputImageType::PointType tmpIndex; - inputImage->TransformContinuousIndexToPhysicalPoint(pathIterator.Value(), tmpIndex); - inputImage->TransformPhysicalPointToIndex(tmpIndex, indexToAdd); - if (pathIterator != vertexList->Begin()) - { - --pathIterator; - } - if (index[dir1] != indexToAdd[dir1]) - { - itkExceptionMacro(<< "Error : " << index[dir1] << " , " << indexToAdd[dir1]); - } - } - - if ((flag == true) - || ((index[dir0] != indexToAdd[dir0]) - && (index[dir0] < static_cast<IndexValueType>(inputSize[dir0])))) - { - outputIterator.Set(inputIterator.Get()); - ++inputIterator; - } - else - { - flag = true; - OutputImagePixelType newValue = itk::NumericTraits<OutputImagePixelType>::Zero; - int n = 0; - InputIteratorType tmpIterator = inputIterator; - --tmpIterator; - if (!tmpIterator.IsAtReverseEndOfLine()) - { - newValue = tmpIterator.Get(); - ++n; - } - tmpIterator = inputIterator; - ++tmpIterator; - if (!tmpIterator.IsAtEndOfLine()) - { - newValue += tmpIterator.Get(); - ++n; - } - assert(n != 0); - newValue /= n; - outputIterator.Set(newValue); - } - ++outputIterator; - - } - - if ((outputIterator.GetIndex())[dir0] != (inputIterator.GetIndex())[dir0] + 1) - { - itkExceptionMacro(<< "Error 2: " << (outputIterator.GetIndex())[dir0] << " , " - << (inputIterator.GetIndex())[dir0]); - } - inputIterator.NextLine(); - outputIterator.NextLine(); - } - inputIterator.NextSlice(); - outputIterator.NextSlice(); - } - -} - -/** - * Printself Method - */ -template <class TInputImage, class TInputPath, class TOutputImage> -void -AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "Path Value: " << m_Value << std::endl; -} - -template <class TInputImage, class TInputPath, class TOutputImage> -void -AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::GenerateOutputInformation() -{ - // call the superclass' implementation of this method - Superclass::GenerateOutputInformation(); - - // get pointers to the input and output - typename Superclass::InputImageConstPointer inputPtr = this->GetInput(); - typename Superclass::OutputImagePointer outputPtr = this->GetOutput(); - - unsigned int dir0; - //unsigned int dir1; - - if (m_Direction == 0) - { - dir0 = 0; - //dir1 = 1; - } - else - { - dir0 = 1; - //dir1 = 0; - } - - // we need to compute the output spacing, the output image size, and the - // output image start index - const typename TInputImage::SpacingType& - inputSpacing = inputPtr->GetSignedSpacing(); - const typename TInputImage::SizeType& inputSize - = inputPtr->GetLargestPossibleRegion().GetSize(); - const typename TInputImage::IndexType& inputStartIndex - = inputPtr->GetLargestPossibleRegion().GetIndex(); - - typename TOutputImage::SpacingType outputSpacing; - typename TOutputImage::SizeType outputSize; - typename TOutputImage::IndexType outputStartIndex; - - for (unsigned int i = 0; i < TOutputImage::ImageDimension; ++i) - { - outputSpacing[i] = inputSpacing[i]; - outputSize[i] = (unsigned int) (inputSize[i]); - outputStartIndex[i] = inputStartIndex[i]; - } - // we remove one column of the image - outputSize[dir0] = inputSize[dir0] + 1; - - outputPtr->SetSignedSpacing(outputSpacing); - - typename TOutputImage::RegionType outputLargestPossibleRegion; - outputLargestPossibleRegion.SetSize(outputSize); - outputLargestPossibleRegion.SetIndex(outputStartIndex); - - outputPtr->SetLargestPossibleRegion(outputLargestPossibleRegion); -} - -template <class TInputImage, class TInputPath, class TOutputImage> -void -AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::GenerateInputRequestedRegion() -{ - // call the superclass' implementation of this method - Superclass::GenerateInputRequestedRegion(); - // get pointers to the input and output - InputImagePointer inputPtr = - const_cast<InputImageType *>(this->GetInput()); - if (!inputPtr) - { - itkExceptionMacro(<< "Input has not been set."); - } - - inputPtr->SetRequestedRegion(inputPtr->GetLargestPossibleRegion()); - -} - -} // end namespace otb - -#endif diff --git a/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.h b/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.h deleted file mode 100644 index ad9142b72266dec5ef435f97e972d8adb24f574e..0000000000000000000000000000000000000000 --- a/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbImageToCarvingPathFilter_h -#define otbImageToCarvingPathFilter_h - -#include "otbImageToPathFilter.h" -#include "itkImageSliceConstIteratorWithIndex.h" - -namespace otb -{ -/** - * \class ImageToCarvingPathFilter - * \brief This filter find the minimum energy path of an image. - * - * This filter find the minimum energy path from top to bottom of - * the image (if Direction is set to 0) or from left to right - * (if direction is set to 1). - * - * This is one component necessary to apply the seam carving algorithm - * published by Shai Avidan, Ariel Shamir, - * Seam Carving for Content-Aware Image Resizing, - * ACM Transactions on Graphics, Volume 26, Number 3, - * SIGGRAPH 2007 - * - * \par INPUTS - * The input is an image, typically the output of a gradient filter. - * - * \par OUTPUTS - * The output is - * a polyline parametric path comprising one and only one pixel per line - * (resp. column) if direction is 0 (resp. 1). - * - * \sa RemoveCarvingPathFilter - * - * \ingroup PathFilters - * \ingroup ImageFilters - * - * \ingroup OTBSeamCarving - */ - -template <class TInputImage, class TOutputPath> -class ITK_EXPORT ImageToCarvingPathFilter - : public ImageToPathFilter<TInputImage, TOutputPath> -{ -public: - /** standards typedefs */ - typedef ImageToCarvingPathFilter Self; - typedef ImageToPathFilter<TInputImage, TOutputPath> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /// Creation through the object factory - itkNewMacro(Self); - /// Runtime information - itkTypeMacro(ImageToCarvingPathFilter, ImageToPathFilter); - - /// Template parameters typedef - typedef typename Superclass::InputImageType InputImageType; - typedef typename Superclass::InputImagePointerType InputImagePointerType; - typedef typename Superclass::OutputPathType OutputPathType; - typedef typename Superclass::OutputPathPointerType OutputPathPointerType; - - typedef typename InputImageType::PixelType PixelType; - - /** Set and Get foreground value */ - itkSetMacro(ForegroundValue, PixelType); - itkGetConstMacro(ForegroundValue, PixelType); - - /** Set and Get direction value */ - itkSetMacro(Direction, unsigned int); - itkGetConstMacro(Direction, unsigned int); - - /** Get EnergyPerPix value */ - itkGetConstMacro(EnergyPerPix, double); - -protected: - ImageToCarvingPathFilter(); - ~ImageToCarvingPathFilter() override {} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - void GenerateOutputInformation() override {} //does nothing - void GenerateData() override; - -private: - ImageToCarvingPathFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - PixelType m_ForegroundValue; - unsigned int m_Direction; - double m_EnergyPerPix; -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbImageToCarvingPathFilter.hxx" -#endif - -#endif diff --git a/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.hxx b/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.hxx deleted file mode 100644 index 11123630270d2e508b792d13397913d0b4c84bc3..0000000000000000000000000000000000000000 --- a/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.hxx +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbImageToCarvingPathFilter_hxx -#define otbImageToCarvingPathFilter_hxx - -#include "otbImageToCarvingPathFilter.h" -#include "otbMacro.h" -#include "itkConstantPadImageFilter.h" -#include "itkConstShapedNeighborhoodIterator.h" -#include "itkImageRegionConstIterator.h" -#include "itkNumericTraits.h" -#include "itkImageLinearConstIteratorWithIndex.h" - -namespace otb -{ -/* - * Constructor. - */ -template <class TInputImage, class TOutputPath> -ImageToCarvingPathFilter<TInputImage, TOutputPath> -::ImageToCarvingPathFilter() -{ - m_ForegroundValue = PixelType(255); - m_Direction = 0; - m_EnergyPerPix = 0.0; -} - -/** - * Main computation method. - */ -template <class TInputImage, class TOutputPath> -void -ImageToCarvingPathFilter<TInputImage, TOutputPath> -::GenerateData(void) -{ - - const InputImageType * inputImage = this->GetInput(); - OutputPathType * outputPath = this->GetOutput(); - - typedef itk::ImageSliceConstIteratorWithIndex - <InputImageType> IteratorType; - typedef itk::NeighborhoodIterator<InputImageType> - NeighborhoodIteratorType; - - IteratorType it(inputImage, - inputImage->GetLargestPossibleRegion()); - it.GoToBegin(); - - PixelType maxValue = itk::NumericTraits<PixelType>::max(); - - typename InputImageType::Pointer energyImage = InputImageType::New(); - energyImage->SetRegions(inputImage->GetLargestPossibleRegion()); - energyImage->Allocate(); - - typename NeighborhoodIteratorType::RadiusType radius; - radius.Fill(1); - NeighborhoodIteratorType neighIt(radius, energyImage, - energyImage->GetLargestPossibleRegion()); - neighIt.GoToBegin(); - - unsigned int dir0; - unsigned int dir1; - - typename IteratorType::OffsetType UP0; - typename IteratorType::OffsetType UP1; - typename IteratorType::OffsetType UP2; - typename IteratorType::OffsetType NEXT; - - const typename IteratorType::OffsetType LEFT = {{-1, 0}}; - const typename IteratorType::OffsetType RIGHT = {{1, 0}}; - const typename IteratorType::OffsetType UP = {{0, -1}}; - const typename IteratorType::OffsetType DOWN = {{0, 1}}; - const typename IteratorType::OffsetType LEFTUP = {{-1, -1}}; -// const typename IteratorType::OffsetType RIGHTDOWN ={{1, 1}}; - const typename IteratorType::OffsetType RIGHTUP = {{1, -1}}; - const typename IteratorType::OffsetType LEFTDOWN = {{-1, 1}}; -// const typename IteratorType::OffsetType CENTER ={{0, 0}}; - - if (m_Direction == 0) - { - dir0 = 0; - dir1 = 1; - UP0 = LEFTUP; - UP1 = UP; - UP2 = RIGHTUP; - NEXT = DOWN; - } - else - { - dir0 = 1; - dir1 = 0; - UP0 = LEFTUP; - UP1 = LEFT; - UP2 = LEFTDOWN; - NEXT = RIGHT; - } - - /** Compute the energy image top-down or left-right - * with cumulative energy (dynamic programming first step) */ - it.SetFirstDirection(dir0); - it.SetSecondDirection(dir1); - it.GoToBegin(); - neighIt.GoToBegin(); - while (!it.IsAtEnd()) - { - while (!it.IsAtEndOfSlice()) - { - while (!it.IsAtEndOfLine()) - { - neighIt.SetLocation(it.GetIndex()); //TODO bad for performances... find a better option - // this is really about 20% of total processing time !!! - - PixelType min = maxValue; - bool isInside = false; - bool flag = false; - if (neighIt.GetPixel(UP0, isInside) < min) - { - if (isInside) - { - min = neighIt.GetPixel(UP0); - flag = true; - } - } - if (neighIt.GetPixel(UP1, isInside) < min) - { - if (isInside) - { - min = neighIt.GetPixel(UP1); - flag = true; - } - } - if (neighIt.GetPixel(UP2, isInside) < min) - { - if (isInside) - { - min = neighIt.GetPixel(UP2); - flag = true; - } - } - - if (!flag) //no previous value - { - min = 0; - } - - PixelType newValue = it.Get() + min; - neighIt.SetCenterPixel(newValue); - - ++it; - - } - it.NextLine(); - } - it.NextSlice(); - } - - /** Follow the minima bottom-up or right-left - * (dynamic programming second step) */ - - //find the starting point to follow on the last line - typedef itk::ImageLinearConstIteratorWithIndex<InputImageType> - LinearIteratorType; - - LinearIteratorType LinIt(energyImage, - energyImage->GetLargestPossibleRegion()); - LinIt.SetDirection(dir0); - LinIt.GoToReverseBegin(); - typedef typename InputImageType::IndexType IndexType; - - PixelType min = maxValue; - IndexType indexToAdd; - while (!LinIt.IsAtReverseEndOfLine()) - { - if (LinIt.Get() < min) - { - min = LinIt.Get(); - indexToAdd = LinIt.GetIndex(); - } - --LinIt; - } - outputPath->AddVertex(indexToAdd); - m_EnergyPerPix = ((double) min) / (inputImage->GetLargestPossibleRegion().GetSize())[dir1]; - - //follow the min - neighIt.SetLocation(indexToAdd); - bool flag = true; - while (flag) - { - flag = false; - PixelType minValue = maxValue; - IndexType indexToAdd2; - bool isInside = false; - - if (neighIt.GetPixel(UP0, isInside) < min) - { - if (isInside) - { - minValue = neighIt.GetPixel(UP0); - indexToAdd2 = neighIt.GetIndex(UP0); - flag = true; - } - } - - if (neighIt.GetPixel(UP1, isInside) < minValue) - { - if (isInside) - { - minValue = neighIt.GetPixel(UP1); - indexToAdd2 = neighIt.GetIndex(UP1); - flag = true; - } - } - - if (neighIt.GetPixel(UP2, isInside) < minValue) - { - if (isInside) - { - minValue = neighIt.GetPixel(UP2); - indexToAdd2 = neighIt.GetIndex(UP2); - flag = true; - } - } - - if (flag) - { - outputPath->AddVertex(indexToAdd2); - neighIt.SetLocation(indexToAdd2); - } - - } - -} - -template <class TInputImage, class TOutputPath> -void -ImageToCarvingPathFilter<TInputImage, TOutputPath> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << "Foreground value : " << m_ForegroundValue << std::endl; -} -} // end namespace otb - -#endif diff --git a/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.h b/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.h deleted file mode 100644 index c503944f713ee8a93ea76f5eb209557ee829ea45..0000000000000000000000000000000000000000 --- a/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRemoveCarvingPathFilter_h -#define otbRemoveCarvingPathFilter_h - -#include "itkImageAndPathToImageFilter.h" -#include "itkImageSliceIteratorWithIndex.h" - -namespace otb -{ -/** \class RemoveCarvingPathFilter - * \brief This class remove pixels given in one path - * - * - * - * This filter remove pixels found by the otb::ImageToCarvingPathFilter - * thus decreasing the image size. - * the image (if Direction is set to 0) or from left to right - * (if direction is set to 1). - * - * This is one component necessary to apply the seam carving algorithm - * published by Shai Avidan, Ariel Shamir, - * Seam Carving for Content-Aware Image Resizing, - * ACM Transactions on Graphics, Volume 26, Number 3, - * SIGGRAPH 2007 - * - * \par INPUTS - * The first input is an image, usually, the same one provided to the - * otb::ImageToCarvingPathFilter - * The second input is a path, typically the output of otb::ImageToCarvingPathFilter. - * - * \par OUTPUTS - * The output is an image with a smaller size than the input image. There is one less - * column if direction is 0 and one less line if direction is 1. - * - * \sa ImageToCarvingPathFilter - * - * - * \ingroup PathFilters - * \ingroup ImageFilters - * - * \ingroup OTBSeamCarving - */ - -template <class TInputImage, class TInputPath, class TOutputImage> -class ITK_EXPORT RemoveCarvingPathFilter : public itk::ImageAndPathToImageFilter<TInputImage, TInputPath, TOutputImage> -{ -public: - /** Standard class typedefs. */ - typedef RemoveCarvingPathFilter Self; - typedef itk::ImageAndPathToImageFilter<TInputImage, TInputPath, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(RemoveCarvingPathFilter, itk::ImageAndPathToImageFilter); - - /** Some convenient typedefs. */ - typedef TInputImage InputImageType; - typedef typename InputImageType::Pointer InputImagePointer; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - typedef typename InputImageType::RegionType InputImageRegionType; - typedef typename InputImageType::PixelType InputImagePixelType; - typedef TInputPath InputPathType; - typedef typename InputPathType::Pointer InputPathPointer; - typedef typename InputPathType::ConstPointer InputPathConstPointer; - typedef typename InputPathType::InputType InputPathInputType; - typedef typename InputPathType::OutputType InputPathOutputType; - typedef typename InputPathType::IndexType InputPathIndexType; - typedef typename InputPathType::OffsetType InputPathOffsetType; - typedef TOutputImage OutputImageType; - typedef typename OutputImageType::Pointer OutputImagePointer; - typedef typename OutputImageType::ConstPointer OutputImageConstPointer; - - typedef typename OutputImageType::RegionType OutputImageRegionType; - typedef typename OutputImageType::PixelType OutputImagePixelType; - typedef typename OutputImageType::ValueType OutputImageValueType; - -// typedef typename itk::ImageRegionConstIterator<InputImageType> InputIteratorType; -// typedef typename itk::ImageRegionIterator<OutputImageType> OutputIteratorType; - typedef typename itk::ImageSliceConstIteratorWithIndex<InputImageType> InputIteratorType; - typedef typename itk::ImageSliceIteratorWithIndex<OutputImageType> OutputIteratorType; - - /** Set/Get the path input of this process object. - Note: these methods are adding to get the proper name */ - void SetInputPath(const TInputPath * path); - - const TInputPath * GetInputPath(void); - - itkSetMacro(Value, OutputImagePixelType); - itkGetConstReferenceMacro(Value, OutputImagePixelType); - - /** Set and Get direction value */ - itkSetMacro(Direction, unsigned int); - itkGetConstMacro(Direction, unsigned int); - - void GenerateOutputInformation() override; - -protected: - RemoveCarvingPathFilter(); - ~RemoveCarvingPathFilter() override {} - - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - void GenerateData() override; - -private: - RemoveCarvingPathFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - OutputImagePixelType m_Value; - unsigned int m_Direction; -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRemoveCarvingPathFilter.hxx" -#endif - -#endif diff --git a/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.hxx b/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.hxx deleted file mode 100644 index 46640119ef2d1a78837cc0d9ab133ba0fb6a137e..0000000000000000000000000000000000000000 --- a/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.hxx +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#ifndef otbRemoveCarvingPathFilter_hxx -#define otbRemoveCarvingPathFilter_hxx - -#include "otbRemoveCarvingPathFilter.h" -#include "itkMacro.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TInputImage, class TInputPath, class TOutputImage> -RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::RemoveCarvingPathFilter() -{ - m_Value = static_cast<OutputImagePixelType>(255.0); - m_Direction = 0; -} - -template <class TInputImage, class TInputPath, class TOutputImage> -inline void -RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::SetInputPath(const TInputPath * path) -{ - this->SetPathInput(path); -} - -template <class TInputImage, class TInputPath, class TOutputImage> -const TInputPath * -RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::GetInputPath(void) -{ - return this->GetPathInput(); -} - -/** - * Main computation method. - */ -template <class TInputImage, class TInputPath, class TOutputImage> -void -RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::GenerateData(void) -{ - - const InputImageType * inputImage = this->GetImageInput(); - const InputPathType * inputPath = this->GetPathInput(); - OutputImageType * outputImage = this->GetOutput(); - - outputImage->SetBufferedRegion(outputImage->GetRequestedRegion()); - outputImage->Allocate(); - - InputIteratorType inputIterator(inputImage, - inputImage->GetLargestPossibleRegion()); - OutputIteratorType outputIterator(outputImage, - outputImage->GetLargestPossibleRegion()); - - unsigned int dir0; - unsigned int dir1; - - if (m_Direction == 0) - { - dir0 = 0; - dir1 = 1; - } - else - { - dir0 = 1; - dir1 = 0; - } - - inputIterator.SetFirstDirection(dir0); - inputIterator.SetSecondDirection(dir1); - inputIterator.GoToBegin(); - outputIterator.SetFirstDirection(dir0); - outputIterator.SetSecondDirection(dir1); - outputIterator.GoToBegin(); - - int line = -1; - typename InputImageType::IndexType index; - typename InputPathType::VertexListType::ConstPointer vertexList = inputPath->GetVertexList(); - typename InputPathType::VertexListType::ConstIterator pathIterator; - typename InputImageType::IndexType indexToRemove; - - //go to the end of the path - pathIterator = vertexList->Begin(); - while (pathIterator != vertexList->End()) - { - ++pathIterator; - } - --pathIterator; - - while (!inputIterator.IsAtEnd()) - { - while (!inputIterator.IsAtEndOfSlice()) - { - while (!inputIterator.IsAtEndOfLine()) - { - index = inputIterator.GetIndex(); - - if (index[dir1] != line) - { - line = index[dir1]; - typename InputImageType::PointType tmpIndex; - inputImage->TransformContinuousIndexToPhysicalPoint(pathIterator.Value(), tmpIndex); - inputImage->TransformPhysicalPointToIndex(tmpIndex, indexToRemove); - - if (pathIterator != vertexList->Begin()) - { - --pathIterator; - } - if (index[dir1] != indexToRemove[dir1]) - { - itkExceptionMacro(<< "Error!!!"); - } - } - if (index[dir0] != indexToRemove[dir0]) - { - outputIterator.Set(inputIterator.Get()); - ++outputIterator; - } - ++inputIterator; - } - inputIterator.NextLine(); - outputIterator.NextLine(); - } - inputIterator.NextSlice(); - outputIterator.NextSlice(); - } - -} - -/** - * Printself Method - */ -template <class TInputImage, class TInputPath, class TOutputImage> -void -RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "Path Value: " << m_Value << std::endl; -} - -template <class TInputImage, class TInputPath, class TOutputImage> -void -RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage> -::GenerateOutputInformation() -{ - // call the superclass' implementation of this method - Superclass::GenerateOutputInformation(); - - // get pointers to the input and output - typename Superclass::InputImageConstPointer inputPtr = this->GetInput(); - typename Superclass::OutputImagePointer outputPtr = this->GetOutput(); - - unsigned int dir0; - //unsigned int dir1; - - if (m_Direction == 0) - { - dir0 = 0; - //dir1 = 1; - } - else - { - dir0 = 1; - //dir1 = 0; - } - - // we need to compute the output spacing, the output image size, and the - // output image start index - const typename TInputImage::SpacingType& - inputSpacing = inputPtr->GetSignedSpacing(); - const typename TInputImage::SizeType& inputSize - = inputPtr->GetLargestPossibleRegion().GetSize(); - const typename TInputImage::IndexType& inputStartIndex - = inputPtr->GetLargestPossibleRegion().GetIndex(); - - typename TOutputImage::SpacingType outputSpacing; - typename TOutputImage::SizeType outputSize; - typename TOutputImage::IndexType outputStartIndex; - - for (unsigned int i = 0; i < TOutputImage::ImageDimension; ++i) - { - outputSpacing[i] = inputSpacing[i]; - outputSize[i] = (unsigned int) (inputSize[i]); - outputStartIndex[i] = inputStartIndex[i]; - } - // we remove one column of the image - outputSize[dir0] = inputSize[dir0] - 1; - - outputPtr->SetSignedSpacing(outputSpacing); - - typename TOutputImage::RegionType outputLargestPossibleRegion; - outputLargestPossibleRegion.SetSize(outputSize); - outputLargestPossibleRegion.SetIndex(outputStartIndex); - - outputPtr->SetLargestPossibleRegion(outputLargestPossibleRegion); -} - -} // end namespace otb - -#endif diff --git a/Modules/Feature/SeamCarving/otb-module.cmake b/Modules/Feature/SeamCarving/otb-module.cmake deleted file mode 100644 index d0f0c8465d5031e2097b607a671cbfe534636d43..0000000000000000000000000000000000000000 --- a/Modules/Feature/SeamCarving/otb-module.cmake +++ /dev/null @@ -1,38 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -set(DOCUMENTATION "This module contains necessary components to apply the seam -carving algorithm published by Shai Avidan, Ariel Shamir, Seam Carving for -Content-Aware Resizing, ACM Transactions on Graphics, Volume 26, Number 3, SIGGRAPH -2007.") - -otb_module(OTBSeamCarving - DEPENDS - OTBPath - OTBCommon - OTBITK - - TEST_DEPENDS - OTBTestKernel - OTBImageBase - - DESCRIPTION - "${DOCUMENTATION}" -) diff --git a/Modules/Feature/SeamCarving/test/CMakeLists.txt b/Modules/Feature/SeamCarving/test/CMakeLists.txt deleted file mode 100644 index f8775d775c5a1ca807d63b5504e0a58401cae263..0000000000000000000000000000000000000000 --- a/Modules/Feature/SeamCarving/test/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -otb_module_test() - -set(OTBSeamCarvingTests -otbSeamCarvingTestDriver.cxx -) - -add_executable(otbSeamCarvingTestDriver ${OTBSeamCarvingTests}) -target_link_libraries(otbSeamCarvingTestDriver ${OTBSeamCarving-Test_LIBRARIES}) -otb_module_target_label(otbSeamCarvingTestDriver) - -# Tests Declaration - diff --git a/Modules/Feature/SeamCarving/test/otbSeamCarvingTestDriver.cxx b/Modules/Feature/SeamCarving/test/otbSeamCarvingTestDriver.cxx deleted file mode 100644 index fb60f6825789081e61c2b52bad4e851b9758170f..0000000000000000000000000000000000000000 --- a/Modules/Feature/SeamCarving/test/otbSeamCarvingTestDriver.cxx +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbTestMain.h" - -void RegisterTests() -{ -} diff --git a/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.h b/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.h deleted file mode 100644 index 6d8d3fb4e696f8ff9d426f83133276001766e4b6..0000000000000000000000000000000000000000 --- a/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbBinaryImageMinimalBoundingRegionCalculator_h -#define otbBinaryImageMinimalBoundingRegionCalculator_h - -#include "itkImageToImageFilter.h" -#include "itkObjectFactory.h" - -namespace otb -{ -/** - * \class BinaryImageMinimalBoundingRegionCalculator - * \brief This class compute the smallest region of the image - * containing every pixel with the foreground value. - * - * This class is used for instance in the RCC8 calculator filter, - * where the input region used for computation has to be the smallest possible - * for costs reasons. The Pad arg allows the user to get a region of pad pixel larger - * at each bound in case a security margin has to be kept. - * - * \sa ImageToImageRCC8Calculator - * - * \ingroup OTBImageManipulation - */ -template <class TInputImage> -class ITK_EXPORT BinaryImageMinimalBoundingRegionCalculator - : public itk::ImageToImageFilter<TInputImage, TInputImage> -{ -public: - /** Standard typedefs */ - typedef BinaryImageMinimalBoundingRegionCalculator Self; - typedef itk::ImageToImageFilter<TInputImage, TInputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Creation through object factory macro */ - itkNewMacro(Self); - /** Type macro */ - itkTypeMacro(BinaryImageMinimalBoundingRegionCalculator, ImageToImageFilter); - - typedef TInputImage InputImageType; - typedef typename InputImageType::PixelType PixelType; - typedef typename InputImageType::RegionType RegionType; - typedef typename InputImageType::Pointer InputImagePointerType; - /** Toogle the pad option */ - itkGetMacro(Region, RegionType); - itkSetMacro(InsideValue, PixelType); - itkGetMacro(InsideValue, PixelType); - itkSetMacro(Pad, unsigned int); - itkGetMacro(Pad, unsigned int); - -protected: - /** Constructor */ - BinaryImageMinimalBoundingRegionCalculator(); - /** Destructor */ - ~BinaryImageMinimalBoundingRegionCalculator() override {} - /** Main computation method */ - void GenerateData(void) override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; -private: - BinaryImageMinimalBoundingRegionCalculator(const Self &) = delete; - void operator =(const Self&) = delete; - /** The computed region */ - RegionType m_Region; - /** Toogle if pad wanted */ - unsigned int m_Pad; - /** Inside value */ - PixelType m_InsideValue; -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbBinaryImageMinimalBoundingRegionCalculator.hxx" -#endif - -#endif diff --git a/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.hxx b/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.hxx deleted file mode 100644 index cfe5d95b6b9d8099421302cab87764d99d84e8a3..0000000000000000000000000000000000000000 --- a/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.hxx +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbBinaryImageMinimalBoundingRegionCalculator_hxx -#define otbBinaryImageMinimalBoundingRegionCalculator_hxx - -#include "otbBinaryImageMinimalBoundingRegionCalculator.h" -#include "itkImageSliceConstIteratorWithIndex.h" -#include "otbMacro.h" - -namespace otb -{ -/* - * Constructor - */ -template <class TInputImage> -BinaryImageMinimalBoundingRegionCalculator<TInputImage> -::BinaryImageMinimalBoundingRegionCalculator() -{ - // The pad option is desactivated by default - m_Pad = 0; - // Set the default region - typename InputImageType::SizeType size; - typename InputImageType::IndexType index; - size[0] = 0; - size[1] = 0; - index[0] = 0; - index[1] = 0; - m_Region.SetSize(size); - m_Region.SetIndex(index); - m_InsideValue = static_cast<PixelType>(255); -} -/** - * Main computation method - */ -template <class TInputImage> -void -BinaryImageMinimalBoundingRegionCalculator<TInputImage> -::GenerateData(void) -{ - // Input images pointers - const InputImageType* image = this->GetInput(); - // Iterator definition - typedef itk::ImageSliceConstIteratorWithIndex<InputImageType> SliceIteratorType; - // Indexes containing upper-left and lower-right corner - typename InputImageType::IndexType min; - typename InputImageType::IndexType max; - min[0] = 0; - min[1] = 0; - max[1] = 0; - max[1] = 0; - for (unsigned int axis = 0; axis < InputImageType::ImageDimension; ++axis) - { // Create the forward iterator to find lower bound - SliceIteratorType fit(image, image->GetLargestPossibleRegion()); - - fit.SetFirstDirection(!axis); - fit.SetSecondDirection(axis); - fit.GoToBegin(); - - // Walk through the two images line by line - while (!fit.IsAtEnd()) - { - while (!fit.IsAtEndOfSlice()) - { - while (!fit.IsAtEndOfLine()) - { - // If a common intersection is found - if (fit.Get() == m_InsideValue) - { - // then the lower bound is found - min[axis] = fit.GetIndex()[axis]; - fit.GoToReverseBegin(); // skip to the end - break; - } - ++fit; - } - fit.NextLine(); - } - fit.NextSlice(); - } - // Create the reverse iterator to find upper bound - SliceIteratorType rit(image, image->GetLargestPossibleRegion()); - rit.SetFirstDirection(!axis); - rit.SetSecondDirection(axis); - rit.GoToReverseBegin(); - // Walk through the two images line by line - while (!rit.IsAtReverseEnd()) - { - while (!rit.IsAtReverseEndOfSlice()) - { - while (!rit.IsAtReverseEndOfLine()) - { - // If a common intersection is found - if (rit.Get() == m_InsideValue) - { - max[axis] = rit.GetIndex()[axis]; - rit.GoToBegin(); //Skip to reverse end - break; - } - --rit; - - } - rit.PreviousLine(); - - } - rit.PreviousSlice(); - } - } - - typename InputImageType::SizeType size; - typename InputImageType::IndexType index; - - for (unsigned int i = 0; i < InputImageType::ImageDimension; ++i) - { - size[i] = max[i] - min[i] + 1; - index[i] = min[i]; - } - - m_Region.SetIndex(index); - m_Region.SetSize(size); - - if (m_Pad) - { - m_Region.PadByRadius(m_Pad); - } - - m_Region.Crop(image->GetLargestPossibleRegion()); -} -/** - * PrintSelf method - */ -template <class TInputImage> -void -BinaryImageMinimalBoundingRegionCalculator<TInputImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -} // End namespace otb - -#endif diff --git a/Modules/Filtering/ImageManipulation/test/CMakeLists.txt b/Modules/Filtering/ImageManipulation/test/CMakeLists.txt index e8317ea3781b71aeff5124c768480cea1b8efd5c..53e76737f0b54cf6717ef348095b401642d630c8 100644 --- a/Modules/Filtering/ImageManipulation/test/CMakeLists.txt +++ b/Modules/Filtering/ImageManipulation/test/CMakeLists.txt @@ -51,7 +51,6 @@ otbVectorRescaleIntensityImageFilter.cxx otbLog10ThresholdedImageFilterTest.cxx otbExtractROIResample.cxx otbLocalGradientVectorImageFilter.cxx -otbBinaryImageMinimalBoundingRegionCalculator.cxx otbPerBandVectorImageFilterWithSobelFilter.cxx otbBinaryImageDensityFunction.cxx otbThresholdVectorImageFilter.cxx @@ -451,18 +450,6 @@ otb_add_test(NAME bfTvLocalGradientVectorImageFilter COMMAND otbImageManipulatio ${INPUTDATA}/cupriteSubHsi.tif ${TEMP}/bfTvLocalGradientVectorImageFilter.tif) -otb_add_test(NAME bfTvBoundingRegionCalculator COMMAND otbImageManipulationTestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/bfBoundingRegionCalculatorOutput.txt - ${TEMP}/bfBoundingRegionCalculatorOutput.txt - otbBinaryImageMinimalBoundingRegionCalculator - 4 - ${TEMP}/bfBoundingRegionCalculatorOutput.txt - ${INPUTDATA}/rcc8_mire1.png - ${INPUTDATA}/rcc8_mire2.png - ${INPUTDATA}/rcc8_mire3.png - ${INPUTDATA}/rcc8_mire4.png - ) otb_add_test(NAME bfTvPerBandVectorImageFilterWithSobelFilter COMMAND otbImageManipulationTestDriver --compare-image ${EPSILON_7} diff --git a/Modules/Filtering/ImageManipulation/test/otbBinaryImageMinimalBoundingRegionCalculator.cxx b/Modules/Filtering/ImageManipulation/test/otbBinaryImageMinimalBoundingRegionCalculator.cxx deleted file mode 100644 index 90d3167cbb890262026198319a4b781b9af99b73..0000000000000000000000000000000000000000 --- a/Modules/Filtering/ImageManipulation/test/otbBinaryImageMinimalBoundingRegionCalculator.cxx +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbImage.h" -#include "otbBinaryImageMinimalBoundingRegionCalculator.h" -#include "otbImageFileReader.h" -#include "otbImageList.h" - -int otbBinaryImageMinimalBoundingRegionCalculator(int itkNotUsed(argc), char* argv[]) -{ - const unsigned int Dimension = 2; - - int nbImages = atoi(argv[1]); - char * outfile = argv[2]; - - typedef unsigned char PixelType; - typedef otb::Image<PixelType, Dimension> ImageType; - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef otb::BinaryImageMinimalBoundingRegionCalculator<ImageType> - BoundingRegionCalculatorType; - typedef BoundingRegionCalculatorType::RegionType RegionType; - typedef otb::ImageList<ImageType> ImageListType; - typedef ImageListType::Iterator IteratorType; - // reference image list - ImageListType::Pointer images = ImageListType::New(); - - // Reading input images - std::ofstream out; - out.open(outfile, std::ios::out); - out << "Test results from otbBinaryImageBoundingRegionCalculator test." << std::endl; - for (int i = 1; i <= nbImages; ++i) - { - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(argv[2 + i]); - reader->Update(); - images->PushBack(reader->GetOutput()); - } - - // Declaration - BoundingRegionCalculatorType::Pointer brct; - // Computing bounding region for each image - for (IteratorType it = images->Begin(); it != images->End(); ++it) - { - brct = BoundingRegionCalculatorType::New(); - brct->SetInput(it.Get()); - brct->Update(); - RegionType region = brct->GetRegion(); - out << region.GetIndex() << "\t" << region.GetSize() << std::endl; - } - out << std::endl << "Testing the pad option" << std::endl << std::endl; - for (IteratorType it = images->Begin(); it != images->End(); ++it) - { - brct = BoundingRegionCalculatorType::New(); - brct->SetPad(1); - brct->SetInput(it.Get()); - brct->Update(); - RegionType region = brct->GetRegion(); - out << region.GetIndex() << "\t" << region.GetSize() << std::endl; - } - - out.close(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx b/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx index 98efbed44de03307f9ab8818fc8dcd85d67110a9..0b24cab0e47dd8544329617ada28fc1433a2897a 100644 --- a/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx +++ b/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx @@ -51,7 +51,6 @@ void RegisterTests() REGISTER_TEST(otbLog10ThresholdedImageFilterTest); REGISTER_TEST(otbExtractROIResample); REGISTER_TEST(otbLocalGradientVectorImageFilterTest); - REGISTER_TEST(otbBinaryImageMinimalBoundingRegionCalculator); REGISTER_TEST(otbPerBandVectorImageFilterWithSobelFilter); REGISTER_TEST(otbBinaryImageDensityFunction); REGISTER_TEST(otbThresholdVectorImageFilterTest); diff --git a/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.h b/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.h deleted file mode 100644 index f04fbd9892dcfbc7f378e0bdd6efce28e586f366..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbParserConditionDataNodeFeatureFunction_h -#define otbParserConditionDataNodeFeatureFunction_h - -#include "otbDataNodeImageFunction.h" -#include "otbPolyLineImageConstIterator.h" -#include "otbMaskMuParserFunctor.h" -#include <string> - -namespace otb -{ -/** \class ParserConditionDataNodeFeatureFunction - * \brief Compute a ParserCondition based feature alongside a - * datanode. - * - * This function evaluate a condition alongside a datanode. - * The descriptor is the percentage of pixels iterated for which - * the condition is true. - * - * \ingroup Functions - * \sa DataNodeImageFunction - * \sa SpectralAngleDataNodeFeatureFunction - * - * \ingroup OTBMathParser - */ - -template < -class TImage, -class TCoordRep = double, -class TPrecision = double -> -class ITK_EXPORT ParserConditionDataNodeFeatureFunction : - public DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision> -{ -public: - /** Standard class typedefs. */ - typedef ParserConditionDataNodeFeatureFunction Self; - typedef DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision> - Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(ParserConditionDataNodeFeatureFunction, DataNodeImageFunction); - - /** Some typedefs. */ - typedef typename Superclass::DataNodeType DataNodeType; - typedef typename DataNodeType::LineType LineType; - - typedef TImage InputImageType; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - typedef typename InputImageType::PixelType PixelType; - typedef typename InputImageType::InternalPixelType ScalarRealType; - typedef typename InputImageType::IndexType IndexType; - typedef typename InputImageType::IndexValueType IndexValueType; - - typedef TCoordRep CoordRepType; - - typedef TPrecision PrecisionType; - - typedef PolyLineImageConstIterator<InputImageType, LineType> - ImageLineIteratorType; - - typedef Functor::MaskMuParserFunctor<PixelType> ParserConditionFunctorType; - typedef typename ParserConditionFunctorType::Pointer ParserConditionFunctorPointer; - - typedef std::vector<PrecisionType> OutputType; - - OutputType Evaluate( const DataNodeType& node ) const override; - - std::string GetExpression() const - { - return m_ParserConditionFunctor->GetExpression(); - } - - void SetExpression(std::string expression) - { - m_ParserConditionFunctor->SetExpression(expression); - } - - void SetSpectralAngleReferencePixel(const PixelType& pixel) - { - m_ParserConditionFunctor->SetSpectralAngleReferencePixel(pixel); - } - -protected: - ParserConditionDataNodeFeatureFunction(); - ~ParserConditionDataNodeFeatureFunction() override {} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - ParserConditionDataNodeFeatureFunction(const Self&) = delete; - void operator=(const Self&) = delete; - - /** ParserCondition Functor */ - ParserConditionFunctorPointer m_ParserConditionFunctor; -}; - -} -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbParserConditionDataNodeFeatureFunction.hxx" -#endif - -#endif diff --git a/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.hxx b/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.hxx deleted file mode 100644 index a32c38294f18b8a09a165f97bd7f347677813351..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.hxx +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbParserConditionDataNodeFeatureFunction_hxx -#define otbParserConditionDataNodeFeatureFunction_hxx - -#include "otbParserConditionDataNodeFeatureFunction.h" - -namespace otb -{ - -/** - * Constructor - */ -template <class TImage, class TCoordRep, class TPrecision> -ParserConditionDataNodeFeatureFunction<TImage, TCoordRep, TPrecision> -::ParserConditionDataNodeFeatureFunction() -{ - m_ParserConditionFunctor = ParserConditionFunctorType::New(); -} - -/** - * Standard "PrintSelf" method - */ -template <class TImage, class TCoordRep, class TPrecision> -void -ParserConditionDataNodeFeatureFunction<TImage, TCoordRep, TPrecision> -::PrintSelf( std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf( os, indent ); - //os << indent << "ParserCondition : " << m_ParserConditionFunctor << std::endl; -} - -template <class TImage, class TCoordRep, class TPrecision> -typename ParserConditionDataNodeFeatureFunction<TImage, TCoordRep, TPrecision> -::OutputType - ParserConditionDataNodeFeatureFunction<TImage, TCoordRep, TPrecision> -::Evaluate( const DataNodeType& node ) const -{ - // The parser evaluation can't be const since the parser state - // changes at the first evaluation, but in fact we don't modify - // anything here. - // To fit with the rest of the framework, we try to keep the Evaluate - // function const - Self* _this = const_cast<Self*>(this); - ParserConditionFunctorType& parser = *(_this->m_ParserConditionFunctor); - // Ugly things over - - - const typename ImageLineIteratorType::PathType* path; - - switch (node.GetNodeType()) - { - case FEATURE_POINT: - { - itkExceptionMacro(<< "This DataNode type is not handle yet"); - break; - } - case FEATURE_LINE: - { - path = node.GetLine(); - break; - } - case FEATURE_POLYGON: - { - path = node.GetPolygonExteriorRing(); - break; - } - default: - { - itkExceptionMacro(<< "This DataNode type is not handle yet"); - break; - } - } - - ImageLineIteratorType lineIt(this->GetInputImage(), path); - lineIt.GoToBegin(); - - double nbValidPixel = 0.; - double nbVisitedPixel = 0.; - - while(!lineIt.IsAtEnd()) - { - if(this->IsInsideBuffer(lineIt.GetIndex())) - { - if( parser(this->GetInputImage()->GetPixel(lineIt.GetIndex())) ) - { - nbValidPixel += 1; - } - nbVisitedPixel += 1; - } - ++lineIt; - } - - OutputType output; - if(nbVisitedPixel == 0) - { - output.push_back(static_cast<PrecisionType>(0.)); - } - else - { - output.push_back(static_cast<PrecisionType>(nbValidPixel/nbVisitedPixel)); - } - - output.push_back(static_cast<PrecisionType>(nbValidPixel)); - output.push_back(static_cast<PrecisionType>(nbVisitedPixel)); - return output; -} - -} // end namespace otb - -#endif diff --git a/Modules/Filtering/MathParser/test/CMakeLists.txt b/Modules/Filtering/MathParser/test/CMakeLists.txt index 9f082865ac762f233a0383f097e990260d26203e..f2dbcdfd271d6eecd4f97d9e075847a7f49b85c3 100644 --- a/Modules/Filtering/MathParser/test/CMakeLists.txt +++ b/Modules/Filtering/MathParser/test/CMakeLists.txt @@ -23,7 +23,6 @@ otb_module_test() set(OTBMathParserTests otbMathParserTestDriver.cxx otbMaskMuParserFilterTest.cxx -otbParserConditionDataNodeFeatureFunction.cxx otbParserTest.cxx otbImageListToSingleImageFilterTest.cxx otbBandMathImageFilter.cxx @@ -48,32 +47,6 @@ otb_add_test(NAME bfTvMaskMuParserFilterTest COMMAND otbMathParserTestDriver "(b1>100)*(b2>120)" ) -otb_add_test(NAME bfTvParserConditionDataNodeFeatureFunction_Line_NDVI COMMAND otbMathParserTestDriver - --compare-ogr ${EPSILON_9} - ${BASELINE_FILES}/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp - ${TEMP}/bfTvParserConditionDataNodeFeatureFunction_Line_NDVI.shp - otbParserConditionDataNodeFeatureFunction - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF - ${INPUTDATA}/DEM/srtm_directory - ${TEMP}/bfTvParserConditionDataNodeFeatureFunction_Line_NDVI.shp - "ndvi(b3,b4) > 0.047" - 0 - ) - -otb_add_test(NAME bfTvParserConditionDataNodeFeatureFunction_Polygon_NDVI COMMAND otbMathParserTestDriver - --compare-ogr ${EPSILON_6} - ${BASELINE_FILES}/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp - ${TEMP}/bfTvParserConditionDataNodeFeatureFunction_Polygon_NDVI.shp - otbParserConditionDataNodeFeatureFunction - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF - ${INPUTDATA}/DEM/srtm_directory - ${TEMP}/bfTvParserConditionDataNodeFeatureFunction_Polygon_NDVI.shp - "ndvi(b3,b4) > 0.047" - 0 - ) - otb_add_test(NAME coTvParser COMMAND otbMathParserTestDriver otbParserTest ) diff --git a/Modules/Filtering/MathParser/test/otbMathParserTestDriver.cxx b/Modules/Filtering/MathParser/test/otbMathParserTestDriver.cxx index 5ef579c49abbcd1d1a033f9c42ac09072d8aad97..4f12db6c962a985a8c7a0d92e2a449f28e8aef28 100644 --- a/Modules/Filtering/MathParser/test/otbMathParserTestDriver.cxx +++ b/Modules/Filtering/MathParser/test/otbMathParserTestDriver.cxx @@ -23,7 +23,6 @@ void RegisterTests() { REGISTER_TEST(otbMaskMuParserFilterTest); - REGISTER_TEST(otbParserConditionDataNodeFeatureFunction); REGISTER_TEST(otbParserTest); REGISTER_TEST(otbImageListToSingleImageFilter); REGISTER_TEST(otbBandMathImageFilter); diff --git a/Modules/Filtering/MathParser/test/otbParserConditionDataNodeFeatureFunction.cxx b/Modules/Filtering/MathParser/test/otbParserConditionDataNodeFeatureFunction.cxx deleted file mode 100644 index 4982b50ced444f777c2ae95ef66d2990c174319a..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MathParser/test/otbParserConditionDataNodeFeatureFunction.cxx +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#include "otbParserConditionDataNodeFeatureFunction.h" - -#include "otbVectorImage.h" -#include "otbImageFileReader.h" -#include "otbVectorData.h" -#include "otbVectorDataFileReader.h" -#include "otbVectorDataIntoImageProjectionFilter.h" -#include "otbVectorDataFileWriter.h" -#include "itkPreOrderTreeIterator.h" - - -int otbParserConditionDataNodeFeatureFunction(int itkNotUsed(argc), char* argv[]) -{ - const char * inputVD = argv[1]; - const char * inputImg = argv[2]; - const char * DEMDir = argv[3]; - const char * outputVD = argv[4]; - const char * expression = argv[5]; - int DisplayWarnings = atoi(argv[6]); - - typedef double CoordRepType; - typedef double PrecisionType; - typedef otb::VectorImage<PrecisionType> ImageType; - typedef otb::ImageFileReader<ImageType> ImageReaderType; - typedef otb::VectorData<CoordRepType, 2, PrecisionType> VectorDataType; - typedef VectorDataType::DataNodeType DataNodeType; - typedef otb::VectorDataFileReader<VectorDataType> VectorDataReaderType; - typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, ImageType> VectorDataReProjFilter; - typedef otb::VectorDataFileWriter<VectorDataType> VectorDataWriterType; - typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> TreeIteratorType; - - typedef otb::ParserConditionDataNodeFeatureFunction<ImageType, CoordRepType, PrecisionType> - ParserConditionDataNodeFeaturefunctionType; - typedef ParserConditionDataNodeFeaturefunctionType::OutputType ParserConditionFeatureOutputType; - - ImageReaderType::Pointer imgReader = ImageReaderType::New(); - VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New(); - VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New(); - VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New(); - ParserConditionDataNodeFeaturefunctionType::Pointer - ParserConditionFeatureFunction = ParserConditionDataNodeFeaturefunctionType::New(); - - if (!DisplayWarnings) - { - imgReader->SetGlobalWarningDisplay(0); - } - - otb::DEMHandler::Instance()->OpenDEMDirectory(DEMDir); - - vdReader->SetFileName(inputVD); - vdReader->Update(); - - imgReader->SetFileName(inputImg); - imgReader->UpdateOutputInformation(); - imgReader->Update(); //Needed to set m_EndIndex, m_StartIndex in otbDataNodeImageFunction - - vdReProjFilter->SetInputImage(imgReader->GetOutput()); - vdReProjFilter->SetInputVectorData(vdReader->GetOutput()); - vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true); - vdReProjFilter->Update(); - - ParserConditionFeatureFunction->SetExpression(expression); - ParserConditionFeatureFunction->SetInputImage(imgReader->GetOutput()); - - // Output - VectorDataType::Pointer outVD = VectorDataType::New(); - // Retrieving root node - DataNodeType::Pointer root = outVD->GetDataTree()->GetRoot()->Get(); - // Create the document node - DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - // Adding the layer to the data tree - outVD->GetDataTree()->Add(document, root); - // Create the folder node - DataNodeType::Pointer folder = DataNodeType::New(); - folder->SetNodeType(otb::FOLDER); - // Adding the layer to the data tree - outVD->GetDataTree()->Add(folder, document); - - TreeIteratorType itVector(vdReProjFilter->GetOutput()->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsLineFeature() || itVector.Get()->IsPolygonFeature()) - { - const DataNodeType::Pointer currentGeometry = itVector.Get(); - ParserConditionFeatureOutputType currentResult; - currentResult = ParserConditionFeatureFunction->Evaluate(*(currentGeometry.GetPointer())); - currentGeometry->SetFieldAsDouble("NDVI", (double) (currentResult[0])); - outVD->GetDataTree()->Add(currentGeometry, folder); - } - ++itVector; - } - - vdWriter->SetInput(outVD); - vdWriter->SetFileName(outputVD); - vdWriter->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/MorphologicalPyramid/CMakeLists.txt b/Modules/Filtering/MorphologicalPyramid/CMakeLists.txt deleted file mode 100644 index fdbf5b6d47d68fab8095ce62a22602de84cc7092..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -project(OTBMorphologicalPyramid) -otb_module_impl() diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.h deleted file mode 100644 index b74ea6f27e557e57d9f33e79217a4170cab9d26b..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidAnalysisFilter_h -#define otbMorphologicalPyramidAnalysisFilter_h - -#include "otbImageToImageListFilter.h" - -namespace otb -{ -/** \class MorphologicalPyramidAnalysisFilter - * \brief Multiscale analysis filter using the morphological pyramid algorithm. - * - * Pyramidal decomposition is based on the following statement : once an - * image has been smoothed with a linear filter, it does not contain - * any more high-frequency details. Therefore, it can be down-sampled - * without any loss of information, according to Shannon Theorem. By - * iterating the same smoothing on the down-sampled image, a - * multi-resolution decomposition of the scene is - * computed. If the smoothing filter is a morphological filter, this - * is no longer true, as the filter is not linear. However, by keeping - * the details possibly lost in the down-sampling operation, such a - * decomposition can be used. - * - * The MorphologicalPyramidAnalysisFilter provide such a - * decomposition. It's computation process is an iterative analyse - * involving smoothing by the morphological filter, computing the - * details lost in the smoothing, down-sampling the current image, and - * computing the details lost in the down-sampling. - * - * \ingroup MultiScale - * \sa MorphologicalPyramidSynthesisFilter, OpeningClosingMorphologicalFilter, - * ClosingOpeningMorphologicalFilter - * - * \ingroup OTBMorphologicalPyramid - */ -template <class TInputImage, class TOutputImage, class TMorphoFilter> -class ITK_EXPORT MorphologicalPyramidAnalysisFilter - : public ImageToImageListFilter<TInputImage, TOutputImage> -{ -public: - /** Standard typedefs */ - typedef MorphologicalPyramidAnalysisFilter Self; - typedef ImageToImageListFilter<TInputImage, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Creation through object factory macro */ - itkNewMacro(Self); - /** Type macro */ - itkTypeMacro(MorphologicalPyramidAnalysisFilter, MorphologicalPyramidAnalysisFilter); - /** Input image dimension constant macro */ - itkStaticConstMacro(InputImageDimension, unsigned int, TInputImage::ImageDimension); - /** Template parameters typedefs */ - typedef TMorphoFilter MorphoFilterType; - typedef typename MorphoFilterType::KernelType KernelType; - /** Output related typedefs */ - typedef typename Superclass::OutputImageType OutputImageType; - typedef typename Superclass::OutputImageListType OutputImageListType; - typedef typename OutputImageListType::Pointer OutputImageListPointerType; - typedef typename Superclass::OutputImagePointerType OutputImagePointerType; - /** Input related typedefs */ - typedef typename Superclass::InputImageType InputImageType; - typedef typename Superclass::InputImageRegionType InputImageRegionType; - typedef typename InputImageType::Pointer InputImagePointerType; - typedef typename InputImageType::ConstPointer InputImageConstPointerType; - typedef typename InputImageType::SizeType SizeType; - typedef typename InputImageType::ValueType ValueType; - typedef typename InputImageType::PixelType PixelType; - typedef typename InputImageType::SpacingType SpacingType; - /** Accessors */ - itkSetMacro(NumberOfLevels, int); - itkSetMacro(DecimationRatio, double); - itkGetConstReferenceMacro(NumberOfLevels, int); - itkGetConstReferenceMacro(DecimationRatio, double); - /** - * Get The Analyse image at each level of the pyramid. - * \return The analysed image at each level of the pyramid. - */ - OutputImageListType* GetOutput(void) override; - /** - * Get The SupFilter details - * \return The brighter details extracted from the filtering operation. - */ - OutputImageListType * GetSupFilter(void); - /** - * Get The InfFilter details - * \return The darker details extracted from the filtering operation. - */ - OutputImageListType * GetInfFilter(void); - /** - * Get The SupDeci details - * \return The brighter details extracted from the resampling operation. - */ - OutputImageListType * GetSupDeci(void); - /** - * Get The InfDeci details - * \return The brighter details extracted from the resampling operation. - */ - OutputImageListType * GetInfDeci(void); - -protected: - /** Constructor */ - MorphologicalPyramidAnalysisFilter(); - /** Destructor */ - ~MorphologicalPyramidAnalysisFilter() override; - void GenerateOutputInformation() override {} // does nothing - /** Main computation method */ - void GenerateData() override; - /** Printself method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - /** Number of levels of the algorithm */ - int m_NumberOfLevels; - /** Subsampling scale used */ - double m_DecimationRatio; -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbMorphologicalPyramidAnalysisFilter.hxx" -#endif - -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.hxx deleted file mode 100644 index efa6eb0b51ea324ee4742cf7f7cc0c912dc060d3..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.hxx +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidAnalysisFilter_hxx -#define otbMorphologicalPyramidAnalysisFilter_hxx - -#include "otbMorphologicalPyramidAnalysisFilter.h" - -#include "itkSubtractImageFilter.h" -#include "itkMaximumImageFilter.h" -#include "itkImageDuplicator.h" -#include "otbMorphologicalPyramidResampler.h" -#include "itkProgressAccumulator.h" -#include "otbMacro.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TInputImage, class TOutputImage, class TMorphoFilter> -MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::MorphologicalPyramidAnalysisFilter() -{ - this->SetNumberOfRequiredOutputs(2); - m_DecimationRatio = 2.0; - m_NumberOfLevels = 4; - OutputImageListPointerType supFilter = OutputImageListType::New(); - this->SetNthOutput(0, supFilter.GetPointer()); - OutputImageListPointerType infFilter = OutputImageListType::New(); - this->SetNthOutput(1, infFilter.GetPointer()); - OutputImageListPointerType outputList = OutputImageListType::New(); - this->SetNthOutput(2, outputList.GetPointer()); - OutputImageListPointerType supDeci = OutputImageListType::New(); - this->SetNthOutput(3, supDeci.GetPointer()); - OutputImageListPointerType infDeci = OutputImageListType::New(); - this->SetNthOutput(4, infDeci.GetPointer()); -} -/** - * Destructor - */ -template <class TInputImage, class TOutputImage, class TMorphoFilter> -MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::~MorphologicalPyramidAnalysisFilter() {} -/** - * Get The Analyse image at each level of the pyramid. - * \return The analysed image at each level of the pyramid. - */ -template <class TInputImage, class TOutputImage, class TMorphoFilter> -typename MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::OutputImageListType* -MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::GetOutput(void) -{ - return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(2)); -} -/** - * Get The SupFilter details - * \return The brighter details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage, class TMorphoFilter> -typename MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::OutputImageListType* -MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::GetSupFilter(void) -{ - return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(0)); -} -/** - * Get The InfFilter details - * \return The darker details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage, class TMorphoFilter> -typename MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::OutputImageListType* -MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::GetInfFilter(void) -{ - return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(1)); -} -/** - * Get The SupDeci details - * \return The brighter details extracted from the resampling operation. - */ -template <class TInputImage, class TOutputImage, class TMorphoFilter> -typename MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::OutputImageListType* -MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::GetSupDeci(void) -{ - return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(3)); -} -/** - * Get The InfDeci details - * \return The brighter details extracted from the resampling operation. - */ -template <class TInputImage, class TOutputImage, class TMorphoFilter> -typename MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::OutputImageListType* -MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::GetInfDeci(void) -{ - return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(4)); -} -/** - * Main computation method - */ -template <class TInputImage, class TOutputImage, class TMorphoFilter> -void -MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::GenerateData(void) -{ - // Input image pointer - OutputImageListType * OutputImageList = this->GetOutput(); - - // Output images pointers - OutputImageListType * supFilter = this->GetSupFilter(); - OutputImageListType * infFilter = this->GetInfFilter(); - OutputImageListType * supDeci = this->GetSupDeci(); - OutputImageListType * infDeci = this->GetInfDeci(); - - // typedefs of the filters - typedef itk::SubtractImageFilter<InputImageType, InputImageType, OutputImageType> SubtractFilterType; - typedef itk::MaximumImageFilter<InputImageType, InputImageType, InputImageType> MaxFilterType; - typedef itk::ImageDuplicator<InputImageType> DuplicatorType; - typedef otb::MorphologicalPyramid::Resampler<InputImageType, OutputImageType> ResamplerType; - - // Input Image duplication to the currentImage Pointer - typename DuplicatorType::Pointer duplicator = DuplicatorType::New(); - duplicator->SetInputImage(this->GetInput()); - duplicator->Update(); - typename InputImageType::Pointer currentImage = duplicator->GetOutput(); - typename InputImageType::Pointer upsampled; - - // Structuring element size computation - const int structElementDimension = static_cast<int>(std::ceil(this->GetDecimationRatio() / 2.)); - - // Structuring element creation - KernelType structuringElement; - structuringElement.SetRadius(structElementDimension); - structuringElement.CreateStructuringElement(); - - // Filters declarations - typename MorphoFilterType::Pointer morphoFilter; - typename MaxFilterType::Pointer max; - typename SubtractFilterType::Pointer subtract1, subtract2, subtract3, subtract4; - typename ResamplerType::Pointer resampler1, resampler2; - - // Size declaration - typename InputImageType::SizeType size; - - // local variables declarations and initializations - int i = 0; - int sizeTmp; - //--------------------------------------------------------// - // Main loop // - //--------------------------------------------------------// - // While the number of iterations is not reached - otbMsgDevMacro(<< "Entering main loop"); - while (i < this->GetNumberOfLevels()) - { - - // morphological filtering - morphoFilter = MorphoFilterType::New(); - morphoFilter->SetKernel(structuringElement); - morphoFilter->SetInput(currentImage); - morphoFilter->Update(); - - // Maximum between current and filtered image - max = MaxFilterType::New(); - max->SetInput1(morphoFilter->GetOutput()); - max->SetInput2(currentImage); - max->Update(); - - // SupFilter detail image computation - subtract1 = SubtractFilterType::New(); - subtract1->SetInput1(max->GetOutput()); - subtract1->SetInput2(morphoFilter->GetOutput()); - subtract1->Update(); - otbMsgDevMacro( - << "MorphologicalPyramidAnalysisFilter: subtract1 OK " << - subtract1->GetOutput()->GetLargestPossibleRegion().GetSize()); - supFilter->PushBack(subtract1->GetOutput()); - otbMsgDevMacro("MorphologicalPyramidAnalysisFilter: step " << i << " - Image appended to SupFilter"); - - // InfFilter detail image computation - subtract2 = SubtractFilterType::New(); - subtract2->SetInput1(max->GetOutput()); - subtract2->SetInput2(currentImage); - subtract2->Update(); - otbMsgDevMacro( - << "MorphologicalPyramidAnalysisFilter: subtract2 OK " << - subtract2->GetOutput()->GetLargestPossibleRegion().GetSize()); - infFilter->PushBack(subtract2->GetOutput()); - otbMsgDevMacro("MorphologicalPyramidAnalysisFilter: step " << i << " - Image appended to InfFilter"); - - // New Size - size = morphoFilter->GetOutput()->GetLargestPossibleRegion().GetSize(); - for (unsigned int j = 0; j < InputImageType::ImageDimension; ++j) - { - sizeTmp = size[j]; - // As we knwow that our values will always be positive ones, we can simulate round by ceil(value+0.5) - size[j] = static_cast<unsigned int>(std::ceil((static_cast<double>(sizeTmp) / this->GetDecimationRatio()) + 0.5)); - } - otbMsgDevMacro(<< "New size: " << size); - - // Image subsampling - // Current image becomes the newly subsampled image - resampler1 = ResamplerType::New(); - resampler1->SetInput(morphoFilter->GetOutput()); - resampler1->SetSize(size); - resampler1->Update(); - currentImage = resampler1->GetOutput(); - - otbMsgDevMacro( - << "MorphologicalPyramidAnalysisFilter: DownSampling OK " << currentImage->GetLargestPossibleRegion().GetSize()); - // New current image is appended to the output list - OutputImageList->PushBack(currentImage); - - // Image upsampling - resampler2 = ResamplerType::New(); - resampler2->SetInput(resampler1->GetOutput()); - resampler2->SetSize(morphoFilter->GetOutput()->GetLargestPossibleRegion().GetSize()); - resampler2->Update(); - - otbMsgDevMacro( - << "MorphologicalPyramidAnalysisFilter: UpSampling OK " << - resampler2->GetOutput()->GetLargestPossibleRegion().GetSize()); - // Computation of the details lost in the subsampling operation - max = MaxFilterType::New(); - max->SetInput1(morphoFilter->GetOutput()); - max->SetInput2(resampler2->GetOutput()); - max->Update(); - otbMsgDevMacro( - << "MorphologicalPyramidAnalysisFilter: Max OK " << max->GetOutput()->GetLargestPossibleRegion().GetSize()); - - // InfDeci detail image computation - subtract4 = SubtractFilterType::New(); - subtract4->SetInput1(max->GetOutput()); - subtract4->SetInput2(morphoFilter->GetOutput()); - subtract4->Update(); - otbMsgDevMacro( - << "MorphologicalPyramidAnalysisFilter: subtract4 OK " << - subtract4->GetOutput()->GetLargestPossibleRegion().GetSize()); - infDeci->PushBack(subtract4->GetOutput()); - otbMsgDevMacro("MorphologicalPyramidAnalysisFilter: step " << i << " - Image appended to InfDeci"); - - // SupDeci detail image computation - subtract3 = SubtractFilterType::New(); - subtract3->SetInput1(max->GetOutput()); - subtract3->SetInput2(resampler2->GetOutput()); - subtract3->Update(); - otbMsgDevMacro( - << "MorphologicalPyramidAnalysisFilter: subtract3 OK " << - subtract3->GetOutput()->GetLargestPossibleRegion().GetSize()); - supDeci->PushBack(subtract3->GetOutput()); - otbMsgDevMacro("MorphologicalPyramidAnalysisFilter: step " << i << " - Image appended to SupDeci"); - - // Iteration ounter incrementation - ++i; - } - otbMsgDevMacro(<< "Exiting main loop"); -} -/** - * PrintSelf method - */ -template <class TInputImage, class TOutputImage, class TMorphoFilter> -void -MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "DecimationRatio: " << m_DecimationRatio << std::endl; - os << indent << "NumberOfLevels: " << m_NumberOfLevels << std::endl; -} -} // End namespace otb -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.h deleted file mode 100644 index 65768b624caba0047b54cb4ced32745a59326cca..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidMRToMSConverter_h -#define otbMorphologicalPyramidMRToMSConverter_h - -#include "otbImageListToImageListFilter.h" - -namespace otb -{ -namespace MorphologicalPyramid -{ -/** - * \class MRToMSConverter - * \brief This class convert a multi resolution decomposition from the morphological pyramid to a multi-scale one. - * - * This class convert a multi resolution decomposition from the morphological pyramid to a multi-scale one. - * - * The operation consists in iterativly upsampling and adding decimation details to a given detail image. - * - * \sa MorphologicalPyramidAnalyseFilter - * \sa MorphologicalPyramidSynthesisFilter - * - * \ingroup OTBMorphologicalPyramid - */ -template <class TInputImage, class TOutputImage> -class ITK_EXPORT MRToMSConverter - : public ImageListToImageListFilter<TInputImage, TOutputImage> -{ -public: - /** Standard typedefs */ - typedef MRToMSConverter Self; - typedef ImageListToImageListFilter<TInputImage, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Creation through object factory macro */ - itkNewMacro(Self); - /** Type macro */ - itkTypeMacro(MRToMSConverter, ImageListToImageListFilter); - /** Input parameters typedefs */ - typedef TInputImage InputImageType; - typedef typename Superclass::InputImagePointer InputImagePointer; - typedef typename Superclass::InputImageListType InputImageListType; - typedef typename Superclass::InputImageListPointerType InputImageListPointerType; - typedef typename InputImageListType::Iterator InputImageListIteratorType; - /** Output parameters typedefs */ - typedef TOutputImage OutputImageType; - typedef typename Superclass::OutputImagePointer OutputImagePointerType; - typedef typename Superclass::OutputImageListType OutputImageListType; - typedef typename Superclass::OutputImageListPointerType OutputImageListPointerType; - - /** - * Set The input list. - * \param imageList The analysed image at each level of the pyramid. - */ - using Superclass::SetInput; - void SetInput(const InputImageListType * imageList) override; - /** - * Set The SupFilter details - * \param imageList The brighter details extracted from the filtering operation. - */ - void SetSupFilter(InputImageListType * imageList); - /** - * Set The InfFilter details - * \param imageList The darker details extracted from the filtering operation. - */ - void SetInfFilter(InputImageListType * imageList); - /** - * Set The SupDeci details - * \param imageList The brighter details extracted from the filtering operation. - */ - void SetSupDeci(InputImageListType * imageList); - /** - * Set The InfDeci details - * \param imageList The darker details extracted from the filtering operation. - */ - void SetInfDeci(InputImageListType * imageList); - /** - * Get the input list. - * \return The list of the analysed image at each pyramid level. - */ - InputImageListType* GetInput(void) override; - /** - * Get The SupFilter details - * \return The brighter details extracted from the filtering operation. - */ - InputImageListType* GetSupFilter(void); - /** - * Get The InfFilter details - * \return The darker details extracted from the filtering operation. - */ - InputImageListType* GetInfFilter(void); - /** - * Get The SupDeci details - * \return The brighter details extracted from the resampling operation. - */ - InputImageListType* GetSupDeci(void); - /** - * Get The InfDeci details - * \return The brighter details extracted from the resampling operation. - */ - InputImageListType* GetInfDeci(void); - /** - * Get The inputList at full resolution. - * \return The analysed image at each pyramid level - * resampled at full resolution. - */ - OutputImageListType* GetOutput(void) override; - /** - * Get The SupFilter details at full resolution. - * \return The brighter details extracted from the filtering operation - * resampled at full resolution. - */ - OutputImageListType * GetSupFilterFullResolution(void); - /** - * Get The InfFilter details at full resolution. - * \return The darker details extracted from the filtering operation - * resampled at full resolution. - */ - OutputImageListType * GetInfFilterFullResolution(void); - /** - * Get The SupDeci details at full resolution. - * \return The brighter details extracted from the resampling operation - * resampled at full resolution. - */ - OutputImageListType * GetSupDeciFullResolution(void); - /** - * Get The InfDeci details at full resolution. - * \return The darker details extracted from the resampling operation - * resampled at full resolution. - */ - OutputImageListType * GetInfDeciFullResolution(void); - -protected: - /** Constructor */ - MRToMSConverter(); - /** Destructor */ - ~MRToMSConverter() override {} - - /** Main computation method */ - void GenerateData() override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - MRToMSConverter(const Self &) = delete; - void operator =(const Self&) = delete; -}; -} // End namespace MorphologicalPyramid -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbMorphologicalPyramidMRToMSConverter.hxx" -#endif - -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.hxx deleted file mode 100644 index 51f9ff57e667d987d420a3a02d2c8a120da27e46..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.hxx +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidMRToMSConverter_hxx -#define otbMorphologicalPyramidMRToMSConverter_hxx - -#include "otbMorphologicalPyramidMRToMSConverter.h" -#include "otbMorphologicalPyramidResampler.h" -#include "otbMacro.h" - -namespace otb -{ -namespace MorphologicalPyramid -{ -/** - * Constructor - */ -template <class TInputImage, class TOutputImage> -MRToMSConverter<TInputImage, TOutputImage> -::MRToMSConverter() -{ - this->SetNumberOfRequiredInputs(2); - this->SetNumberOfRequiredOutputs(2); - OutputImageListPointerType supFilter = OutputImageListType::New(); - this->SetNthOutput(0, supFilter.GetPointer()); - OutputImageListPointerType infFilter = OutputImageListType::New(); - this->SetNthOutput(1, infFilter.GetPointer()); - OutputImageListPointerType outputList = OutputImageListType::New(); - this->SetNthOutput(2, outputList.GetPointer()); - OutputImageListPointerType supDeci = OutputImageListType::New(); - this->SetNthOutput(3, supDeci.GetPointer()); - OutputImageListPointerType infDeci = OutputImageListType::New(); - this->SetNthOutput(4, infDeci.GetPointer()); -} -/** - * Get The inputList at full resolution. - * \return The analysed image at each pyramid level - * resampled at full resolution. - */ -template <class TInputImage, class TOutputImage> -typename MRToMSConverter<TInputImage, TOutputImage> -::OutputImageListType* -MRToMSConverter<TInputImage, TOutputImage> -::GetOutput(void) -{ - return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(2)); -} -/** - * Get The SupFilter details at full resolution. - * \return The brighter details extracted from the filtering operation. - * resampled at full resolution. - */ -template <class TInputImage, class TOutputImage> -typename MRToMSConverter<TInputImage, TOutputImage> -::OutputImageListType* -MRToMSConverter<TInputImage, TOutputImage> -::GetSupFilterFullResolution(void) -{ - return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(0)); -} -/** - * Get The InfFilter details at full resolution. - * \return The darker details extracted from the filtering operation. - * resampled at full resolution. - */ -template <class TInputImage, class TOutputImage> -typename MRToMSConverter<TInputImage, TOutputImage> -::OutputImageListType* -MRToMSConverter<TInputImage, TOutputImage> -::GetInfFilterFullResolution(void) -{ - return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(1)); -} -/** - * Get The SupDeci details at full resolution. - * \return The brighter details extracted from the resampling operation. - * resampled at full resolution. - */ -template <class TInputImage, class TOutputImage> -typename MRToMSConverter<TInputImage, TOutputImage> -::OutputImageListType* -MRToMSConverter<TInputImage, TOutputImage> -::GetSupDeciFullResolution(void) -{ - return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(3)); -} -/** - * Get The InfDeci details at full resolution. - * \return The brighter details extracted from the resampling operation. - * resampled at full resolution. - */ -template <class TInputImage, class TOutputImage> -typename MRToMSConverter<TInputImage, TOutputImage> -::OutputImageListType* -MRToMSConverter<TInputImage, TOutputImage> -::GetInfDeciFullResolution(void) -{ - return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(4)); -} -/** - * Set The input list. - * \param imageList The analysed image at each level of the pyramid. - */ -template <class TInputImage, class TOutputImage> -void -MRToMSConverter<TInputImage, TOutputImage> -::SetInput(const InputImageListType * imageList) -{ - this->SetNthInput(2, const_cast<InputImageListType *>(imageList)); -} -/** - * Set The SupFilter details - * \param imageList The brighter details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -void -MRToMSConverter<TInputImage, TOutputImage> -::SetSupFilter(InputImageListType * imageList) -{ - this->SetNthInput(0, const_cast<InputImageListType *>(imageList)); -} -/** - * Set The InfFilter details - * \param imageList The darker details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -void -MRToMSConverter<TInputImage, TOutputImage> -::SetInfFilter(InputImageListType * imageList) -{ - this->SetNthInput(1, const_cast<InputImageListType *>(imageList)); -} -/** - * Set The SupDeci details - * \param imageList The brighter details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -void -MRToMSConverter<TInputImage, TOutputImage> -::SetSupDeci(InputImageListType * imageList) -{ - this->SetNthInput(3, const_cast<InputImageListType *>(imageList)); -} -/** - * Set The InfDeci details - * \param imageList The darker details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -void -MRToMSConverter<TInputImage, TOutputImage> -::SetInfDeci(InputImageListType * imageList) -{ - this->SetNthInput(4, const_cast<InputImageListType *>(imageList)); -} -/** - * Get the input list. - * \return The list of the analysed image at each pyramid level. - */ -template <class TInputImage, class TOutputImage> -typename MRToMSConverter<TInputImage, TOutputImage> -::InputImageListType* -MRToMSConverter<TInputImage, TOutputImage> -::GetInput(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(2)); -} -/** - * Get The SupFilter details. - * \return The brighter details extracted from the filtering operation - */ -template <class TInputImage, class TOutputImage> -typename MRToMSConverter<TInputImage, TOutputImage> -::InputImageListType* -MRToMSConverter<TInputImage, TOutputImage> -::GetSupFilter(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(0)); -} -/** - * Get The InfFilter details. - * \return The darker details extracted from the filtering operation - */ -template <class TInputImage, class TOutputImage> -typename MRToMSConverter<TInputImage, TOutputImage> -::InputImageListType* -MRToMSConverter<TInputImage, TOutputImage> -::GetInfFilter(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(1)); -} -/** - * Get The SupDeci details. - * \return The brighter details extracted from the resampling operation - */ -template <class TInputImage, class TOutputImage> -typename MRToMSConverter<TInputImage, TOutputImage> -::InputImageListType* -MRToMSConverter<TInputImage, TOutputImage> -::GetSupDeci(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(3)); -} -/** - * Get The InfDeci details. - * \return The darker details extracted from the resampling operation. - */ -template <class TInputImage, class TOutputImage> -typename MRToMSConverter<TInputImage, TOutputImage> -::InputImageListType* -MRToMSConverter<TInputImage, TOutputImage> -::GetInfDeci(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(4)); -} -/** - * Main computation method - */ -template <class TInputImage, class TOutputImage> -void -MRToMSConverter<TInputImage, TOutputImage> -::GenerateData() -{ - // Input images lists pointers - InputImageListPointerType supFilter = this->GetSupFilter(); - InputImageListPointerType infFilter = this->GetInfFilter(); - InputImageListPointerType supDeci = this->GetSupDeci(); - InputImageListPointerType infDeci = this->GetInfDeci(); - InputImageListPointerType inputList = this->GetInput(); - - // Output images lists pointers - OutputImageListPointerType supFilterFullResolution = this->GetSupFilterFullResolution(); - OutputImageListPointerType infFilterFullResolution = this->GetInfFilterFullResolution(); - OutputImageListPointerType supDeciFullResolution = this->GetSupDeciFullResolution(); - OutputImageListPointerType infDeciFullResolution = this->GetInfDeciFullResolution(); - OutputImageListPointerType outputList = this->GetOutput(); - - // typedef of the resampling filter - typedef otb::MorphologicalPyramid::Resampler<InputImageType, OutputImageType> ResamplerType; - - // Definition of the resampler filters - typename ResamplerType::Pointer resampler; - - // Full resolution size - typename InputImageType::SizeType frsize = supFilter->Front()->GetLargestPossibleRegion().GetSize(); - otbMsgDevMacro(<< "MRToMSConverter: Full resolution size: " << frsize); - - // SupFilter resampling - otbMsgDevMacro(<< "MRToMSConverter: SupFilter resampling."); - InputImageListIteratorType it = supFilter->Begin(); - // The first image does not need any resampling - supFilterFullResolution->PushBack(it.Get()); - ++it; - for (; it != supFilter->End(); ++it) - { - resampler = ResamplerType::New(); - resampler->SetSize(frsize); - resampler->SetInput(it.Get()); - resampler->Update(); - supFilterFullResolution->PushBack(resampler->GetOutput()); - } - otbMsgDevMacro(<< "MRToMSConverter: InfFilter resampling."); - // InfFilter resampling - it = infFilter->Begin(); - // The first image does not need any resampling - infFilterFullResolution->PushBack(it.Get()); - ++it; - for (; it != infFilter->End(); ++it) - { - resampler = ResamplerType::New(); - resampler->SetSize(frsize); - resampler->SetInput(it.Get()); - resampler->Update(); - infFilterFullResolution->PushBack(resampler->GetOutput()); - } - - if (inputList) - { - otbMsgDevMacro(<< "MRToMSConverter: Optional inputList resampling."); - // Analyse image resampling - it = inputList->Begin(); - // The first image does not need any resampling - outputList->PushBack(it.Get()); - ++it; - for (; it != inputList->End(); ++it) - { - resampler = ResamplerType::New(); - resampler->SetSize(frsize); - resampler->SetInput(it.Get()); - resampler->Update(); - outputList->PushBack(resampler->GetOutput()); - } - } - - if (supDeci) - { - otbMsgDevMacro(<< "MRToMSConverter: Optional supDeci resampling."); - // SupDeci resampling - it = supDeci->Begin(); - // The first image does not need any resampling - supDeciFullResolution->PushBack(it.Get()); - ++it; - for (; it != supDeci->End(); ++it) - { - resampler = ResamplerType::New(); - resampler->SetSize(frsize); - resampler->SetInput(it.Get()); - resampler->Update(); - supDeciFullResolution->PushBack(resampler->GetOutput()); - } - } - - if (infDeci) - { - otbMsgDevMacro(<< "MRToMSConverter: Optional infDeci resampling."); - // InfDeci resampling - it = infDeci->Begin(); - // The first image does not need any resampling - infDeciFullResolution->PushBack(it.Get()); - ++it; - for (; it != infDeci->End(); ++it) - { - resampler = ResamplerType::New(); - resampler->SetSize(frsize); - resampler->SetInput(it.Get()); - resampler->Update(); - infDeciFullResolution->PushBack(resampler->GetOutput()); - } - } -} -/** - * PrintSelf method - */ -template <class TInputImage, class TOutputImage> -void -MRToMSConverter<TInputImage, TOutputImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace MorphologicalPyramid -} // End namespace otb -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.h deleted file mode 100644 index 7ce6013ba36c5a2a8b28627f6135a13ea942abfa..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidResampler_h -#define otbMorphologicalPyramidResampler_h - -#include "itkImageToImageFilter.h" - -namespace otb -{ -namespace MorphologicalPyramid -{ -/** - * \class Resampler - * \brief This class performs the resampling of the given image to the given size. - * - * This class performs the resampling of the given image to the given size.It is used - * in the MorphologicalPyramidAnalyseFilter and MorphologicalPyramidSynthesisFilter. - * - * The resampling is done by the itk::ResampleImageFilter, templated with the interpolator - * itk::LinearInterpolateImageFunction and the transform itk::ScaleTransform. - * - * \sa MorphologicalPyramidAnalyseFilter - * \sa MorphologicalPyramidSynthesisFilter - * \sa ResampleImageFilter - * \sa LinearInterpolateImageFunction - * \sa ScaleTransform - * - * \ingroup OTBMorphologicalPyramid - */ -template <class TInputImage, class TOutputImage> -class ITK_EXPORT Resampler - : public itk::ImageToImageFilter<TInputImage, TOutputImage> -{ -public: - /** Standard typedefs */ - typedef Resampler Self; - typedef itk::ImageToImageFilter<TInputImage, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Creation through object factory macro */ - itkNewMacro(Self); - /** Type macro */ - itkTypeMacro(Resampler, ImageToImageFilter); - /** Template parameters typedefs */ - typedef TInputImage InputImageType; - typedef TOutputImage OutputImageType; - typedef typename OutputImageType::Pointer OutputImagePointer; - typedef typename InputImageType::Pointer InputImagePointer; - typedef typename OutputImageType::RegionType OutputImageRegionType; - typedef typename TInputImage::PixelType PixelType; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - typedef typename OutputImageType::SizeType SizeType; - typedef typename OutputImageType::SpacingType SpacingType; - /** Size parameter accessor */ - itkSetMacro(Size, SizeType); - itkGetMacro(Size, SizeType); - -protected: - /** Constructor */ - Resampler(); - /** Destructor */ - ~Resampler() override {} - /** Generate output information */ - void GenerateOutputInformation() override; - /** Configure input requested region to be the largest possible region */ - void GenerateInputRequestedRegion() override; - /** Configure output requested region to be the largest possible region */ - void EnlargeOutputRequestedRegion(itk::DataObject * itkNotUsed(output)) override; - /** Main computation method */ - void GenerateData() override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; -private: - Resampler(const Self &) = delete; - void operator =(const Self&) = delete; - /// Output image size - SizeType m_Size; -}; -} // End namespace MorphologicalPyramid -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbMorphologicalPyramidResampler.hxx" -#endif - -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.hxx deleted file mode 100644 index 97cbf4a3c122c794ba8e2b735c49ff8ca3f64d79..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.hxx +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidResampler_hxx -#define otbMorphologicalPyramidResampler_hxx -#include "otbMorphologicalPyramidResampler.h" -#include "itkResampleImageFilter.h" -#include "itkScalableAffineTransform.h" -#include "itkNearestNeighborInterpolateImageFunction.h" -#include "itkProgressAccumulator.h" - -namespace otb -{ -namespace MorphologicalPyramid -{ -/** - * Constructor - */ -template <class TInputImage, class TOutputImage> -Resampler<TInputImage, TOutputImage> -::Resampler() -{ - for (unsigned int i = 0; i < InputImageType::ImageDimension; ++i) - { - m_Size[i] = 0; - } -} -/** - * Configure input requested region to be the largest possible region. - */ -template <class TInputImage, class TOutputImage> -void -Resampler<TInputImage, TOutputImage> -::GenerateInputRequestedRegion() -{ - // Superclass method call - Superclass::GenerateInputRequestedRegion(); - // Input and output image pointers retrieval - InputImagePointer inputPtr = const_cast<InputImageType *> (this->GetInput()); - OutputImagePointer outputPtr = this->GetOutput(); - // If the pointers are not correct - if (!inputPtr || !outputPtr) - { - // exit - return; - } - // else - // Configure input requested region to be the largest possible region - inputPtr->SetRequestedRegion(inputPtr->GetLargestPossibleRegion()); -} -/** - * Configure output requested region to be the largest possible region - */ -template <class TInputImage, class TOutputImage> -void -Resampler<TInputImage, TOutputImage> -::EnlargeOutputRequestedRegion(itk::DataObject *itkNotUsed(output)) -{ - this->GetOutput()->SetRequestedRegion(this->GetOutput()->GetLargestPossibleRegion()); -} -/** - * Generate output information - */ -template <class TInputImage, class TOutputImage> -void -Resampler<TInputImage, TOutputImage> -::GenerateOutputInformation() -{ - // Superclass method call - Superclass::GenerateOutputInformation(); - // Input and output image pointers retrieval - InputImageConstPointer inputPtr = this->GetInput(); - OutputImagePointer outputPtr = this->GetOutput(); - // If the pointers are not correct - if (!inputPtr || !outputPtr) - { - // exit - return; - } - unsigned int i; - // Computing output spacing, size and index from input data - const typename InputImageType::SpacingType& inputSpacing = inputPtr->GetSignedSpacing(); - const typename InputImageType::IndexType& inputStartIndex = inputPtr->GetLargestPossibleRegion().GetIndex(); - typename OutputImageType::IndexType outputStartIndex; - typename OutputImageType::SpacingType spacing; - for (i = 0; i < OutputImageType::ImageDimension; ++i) - { - outputStartIndex[i] = inputStartIndex[i]; - } - - outputPtr->SetSignedSpacing(inputSpacing); - typename OutputImageType::RegionType outputLargestPossibleRegion; - outputLargestPossibleRegion.SetSize(this->GetSize()); - outputLargestPossibleRegion.SetIndex(outputStartIndex); - outputPtr->SetLargestPossibleRegion(outputLargestPossibleRegion); -} -/** - * Main computation method - */ -template <class TInputImage, class TOutputImage> -void -Resampler<TInputImage, TOutputImage> -::GenerateData() -{ - typename OutputImageType::Pointer result; - - // Filters typedefs - typedef itk::ResampleImageFilter<InputImageType, OutputImageType> ResampleFilterType; - typedef itk::ScalableAffineTransform<double, InputImageType::ImageDimension> TransformType; - typedef itk::LinearInterpolateImageFunction<InputImageType, double> InterpolatorType; - - // Resampling filter creation - typename ResampleFilterType::Pointer resampler = ResampleFilterType::New(); - typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); - typename TransformType::Pointer transform = TransformType::New(); - - // Scale parameters computation - typename TransformType::InputVectorType scales; - typename InputImageType::SizeType inputSize = this->GetInput()->GetLargestPossibleRegion().GetSize(); - typename InputImageType::SpacingType inputSpacing = this->GetInput()->GetSignedSpacing(); - scales[0] = static_cast<double>(inputSize[0]) / static_cast<double>(m_Size[0]); - scales[1] = static_cast<double>(inputSize[1]) / static_cast<double>(m_Size[1]); - transform->SetScale(scales); - transform->SetCenter(this->GetInput()->GetOrigin()); - typename TransformType::OutputVectorType translation; - translation[0] = 0.5 * inputSpacing[0] * (scales[0] - 1.0); - translation[1] = 0.5 * inputSpacing[1] * (scales[1] - 1.0); - transform->SetTranslation(translation); - - - // Resampling filter set up - resampler->SetTransform(transform); - resampler->SetInterpolator(interpolator); - resampler->SetOutputOrigin(this->GetInput()->GetOrigin()); - resampler->SetSize(this->GetSize()); - resampler->SetOutputSpacing( this->GetInput()->GetSpacing() ); - resampler->SetOutputDirection( this->GetInput()->GetDirection() ); - resampler->ReleaseDataFlagOn(); - - // Progress accumulator - itk::ProgressAccumulator::Pointer progress = itk::ProgressAccumulator::New(); - progress->SetMiniPipelineFilter(this); - progress->RegisterInternalFilter(resampler, .5f); - - // Input image connexion - resampler->SetInput(this->GetInput()); - resampler->Update(); - result = resampler->GetOutput(); - - /** Output filter connexion */ - this->GraftOutput(result); -} -/** - * PrintSelf method - */ -template <class TInputImage, class TOutputImage> -void -Resampler<TInputImage, TOutputImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "Size: " << m_Size << std::endl; -} -} // End namespace MorphologicalPyramid -} // End namespace otb -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.h deleted file mode 100644 index ea999b2a6d399ac17c860be768c528f5166feff2..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidSegmentationFilter_h -#define otbMorphologicalPyramidSegmentationFilter_h - -#include "otbImageListToImageListFilter.h" -namespace otb -{ -/** \class MorphologicalPyramidSegmentationFilter - * \brief This filter performs a segmentation of the details supFilter and infFilter extracted - * with the morphological pyramid. - * - * The first step is to convert the multi-resolution analysis from the pyramid to a multi-scale one using the - * MRToMSConverter filter. - * - * The segmentation algorithm used is based on seeds extraction using the ImageToPointSetFilter, followed by - * a connected threshold segmentation using the ConnectedThresholdImageFilter. A final relabelling step is done - * with the LabelImageFilter and RelabelImageFilter to remove object whose sizes are to small regarding the - * MinimumObjectSize parameter. The threshold for seeds extraction and segmentation are computed using quantiles. - * - * A pre processing step is applied by multiplying the full resolution brighter details (resp. darker details) - * with the original image (resp. the inverted original image). This performs an enhancement of the regions contour - * precision. - * - * The details from the pyramid are set via the SetBrighterDetails() and SetDarkerDetails() methods. The brighter and - * darker details depends on the filter used in the pyramid analysis. If the OpeningClosing filter is used, then the - * brighter details are those from the supFilter image list, whereas if the ClosingOpening filter is used, the brighter - * details are those from the infFilter list. - * - * The output of the segmentation filter is a single segmentation images list, containing first the brighter details - * segmentation from higher scale to lower, and then the darker details in the same order. The attention of the used - * is drawn to the fact that since the label filter used internally will deal with a large number of labels, so the - * OutputPixelType is required to be sufficiently precise. Unsigned short or Unsigned long would be a good choice, - * unless the user has a very good reason to think that a less precise type will be sufficient. - * - * \ingroup MultiScale - * \sa MorphologicalPyramidSynthesisFilter, OpeningClosingMorphologicalFilter, - * ClosingOpeningMorphologicalFilter, Segmenter, MRToMSConverter, Resampler - * - * \ingroup OTBMorphologicalPyramid - */ -template <class TInputImage, class TOutputImage> -class ITK_EXPORT MorphologicalPyramidSegmentationFilter - : public ImageListToImageListFilter<TInputImage, TOutputImage> -{ -public: - /** Standard typedefs */ - typedef MorphologicalPyramidSegmentationFilter Self; - typedef ImageListToImageListFilter<TInputImage, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Creation through object factory macro */ - itkNewMacro(Self); - /** Type macro */ - itkTypeMacro(MorphologicalPyramidSegmentationFilter, ImageListToImageListFilter); - /** Input image dimension constant macro */ - itkStaticConstMacro(InputImageDimension, unsigned int, TInputImage::ImageDimension); - /** Output related typedefs */ - typedef typename Superclass::OutputImageType OutputImageType; - typedef typename OutputImageType::PixelType OutputPixelType; - typedef typename Superclass::OutputImageListType OutputImageListType; - typedef typename OutputImageListType::Pointer OutputImageListPointerType; - typedef typename Superclass::OutputImagePointerType OutputImagePointerType; - typedef typename OutputImageListType::Iterator OutputImageListIteratorType; - /** Input related typedefs */ - typedef typename Superclass::InputImageType InputImageType; - typedef typename InputImageType::PixelType InputPixelType; - typedef typename InputImageType::Pointer InputImagePointerType; - typedef typename Superclass::InputImageListType InputImageListType; - typedef typename InputImageListType::Pointer InputImageListPointerType; - /** Vector of number of objects */ - typedef std::vector<OutputPixelType> NumberOfObjectsVectorType; - /** Min object size parameter accessor */ - itkSetMacro(MinimumObjectSize, unsigned long); - itkGetMacro(MinimumObjectSize, unsigned long); - /** Quantile for seeds extraction */ - itkSetMacro(SeedsQuantile, double); - itkGetMacro(SeedsQuantile, double); - /** Quantile for connected thresholding */ - itkSetMacro(ConnectedThresholdQuantile, double); - itkGetMacro(ConnectedThresholdQuantile, double); - /** - * Get a vector containing the number of segmented objects for each image. - * \return The vector. - */ - NumberOfObjectsVectorType GetNumberOfObjectsVector(void); - /** - * Set the reference image. - * \param image The reference image which was decomposed by the pyramid. - */ - void SetReferenceImage(InputImageType * image); - /** - * Set the brighter details from the pyramid. The brighter details are the supFilter or - * infFilter details from the pyramid, depending on the morphological filter used. - * \param imageList The brighter details extracted from the filtering operation. - */ - void SetBrighterDetails(InputImageListType * imageList); - /** - * Set the darker details from the pyramid. The darker details are the supFilter or - * infFilter details from the pyramid, depending on the morphological filter used. - * \param imageList The darker details extracted from the filtering operation. - */ - void SetDarkerDetails(InputImageListType * imageList); - /** - * Get the reference image - * \return The reference image. - */ - InputImageType* GetReferenceImage(void); - /** - * Get the brighter details from the pyramid. The brighter details are the supFilter or - * infFilter details from the pyramid, depending on the morphological filter used. - * \return The brighter details extracted from the resampling operation. - */ - InputImageListType* GetBrighterDetails(void); - /** - * Get the darker details from the pyramid. The darker details are the supFilter or - * infFilter details from the pyramid, depending on the morphological filter used. - * \return The darker details extracted from the resampling operation. - */ - InputImageListType *GetDarkerDetails(void); - -protected: - /** Constructor */ - MorphologicalPyramidSegmentationFilter(); - /** Destructor */ - ~MorphologicalPyramidSegmentationFilter() override; - void GenerateOutputInformation() override {} // does nothing - /** Main computation method */ - void GenerateData() override; - /** Printself method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; -private: - unsigned long m_MinimumObjectSize; - /** Quantile for seeds determination */ - double m_SeedsQuantile; - /** Quantile to set the connectedThresholdFilter threshold */ - double m_ConnectedThresholdQuantile; - /** Number of segmented objects per images */ - NumberOfObjectsVectorType m_NumberOfObjectsVector; -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbMorphologicalPyramidSegmentationFilter.hxx" -#endif - -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.hxx deleted file mode 100644 index eab84021facc5864d3204878b836da3088359f84..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.hxx +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidSegmentationFilter_hxx -#define otbMorphologicalPyramidSegmentationFilter_hxx - -#include "otbMorphologicalPyramidSegmentationFilter.h" - -#include "otbMorphologicalPyramidMRToMSConverter.h" -#include "otbMorphologicalPyramidSegmenter.h" -#include "otbMacro.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TInputImage, class TOutputImage> -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::MorphologicalPyramidSegmentationFilter() -{ - this->SetNumberOfRequiredInputs(3); - m_MinimumObjectSize = 10; - m_SeedsQuantile = 0.9; - m_ConnectedThresholdQuantile = 0.9; -} -/** - * Destructor - */ -template <class TInputImage, class TOutputImage> -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::~MorphologicalPyramidSegmentationFilter() {} - -/** - * Set the reference image. - * \param image The reference image which was decomposed by the pyramid. - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::SetReferenceImage(InputImageType * image) -{ - this->SetNthInput(0, const_cast<InputImageType *>(image)); -} -/** - * Set the brighter details from the pyramid. The brighter details are the supFilter or - * infFilter details from the pyramid, depending on the morphological filter used. - * \param imageList The brighter details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::SetBrighterDetails(InputImageListType * imageList) -{ - this->SetNthInput(1, const_cast<InputImageListType *>(imageList)); -} -/** - * Set the darker details from the pyramid. The darker details are the supFilter or - * infFilter details from the pyramid, depending on the morphological filter used. - * \param imageList The darker details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::SetDarkerDetails(InputImageListType * imageList) -{ - this->SetNthInput(2, const_cast<InputImageListType *>(imageList)); -} -/** - * Get the reference image - * \return The reference image. - */ -template <class TInputImage, class TOutputImage> -typename MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::InputImageType* -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::GetReferenceImage(void) -{ - return dynamic_cast<InputImageType *>(this->itk::ProcessObject::GetInput(0)); -} -/** - * Get the brighter details from the pyramid. The brighter details are the supFilter or - * infFilter details from the pyramid, depending on the morphological filter used. - * \param imageList The brighter details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -typename MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::InputImageListType* -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::GetBrighterDetails(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(1)); -} -/** - * Get the darker details from the pyramid. The darker details are the supFilter or - * infFilter details from the pyramid, depending on the morphological filter used. - * \return The darker details extracted from the resampling operation. - */ -template <class TInputImage, class TOutputImage> -typename MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::InputImageListType* -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::GetDarkerDetails(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(2)); -} - -/** - * Get a vector containing the number of segmented objects for each image. - * \return The vector. - */ -template <class TInputImage, class TOutputImage> -typename MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::NumberOfObjectsVectorType -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::GetNumberOfObjectsVector(void) -{ - return m_NumberOfObjectsVector; -} -/** - * Main computation method - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::GenerateData(void) -{ - // Reference image pointer - InputImagePointerType referenceImage = this->GetReferenceImage(); - otbMsgDevMacro("SegmentationFilter: reference image size: " << referenceImage->GetLargestPossibleRegion().GetSize()); - - // Output images list pointer - OutputImageListPointerType outputList = this->GetOutput(); - - // Multi resolution to multi scale filter typedef - typedef otb::MorphologicalPyramid::MRToMSConverter<InputImageType, InputImageType> MRToMSConverterType; - - // Segmentation filter typedef - typedef otb::MorphologicalPyramid::Segmenter<InputImageType, OutputImageType> SegmenterType; - - // MR To MS conversion - typename MRToMSConverterType::Pointer mrtoms = MRToMSConverterType::New(); - mrtoms->SetSupFilter(this->GetBrighterDetails()); - mrtoms->SetInfFilter(this->GetDarkerDetails()); - mrtoms->Update(); - - // Full resolution Input images lists pointers - InputImageListPointerType brighter = mrtoms->GetSupFilterFullResolution(); - InputImageListPointerType darker = mrtoms->GetInfFilterFullResolution(); - - // Segmentation filter definition - typename InputImageListType::Iterator it; - // Segment the supFilter details - for (it = brighter->Begin(); it != brighter->End(); ++it) - { - typename SegmenterType::Pointer segmenter = SegmenterType::New(); - segmenter->SetMinimumObjectSize(m_MinimumObjectSize); - segmenter->SetSeedsQuantile(m_SeedsQuantile); - segmenter->SetConnectedThresholdQuantile(m_ConnectedThresholdQuantile); - segmenter->SetOriginalImage(referenceImage); - segmenter->SetDetailsImage(it.Get()); - segmenter->Update(); - m_NumberOfObjectsVector.push_back(segmenter->GetNumberOfObjects()); - outputList->PushBack(segmenter->GetOutput()); - } - - // Segment the infFilter details - for (it = darker->Begin(); it != darker->End(); ++it) - { - typename SegmenterType::Pointer segmenter = SegmenterType::New(); - segmenter->SetMinimumObjectSize(m_MinimumObjectSize); - segmenter->SetSeedsQuantile(m_SeedsQuantile); - segmenter->SetConnectedThresholdQuantile(m_ConnectedThresholdQuantile); - segmenter->SetOriginalImage(referenceImage); - segmenter->SetSegmentDarkDetailsBool(true); - - segmenter->SetDetailsImage(it.Get()); - segmenter->Update(); - m_NumberOfObjectsVector.push_back(segmenter->GetNumberOfObjects()); - outputList->PushBack(segmenter->GetOutput()); - } -} -/** - * PrintSelf method - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb - -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.h deleted file mode 100644 index 873ee46da44eab0b49cf18fef11e36406b55c3e2..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidSegmenter_h -#define otbMorphologicalPyramidSegmenter_h - -#include "itkImageToImageFilter.h" - -namespace otb -{ -namespace MorphologicalPyramid -{ -/** - * \class Segmenter - * \brief This class performs the segmentation of a detail image extracted from a - * morphological pyramid analysis. - * - * This class performs the segmentation of a detail image extracted from a - * morphological pyramid analysis. - * - * The Segmentation is performed using the ConnectedThresholdImageFilter. The seeds - * are extracted from the image using the ImageToPointSetFilter. The thresolds are set - * by using quantiles computed with the HistogramGenerator. - * - * \sa MorphologicalPyramidAnalyseFilter - * \sa MorphologicalPyramidSynthesisFilter - * \sa ResampleImageFilter - * \sa LinearInterpolateImageFunction - * \sa ScaleTransform - * - * \ingroup OTBMorphologicalPyramid - */ -template <class TInputImage, class TOutputImage> -class ITK_EXPORT Segmenter - : public itk::ImageToImageFilter<TInputImage, TOutputImage> -{ -public: - /** Standard typedefs */ - typedef Segmenter Self; - typedef itk::ImageToImageFilter<TInputImage, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Creation through object factory macro */ - itkNewMacro(Self); - /** Type macro */ - itkTypeMacro(Segmenter, ImageToImageFilter); - /** Template parameters typedefs */ - typedef TInputImage InputImageType; - typedef typename InputImageType::PixelType InputPixelType; - typedef typename InputImageType::Pointer InputImagePointerType; - typedef TOutputImage OutputImageType; - typedef typename OutputImageType::Pointer OutputImagePointerType; - typedef typename OutputImageType::PixelType OutputPixelType; - typedef typename OutputImageType::RegionType OutputImageRegionType; - typedef typename OutputImageType::SizeType SizeType; - typedef typename OutputImageType::SpacingType SpacingType; - - /** ImageDimension constants */ - itkStaticConstMacro(DetailsImageDimension, unsigned int, - TInputImage::ImageDimension); - itkStaticConstMacro(OriginalImageDimension, unsigned int, - TInputImage::ImageDimension); - itkStaticConstMacro(OutputImageDimension, unsigned int, - TOutputImage::ImageDimension); - /** - * Set the details image. - * \param detailsImage The details image from the morphological pyramid - */ - void SetDetailsImage(const InputImageType * detailsImage); - /** - * Get the details image. - * \return detailsImage The input details image. - */ - InputImageType * GetDetailsImage(void); - /** - * Set the original image. - * \param originalImage The original image to segment. - */ - void SetOriginalImage(const InputImageType * originalImage); - /** - * Get the original image. - * \return originalImage The original image to segment. - */ - InputImageType * GetOriginalImage(void); - - /** Min object size parameter accessor */ - itkSetMacro(MinimumObjectSize, unsigned long); - itkGetMacro(MinimumObjectSize, unsigned long); - /** Quantile for seeds extraction */ - itkSetMacro(SeedsQuantile, double); - itkGetMacro(SeedsQuantile, double); - /** Quantile for connected thresholding */ - itkSetMacro(ConnectedThresholdQuantile, double); - itkGetMacro(ConnectedThresholdQuantile, double); - /** Toogle the darker detail segmentation */ - itkSetMacro(SegmentDarkDetailsBool, bool); - itkGetMacro(SegmentDarkDetailsBool, bool); - itkBooleanMacro(SegmentDarkDetailsBool); - /** Get the number of segmented objects */ - itkGetMacro(NumberOfObjects, OutputPixelType); - -protected: - /** Constructor */ - Segmenter(); - /** Destructor */ - ~Segmenter() override {} - /** Main computation method */ - void GenerateData(void) override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** - * Configure the input datas. - */ - void GenerateInputRequestedRegion(void) override; - /** - * Configure the output data. - */ - using Superclass::EnlargeOutputRequestedRegion; - void EnlargeOutputRequestedRegion(void); - -private: - Segmenter(const Self &) = delete; - void operator =(const Self&) = delete; - /** Minimum size for the segmented object */ - unsigned long m_MinimumObjectSize; - /** Quantile for seeds determination */ - double m_SeedsQuantile; - /** Quantile to set the connectedThresholdFilter threshold */ - double m_ConnectedThresholdQuantile; - /** Set to true if the details to segment are darker than background */ - bool m_SegmentDarkDetailsBool; - /** Number of segmented objects */ - OutputPixelType m_NumberOfObjects; -}; -} // End namespace MorphologicalPyramid -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbMorphologicalPyramidSegmenter.hxx" -#endif - -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.hxx deleted file mode 100644 index 555b483dd25bdc150964a02d9fc8dab61beb90ac..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.hxx +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidSegmenter_hxx -#define otbMorphologicalPyramidSegmenter_hxx - -#include "otbMorphologicalPyramidSegmenter.h" - -#include "otbImage.h" -#include "itkUnaryFunctorImageFilter.h" -#include "itkConnectedThresholdImageFilter.h" -#include "itkConnectedComponentImageFilter.h" -#include "itkRelabelComponentImageFilter.h" -#include "itkThresholdImageFilter.h" -#include "itkMultiplyImageFilter.h" -#include "itkCastImageFilter.h" -#include "itkInvertIntensityImageFilter.h" -#include "itkRescaleIntensityImageFilter.h" -#include "otbThresholdImageToPointSetFilter.h" -#include "itkScalarImageToHistogramGenerator.h" -#include "itkMinimumMaximumImageCalculator.h" - -namespace otb -{ -namespace MorphologicalPyramid -{ -/** - * Constructor - */ -template <class TInputImage, class TOutputImage> -Segmenter<TInputImage, TOutputImage> -::Segmenter() -{ - this->SetNumberOfRequiredInputs(2); - m_SeedsQuantile = 0.9; - m_MinimumObjectSize = 10; - m_SegmentDarkDetailsBool = false; - m_NumberOfObjects = 0; - m_ConnectedThresholdQuantile = 0.9; -} -/** - * Set the details image. - * \param detailsImage The details image from the morphological pyramid - */ -template <class TInputImage, class TOutputImage> -void -Segmenter<TInputImage, TOutputImage> -::SetDetailsImage(const InputImageType * detailsImage) -{ - this->SetNthInput(0, const_cast<TInputImage *>(detailsImage)); -} -/** - * Set the details image. - * \return detailsImage The input details image. - */ -template <class TInputImage, class TOutputImage> -typename Segmenter<TInputImage, TOutputImage>::InputImageType * -Segmenter<TInputImage, TOutputImage> -::GetDetailsImage(void) -{ - return const_cast<InputImageType *>(this->GetInput(0)); -} -/** - * Set the original image. - * \param originalImage The original image to segment. - */ -template <class TInputImage, class TOutputImage> -void -Segmenter<TInputImage, TOutputImage> -::SetOriginalImage(const InputImageType * originalImage) -{ - this->SetNthInput(1, const_cast<TInputImage *>(originalImage)); -} -/** - * Get the original image. - * \return originalImage The original image to segment. - */ -template <class TInputImage, class TOutputImage> -typename Segmenter<TInputImage, TOutputImage>::InputImageType * -Segmenter<TInputImage, TOutputImage> -::GetOriginalImage(void) -{ - return const_cast<InputImageType *>(this->GetInput(1)); -} -/** - * Configure the input datas. - */ -template <class TInputImage, class TOutputImage> -void -Segmenter<TInputImage, TOutputImage> -::GenerateInputRequestedRegion() -{ - // call the superclass' implementation of this method - Superclass::GenerateInputRequestedRegion(); - - // get pointers to the inputs - InputImagePointerType detailsPtr = - const_cast<InputImageType *>(this->GetInput(0)); - - InputImagePointerType origPtr = - const_cast<InputImageType *>(this->GetInput(1)); - - if (!detailsPtr || !origPtr) - { - return; - } - - // We need to - // configure the inputs such that all the data is available. - detailsPtr->SetRequestedRegion(detailsPtr->GetLargestPossibleRegion()); - origPtr->SetRequestedRegion(origPtr->GetLargestPossibleRegion()); -} -/** - * Configure the output data - */ -template <class TInputImage, class TOutputImage> -void -Segmenter<TInputImage, TOutputImage> -::EnlargeOutputRequestedRegion(void) -{ - this->GetOutput() - ->SetRequestedRegion(this->GetOutput()->GetLargestPossibleRegion()); -} - -/** - * Main computation method - */ -template <class TInputImage, class TOutputImage> -void -Segmenter<TInputImage, TOutputImage> -::GenerateData() -{ - // Input images pointers - InputImagePointerType details = this->GetDetailsImage(); - InputImagePointerType original = this->GetOriginalImage(); - - // Typedefs for details image enhancement - typedef double FloatPixelType; - typedef otb::Image<FloatPixelType, InputImageType::ImageDimension> FloatImageType; - typedef itk::InvertIntensityImageFilter<InputImageType, InputImageType> InvertFilterType; - typedef itk::MultiplyImageFilter<FloatImageType, FloatImageType, InputImageType> MultiplyFilterType; - typedef itk::CastImageFilter<InputImageType, FloatImageType> CastImageFilterType; - typedef itk::MinimumMaximumImageCalculator<InputImageType> MinMaxCalculatorType; - - //Typedefs for seeds extraction - typedef itk::PointSet<InputPixelType, InputImageType::ImageDimension> PointSetType; - typedef otb::ThresholdImageToPointSetFilter<InputImageType, PointSetType> PointSetFilterType; - typedef typename PointSetType::PointsContainer::Iterator PointSetIteratorType; - - // Typedefs for segmentation - typedef itk::ConnectedThresholdImageFilter<InputImageType, InputImageType> ConnectedFilterType; - typedef itk::ConnectedComponentImageFilter<InputImageType, OutputImageType> LabelFilterType; - typedef itk::RelabelComponentImageFilter<OutputImageType, OutputImageType> RelabelFilterType; - typedef itk::ThresholdImageFilter<OutputImageType> ThresholdFilterType; - - // Typedefs for statistics computation - typedef itk::Statistics::ScalarImageToHistogramGenerator<InputImageType> HistGeneratorType; - - ///////////////////////////////////// - //// Details image enhancement ////// - ///////////////////////////////////// - - // Filters instantiation - typename InvertFilterType::Pointer invert; - typename CastImageFilterType::Pointer cast1 = CastImageFilterType::New(); - typename CastImageFilterType::Pointer cast2 = CastImageFilterType::New(); - typename MultiplyFilterType::Pointer mult = MultiplyFilterType::New(); - typename MinMaxCalculatorType::Pointer minMax = MinMaxCalculatorType::New(); - - // Pipeline connection - cast1->SetInput(details); - - minMax->SetImage(original); - minMax->ComputeMaximum(); - - // If we want to segment darker detail, the original image must have its itensity inverted - if (m_SegmentDarkDetailsBool) - { - invert = InvertFilterType::New(); - invert->SetInput(original); - invert->SetMaximum(minMax->GetMaximum()); - cast2->SetInput(invert->GetOutput()); - } - else - { - cast2->SetInput(original); - } - mult->SetInput1(cast1->GetOutput()); - mult->SetInput2(cast2->GetOutput()); - mult->Update(); - - ///////////////////////////////////// - //// Thresholds computation ///////// - ///////////////////////////////////// - - // Filter instantiation - typename HistGeneratorType::Pointer histogram = HistGeneratorType::New(); - // Seeds Threshold is computed from the quantile - histogram->SetInput(details); - histogram->SetNumberOfBins(255); - histogram->SetMarginalScale(10.0); - histogram->Compute(); - InputPixelType pointSetThreshold = - static_cast<InputPixelType>(histogram->GetOutput()->Quantile(0, m_SeedsQuantile)); - - // Segmentation Threshold is computed from the quantile - histogram = HistGeneratorType::New(); - histogram->SetInput(mult->GetOutput()); - histogram->SetNumberOfBins(255); - histogram->SetMarginalScale(10.0); - histogram->Compute(); - InputPixelType connectedThresholdValue = - static_cast<InputPixelType>(histogram->GetOutput()->Quantile(0, m_ConnectedThresholdQuantile)); - - ///////////////////////////////////// - //// Seeds extraction /////////////// - ///////////////////////////////////// - - typename PointSetFilterType::Pointer pointSetFilter = PointSetFilterType::New(); - pointSetFilter->SetInput(0, details); - pointSetFilter->SetLowerThreshold(pointSetThreshold); - pointSetFilter->Update(); - - ///////////////////////////////////// - //// Segmentation /////////////////// - ///////////////////////////////////// - - // Filters instantiation - typename ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New(); - typename LabelFilterType::Pointer labeler = LabelFilterType::New(); - typename RelabelFilterType::Pointer relabeler = RelabelFilterType::New(); - typename ThresholdFilterType::Pointer threshold = ThresholdFilterType::New(); - - //Passing seeds to the connected filter - connectedThreshold = ConnectedFilterType::New(); - connectedThreshold->ClearSeeds(); - connectedThreshold->SetInput(mult->GetOutput()); - PointSetIteratorType it = pointSetFilter->GetOutput()->GetPoints()->Begin(); - while (it != pointSetFilter->GetOutput()->GetPoints()->End()) - { - typename OutputImageType::IndexType index; - index[0] = static_cast<long int>(it.Value()[0]); - index[1] = static_cast<long int>(it.Value()[1]); - connectedThreshold->AddSeed(index); - ++it; - } - - // segmentation - connectedThreshold->SetLower(connectedThresholdValue); - - // labelling - labeler = LabelFilterType::New(); - relabeler = RelabelFilterType::New(); - labeler->SetInput(connectedThreshold->GetOutput()); - relabeler->SetInput(labeler->GetOutput()); - relabeler->SetMinimumObjectSize(m_MinimumObjectSize); - relabeler->Update(); - - // In some cases it might happen that the whole extent of the image is segmented as a single region. - // Since this is not desirable, we test this case here to avoid it. - threshold = ThresholdFilterType::New(); - threshold->SetInput(relabeler->GetOutput()); - OutputPixelType num = 0; - if (relabeler->GetNumberOfObjects() == 1) - { - unsigned int surface = mult->GetOutput()->GetLargestPossibleRegion().GetSize()[0] - * mult->GetOutput()->GetLargestPossibleRegion().GetSize()[1]; - if (relabeler->GetSizeOfObjectsInPixels()[0] == surface) - { - num = 0; - } - else - { - num = 1; - } - } - else - { - num = static_cast<OutputPixelType>(relabeler->GetNumberOfObjects()); - } - threshold->ThresholdOutside(0, num); - - // Output connection - threshold->GraftOutput(this->GetOutput()); - threshold->Update(); - this->GraftOutput(threshold->GetOutput()); - m_NumberOfObjects = num; -} -/** - * PrintSelf method - */ -template <class TInputImage, class TOutputImage> -void -Segmenter<TInputImage, TOutputImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - -} -} // End namespace MorphologicalPyramid -} // End namespace otb -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.h deleted file mode 100644 index 20a8f447aef515dbb646b154de76e1fe832bca29..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidSynthesisFilter_h -#define otbMorphologicalPyramidSynthesisFilter_h - -#include "otbImageToImageListFilter.h" - -namespace otb -{ -/** - * \class MorphologicalPyramidSynthesisFilter - * \brief Recomposition of the multiscale analysis performed with - * a MorphologicalPyramidAnalyseFilter. - * - * Once a morphological pyramidal decompisition has been made, it is - * possible to rebuild without any loss of information the original - * image at full resolution. The MorphologicalPyramidsynthesisFilter - * provides such a functionality. At each iteration, it performs the - * up-sampling of the current image using the - * otb::morphologicalPyramid::Resampler filter, the addition of - * the details lost in down-sampling, and the addition of the details - * lost in smoothing. - * - * \ingroup MultiScale - * \sa MorphologicalPyramidAnalyseFilter - * \sa MorphologicalPyramidResampler - * - * \ingroup OTBMorphologicalPyramid - */ -template <class TInputImage, class TOutputImage> -class ITK_EXPORT MorphologicalPyramidSynthesisFilter - : public ImageToImageListFilter<TInputImage, TOutputImage> -{ -public: - /** Standard typedefs */ - typedef MorphologicalPyramidSynthesisFilter Self; - typedef ImageToImageListFilter<TInputImage, TOutputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Creation through object factory macro */ - itkNewMacro(Self); - /** Type macro */ - itkTypeMacro(MorphologicalPyramidSynthesisFilter, MorphologicalPyramidSynthesisFilter); - /** Input image dimension constant macro */ - itkStaticConstMacro(InputImageDimension, unsigned int, TInputImage::ImageDimension); - /** Output related typedefs */ - typedef typename Superclass::OutputImageType OutputImageType; - typedef typename Superclass::OutputImageListType OutputImageListType; - typedef typename OutputImageListType::Pointer OutputImageListPointerType; - typedef typename Superclass::OutputImagePointerType OutputImagePointerType; - typedef typename Superclass::OutputImageListType::Iterator ImageListIterator; - typedef typename Superclass::OutputImageListType::ReverseIterator ImageListReverseIterator; - /** Input related typedefs */ - typedef typename Superclass::InputImageType InputImageType; - typedef typename Superclass::InputImageRegionType InputImageRegionType; - typedef typename InputImageType::Pointer InputImagePointer; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - typedef typename InputImageType::SizeType SizeType; - typedef typename InputImageType::ValueType ValueType; - typedef typename InputImageType::PixelType PixelType; - typedef typename InputImageType::SpacingType SpacingType; - typedef otb::ImageList<InputImageType> InputImageListType; - typedef typename InputImageListType::Pointer InputImageListPointerType; - /** Size vector typedefs */ - typedef std::vector<SizeType> SizeVectorType; - typedef typename SizeVectorType::iterator SizeIterator; - typedef typename SizeVectorType::reverse_iterator SizeReverseIterator; - /** - * Set The SupFilter details - * \param imageList The brighter details extracted from the filtering operation. - */ - void SetSupFilter(InputImageListType * imageList); - /** - * Set The InfFilter details - * \param imageList The darker details extracted from the filtering operation. - */ - void SetInfFilter(InputImageListType * imageList); - /** - * Set The SupDeci details - * \param imageList The brighter details extracted from the filtering operation. - */ - void SetSupDeci(InputImageListType * imageList); - /** - * Set The InfDeci details - * \param imageList The darker details extracted from the filtering operation. - */ - void SetInfDeci(InputImageListType * imageList); - /** - * Get The SupFilter details - * \return The brighter details extracted from the filtering operation. - */ - InputImageListType* GetSupFilter(void); - /** - * Get The InfFilter details - * \return The darker details extracted from the filtering operation. - */ - InputImageListType* GetInfFilter(void); - /** - * Get The SupDeci details - * \return The brighter details extracted from the resampling operation. - */ - InputImageListType* GetSupDeci(void); - /** - * Get The InfDeci details - * \return The brighter details extracted from the resampling operation. - */ - InputImageListType* GetInfDeci(void); - -protected: - /** Constructor */ - MorphologicalPyramidSynthesisFilter(); - /** Destructor */ - ~MorphologicalPyramidSynthesisFilter() override; - void GenerateOutputInformation() override {} // does nothing - /** Main computation method */ - void GenerateData() override; - /** Printself method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbMorphologicalPyramidSynthesisFilter.hxx" -#endif - -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.hxx deleted file mode 100644 index 3f8d81ccf76f316314434ba1c39437c007115289..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.hxx +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbMorphologicalPyramidSynthesisFilter_hxx -#define otbMorphologicalPyramidSynthesisFilter_hxx - -#include "otbMorphologicalPyramidSynthesisFilter.h" - -#include "otbMorphologicalPyramidResampler.h" -#include "itkSubtractImageFilter.h" -#include "itkAddImageFilter.h" -#include "itkImageDuplicator.h" -#include "otbMacro.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TInputImage, class TOutputImage> -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::MorphologicalPyramidSynthesisFilter() -{ - this->SetNumberOfRequiredInputs(5); -} -/** - * Destructor - */ -template <class TInputImage, class TOutputImage> -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::~MorphologicalPyramidSynthesisFilter() {} -/** - * Set The SupFilter details - * \param imageList The brighter details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::SetSupFilter(InputImageListType * imageList) -{ - this->SetNthInput(1, const_cast<InputImageListType *>(imageList)); -} -/** - * Set The InfFilter details - * \param imageList The darker details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::SetInfFilter(InputImageListType * imageList) -{ - this->SetNthInput(2, const_cast<InputImageListType *>(imageList)); -} - -/** - * Set The SupDeci details - * \param imageList The brighter details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::SetSupDeci(InputImageListType * imageList) -{ - this->SetNthInput(3, const_cast<InputImageListType *>(imageList)); -} -/** - * Set The InfDeci details - * \param imageList The darker details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::SetInfDeci(InputImageListType * imageList) -{ - this->SetNthInput(4, const_cast<InputImageListType *>(imageList)); -} - -/** - * Get The SupFilter details - * \return The brighter details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -typename MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::InputImageListType* -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::GetSupFilter(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(1)); -} -/** - * Get The InfFilter details - * \return The darker details extracted from the filtering operation. - */ -template <class TInputImage, class TOutputImage> -typename MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::InputImageListType* -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::GetInfFilter(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(2)); -} -/** - * Get The SupDeci details - * \return The brighter details extracted from the resampling operation. - */ -template <class TInputImage, class TOutputImage> -typename MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::InputImageListType* -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::GetSupDeci(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(3)); -} -/** - * Get The InfDeci details - * \return The darker details extracted from the resampling operation. - */ -template <class TInputImage, class TOutputImage> -typename MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::InputImageListType* -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::GetInfDeci(void) -{ - return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(4)); -} -/** - * Main computation method - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::GenerateData(void) -{ - otbMsgDevMacro(<< "MorphologicalPyramidSynthesisFilter : Entering main method."); - // Input image pointer - InputImageListType * supFilter = this->GetSupFilter(); - InputImageListType * infFilter = this->GetInfFilter(); - InputImageListType * supDeci = this->GetSupDeci(); - InputImageListType * infDeci = this->GetInfDeci(); - - // Output pointer - OutputImageListType * OutputImageList = this->GetOutput(); - - // typedefs of the filters - typedef itk::SubtractImageFilter<InputImageType, InputImageType, OutputImageType> SubtractFilterType; - typedef itk::AddImageFilter<InputImageType, InputImageType, InputImageType> AddFilterType; - typedef otb::MorphologicalPyramid::Resampler<InputImageType, InputImageType> ResamplerType; - typedef itk::ImageDuplicator<InputImageType> DuplicatorType; - - // Input Image duplication to the currentImage Pointer - typename DuplicatorType::Pointer duplicator = DuplicatorType::New(); - duplicator->SetInputImage(this->GetInput()); - duplicator->Update(); - - // Input Image duplication to the currentImage Pointer - typename InputImageType::Pointer currentImage = duplicator->GetOutput(); - - // Filters declarations - typename AddFilterType::Pointer add1, add2; - typename SubtractFilterType::Pointer subtract1, subtract2; - typename ResamplerType::Pointer resampler; - - // Size vector computation - SizeVectorType size; - - ImageListIterator it = supFilter->Begin(); - - while (it != supFilter->End()) - { - size.push_back(it.Get()->GetLargestPossibleRegion().GetSize()); - ++it; - } - otbMsgDevMacro(<< "MorphologicalPyramidSynthesisFilter : Size vector computation OK"); - - // Iterators definition - ImageListReverseIterator itinfFilter = infFilter->ReverseBegin(); - ImageListReverseIterator itsupFilter = supFilter->ReverseBegin(); - ImageListReverseIterator itinfDeci = infDeci->ReverseBegin(); - ImageListReverseIterator itsupDeci = supDeci->ReverseBegin(); - SizeReverseIterator itSize = size.rbegin(); - - int i = 1; -//--------------------------------------------------------// -// Main loop // -//--------------------------------------------------------// - while (itinfFilter != infFilter->ReverseEnd() - && itsupFilter != supFilter->ReverseEnd() - && itinfDeci != infDeci->ReverseEnd() - && itsupDeci != supDeci->ReverseEnd() - && itSize != size.rend()) - { - - ++i; - // Upsampling current image - resampler = ResamplerType::New(); - resampler->SetSize(*itSize); - resampler->SetInput(currentImage); - resampler->Update(); - otbMsgDevMacro(<< "MorphologicalPyramidSynthesisFilter: step " << i << " Upsampling OK"); - // Adding *sup details from current level - add1 = AddFilterType::New(); - add1->SetInput1(resampler->GetOutput()); - add1->SetInput2(itsupFilter.Get()); - add2 = AddFilterType::New(); - add2->SetInput1(add1->GetOutput()); - add2->SetInput2(itsupDeci.Get()); - - // Adding *inf details from current level - subtract1 = SubtractFilterType::New(); - subtract1->SetInput1(add2->GetOutput()); - subtract1->SetInput2(itinfFilter.Get()); - subtract2 = SubtractFilterType::New(); - subtract2->SetInput1(subtract1->GetOutput()); - subtract2->SetInput2(itinfDeci.Get()); - subtract2->Update(); - otbMsgDevMacro(<< "MorphologicalPyramidSynthesisFilter: step " << i << " Details addition OK"); - - // Updating current image - currentImage = subtract2->GetOutput(); - OutputImageList->PushBack(currentImage); - - // Iterators incrementation - ++itsupFilter; - ++itinfFilter; - ++itsupDeci; - ++itinfDeci; - ++itSize; - } - otbMsgDevMacro(<< "MorphologicalPyramidSynthesisFilter: Exiting main method."); -} -/** - * PrintSelf method - */ -template <class TInputImage, class TOutputImage> -void -MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb - -#endif diff --git a/Modules/Filtering/MorphologicalPyramid/otb-module.cmake b/Modules/Filtering/MorphologicalPyramid/otb-module.cmake deleted file mode 100644 index 677f456dbaf8e456576007b5ba645deeb8e4a3f0..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/otb-module.cmake +++ /dev/null @@ -1,43 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -set(DOCUMENTATION "If the smoothing filter used in the pyramidal analysis is a -morphological filter, one cannot safely subsample the filtered image without loss -of information. However, by keeping the details possibly lost in the -down-sampling operation, such a decomposition can be used. The Morphological Pyramid is an -approach to such a decomposition. This module contains classes useful in meeting -that goal.") - -otb_module(OTBMorphologicalPyramid - DEPENDS - OTBCommon - OTBITK - OTBImageBase - OTBObjectList - OTBPointSet - - TEST_DEPENDS - OTBImageIO - OTBMorphologicalProfiles - OTBTestKernel - - DESCRIPTION - "${DOCUMENTATION}" -) diff --git a/Modules/Filtering/MorphologicalPyramid/test/CMakeLists.txt b/Modules/Filtering/MorphologicalPyramid/test/CMakeLists.txt deleted file mode 100644 index 90bf757fdcb09ac89bbd1b9deb5899cd11f81b1f..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/test/CMakeLists.txt +++ /dev/null @@ -1,148 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -otb_module_test() - -set(OTBMorphologicalPyramidTests -otbMorphologicalPyramidTestDriver.cxx -otbMorphologicalPyramidAnalysisFilter.cxx -otbMorphologicalPyramidSegmenter.cxx -otbMorphologicalPyramidSynthesisFilter.cxx -otbMorphologicalPyramidMRToMSConverter.cxx -otbMorphologicalPyramidResampler.cxx -otbMorphologicalPyramidSegmentationFilter.cxx -) - -add_executable(otbMorphologicalPyramidTestDriver ${OTBMorphologicalPyramidTests}) -target_link_libraries(otbMorphologicalPyramidTestDriver ${OTBMorphologicalPyramid-Test_LIBRARIES}) -otb_module_target_label(otbMorphologicalPyramidTestDriver) - -# Tests Declaration - -otb_add_test(NAME msTvMorphoPyrAnalysisFilter COMMAND otbMorphologicalPyramidTestDriver - --compare-n-images ${NOTOL} 5 - ${BASELINE}/msPyrAn_mire_log_an_2.png - ${TEMP}/msPyrAn_mire_log_an_2.png - ${BASELINE}/msPyrAn_mire_log_sf_2.png - ${TEMP}/msPyrAn_mire_log_sf_2.png - ${BASELINE}/msPyrAn_mire_log_if_2.png - ${TEMP}/msPyrAn_mire_log_if_2.png - ${BASELINE}/msPyrAn_mire_log_sd_2.png - ${TEMP}/msPyrAn_mire_log_sd_2.png - ${BASELINE}/msPyrAn_mire_log_id_2.png - ${TEMP}/msPyrAn_mire_log_id_2.png - otbMorphologicalPyramidAnalysisFilter - ${INPUTDATA}/mire_log.png - ${TEMP}/msPyrAn_mire_log - png - 2 - 2.0) - -otb_add_test(NAME msTvMorphoPyrSegmentBright COMMAND otbMorphologicalPyramidTestDriver - --compare-image ${NOTOL} - ${BASELINE}/msPyrSegmenter_IKO_Halles_4_2_sf.tif - ${TEMP}/msPyrSegmenter_IKO_Halles_4_2_sf.tif - otbMorphologicalPyramidSegmenter - ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif - ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif - ${TEMP}/msPyrSegmenter_IKO_Halles_4_2_sf.tif - 0 - 0.9 - 0.9 - 10 - ) -set_property(TEST msTvMorphoPyrSegmentBright PROPERTY DEPENDS msTvMorphoPyrMRToMSConverter) - -otb_add_test(NAME msTvMorphoPyrSegmentDark COMMAND otbMorphologicalPyramidTestDriver - --compare-image ${NOTOL} - ${BASELINE}/msPyrSegmenter_IKO_Halles_4_2_if.tif - ${TEMP}/msPyrSegmenter_IKO_Halles_4_2_if.tif - otbMorphologicalPyramidSegmenter - ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_if_full.tif - ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif - ${TEMP}/msPyrSegmenter_IKO_Halles_4_2_if.tif - 1 - 0.9 - 0.9 - 10 - ) -set_property(TEST msTvMorphoPyrSegmentDark PROPERTY DEPENDS msTvMorphoPyrMRToMSConverter) - -otb_add_test(NAME msTvMorphoPyrSynthesisFilter COMMAND otbMorphologicalPyramidTestDriver - --compare-image ${NOTOL} - ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif - ${TEMP}/msPyrSynth_IKO_Halles_4_2.tif - otbMorphologicalPyramidSynthesisFilter - ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif - ${TEMP}/msPyrSynth_IKO_Halles_4_2.tif - 4 - 2.0) - -otb_add_test(NAME msTvMorphoPyrMRToMSConverter COMMAND otbMorphologicalPyramidTestDriver - --compare-n-images ${EPSILON_8} 3 - ${BASELINE}/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif - ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif - ${BASELINE}/msPyrMRToMS_IKO_Halles_4_2_if_full.tif - ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_if_full.tif - ${BASELINE}/msPyrMRToMS_IKO_Halles_4_2_an_full.tif - ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_an_full.tif - otbMorphologicalPyramidMRToMSConverter - ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif - ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif - ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_if_full.tif - ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_an_full.tif - 4 - 2.0) - -otb_add_test(NAME msTvMorphoPyrResampler COMMAND otbMorphologicalPyramidTestDriver - --compare-n-images ${EPSILON_8} 2 - ${BASELINE}/msPyrResampler_IKO_LesHalles_256_2.tif - ${TEMP}/msPyrResampler_IKO_LesHalles_256_2.tif - ${BASELINE}/msPyrResampler_IKO_LesHalles_full.tif - ${TEMP}/msPyrResampler_IKO_LesHalles_full.tif - otbMorphologicalPyramidResampler - ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif - ${TEMP}/msPyrResampler_IKO_LesHalles_256_2.tif - ${TEMP}/msPyrResampler_IKO_LesHalles_full.tif - 256 - 256 - ) - -otb_add_test(NAME msTvMorphoPyrSegmentationFilter COMMAND otbMorphologicalPyramidTestDriver - --compare-n-images ${NOTOL} 4 - ${BASELINE}/msPyrSegmentation_IKO_Halles_2.tif - ${TEMP}/msPyrSegmentation_IKO_Halles_2.tif - ${BASELINE}/msPyrSegmentation_IKO_Halles_4.tif - ${TEMP}/msPyrSegmentation_IKO_Halles_4.tif - ${BASELINE}/msPyrSegmentation_IKO_Halles_5.tif - ${TEMP}/msPyrSegmentation_IKO_Halles_5.tif - ${BASELINE}/msPyrSegmentation_IKO_Halles_7.tif - ${TEMP}/msPyrSegmentation_IKO_Halles_7.tif - otbMorphologicalPyramidSegmentationFilter - ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif - ${TEMP}/msPyrSegmentation_IKO_Halles_ - tif - 4 - 2.0 - 0.9 - 0.9 - 10 - ) - diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidAnalysisFilter.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidAnalysisFilter.cxx deleted file mode 100644 index c2704c3627f73b4d0a830b6fdaf65a4d46cb44fe..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidAnalysisFilter.cxx +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbMorphologicalPyramidAnalysisFilter.h" -#include "otbOpeningClosingMorphologicalFilter.h" -#include "itkBinaryBallStructuringElement.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbImage.h" - -int otbMorphologicalPyramidAnalysisFilter(int itkNotUsed(argc), char * argv[]) -{ - const char * inputFilename = argv[1]; - const char * outputFilenamePrefix = argv[2]; - const char * outputFilenameSuffix = argv[3]; - const unsigned int numberOfLevels = atoi(argv[4]); - const float decimationRatio = atof(argv[5]); - - const unsigned int Dimension = 2; - typedef unsigned char InputPixelType; - typedef unsigned char OutputPixelType; - - typedef otb::Image<InputPixelType, Dimension> InputImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - - typedef otb::ImageFileReader<InputImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - typedef itk::BinaryBallStructuringElement<InputPixelType, Dimension> StructuringElementType; - typedef otb::OpeningClosingMorphologicalFilter<InputImageType, InputImageType, StructuringElementType> - OpeningClosingFilterType; - typedef otb::MorphologicalPyramidAnalysisFilter<InputImageType, OutputImageType, OpeningClosingFilterType> - PyramidFilterType; - typedef PyramidFilterType::OutputImageListType::Iterator ImageListIterator; - - // Reading input image - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(inputFilename); - - // Instantiation - PyramidFilterType::Pointer pyramid = PyramidFilterType::New(); - pyramid->SetNumberOfLevels(numberOfLevels); - pyramid->SetDecimationRatio(decimationRatio); - pyramid->SetInput(reader->GetOutput()); - pyramid->Update(); - - // Retrieving iterators on the results images - ImageListIterator itAnalyse = pyramid->GetOutput()->Begin(); - ImageListIterator itSupFilter = pyramid->GetSupFilter()->Begin(); - ImageListIterator itInfFilter = pyramid->GetInfFilter()->Begin(); - ImageListIterator itInfDeci = pyramid->GetInfDeci()->Begin(); - ImageListIterator itSupDeci = pyramid->GetSupDeci()->Begin(); - - WriterType::Pointer writer = WriterType::New(); - - int i = 1; - // std::stringstream oss; - std::ostringstream oss; - // Writing the results images - while ((itAnalyse != pyramid->GetOutput()->End()) - && (itSupFilter != pyramid->GetSupFilter()->End()) - && (itInfFilter != pyramid->GetInfFilter()->End()) - && (itInfDeci != pyramid->GetInfDeci()->End()) - && (itSupDeci != pyramid->GetSupDeci()->End()) - ) - { - oss << outputFilenamePrefix << "_an_" << i << "." << outputFilenameSuffix; - writer->SetInput(itAnalyse.Get()); - writer->SetFileName(oss.str()); - writer->Update(); - oss.str(""); - oss << outputFilenamePrefix << "_sf_" << i << "." << outputFilenameSuffix; - writer->SetInput(itSupFilter.Get()); - writer->SetFileName(oss.str()); - writer->Update(); - oss.str(""); - oss << outputFilenamePrefix << "_if_" << i << "." << outputFilenameSuffix; - writer->SetInput(itInfFilter.Get()); - writer->SetFileName(oss.str()); - writer->Update(); - oss.str(""); - oss << outputFilenamePrefix << "_id_" << i << "." << outputFilenameSuffix; - writer->SetInput(itInfDeci.Get()); - writer->SetFileName(oss.str()); - writer->Update(); - std::cout << "File " << oss.str() << " written" << std::endl; - oss.str(""); - oss << outputFilenamePrefix << "_sd_" << i << "." << outputFilenameSuffix; - writer->SetInput(itSupDeci.Get()); - writer->SetFileName(oss.str()); - writer->Update(); - oss.str(""); - ++itAnalyse; - ++itSupFilter; - ++itInfFilter; - ++itInfDeci; - ++itSupDeci; - ++i; - } - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidMRToMSConverter.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidMRToMSConverter.cxx deleted file mode 100644 index cfc82520f07c0d3996c88da2a996b42b1058f4b2..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidMRToMSConverter.cxx +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbMorphologicalPyramidAnalysisFilter.h" -#include "otbMorphologicalPyramidMRToMSConverter.h" -#include "otbOpeningClosingMorphologicalFilter.h" -#include "itkBinaryBallStructuringElement.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbImage.h" - -int otbMorphologicalPyramidMRToMSConverter(int itkNotUsed(argc), char * argv[]) -{ - const char * inputFilename = argv[1]; - const char * outputFilename1 = argv[2]; - const char * outputFilename2 = argv[3]; - const char * outputFilename3 = argv[4]; - const unsigned int numberOfLevels = atoi(argv[5]); - const float decimationRatio = atof(argv[6]); - - const unsigned int Dimension = 2; - typedef double InputPixelType; - typedef double OutputPixelType; - - typedef otb::Image<InputPixelType, Dimension> InputImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - - typedef otb::ImageFileReader<InputImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - typedef itk::BinaryBallStructuringElement<InputPixelType, Dimension> StructuringElementType; - typedef otb::OpeningClosingMorphologicalFilter<InputImageType, InputImageType, StructuringElementType> - OpeningClosingFilterType; - typedef otb::MorphologicalPyramidAnalysisFilter<InputImageType, InputImageType, OpeningClosingFilterType> - PyramidAnalysisFilterType; - typedef otb::MorphologicalPyramid::MRToMSConverter<InputImageType, OutputImageType> MRToMSConverterType; - - // Reading input image - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(inputFilename); - - // Analysis - PyramidAnalysisFilterType::Pointer pyramidAnalysis = PyramidAnalysisFilterType::New(); - pyramidAnalysis->SetNumberOfLevels(numberOfLevels); - pyramidAnalysis->SetDecimationRatio(decimationRatio); - pyramidAnalysis->SetInput(reader->GetOutput()); - - // From multi resolution to multi scale - MRToMSConverterType::Pointer mrtoms = MRToMSConverterType::New(); - mrtoms->SetInput(pyramidAnalysis->GetOutput()); - mrtoms->SetSupFilter(pyramidAnalysis->GetSupFilter()); - mrtoms->SetSupDeci(pyramidAnalysis->GetSupDeci()); - mrtoms->SetInfFilter(pyramidAnalysis->GetInfFilter()); - mrtoms->SetInfDeci(pyramidAnalysis->GetInfDeci()); - mrtoms->Update(); - - // Writing the output images - WriterType::Pointer writer1 = WriterType::New(); - writer1->SetFileName(outputFilename1); - writer1->SetInput(mrtoms->GetSupFilterFullResolution()->Back()); - writer1->Update(); - - WriterType::Pointer writer2 = WriterType::New(); - writer2->SetFileName(outputFilename2); - writer2->SetInput(mrtoms->GetInfFilterFullResolution()->Back()); - writer2->Update(); - - WriterType::Pointer writer3 = WriterType::New(); - writer3->SetFileName(outputFilename3); - writer3->SetInput(mrtoms->GetOutput()->Back()); - writer3->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidResampler.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidResampler.cxx deleted file mode 100644 index 0d43971cf29e675072a0437c1f9e2f91a6d805e6..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidResampler.cxx +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbMorphologicalPyramidResampler.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbImage.h" - -int otbMorphologicalPyramidResampler(int itkNotUsed(argc), char * argv[]) -{ - const char* inputFilename = argv[1]; - const char* outputFilename1 = argv[2]; - const char* outputFilename2 = argv[3]; - const unsigned int size_x = atoi(argv[4]); - const unsigned int size_y = atoi(argv[5]); - - const unsigned int Dimension = 2; - typedef double InputPixelType; - typedef double OutputPixelType; - - typedef otb::Image<InputPixelType, Dimension> InputImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - - typedef otb::ImageFileReader<InputImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - typedef otb::MorphologicalPyramid::Resampler<InputImageType, OutputImageType> - ResamplerType; - - // Input image reading - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(inputFilename); - - InputImageType::SizeType size; - size[0] = size_x; - size[1] = size_y; - - // Instantiation - ResamplerType::Pointer resampler = ResamplerType::New(); - resampler->SetInput(reader->GetOutput()); - resampler->SetSize(size); - - // File writing - WriterType::Pointer writer = WriterType::New(); - writer->SetInput(resampler->GetOutput()); - writer->SetFileName(outputFilename1); - writer->Update(); - - ResamplerType::Pointer resampler2 = ResamplerType::New(); - resampler2->SetInput(resampler->GetOutput()); - resampler2->SetSize(reader->GetOutput()->GetLargestPossibleRegion().GetSize()); - - WriterType::Pointer writer2 = WriterType::New(); - writer2->SetInput(resampler2->GetOutput()); - writer2->SetFileName(outputFilename2); - writer2->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmentationFilter.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmentationFilter.cxx deleted file mode 100644 index 959150db21b47e4ddd2131fe26736ff19a11a6a5..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmentationFilter.cxx +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbMorphologicalPyramidSegmentationFilter.h" -#include "otbOpeningClosingMorphologicalFilter.h" -#include "itkBinaryBallStructuringElement.h" -#include "otbMorphologicalPyramidAnalysisFilter.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbImage.h" - -int otbMorphologicalPyramidSegmentationFilter(int itkNotUsed(argc), char * argv[]) -{ - const char* inputFilename = argv[1]; - const char* outputFilenamePrefix = argv[2]; - const char * outputFilenameSuffix = argv[3]; - const unsigned int numberOfLevels = atoi(argv[4]); - const double decimationRatio = atof(argv[5]); - const float seedsQuantile = atof(argv[6]); - const float segmentationQuantile = atof(argv[7]); - const unsigned int minObjectSize = atoi(argv[8]); - - const unsigned int Dimension = 2; - typedef double InputPixelType; - typedef unsigned short OutputPixelType; - - typedef otb::Image<InputPixelType, Dimension> InputImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - - typedef otb::ImageFileReader<InputImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - typedef itk::BinaryBallStructuringElement<InputPixelType, Dimension> StructuringElementType; - typedef otb::OpeningClosingMorphologicalFilter<InputImageType, InputImageType, StructuringElementType> - OpeningClosingFilterType; - typedef otb::MorphologicalPyramidAnalysisFilter<InputImageType, InputImageType, OpeningClosingFilterType> - PyramidFilterType; - typedef otb::MorphologicalPyramidSegmentationFilter<InputImageType, OutputImageType> - SegmentationFilterType; - typedef SegmentationFilterType::OutputImageListIteratorType OutputListIteratorType; - - // Input images reading - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(inputFilename); - - //Analyse - PyramidFilterType::Pointer pyramid = PyramidFilterType::New(); - pyramid->SetNumberOfLevels(numberOfLevels); - pyramid->SetDecimationRatio(decimationRatio); - pyramid->SetInput(reader->GetOutput()); - - // Segmentation - SegmentationFilterType::Pointer segmentation = SegmentationFilterType::New(); - segmentation->SetReferenceImage(reader->GetOutput()); - segmentation->SetBrighterDetails(pyramid->GetSupFilter()); - segmentation->SetDarkerDetails(pyramid->GetInfFilter()); - segmentation->SetSeedsQuantile(seedsQuantile); - segmentation->SetConnectedThresholdQuantile(segmentationQuantile); - segmentation->SetMinimumObjectSize(minObjectSize); - segmentation->Update(); - - // Output writing - OutputListIteratorType it = segmentation->GetOutput()->Begin(); - WriterType::Pointer writer; - int index = 1; - std::stringstream oss; - while (it != segmentation->GetOutput()->End()) - { - oss << outputFilenamePrefix << index << "." << outputFilenameSuffix; - writer = WriterType::New(); - writer->SetInput(it.Get()); - writer->SetFileName(oss.str()); - writer->Update(); - std::cout << oss.str() << " file written." << std::endl; - oss.str(""); - ++index; - ++it; - } - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmenter.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmenter.cxx deleted file mode 100644 index 12b2ac54df9a3ec70a7e2d8490ed48f1fc2bff51..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmenter.cxx +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbMorphologicalPyramidSegmenter.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbImage.h" - -int otbMorphologicalPyramidSegmenter(int itkNotUsed(argc), char * argv[]) -{ - const char* inputFilename = argv[1]; - const char* originalFilename = argv[2]; - const char* outputFilename1 = argv[3]; - const bool segmentDark = atoi(argv[4]); - const float seedsQuantile = atof(argv[5]); - const float segmentationQuantile = atof(argv[6]); - const unsigned int minObjectSize = atoi(argv[7]); - - const unsigned int Dimension = 2; - typedef double InputPixelType; - typedef unsigned short OutputPixelType; - - typedef otb::Image<InputPixelType, Dimension> InputImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - - typedef otb::ImageFileReader<InputImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - typedef otb::MorphologicalPyramid::Segmenter<InputImageType, OutputImageType> - SegmenterType; - - // Input images reading - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(inputFilename); - ReaderType::Pointer reader2 = ReaderType::New(); - reader2->SetFileName(originalFilename); - - // Instantiation - SegmenterType::Pointer segmenter = SegmenterType::New(); - segmenter->SetDetailsImage(reader->GetOutput()); - segmenter->SetOriginalImage(reader2->GetOutput()); - segmenter->SetSegmentDarkDetailsBool(segmentDark); - segmenter->SetSeedsQuantile(seedsQuantile); - segmenter->SetConnectedThresholdQuantile(segmentationQuantile); - segmenter->SetMinimumObjectSize(minObjectSize); - - // File writing - WriterType::Pointer writer = WriterType::New(); - writer->SetInput(segmenter->GetOutput()); - writer->SetFileName(outputFilename1); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSynthesisFilter.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSynthesisFilter.cxx deleted file mode 100644 index 084ba8bd43b89bd77f8b326dddf1b231725f3eec..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSynthesisFilter.cxx +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" - -#include "otbMorphologicalPyramidAnalysisFilter.h" -#include "otbMorphologicalPyramidSynthesisFilter.h" -#include "otbOpeningClosingMorphologicalFilter.h" -#include "itkBinaryBallStructuringElement.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbImage.h" - -int otbMorphologicalPyramidSynthesisFilter(int itkNotUsed(argc), char * argv[]) -{ - const char * inputFilename = argv[1]; - const char * outputFilename = argv[2]; - const unsigned int numberOfLevels = atoi(argv[3]); - const float decimationRatio = atof(argv[4]); - - const unsigned int Dimension = 2; - typedef unsigned char InputPixelType; - typedef unsigned char OutputPixelType; - - typedef otb::Image<InputPixelType, Dimension> InputImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - - typedef otb::ImageFileReader<InputImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - - typedef itk::BinaryBallStructuringElement<InputPixelType, Dimension> StructuringElementType; - typedef otb::OpeningClosingMorphologicalFilter<InputImageType, InputImageType, StructuringElementType> - OpeningClosingFilterType; - typedef otb::MorphologicalPyramidAnalysisFilter<InputImageType, OutputImageType, OpeningClosingFilterType> - PyramidAnalysisFilterType; - typedef otb::MorphologicalPyramidSynthesisFilter<InputImageType, OutputImageType> - PyramidSynthesisFilterType; - - // Reading input image - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(inputFilename); - - // Analysis - PyramidAnalysisFilterType::Pointer pyramidAnalysis = PyramidAnalysisFilterType::New(); - pyramidAnalysis->SetNumberOfLevels(numberOfLevels); - pyramidAnalysis->SetDecimationRatio(decimationRatio); - pyramidAnalysis->SetInput(reader->GetOutput()); - pyramidAnalysis->Update(); - - // Synthesis - PyramidSynthesisFilterType::Pointer pyramidSynthesis = PyramidSynthesisFilterType::New(); - pyramidSynthesis->SetInput(pyramidAnalysis->GetOutput()->Back()); - pyramidSynthesis->SetSupFilter(pyramidAnalysis->GetSupFilter()); - pyramidSynthesis->SetSupDeci(pyramidAnalysis->GetSupDeci()); - pyramidSynthesis->SetInfFilter(pyramidAnalysis->GetInfFilter()); - pyramidSynthesis->SetInfDeci(pyramidAnalysis->GetInfDeci()); - pyramidSynthesis->Update(); - - // Writing the output image - WriterType::Pointer writer = WriterType::New(); - writer->SetFileName(outputFilename); - writer->SetInput(pyramidSynthesis->GetOutput()->Back()); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidTestDriver.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidTestDriver.cxx deleted file mode 100644 index 7eae072f41716ed76033b26bbd70d0592fd0ce36..0000000000000000000000000000000000000000 --- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidTestDriver.cxx +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbTestMain.h" - -void RegisterTests() -{ - REGISTER_TEST(otbMorphologicalPyramidAnalysisFilter); - REGISTER_TEST(otbMorphologicalPyramidSegmenter); - REGISTER_TEST(otbMorphologicalPyramidSynthesisFilter); - REGISTER_TEST(otbMorphologicalPyramidMRToMSConverter); - REGISTER_TEST(otbMorphologicalPyramidResampler); - REGISTER_TEST(otbMorphologicalPyramidSegmentationFilter); -} diff --git a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.h b/Modules/Filtering/Path/include/otbVectorizationPathListFilter.h deleted file mode 100644 index 5ca5b65c5285040ec2079884721d9ec09de46ca5..0000000000000000000000000000000000000000 --- a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbVectorizationPathListFilter_h -#define otbVectorizationPathListFilter_h - -#include "otbPathListSource.h" -#include "itkImageRegionIterator.h" -#include "itkNeighborhoodIterator.h" -#include "itkConstantBoundaryCondition.h" -#include "otbImage.h" - -namespace otb -{ -/** \class VectorizationPathListFilter - * \brief This filter performs a vectorization from a line detector modulus and direction outputs. - * - * The output of this filter is an otb::ObjectList<TOutputPath>. - * - * This filter performs vectorization at non-grid position by using the barycenter of the few pixels with - * non-null intensity in the given direction. A threshold can be set to tune the sensibility of the first point - * detection. Path with less than three vertices are not kept by the filter. - * - * \ingroup PathListSource - * - * \ingroup OTBPath - */ -template <class TInputModulus, class TInputDirection, class TOutputPath> -class ITK_EXPORT VectorizationPathListFilter - : public PathListSource<TOutputPath> -{ -public: - /** Standard typedefs */ - typedef VectorizationPathListFilter Self; - typedef PathListSource<TOutputPath> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(VectorizationPathListFilter, PathListSource); - - /** Template parameters typedefs */ - typedef TInputModulus InputModulusType; - typedef typename InputModulusType::ConstPointer InputModulusConstPointerType; - typedef typename InputModulusType::PixelType InputPixelType; - typedef typename InputModulusType::PointType PointType; - typedef typename InputModulusType::IndexType IndexType; - - typedef TInputDirection InputDirectionType; - typedef typename InputDirectionType::ConstPointer InputDirectionConstPointerType; - typedef TOutputPath OutputPathType; - typedef typename OutputPathType::Pointer OutputPathPointerType; - typedef typename OutputPathType::ContinuousIndexType VertexType; - - /** Derived typedefs */ - typedef typename Superclass::OutputPathListType OutputPathListType; - typedef typename Superclass::OutputPathListPointerType OutputPathListPointerType; - - /** Set/get the input modulus */ - using Superclass::SetInput; - void SetInput(InputModulusType * inputModulus); - const InputModulusType * GetInput(void); - - /** Set/get the input direction */ - void SetInputDirection(InputDirectionType * inputDirection); - const InputDirectionType * GetInputDirection(void); - - itkSetMacro(AmplitudeThreshold, InputPixelType); - itkGetMacro(AmplitudeThreshold, InputPixelType); - -protected: - - /** Other internal useful typedefs */ - typedef otb::Image<bool, InputModulusType::ImageDimension> FlagImageType; - typedef typename FlagImageType::Pointer FlagImagePointerType; - - typedef itk::ImageRegionConstIterator<InputModulusType> ModRegionIteratorType; - typedef itk::ImageRegionConstIterator<InputDirectionType> DirRegionIteratorType; - typedef itk::ImageRegionIterator<FlagImageType> FlagRegionIteratorType; - - typedef itk::ConstantBoundaryCondition<InputModulusType> ModBCType; - typedef itk::ConstantBoundaryCondition<InputDirectionType> DirBCType; - typedef itk::ConstantBoundaryCondition<FlagImageType> FlagBCType; - - typedef itk::ConstNeighborhoodIterator<InputModulusType, ModBCType> ModNeighborhoodIteratorType; - typedef itk::ConstNeighborhoodIterator<InputDirectionType, ModBCType> DirNeighborhoodIteratorType; - typedef itk::NeighborhoodIterator<FlagImageType, FlagBCType> FlagNeighborhoodIteratorType; - - typedef typename ModNeighborhoodIteratorType::RadiusType RadiusType; - typedef typename ModNeighborhoodIteratorType::OffsetType OffsetType; - typedef std::vector<OffsetType> OffsetVectorType; - - typedef typename OutputPathType::VertexListType VertexListType; - typedef typename VertexListType::ConstPointer VertexListPointerType; - typedef typename VertexListType::ConstIterator VertexIteratorType; - - /** Constructor */ - VectorizationPathListFilter(); - /** Destructor */ - ~VectorizationPathListFilter() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** Main computation method */ - void GenerateData(void) override; - /** - * Compute a vector of the 8 neighbors to explore from the direction and the type of search (forward or backward). - * \param direction The direction - * \param flagReverse The type of search - * \return The neighborhood vector - */ - OffsetVectorType GetEightNeighborOffsetFromDirection(double direction, unsigned int flagReverse); - /** - * Compute a vector of the 3 neighbors to explore from the direction and the type of search (forward or backward). - * \param direction The direction - * \param flagReverse The type of search - * \return The neighborhood vector - */ - OffsetVectorType GetThreeNeighborOffsetFromDirection(double direction, unsigned int flagReverse); -private: - VectorizationPathListFilter(const Self &) = delete; - void operator =(const Self&) = delete; - /** Amplitude threshold to start following a path */ - InputPixelType m_AmplitudeThreshold; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbVectorizationPathListFilter.hxx" -#endif - -#endif diff --git a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.hxx b/Modules/Filtering/Path/include/otbVectorizationPathListFilter.hxx deleted file mode 100644 index 66ac753b113d61519262f03e0dbf29c4eaf60c38..0000000000000000000000000000000000000000 --- a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.hxx +++ /dev/null @@ -1,677 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbVectorizationPathListFilter_hxx -#define otbVectorizationPathListFilter_hxx - -#include "otbVectorizationPathListFilter.h" -#include "otbMacro.h" -#include "otbMath.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TInputModulus, class TInputDirection, class TOutputPath> -VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::VectorizationPathListFilter() -{ - this->SetNumberOfRequiredInputs(2); - this->SetNumberOfRequiredInputs(2); - m_AmplitudeThreshold = 1.0; -} - -template <class TInputModulus, class TInputDirection, class TOutputPath> -void -VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::SetInput(InputModulusType * inputModulus) -{ - this->itk::ProcessObject::SetNthInput(0, const_cast<InputModulusType *>(inputModulus)); -} - -template <class TInputModulus, class TInputDirection, class TOutputPath> -const typename VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::InputModulusType * -VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::GetInput(void) -{ - if (this->GetNumberOfInputs() < 1) - { - return nullptr; - } - return static_cast<const TInputModulus*>(this->itk::ProcessObject::GetInput(0)); -} - -template <class TInputModulus, class TInputDirection, class TOutputPath> -void -VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::SetInputDirection(InputDirectionType * inputDirection) -{ - this->itk::ProcessObject::SetNthInput(1, const_cast<InputDirectionType *>(inputDirection)); -} - -template <class TInputModulus, class TInputDirection, class TOutputPath> -const typename VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::InputDirectionType * -VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::GetInputDirection(void) -{ - if (this->GetNumberOfInputs() < 2) - { - return nullptr; - } - return static_cast<const TInputDirection *>(this->itk::ProcessObject::GetInput(1)); -} - -/** - * Main computation method - */ -template <class TInputModulus, class TInputDirection, class TOutputPath> -void -VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::GenerateData(void) -{ - InputModulusConstPointerType modPtr = this->GetInput(); - InputDirectionConstPointerType dirPtr = this->GetInputDirection(); - OutputPathListPointerType outPtr = this->GetOutput(); - - typedef typename OffsetVectorType::iterator OffsetIteratorType; - - RadiusType radius; - radius.Fill(2); - OffsetVectorType offsetVector; - - // Creation of the flag image - FlagImagePointerType flagImage = FlagImageType::New(); - flagImage->SetRegions(modPtr->GetLargestPossibleRegion()); - flagImage->Allocate(); - flagImage->FillBuffer(false); - - // Iterators instantiation - ModRegionIteratorType modIt(modPtr, modPtr->GetLargestPossibleRegion()); - DirRegionIteratorType dirIt(dirPtr, dirPtr->GetLargestPossibleRegion()); - FlagRegionIteratorType flagIt(flagImage, flagImage->GetLargestPossibleRegion()); - - for (modIt.GoToBegin(), dirIt.GoToBegin(), flagIt.GoToBegin(); - (!modIt.IsAtEnd()) && (!dirIt.IsAtEnd()) && (!flagIt.IsAtEnd()); - ++modIt, ++dirIt, ++flagIt) - { - if ((modIt.Get() > m_AmplitudeThreshold) && (!flagIt.Get())) - { - //this is a beginning, to follow in two directions - OutputPathPointerType pathTempDirect = OutputPathType::New(); - OutputPathPointerType pathTempReverse = OutputPathType::New(); - OutputPathPointerType path = OutputPathType::New(); - - bool flagFinish; - int flagReverse = 0; - double totalAmplitude = 0; - - ModNeighborhoodIteratorType nModIt(radius, modPtr, modPtr->GetLargestPossibleRegion()); - DirNeighborhoodIteratorType nDirIt(radius, dirPtr, dirPtr->GetLargestPossibleRegion()); - FlagNeighborhoodIteratorType nFlagIt(radius, flagImage, flagImage->GetLargestPossibleRegion()); - - for (flagReverse = 0; flagReverse < 2; ++flagReverse) - { - nModIt.SetLocation(modIt.GetIndex()); - nDirIt.SetLocation(dirIt.GetIndex()); - nFlagIt.SetLocation(flagIt.GetIndex()); - // temporary point - PointType point; - VertexType vertex; - modPtr->TransformIndexToPhysicalPoint(nModIt.GetIndex(), point); - modPtr->TransformPhysicalPointToContinuousIndex(point, vertex); - if (flagReverse == 0) - { - flagIt.Set(true); - - // otbMsgDebugMacro(<<"Adding new vertex: "<<vertex); - - pathTempDirect->AddVertex(vertex); - } - flagFinish = false; - while (!flagFinish) - { - offsetVector = GetThreeNeighborOffsetFromDirection(nDirIt.GetCenterPixel(), flagReverse); - OffsetIteratorType vecIt = offsetVector.begin(); - bool flagFound = false; - while (vecIt != offsetVector.end() && !flagFound) - { - flagFound = nModIt.GetPixel(*vecIt) > 0 - && !nFlagIt.GetPixel(*vecIt); - ++vecIt; - } - if (flagFound) - { - point.Fill(0); - PointType tmpPoint; - totalAmplitude = 0; - for (vecIt = offsetVector.begin(); vecIt != offsetVector.end(); ++vecIt) - { - double currentAmplitude = nModIt.GetPixel(*vecIt); - modPtr->TransformIndexToPhysicalPoint(nModIt.GetIndex(*vecIt), tmpPoint); - point[0] += currentAmplitude * tmpPoint[0]; - point[1] += currentAmplitude * tmpPoint[1]; - totalAmplitude += currentAmplitude; - } - point[0] = point[0] / totalAmplitude; - point[1] = point[1] / totalAmplitude; - modPtr->TransformPhysicalPointToContinuousIndex(point, vertex); - if (flagReverse == 0) - { -// otbMsgDevMacro(<<"Adding new vertex (direct): "<<vertex); - - pathTempDirect->AddVertex(vertex); - } - else - { - -// otbMsgDevMacro(<<"Adding new vertex (reverse): "<<vertex); - - pathTempReverse->AddVertex(vertex); - } - // flag the pixel use - nFlagIt.SetCenterPixel(true); - //update the neighbor iterators so they are centered on the nearest pixel to the barycenter - IndexType newIndex; - if (modPtr->TransformPhysicalPointToIndex(point, newIndex)) - { -// otbMsgDevMacro(<<"Moving to new center: " << newIndex); - nModIt.SetLocation(newIndex); - nDirIt.SetLocation(newIndex); - nFlagIt.SetLocation(newIndex); - - if (nModIt.GetCenterPixel() == 0) - { - //we need to check that in case the barycenter is out... - flagFinish = true; - } - if (nFlagIt.GetCenterPixel()) - { - //we don't want to go back to the same pixels - flagFinish = true; - } - } - else - { - //new point outside image - flagFinish = true; - } - } - else - { - flagFinish = true; - } - } - } - VertexListPointerType vertexDirect = pathTempDirect->GetVertexList(); - VertexListPointerType vertexReverse = pathTempReverse->GetVertexList(); - - unsigned int numberVertex = 0; - - VertexIteratorType vertexReverseIt = vertexReverse->End(); - if (vertexReverseIt != vertexReverse->Begin()) - { - --vertexReverseIt; - while (vertexReverseIt != vertexReverse->Begin()) - { - path->AddVertex(vertexReverseIt.Value()); - ++numberVertex; - --vertexReverseIt; - } - path->AddVertex(vertexReverseIt.Value()); - } - - VertexIteratorType vertexDirectIt = vertexDirect->Begin(); - while (vertexDirectIt != vertexDirect->End()) - { - path->AddVertex(vertexDirectIt.Value()); - ++vertexDirectIt; - ++numberVertex; - } - - // otbMsgDebugMacro(<<"Path number of vertices: "<<numberVertex); - - if (numberVertex > 3) - { - outPtr->PushBack(path); - } - } - } -} - -/** - * Compute the 8 neighbors to explore from the direction and the type of search (forward or backward). - * \param direction The direction - * \param flagReverse The type of search - * \return The neighborhood - */ -template <class TInputModulus, class TInputDirection, class TOutputPath> -typename VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::OffsetVectorType -VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::GetEightNeighborOffsetFromDirection(double direction, unsigned int flagReverse) -{ - int neighborhoodNumber = 0; - OffsetVectorType offset; - offset.reserve(8); - if (direction > 0) - { - //find the direction in terms of 0, 1, 2, 3 - neighborhoodNumber = (int) (direction / (CONST_PI_4) -1); - } - else - { - neighborhoodNumber = (int) ((direction + CONST_PI) / (CONST_PI_4) -1); - neighborhoodNumber = (neighborhoodNumber + 4); - //if the direction was <0 need to convert to 4, 5, 6, 7 - } - if (flagReverse) - { - //if the reverse flag is activated we need to look on the other side - neighborhoodNumber = (neighborhoodNumber + 4) % 8; - } - OffsetType tmpOffset; - switch (neighborhoodNumber) - { - case 0: - tmpOffset[0] = 1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - - tmpOffset[0] = 2; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = 2; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = 2; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - - break; - - case 1: - tmpOffset[0] = 1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - - tmpOffset[0] = 2; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - tmpOffset[0] = -2; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - break; - - case 2: - tmpOffset[0] = 0; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - - tmpOffset[0] = 0; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - tmpOffset[0] = -2; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - tmpOffset[0] = -2; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = -2; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - break; - - case 3: - tmpOffset[0] = -1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - - tmpOffset[0] = -2; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - tmpOffset[0] = -2; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = -2; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = -2; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = -2; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - break; - - case 4: - tmpOffset[0] = -1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - - tmpOffset[0] = -2; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = -2; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = -2; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - break; - - case 5: - tmpOffset[0] = -1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - - tmpOffset[0] = -2; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - tmpOffset[0] = 2; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - break; - - case 6: - tmpOffset[0] = 0; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - - tmpOffset[0] = 0; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - tmpOffset[0] = 2; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - tmpOffset[0] = 2; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 2; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - break; - - case 7: - tmpOffset[0] = 1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - - tmpOffset[0] = 2; - tmpOffset[1] = -2; - offset.push_back(tmpOffset); - tmpOffset[0] = 2; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 2; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = 2; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = 2; - tmpOffset[1] = 2; - offset.push_back(tmpOffset); - break; - } - return offset; -} - -/** - * Compute the 3 neighbors to explore from the direction and the type of search (forward or backward). - * \param direction The direction - * \param flagReverse The type of search - * \return The neighborhood - */ -template <class TInputModulus, class TInputDirection, class TOutputPath> -typename VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::OffsetVectorType -VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::GetThreeNeighborOffsetFromDirection(double direction, unsigned int flagReverse) -{ - int neighborhoodNumber = 0; - OffsetVectorType offset; - offset.reserve(3); - if (direction > 0) - { - //find the direction in terms of 0, 1, 2, 3 - neighborhoodNumber = (int) (direction / (CONST_PI_4) -1); - } - else - { - neighborhoodNumber = (int) ((direction + CONST_PI) / (CONST_PI_4) -1); - neighborhoodNumber = (neighborhoodNumber + 4); - //if the direction was <0 need to convert to 4, 5, 6, 7 - } - if (flagReverse) - { - //if the reverse flag is activated we need to look on the other side - neighborhoodNumber = (neighborhoodNumber + 4) % 8; - } - OffsetType tmpOffset; -// otbMsgDevMacro(<<"Direction: " << neighborhoodNumber) - switch (neighborhoodNumber) - { - case 0: - tmpOffset[0] = 1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - - break; - - case 1: - tmpOffset[0] = 1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - - break; - - case 2: - tmpOffset[0] = 0; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - - break; - - case 3: - tmpOffset[0] = -1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - - break; - - case 4: - tmpOffset[0] = -1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = -1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - - break; - - case 5: - tmpOffset[0] = -1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 0; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - - break; - - case 6: - tmpOffset[0] = 0; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - - break; - - case 7: - tmpOffset[0] = 1; - tmpOffset[1] = -1; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = 0; - offset.push_back(tmpOffset); - tmpOffset[0] = 1; - tmpOffset[1] = 1; - offset.push_back(tmpOffset); - - break; - } - return offset; -} - -/** - * PrintSelf Method - */ -template <class TInputModulus, class TInputDirection, class TOutputPath> -void -VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -} // End namespace otb -#endif diff --git a/Modules/Filtering/Path/test/CMakeLists.txt b/Modules/Filtering/Path/test/CMakeLists.txt index 699c24a3ca0a9e7761c463280b97dc4e468282da..79fe10a22d30c9ca5bd5d652c8e663fea243964d 100644 --- a/Modules/Filtering/Path/test/CMakeLists.txt +++ b/Modules/Filtering/Path/test/CMakeLists.txt @@ -36,7 +36,6 @@ otbDrawPathFilter.cxx otbOrientationPath.cxx otbPolyLineImageConstIterator.cxx otbRegionImageToRectangularPathListFilter.cxx -otbVectorizationPathListFilter.cxx otbClosePathFunctor.cxx otbPolyLineImageIterator.cxx ) @@ -62,12 +61,12 @@ otb_add_test(NAME feTvImageToEdgePathFilterBis COMMAND otbPathTestDriver otb_add_test(NAME feTvImageToEdgePathFilter COMMAND otbPathTestDriver --compare-image ${EPSILON_8} - ${BASELINE}/feImageToEdgePathFilter_rcc8_mire4.png - ${TEMP}/feImageToEdgePathFilter_rcc8_mire4.png + ${BASELINE}/feImageToEdgePathFilterOutput.tif + ${TEMP}/feImageToEdgePathFilterOutput.tif otbImageToEdgePathFilter - ${INPUTDATA}/rcc8_mire4.png - ${TEMP}/feImageToEdgePathFilter_rcc8_mire4.png - 255 + ${INPUTDATA}/labelImage_UnsignedChar.tif + ${TEMP}/feImageToEdgePathFilterOutput.tif + 3 ) otb_add_test(NAME feTuCompacityPathCircle COMMAND otbPathTestDriver @@ -165,31 +164,6 @@ otb_add_test(NAME feTvRegionImageToRectangularPathListFilter COMMAND otbPathTest 0.9 #fit score 10) #minimum size -otb_add_test(NAME feTvVectorizationPathListFilterImageOutput COMMAND otbPathTestDriver - --compare-image ${EPSILON_8} - ${BASELINE}/feTvVectorizationPathListOutput.png - ${TEMP}/feTvVectorizationPathListOutput.png - otbVectorizationPathListFilter - ${INPUTDATA}/InputForRoadDetection_NonMaxRem.raw.hdr - ${INPUTDATA}/InputForRoadDetectionScalarProductDir.raw.hdr - ${TEMP}/feTvVectorizationPathListOutputIgnored.txt - ${TEMP}/feTvVectorizationPathListOutput.png - 0.0001 - ) - -otb_add_test(NAME feTvVectorizationPathListFilterAsciiOutput COMMAND otbPathTestDriver - --compare-ascii ${EPSILON_3} - ${BASELINE_FILES}/feTvVectorizationPathListOutput.txt - ${TEMP}/feTvVectorizationPathListOutput.txt - otbVectorizationPathListFilter - ${INPUTDATA}/InputForRoadDetection_NonMaxRem.raw.hdr - ${INPUTDATA}/InputForRoadDetectionScalarProductDir.raw.hdr - ${TEMP}/feTvVectorizationPathListOutput.txt - ${TEMP}/feTvVectorizationPathListOutputIgnored.png - 0.0005 - ) - - otb_add_test(NAME bfTvClosePathFunctor COMMAND otbPathTestDriver --compare-ascii ${NOTOL} ${BASELINE_FILES}/bfClosePathFunctorTest.txt diff --git a/Modules/Filtering/Path/test/otbPathTestDriver.cxx b/Modules/Filtering/Path/test/otbPathTestDriver.cxx index 5d1b508991581b0c74237020d6a8eb0d819f6c48..36352f2ca861edbda39448ed175d19b844c00ee3 100644 --- a/Modules/Filtering/Path/test/otbPathTestDriver.cxx +++ b/Modules/Filtering/Path/test/otbPathTestDriver.cxx @@ -36,7 +36,6 @@ void RegisterTests() REGISTER_TEST(otbOrientationPath); REGISTER_TEST(otbPolyLineImageConstIterator); REGISTER_TEST(otbRegionImageToRectangularPathListFilter); - REGISTER_TEST(otbVectorizationPathListFilter); REGISTER_TEST(otbClosePathFunctor); REGISTER_TEST(otbPolyLineImageIterator); } diff --git a/Modules/Filtering/Path/test/otbVectorizationPathListFilter.cxx b/Modules/Filtering/Path/test/otbVectorizationPathListFilter.cxx deleted file mode 100644 index d4bf64c81c83e7628b6561ed906de841d124190a..0000000000000000000000000000000000000000 --- a/Modules/Filtering/Path/test/otbVectorizationPathListFilter.cxx +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbVectorizationPathListFilter.h" -#include "itkPolyLineParametricPath.h" -#include "otbImageFileReader.h" -#include <fstream> - -#include "otbDrawPathListFilter.h" -#include "otbImageFileWriter.h" - -int otbVectorizationPathListFilter(int itkNotUsed(argc), char * argv[]) -{ - const char * modfname = argv[1]; - const char * dirfname = argv[2]; - const char * outfname = argv[3]; - const char * outImagefname = argv[4]; - const double thresh = atof(argv[5]); - - const unsigned int Dimension = 2; - typedef double PixelType; - typedef unsigned char OutputPixelType; - typedef otb::Image<PixelType, Dimension> ImageType; - typedef otb::Image<OutputPixelType, Dimension> OutputImageType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef itk::PolyLineParametricPath<Dimension> PathType; - typedef otb::DrawPathListFilter<OutputImageType, PathType, OutputImageType> DrawFilterType; - typedef otb::VectorizationPathListFilter<ImageType, ImageType, PathType> VectorizationPathListFilterType; - typedef VectorizationPathListFilterType::OutputPathListType PathListType; - typedef PathListType::ConstIterator PathListIteratorType; - typedef PathType::VertexListType VertexListType; - typedef VertexListType::ConstIterator VertexIteratorType; - // Instantiating objects - VectorizationPathListFilterType::Pointer filter = VectorizationPathListFilterType::New(); - ReaderType::Pointer modReader = ReaderType::New(); - ReaderType::Pointer dirReader = ReaderType::New(); - - modReader->SetFileName(modfname); - dirReader->SetFileName(dirfname); - - filter->SetInput(modReader->GetOutput()); - filter->SetInputDirection(dirReader->GetOutput()); - filter->SetAmplitudeThreshold(thresh); - filter->Update(); - - PathListType::Pointer pathList = filter->GetOutput(); - PathListIteratorType pathListIt = pathList->Begin(); - - std::ofstream file; - file.open(outfname); - unsigned int counter = 0; - - while (pathListIt != pathList->End()) - { - file << "Path " << counter << ": "; - for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin(); - vIt != pathListIt.Get()->GetVertexList()->End(); - ++vIt) - { - if (vIt != pathListIt.Get()->GetVertexList()->Begin()) - { - file << ", "; - } - file << vIt.Value(); - } - file << std::endl; - ++pathListIt; - ++counter; - } - file.close(); - - OutputImageType::Pointer output = OutputImageType::New(); - output->SetRegions(modReader->GetOutput()->GetLargestPossibleRegion()); - output->Allocate(); - output->FillBuffer(255); - - DrawFilterType::Pointer drawer = DrawFilterType::New(); - drawer->SetInput(output); - drawer->SetInputPath(filter->GetOutput()); - drawer->SetPathValue(0); - - WriterType::Pointer writer = WriterType::New(); - writer->SetFileName(outImagefname); - writer->SetInput(drawer->GetOutput()); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.h b/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.h deleted file mode 100644 index 056a1003cbb58712343a0cc63fa3193483d6eb17..0000000000000000000000000000000000000000 --- a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbOrthoRectificationFilter_h -#define otbOrthoRectificationFilter_h - -#include <sstream> -#include <stdio.h> - -#include "otbGenericRSResampleImageFilter.h" -#include "otbCompositeTransform.h" -#include "otbInverseSensorModel.h" - -#include "otbVectorImage.h" -#include "otbImage.h" - -namespace otb -{ -/** \class OrthoRectificationFilter - * - * \brief Class for Orthorectifying an image - * - * This class is used to apply map projection and sensor model transformation - * to orthorectify an image, with or without DEM. - * - * \ingroup Projection - * - * \example Projections/OrthoRectificationExample.cxx - * - * - * \ingroup OTBProjection - */ - -template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision = double> -class ITK_EXPORT OrthoRectificationFilter : - public GenericRSResampleImageFilter<TInputImage, TOutputImage> -{ -public: - /** Standard class typedefs */ - typedef GenericRSResampleImageFilter<TInputImage, - TOutputImage> Superclass; - typedef OrthoRectificationFilter Self; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** types definitions */ - typedef typename TInputImage::IndexType IndexType; - typedef typename TInputImage::SizeType SizeType; - typedef typename TInputImage::SpacingType SpacingType; - typedef typename TInputImage::PointType PointType; - typedef typename TInputImage::RegionType RegionType; - - typedef typename TOutputImage::PixelType OutputPixelType; - - /** output map projection */ - typedef TMapProjection MapProjectionType; - typedef typename TMapProjection::Pointer MapProjectionPointerType; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(OrthoRectificationFilter, GenericRSResampleImageFilter); - - /** Accessors */ - virtual void SetMapProjection(MapProjectionType* arg) - { - if (this->m_MapProjection != arg) - { - this->m_MapProjection = arg; - this->Modified(); - } - } - itkGetObjectMacro(MapProjection, MapProjectionType); - -protected: - OrthoRectificationFilter(); - ~OrthoRectificationFilter() override; - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - - void GenerateInputRequestedRegion() override; - void GenerateOutputInformation(void) override; - -private: - OrthoRectificationFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - /** Map Projection used to transform cartographic coordinates in geographic coordinates */ - MapProjectionPointerType m_MapProjection; - -}; - -} // namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbOrthoRectificationFilter.hxx" -#endif - -#endif diff --git a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.hxx b/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.hxx deleted file mode 100644 index c383f86a9cb2bfb58e39c9511eda1f4088cef048..0000000000000000000000000000000000000000 --- a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.hxx +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbOrthoRectificationFilter_hxx -#define otbOrthoRectificationFilter_hxx - -#include "otbOrthoRectificationFilter.h" -#include "itkMetaDataObject.h" - -namespace otb -{ - -template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision> -OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision> -::OrthoRectificationFilter(): m_MapProjection(nullptr) -{} - -template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision> -OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision> -::~OrthoRectificationFilter() -{} - -template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision> -void OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "OrthoRectification" << "\n"; -} - -template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision> -void -OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision> -::GenerateInputRequestedRegion() -{ - Superclass::GenerateInputRequestedRegion(); -} - -template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision> -void -OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision> -::GenerateOutputInformation() -{ - // call the superclass' implementation of this method - Superclass::GenerateOutputInformation(); - - if(!m_MapProjection.IsNull() && !m_MapProjection->GetWkt().empty()) - { - // fill up the metadata information for ProjectionRef - itk::MetaDataDictionary& dict = this->GetOutput()->GetMetaDataDictionary(); - std::string projectionRef = m_MapProjection->GetWkt(); - itk::EncapsulateMetaData<std::string>(dict, MetaDataKey::ProjectionRefKey, projectionRef); - - // Fill the GenericRSTransform with those information - this->SetOutputProjectionRef(projectionRef); - this->UpdateTransform(); - } -} - -} //namespace otb - -#endif diff --git a/Modules/Filtering/Projection/test/CMakeLists.txt b/Modules/Filtering/Projection/test/CMakeLists.txt index adbca8d880be8c086e3e33a8d86c4424ebd1b0e9..b2e82e3676835ab5d7883aee53e014939ae41d3e 100644 --- a/Modules/Filtering/Projection/test/CMakeLists.txt +++ b/Modules/Filtering/Projection/test/CMakeLists.txt @@ -24,7 +24,6 @@ set(OTBProjectionTests otbSensorModel.cxx otbProjectionTestDriver.cxx otbVectorDataProjectionFilterFromGeoToMap.cxx -otbOrthoRectificationFilter.cxx otbGenericRSResampleImageFilter.cxx otbGeometriesProjectionFilter.cxx otbGenericRSTransformGenericTest.cxx @@ -44,7 +43,6 @@ otbVectorDataProjectionFilterFromMapToImage.cxx otbGenericRSTransformFromImage.cxx otbCompositeTransform.cxx otbLeastSquareAffineTransformEstimator.cxx -otbSpectralAngleDataNodeFeatureFunction.cxx otbGCPsToRPCSensorModelImageFilterCheckRpcModel.cxx otbGeographicalDistance.cxx otbTileImageFilterRSTransformTest.cxx @@ -325,8 +323,8 @@ foreach(current_img ${IMG_TEST_ORTHO}) otb_add_test(NAME prTvOrthoRectification_${current_imgtype}_${current_mode} COMMAND otbProjectionTestDriver --compare-image ${EPSILON_4} ${BASELINE}/prTvOrthoRectification_${current_imgtype}_${current_mode}.tif ${TEMP}/prTvOrthoRectification_${current_imgtype}_${current_mode}.tif - --tolerance-ratio ${current_tolerance_ratio} - otbOrthoRectificationFilter + --tolerance-ratio ${current_tolerance_ratio} + otbGenericRSResampleImageFilter LARGEINPUT{${current_img}?&geom=${INPUTDATA}/${current_geomgcp}.geom} ${TEMP}/prTvOrthoRectification_${current_imgtype}_${current_mode}.tif ${current_originx} @@ -349,19 +347,6 @@ endforeach() #----------------- OrthoRectification tests (end) ----------------------- #------------------------------------------------------------------------ -otb_add_test(NAME prTvotbGenericRSResampleImageFilter COMMAND otbProjectionTestDriver - --compare-image ${EPSILON_4} - ${BASELINE}/prTvotbGenericRSResampleImageFilterOutput.tif - ${TEMP}/prTvotbGenericRSResampleImageFilterOutput.tif - otbGenericRSResampleImageFilter - LARGEINPUT{QUICKBIRD/TOULOUSE/000000128955_01_P001_PAN/02APR01105228-P1BS-000000128955_01_P001.TIF} - 1000 - 15 - 0 - 1 - ${TEMP}/prTvotbGenericRSResampleImageFilterOutput.tif - ) - otb_add_test(NAME prTvGeometriesProjectionFilterLines COMMAND otbProjectionTestDriver --compare-ogr ${EPSILON_9} ${BASELINE_FILES}/prTvVectorDataProjectionFilterLines.shp @@ -596,29 +581,6 @@ otb_add_test(NAME prTvLeastSquareAffineTransformEstimator COMMAND otbProjectionT 352 807 919 10023 12102 14181 ) -otb_add_test(NAME bfTvSpectralAngleDataNodeFeatureFunction_Polygon COMMAND otbProjectionTestDriver - --compare-ogr ${EPSILON_3} - ${BASELINE_FILES}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp - ${TEMP}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp - otbSpectralAngleDataNodeFeatureFunction - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF - ${INPUTDATA}/DEM/srtm_directory - ${TEMP}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp - 0 ) - -otb_add_test(NAME bfTvSpectralAngleDataNodeFeatureFunction_Line COMMAND otbProjectionTestDriver - --compare-ogr ${EPSILON_9} - ${BASELINE_FILES}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp - ${TEMP}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp - otbSpectralAngleDataNodeFeatureFunction - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF - ${INPUTDATA}/DEM/srtm_directory - ${TEMP}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp - 0 - ) - set(VALID_CONDITION err=12) if(OTB_OSSIM_VERSION LESS 20200) set(VALID_CONDITION err=10) @@ -1222,28 +1184,3 @@ set(GenericConversionChecking_INPUTS #${INPUTDATA}/DEM/srtm_directory #3 ) #endforeach() - - - - set(SENSOR_TYPES - "QUICKBIRD/TOULOUSE/000000128955_01_P001_PAN/02APR01105228-P1BS-000000128955_01_P001.TIF" - "GEOEYE/LES_ROCHES/po_350134_bgrn_0000000.tif" - "WORLDVIEW2/ROME/WV-2_standard_8band_bundle_16bit/052298844010_01_P001_MUL/09DEC10103019-M2AS-052298844010_01_P001.TIF" - ) - - foreach( file ${SENSOR_TYPES}) - # Get the sensor name - set(sharp_regexp "([0-9A-Za-z_]*)[ ]*/[ ]*(.*)") - string(REGEX REPLACE "${sharp_regexp}" "\\1" sensor_name "${file}") - # Tests - otb_add_test(NAME prTvotbGenericRSResampleImageFilterFromMap_${sensor_name} COMMAND otbProjectionTestDriver - --compare-image ${EPSILON_4} - ${BASELINE}/prTvotbGenericRSResampleImageFilterOutputFromMap_${sensor_name}.tif - ${TEMP}/prTvotbGenericRSResampleImageFilterOutputFromMap_${sensor_name}.tif - otbGenericRSResampleImageFilterFromMap - LARGEINPUT{${file}} - 15 - 0 - ${TEMP}/prTvotbGenericRSResampleImageFilterOutputFromMap_${sensor_name}.tif - ) - endforeach() diff --git a/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx b/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx index 20dc63f23e52b24bdfadf74aabb6159f61f6372b..f9eb115fcf556b9104b6b157d4fa0425e3ebd0a1 100644 --- a/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx +++ b/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx @@ -21,8 +21,7 @@ #include "otbImageFileReader.h" #include "otbGCPsToRPCSensorModelImageFilter.h" #include "otbImageFileWriter.h" -#include "otbGenericMapProjection.h" -#include "otbOrthoRectificationFilter.h" +#include "otbGenericRSResampleImageFilter.h" #include "otbMacro.h" int otbGCPsToRPCSensorModelImageFilterAndOrtho(int argc, char* argv[]) @@ -47,8 +46,7 @@ int otbGCPsToRPCSensorModelImageFilterAndOrtho(int argc, char* argv[]) typedef GCPsToSensorModelFilterType::Point2DType Point2DType; typedef GCPsToSensorModelFilterType::Point3DType Point3DType; typedef otb::ImageFileWriter<ImageType> WriterType; - typedef otb::GenericMapProjection<otb::TransformDirection::INVERSE> MapProjectionType; - typedef otb::OrthoRectificationFilter<ImageType, ImageType, MapProjectionType> OrthoRectifFilterType; + typedef otb::GenericRSResampleImageFilter<ImageType, ImageType> OrthoRectifFilterType; ReaderType::Pointer reader = ReaderType::New(); reader->SetFileName(infname); @@ -91,9 +89,6 @@ int otbGCPsToRPCSensorModelImageFilterAndOrtho(int argc, char* argv[]) OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New(); - - MapProjectionType::Pointer utmMapProjection = MapProjectionType::New(); - orthoRectifFilter->SetInput(rpcEstimator->GetOutput()); ImageType::IndexType start; @@ -116,9 +111,9 @@ int otbGCPsToRPCSensorModelImageFilterAndOrtho(int argc, char* argv[]) origin[1] = strtod(argv[4], nullptr); //Origin northing orthoRectifFilter->SetOutputOrigin(origin); - utmMapProjection->SetWkt(otb::SpatialReference::FromUTM(atoi(argv[9]),argv[10][0]=='N'?otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt()); + std::string wkt = otb::SpatialReference::FromUTM(atoi(argv[9]),argv[10][0]=='N'?otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt(); - orthoRectifFilter->SetMapProjection(utmMapProjection); + orthoRectifFilter->SetOutputProjectionRef(wkt); ImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel()); no_data.Fill(0.0); diff --git a/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx b/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx index c61ad46200e62e100276c9cb1a3a661071918535..31027d1eae899c096547675667a3c57403498061 100644 --- a/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx +++ b/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx @@ -19,183 +19,124 @@ */ -#include "otbGenericRSResampleImageFilter.h" + +// iostream is used for general output +#include <iostream> +#include <stdlib.h> +#include <complex> #include "otbImageFileReader.h" #include "otbImageFileWriter.h" +#include "otbGenericMapProjection.h" +#include "itkUnaryFunctorImageFilter.h" -#include <ogr_spatialref.h> - -// Extract ROI -#include "otbMultiChannelExtractROI.h" - -// Images definition -const unsigned int Dimension = 2; -typedef double PixelType; -typedef otb::VectorImage<PixelType, Dimension> ImageType; -typedef ImageType::SizeType SizeType; - -typedef otb::GenericRSResampleImageFilter<ImageType, - ImageType> ImageResamplerType; -typedef ImageResamplerType::OriginType OriginType; -typedef ImageResamplerType::SpacingType SpacingType; - -typedef otb::ImageFileReader<ImageType> ReaderType; -typedef otb::ImageFileWriter<ImageType> WriterType; - +#include "otbDEMHandler.h" +#include "otbUnaryImageFunctorWithVectorImageFilter.h" +#include "otbGenericRSResampleImageFilter.h" +#include "otbComplexToIntensityImageFilter.h" +#include "otbPerBandVectorImageFilter.h" -int otbGenericRSResampleImageFilter(int itkNotUsed(argc), char* argv[]) +int otbGenericRSResampleImageFilter(int argc, char* argv[]) { + if (argc != 15) + { + std::cout << argv[0] << + " <input filename> <output filename> <origin easting> <origin northing>" + " <x size> <y size> <x spacing> <y spacing> <UTM zone> <UTM hemisphere>" + " <grid_spacing> <mode> <mode.info> <is_complex>" + << std::endl; - // SmartPointer instantiation - ImageResamplerType::Pointer resampler = ImageResamplerType::New(); - - const char * infname = argv[1]; - const char * outfname = argv[6]; - unsigned int isize = atoi(argv[2]); - double iGridSpacing = atof(argv[3]); - int useInRpc = atoi(argv[4]); - int useOutRpc = atoi(argv[5]); - - - ReaderType::Pointer reader = ReaderType::New(); - - // Read the input image - reader->SetFileName(infname); - reader->UpdateOutputInformation(); - - // Fill the output size with the user selection - SizeType size; - size.Fill(isize); - - // Set the origin & the spacing of the output - OriginType origin; - origin[0] = 367340; - origin[1] = 4.83467e+06; - - SpacingType spacing; - spacing[0] = 0.6; - spacing[1] = -0.6; - - // Build the output projection ref : UTM ref - OGRSpatialReference oSRS; - oSRS.SetProjCS("UTM"); - oSRS.SetUTM(31, true); - char * utmRef = nullptr; - oSRS.exportToWkt(&utmRef); + return EXIT_FAILURE; + } - // Displacement Field spacing - SpacingType gridSpacing; - gridSpacing[0] = iGridSpacing; - gridSpacing[1] = -iGridSpacing; - - // Default value builder - ImageType::PixelType defaultValue; - itk::NumericTraits<ImageType::PixelType>::SetLength(defaultValue, reader->GetOutput()->GetNumberOfComponentsPerPixel()); - - // Set the Resampler Parameters - resampler->SetInput(reader->GetOutput()); - resampler->SetDisplacementFieldSpacing(gridSpacing); - resampler->SetOutputOrigin(origin); - resampler->SetOutputSize(size); - resampler->SetOutputSpacing(spacing); - resampler->SetOutputProjectionRef(utmRef); - resampler->SetEdgePaddingValue(defaultValue); - if (useInRpc) + typedef std::complex<double> ComplexPixelType; + typedef otb::VectorImage<ComplexPixelType,2> ComplexVectorImageType; + typedef otb::VectorImage<double, 2> VectorImageType; + typedef otb::ImageFileReader<VectorImageType> ReaderType; + typedef otb::ImageFileReader<ComplexVectorImageType> ComplexReaderType; + typedef otb::ImageFileWriter<VectorImageType> WriterType; + + // Handling of complex images + typedef otb::Image<ComplexPixelType> ComplexImageType; + typedef otb::Image<double> ImageType; + typedef otb::ComplexToIntensityImageFilter<ComplexImageType, ImageType> IntensityFilterType; + typedef otb::PerBandVectorImageFilter<ComplexVectorImageType,VectorImageType,IntensityFilterType> PerBandIntensityFilterType; + typedef otb::GenericRSResampleImageFilter<VectorImageType, VectorImageType> OrthoRectifFilterType; + + //Allocate pointer + ReaderType::Pointer reader = ReaderType::New(); + ComplexReaderType::Pointer cReader = ComplexReaderType::New(); + WriterType::Pointer writer = WriterType::New(); + PerBandIntensityFilterType::Pointer intensityFilter = PerBandIntensityFilterType::New(); + + OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New(); + + writer->SetFileName(argv[2]); + + bool isComplex = atoi(argv[14]); + + if(isComplex) { - resampler->SetInputRpcGridSize(20); - resampler->EstimateInputRpcModelOn(); + cReader->SetFileName(argv[1]); + cReader->GenerateOutputInformation(); + intensityFilter->SetInput(cReader->GetOutput()); + VectorImageType::PixelType no_data(cReader->GetOutput()->GetNumberOfComponentsPerPixel()); + no_data.Fill(0); + orthoRectifFilter->SetEdgePaddingValue(no_data); + orthoRectifFilter->SetInput(intensityFilter->GetOutput()); } - - if (useOutRpc) + else { - resampler->SetOutputRpcGridSize(20); - resampler->EstimateOutputRpcModelOn(); + reader->SetFileName(argv[1]); + reader->GenerateOutputInformation(); + VectorImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel()); + no_data.Fill(0); + orthoRectifFilter->SetEdgePaddingValue(no_data); + orthoRectifFilter->SetInput(reader->GetOutput()); } + VectorImageType::IndexType start; + start[0] = 0; + start[1] = 0; + orthoRectifFilter->SetOutputStartIndex(start); - // Write the resampled image - WriterType::Pointer writer= WriterType::New(); - writer->SetNumberOfDivisionsTiledStreaming(4); - writer->SetFileName(outfname); - writer->SetInput(resampler->GetOutput()); - writer->Update(); + VectorImageType::SizeType size; + size[0] = atoi(argv[5]); // X size + size[1] = atoi(argv[6]); //Y size + orthoRectifFilter->SetOutputSize(size); - std::cout << resampler << std::endl; + VectorImageType::SpacingType spacing; + spacing[0] = atof(argv[7]); + spacing[1] = atof(argv[8]); + orthoRectifFilter->SetOutputSpacing(spacing); - return EXIT_SUCCESS; -} - - -int otbGenericRSResampleImageFilterFromMap(int itkNotUsed(argc), char* argv[]) -{ - typedef otb::MultiChannelExtractROI<PixelType, PixelType> ExtractROIType; - - // SmartPointer instantiation - ExtractROIType::Pointer extractor = ExtractROIType::New(); - ImageResamplerType::Pointer resampler = ImageResamplerType::New(); + VectorImageType::PointType origin; + origin[0] = strtod(argv[3], nullptr); //Origin easting + origin[1] = strtod(argv[4], nullptr); //Origin northing + orthoRectifFilter->SetOutputOrigin(origin); - const char * infname = argv[1]; - const char * outfname = argv[4]; - double iGridSpacing = atof(argv[2]); - int useInRpc = atoi(argv[3]); - - // Reader Instantiation - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(infname); - reader->UpdateOutputInformation(); - - SpacingType spacing; - spacing[0] = 2.5; - spacing[1] = -2.5; + std::string wkt = otb::SpatialReference::FromUTM(atoi(argv[9]),atoi(argv[10]) ? otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt(); + orthoRectifFilter->SetOutputProjectionRef(wkt); // Displacement Field spacing - SpacingType gridSpacing; - gridSpacing[0] = iGridSpacing; - gridSpacing[1] = -iGridSpacing; - - // Default value builder - ImageType::PixelType defaultValue; - itk::NumericTraits<ImageType::PixelType>::SetLength(defaultValue, reader->GetOutput()->GetNumberOfComponentsPerPixel()); - - // Extract a roi centered on the input center - ImageType::RegionType roi; - ImageType::IndexType roiIndex; - SizeType roiSize; - - // Fill the size - roiSize.Fill(250); - - // Fill the start index - roiIndex[0] = (unsigned int)((reader->GetOutput()->GetLargestPossibleRegion().GetSize()[0] - roiSize[0]) /2); - roiIndex[1] = (unsigned int)((reader->GetOutput()->GetLargestPossibleRegion().GetSize()[1] - roiSize[1]) /2); - - roi.SetIndex(roiIndex); - roi.SetSize(roiSize); - - extractor->SetExtractionRegion(roi); - extractor->SetInput(reader->GetOutput()); - extractor->UpdateOutputInformation(); - - // Set the Resampler Parameters - resampler->SetInput(extractor->GetOutput()); - resampler->SetDisplacementFieldSpacing(gridSpacing); - resampler->SetOutputParametersFromMap("UTM", spacing); - - if (useInRpc) - { - resampler->SetInputRpcGridSize(20); - resampler->EstimateInputRpcModelOn(); - } - - // Write the resampled image - WriterType::Pointer writer= WriterType::New(); - writer->SetAutomaticTiledStreaming(); - writer->SetFileName(outfname); - writer->SetInput(resampler->GetOutput()); + VectorImageType::SpacingType gridSpacing; + gridSpacing[0] = atof(argv[11]); + gridSpacing[1] = -atof(argv[11]); + orthoRectifFilter->SetDisplacementFieldSpacing(gridSpacing); + + // manage demHandler + if (atoi(argv[12])==1) //mode = no DEM + { + otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(135.8); + } + else if ( (atoi(argv[12])==2) || (atoi(argv[12])==3) ) //mode = DEM SRTM || DEM GTIFF + { + otb::DEMHandler::Instance()->OpenDEMDirectory(argv[13]); + } + + writer->SetInput(orthoRectifFilter->GetOutput()); + writer->SetNumberOfDivisionsTiledStreaming(4); writer->Update(); - std::cout << resampler << std::endl; - return EXIT_SUCCESS; } diff --git a/Modules/Filtering/Projection/test/otbOrthoRectificationFilter.cxx b/Modules/Filtering/Projection/test/otbOrthoRectificationFilter.cxx deleted file mode 100644 index e832b5dc0ff2163ec5abe0c0518544932f845552..0000000000000000000000000000000000000000 --- a/Modules/Filtering/Projection/test/otbOrthoRectificationFilter.cxx +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -// iostream is used for general output -#include <iostream> -#include <stdlib.h> -#include <complex> - -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbGenericMapProjection.h" -#include "itkUnaryFunctorImageFilter.h" -//#include "itkComplexToModulusImageFilter.h" -#include "otbDEMHandler.h" -#include "otbUnaryImageFunctorWithVectorImageFilter.h" -#include "otbOrthoRectificationFilter.h" -#include "otbComplexToIntensityImageFilter.h" -#include "otbPerBandVectorImageFilter.h" - -int otbOrthoRectificationFilter(int argc, char* argv[]) -{ - if (argc != 15) - { - std::cout << argv[0] << - " <input filename> <output filename> <origin easting> <origin northing>" - " <x size> <y size> <x spacing> <y spacing> <UTM zone> <UTM hemisphere>" - " <grid_spacing> <mode> <mode.info> <is_complex>" - << std::endl; - - return EXIT_FAILURE; - } - - typedef std::complex<double> ComplexPixelType; - typedef otb::VectorImage<ComplexPixelType,2> ComplexVectorImageType; - typedef otb::VectorImage<double, 2> VectorImageType; - typedef otb::ImageFileReader<VectorImageType> ReaderType; - typedef otb::ImageFileReader<ComplexVectorImageType> ComplexReaderType; - typedef otb::ImageFileWriter<VectorImageType> WriterType; - - // Handling of complex images - typedef otb::Image<ComplexPixelType> ComplexImageType; - typedef otb::Image<double> ImageType; - typedef otb::ComplexToIntensityImageFilter<ComplexImageType, ImageType> IntensityFilterType; - typedef otb::PerBandVectorImageFilter<ComplexVectorImageType,VectorImageType,IntensityFilterType> PerBandIntensityFilterType; - typedef otb::GenericMapProjection<otb::TransformDirection::INVERSE> MapProjectionType; - typedef otb::OrthoRectificationFilter<VectorImageType, VectorImageType, MapProjectionType> OrthoRectifFilterType; - - //Allocate pointer - ReaderType::Pointer reader = ReaderType::New(); - ComplexReaderType::Pointer cReader = ComplexReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - PerBandIntensityFilterType::Pointer intensityFilter = PerBandIntensityFilterType::New(); - - OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New(); - - writer->SetFileName(argv[2]); - - bool isComplex = atoi(argv[14]); - - if(isComplex) - { - cReader->SetFileName(argv[1]); - cReader->GenerateOutputInformation(); - intensityFilter->SetInput(cReader->GetOutput()); - VectorImageType::PixelType no_data(cReader->GetOutput()->GetNumberOfComponentsPerPixel()); - no_data.Fill(0); - orthoRectifFilter->SetEdgePaddingValue(no_data); - orthoRectifFilter->SetInput(intensityFilter->GetOutput()); - } - else - { - reader->SetFileName(argv[1]); - reader->GenerateOutputInformation(); - VectorImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel()); - no_data.Fill(0); - orthoRectifFilter->SetEdgePaddingValue(no_data); - orthoRectifFilter->SetInput(reader->GetOutput()); - } - - VectorImageType::IndexType start; - start[0] = 0; - start[1] = 0; - orthoRectifFilter->SetOutputStartIndex(start); - - VectorImageType::SizeType size; - size[0] = atoi(argv[5]); // X size - size[1] = atoi(argv[6]); //Y size - orthoRectifFilter->SetOutputSize(size); - - VectorImageType::SpacingType spacing; - spacing[0] = atof(argv[7]); - spacing[1] = atof(argv[8]); - orthoRectifFilter->SetOutputSpacing(spacing); - - VectorImageType::PointType origin; - origin[0] = strtod(argv[3], nullptr); //Origin easting - origin[1] = strtod(argv[4], nullptr); //Origin northing - orthoRectifFilter->SetOutputOrigin(origin); - - MapProjectionType::Pointer utmMapProjection = MapProjectionType::New(); - utmMapProjection->SetWkt(otb::SpatialReference::FromUTM(atoi(argv[9]),atoi(argv[10]) ? otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt()); - orthoRectifFilter->SetMapProjection(utmMapProjection); - - // Displacement Field spacing - VectorImageType::SpacingType gridSpacing; - gridSpacing[0] = atof(argv[11]); - gridSpacing[1] = -atof(argv[11]); - orthoRectifFilter->SetDisplacementFieldSpacing(gridSpacing); - - // manage demHandler - if (atoi(argv[12])==1) //mode = no DEM - { - otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(135.8); - } - else if ( (atoi(argv[12])==2) || (atoi(argv[12])==3) ) //mode = DEM SRTM || DEM GTIFF - { - otb::DEMHandler::Instance()->OpenDEMDirectory(argv[13]); - } - - writer->SetInput(orthoRectifFilter->GetOutput()); - writer->SetNumberOfDivisionsTiledStreaming(4); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx b/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx index 6f985e5f5c797ef0a758fb4e70eb198d42b629ad..acbe2a16407fa3b09ef58adf069c95c836bc83ab 100644 --- a/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx +++ b/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx @@ -24,9 +24,7 @@ void RegisterTests() { REGISTER_TEST(otbSensorModel); REGISTER_TEST(otbVectorDataProjectionFilterFromGeoToMap); - REGISTER_TEST(otbOrthoRectificationFilter); REGISTER_TEST(otbGenericRSResampleImageFilter); - REGISTER_TEST(otbGenericRSResampleImageFilterFromMap); REGISTER_TEST(otbGeometriesProjectionFilter); REGISTER_TEST(otbGenericRSTransformGenericTest); REGISTER_TEST(otbVectorDataTransformFilter); @@ -46,7 +44,6 @@ void RegisterTests() REGISTER_TEST(otbGenericRSTransformImageAndMNTToWGS84ConversionChecking); REGISTER_TEST(otbCompositeTransform); REGISTER_TEST(otbLeastSquareAffineTransformEstimator); - REGISTER_TEST(otbSpectralAngleDataNodeFeatureFunction); REGISTER_TEST(otbGCPsToRPCSensorModelImageFilterCheckRpcModel); REGISTER_TEST(otbGeographicalDistance); REGISTER_TEST(otbTileImageFilterRSTransformTest); diff --git a/Modules/Filtering/Projection/test/otbSpectralAngleDataNodeFeatureFunction.cxx b/Modules/Filtering/Projection/test/otbSpectralAngleDataNodeFeatureFunction.cxx deleted file mode 100644 index eb239242e2ad774a69c3480b8d447904c0945516..0000000000000000000000000000000000000000 --- a/Modules/Filtering/Projection/test/otbSpectralAngleDataNodeFeatureFunction.cxx +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include "otbSpectralAngleDataNodeFeatureFunction.h" - -#include "otbVectorImage.h" -#include "otbImageFileReader.h" -#include "otbVectorData.h" -#include "otbVectorDataFileReader.h" -#include "otbVectorDataIntoImageProjectionFilter.h" -#include "otbVectorDataFileWriter.h" -#include "itkPreOrderTreeIterator.h" - - -int otbSpectralAngleDataNodeFeatureFunction(int itkNotUsed(argc), char* argv[]) -{ - const char * inputVD = argv[1]; - const char * inputImg = argv[2]; - const char * DEMDir = argv[3]; - const char * outputVD = argv[4]; - int DisplayWarnings = atoi(argv[5]); - - typedef double CoordRepType; - typedef double PrecisionType; - typedef otb::VectorImage<PrecisionType> ImageType; - typedef otb::ImageFileReader<ImageType> ImageReaderType; - typedef otb::VectorData<CoordRepType, 2, PrecisionType> - VectorDataType; - typedef VectorDataType::DataNodeType DataNodeType; - typedef otb::VectorDataFileReader<VectorDataType> VectorDataReaderType; - typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, ImageType> - VectorDataReProjFilter; - typedef otb::VectorDataFileWriter<VectorDataType> VectorDataWriterType; - typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> - TreeIteratorType; - - typedef otb::SpectralAngleDataNodeFeatureFunction<ImageType, CoordRepType, PrecisionType> - FeaturefunctionType; - typedef FeaturefunctionType::OutputType - FeatureOutputType; - - ImageReaderType::Pointer imgReader = ImageReaderType::New(); - VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New(); - VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New(); - VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New(); - FeaturefunctionType::Pointer featureFunction = FeaturefunctionType::New(); - - if (!DisplayWarnings) - { - imgReader->SetGlobalWarningDisplay(0); - } - - otb::DEMHandler::Instance()->OpenDEMDirectory(DEMDir); - - vdReader->SetFileName(inputVD); - vdReader->Update(); - - imgReader->SetFileName(inputImg); - imgReader->UpdateOutputInformation(); - imgReader->Update(); //Needed to set m_EndIndex, m_StartIndex in otbDataNodeImageFunction - - vdReProjFilter->SetInputImage(imgReader->GetOutput()); - vdReProjFilter->SetInputVectorData(vdReader->GetOutput()); - vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true); - vdReProjFilter->Update(); - - std::cout<< "vdReProjFilter->GetOutput()->Size(): " - << vdReProjFilter->GetOutput()->Size() << std::endl; - - featureFunction->SetInputImage(imgReader->GetOutput()); - featureFunction->SetRadius(0); - - // Output - VectorDataType::Pointer outVD = VectorDataType::New(); - // Retrieving root node - DataNodeType::Pointer root = outVD->GetDataTree()->GetRoot()->Get(); - // Create the document node - DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - // Adding the layer to the data tree - outVD->GetDataTree()->Add(document, root); - // Create the folder node - DataNodeType::Pointer folder = DataNodeType::New(); - folder->SetNodeType(otb::FOLDER); - // Adding the layer to the data tree - outVD->GetDataTree()->Add(folder, document); - - TreeIteratorType itVector(vdReProjFilter->GetOutput()->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsLineFeature() || itVector.Get()->IsPolygonFeature()) - { - const DataNodeType::Pointer currentGeometry = itVector.Get(); - FeatureOutputType currentResult; - currentResult = featureFunction->Evaluate(*(currentGeometry.GetPointer())); - currentGeometry->SetFieldAsDouble("RADIOM", (double)(currentResult[0])); - outVD->GetDataTree()->Add(currentGeometry, folder); - } - ++itVector; - } - - vdWriter->SetInput(outVD); - vdWriter->SetFileName(outputVD); - vdWriter->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.h b/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.h deleted file mode 100644 index 5a0d897384035224960895f0ce23a76dacc68d80..0000000000000000000000000000000000000000 --- a/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbDBOverlapDataNodeFeatureFunction_h -#define otbDBOverlapDataNodeFeatureFunction_h - -#include "otbDataNodeVectorDataFunction.h" - -#include "itkPreOrderTreeIterator.h" - -namespace otb -{ -/** \class DBOverlapDataNodeFeatureFunction - * \brief - * - * - * \ingroup Functions - * \sa DataNodeVectorDataFunction - * - * \ingroup OTBVectorDataManipulation - */ - -template < -class TCoordRep = double, -class TPrecision = double -> -class ITK_EXPORT DBOverlapDataNodeFeatureFunction : - public DataNodeVectorDataFunction<std::vector<TPrecision>, TCoordRep, TPrecision> -{ -public: - /** Standard class typedefs. */ - typedef DBOverlapDataNodeFeatureFunction Self; - typedef DataNodeVectorDataFunction<std::vector<TPrecision>, TCoordRep, TPrecision> - Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(DBOverlapDataNodeFeatureFunction, DataNodeVectorDataFunction); - - /** Some typedefs. */ - typedef typename Superclass::DataNodeType DataNodeType; - typedef typename DataNodeType::PointType PointType; - typedef typename DataNodeType::LineType LineType; - typedef typename LineType::VertexType VertexType; - typedef typename DataNodeType::PolygonType PolygonType; - - typedef typename Superclass::VectorDataType VectorDataType; - typedef typename VectorDataType::DataTreeType DataTreeType; - typedef itk::PreOrderTreeIterator<typename VectorDataType::DataTreeType> - TreeIteratorType; - - typedef TCoordRep CoordRepType; - - typedef TPrecision PrecisionType; - - typedef std::vector<PrecisionType> OutputType; - - OutputType Evaluate( const DataNodeType& node ) const override; - - /** Set/Get methods */ - itkGetConstMacro(DistanceThreshold, PrecisionType); - itkSetMacro(DistanceThreshold, PrecisionType); - - /** Method to compute the distance of a point to a segment */ - double ComputeEuclideanDistanceMetricToSegment(VertexType q1, VertexType q2, VertexType p) const; - -protected: - DBOverlapDataNodeFeatureFunction(); - ~DBOverlapDataNodeFeatureFunction() override {} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - DBOverlapDataNodeFeatureFunction(const Self&) = delete; - void operator=(const Self&) = delete; - - /** Road / Building distance Threshold */ - PrecisionType m_DistanceThreshold; -}; - -} -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbDBOverlapDataNodeFeatureFunction.hxx" -#endif - -#endif diff --git a/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.hxx b/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.hxx deleted file mode 100644 index 3ede4ecc7f096b033ae7ff40a85a0c14fc832c04..0000000000000000000000000000000000000000 --- a/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.hxx +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbDBOverlapDataNodeFeatureFunction_hxx -#define otbDBOverlapDataNodeFeatureFunction_hxx - -#include "otbDBOverlapDataNodeFeatureFunction.h" - -namespace otb -{ - -/** - * Constructor - */ -template <class TCoordRep, class TPrecision> -DBOverlapDataNodeFeatureFunction<TCoordRep, TPrecision> -::DBOverlapDataNodeFeatureFunction() - :m_DistanceThreshold(50)//in physical coordinates -{ -} - -/** - * Standard "PrintSelf" method - */ -template <class TCoordRep, class TPrecision> -void -DBOverlapDataNodeFeatureFunction<TCoordRep, TPrecision> -::PrintSelf( - std::ostream& os, - itk::Indent indent) const -{ - Superclass::PrintSelf( os, indent ); - os << indent << "Distance Threshold: " << m_DistanceThreshold << std::endl; -} - -/** - * Method to compute the distance of a point to a segment - */ -template <class TCoordRep, class TPrecision> -double -DBOverlapDataNodeFeatureFunction<TCoordRep, TPrecision> -::ComputeEuclideanDistanceMetricToSegment(VertexType q1, VertexType q2, VertexType p) const -{ - // Length of the segment - double l2 = q1.SquaredEuclideanDistanceTo(q2); - - // Is the projection of p on the segment inside (0<u<1) or - // inside the segment bounds - double u = ((p[0] - q1[0]) *(q2[0] - q1[0] ) + - (p[1] - q1[1]) *(q2[1] - q1[1])) / l2; - - if( u < 1e-10 ) u = 0.; - if( u -1. > 1e-10 ) u = 1.; - double x = q1[0] + u *(q2[0] - q1[0] ); - double y = q1[1] + u *(q2[1] - q1[1] ); - double dx = x - p[0]; - double dy = y - p[1]; - - return std::sqrt(dx*dx + dy*dy); - } - -template <class TCoordRep, class TPrecision> -typename DBOverlapDataNodeFeatureFunction<TCoordRep, TPrecision> -::OutputType -DBOverlapDataNodeFeatureFunction<TCoordRep, TPrecision> -::Evaluate( const DataNodeType& node ) const -{ - OutputType output; - - //build the tmp DataTree containing polygon within the radius - typename VectorDataType::Pointer tmpDataTree = VectorDataType::New(); - typename DataNodeType::Pointer root = tmpDataTree->GetDataTree()->GetRoot()->Get(); - typename DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - tmpDataTree->GetDataTree()->Add(document, root); - - TreeIteratorType itVector(this->GetInputVectorData()->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsPolygonFeature()) - { - typename DataNodeType::Pointer currentGeometry = itVector.Get(); - unsigned int i=0; - while (i<currentGeometry->GetPolygonExteriorRing()->GetVertexList()->Size()) - { - unsigned int j=0; - while (j<node.GetLine()->GetVertexList()->Size()-1) - { - double dist; - dist = this->ComputeEuclideanDistanceMetricToSegment(node.GetLine()->GetVertexList()->GetElement(j), - node.GetLine()->GetVertexList()->GetElement(j+1), - currentGeometry->GetPolygonExteriorRing()->GetVertexList()->GetElement(i)); - //std::cout << "dist: " << dist << std::endl; - //std::cout << "m_DistanceThreshold: " << m_DistanceThreshold << std::endl; - if (dist <= m_DistanceThreshold) - { - //Add the current polygon to the tmp DataTree - //jump to the next one - tmpDataTree->GetDataTree()->Add(currentGeometry, document); - j = node.GetLine()->GetVertexList()->Size(); - i = currentGeometry->GetPolygonExteriorRing()->GetVertexList()->Size(); - } - ++j; - } - ++i; - } - } - ++itVector; - } - - /* - std::cout << this->GetInputVectorData()->GetDataTree()->Count() << std::endl; - std::cout << tmpDataTree->GetDataTree()->Count() << std::endl; - */ - unsigned int crossAcc = 0; - unsigned int nbBuildings = 0; - - TreeIteratorType it(tmpDataTree->GetDataTree()); - it.GoToBegin(); - while (!it.IsAtEnd()) - { - if (it.Get()->IsPolygonFeature()) - { - typename DataNodeType::Pointer currentGeometry = it.Get(); - nbBuildings ++; - for (unsigned int i=0; i<node.GetLine()->GetVertexList()->Size()-1; ++i) - { - - if(currentGeometry->GetPolygonExteriorRing()->NbCrossing(node.GetLine()->GetVertexList()->GetElement(i), - node.GetLine()->GetVertexList()->GetElement(i+1))) - { - crossAcc ++; - break; - } - } - } - ++it; - } - - if(nbBuildings == 0) - { - output.push_back(static_cast<PrecisionType>(0.)); - } - else - { - output.push_back(static_cast<PrecisionType>((double)(crossAcc)/(double)(nbBuildings))); - } - - output.push_back(static_cast<PrecisionType>(crossAcc)); - output.push_back(static_cast<PrecisionType>(nbBuildings)); - - return output; -} - - -} // end namespace otb - -#endif diff --git a/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h b/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h deleted file mode 100644 index 303db1003b0aeae9e2b39c24a551d57bc2b3bb4c..0000000000000000000000000000000000000000 --- a/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_h -#define otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_h - -#include "otbDataNodeImageFunction.h" - -#include "otbBinarySpectralAngleFunctor.h" -#include "otbPolyLineImageConstIterator.h" -#include "itkLineConstIterator.h" -#include "itkVariableLengthVector.h" - -namespace otb -{ -/** \class RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction - * \brief Compute the spectral angle between the radiometry along - * a line and its neighborhood - * - * This function compares the radiometry along a datanode with the - * radiometry of the neighborhood. - * - * It computes the mean of a rectangular area around each line segment, - * and the mean of two rectangular areas on each side of the line segment. - * The descriptor is the spectral angle between the two values, - * scaled by \$f\pi\$f. - * - * The width of the area around a line segment can be specified with - * SetCenterRadius. - * - * The neighborhood area can be specified by two radius, using SetNeighborhoodBeginRadius - * and SetNeighborhoodEndRadius. - * - * - * \ingroup Functions - * \sa DataNodeImageFunction - * \sa NDVIDataNodeFeatureFunction - * - * \ingroup OTBVectorDataManipulation - */ - -template < -class TImage, -class TCoordRep = double, -class TPrecision = double -> -class ITK_EXPORT RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction : - public DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision> -{ -public: - /** Standard class typedefs. */ - typedef RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction Self; - typedef DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision> - Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction, DataNodeImageFunction); - - /** Some typedefs. */ - typedef typename Superclass::DataNodeType DataNodeType; - typedef typename DataNodeType::LineType LineType; - typedef typename LineType::Pointer LinePointer; - typedef typename LineType::ContinuousIndexType ContinuousIndexType; - typedef typename LineType::VertexListConstIteratorType VertexListConstIteratorType; - - typedef TImage InputImageType; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - typedef typename InputImageType::PixelType PixelType; - typedef typename InputImageType::InternalPixelType ScalarRealType; - typedef typename InputImageType::IndexType IndexType; - typedef typename InputImageType::IndexValueType IndexValueType; - - typedef TCoordRep CoordRepType; - - typedef TPrecision PrecisionType; - - typedef itk::VariableLengthVector<PrecisionType> ReferencePixelType; - - typedef PolyLineImageConstIterator<InputImageType, LineType> ImageLineIteratorType; - typedef itk::LineConstIterator<InputImageType> LineIteratorType; - - typedef Functor::BinarySpectralAngleFunctor<PixelType, ReferencePixelType, PrecisionType> - SpectralAngleFunctorType; - - typedef std::pair<IndexType, IndexType> IndexPairType; - typedef std::vector<PrecisionType> OutputType; - - /* Compute the descriptor value along this DataNode */ - OutputType Evaluate( const DataNodeType& node ) const override; - - /* Get the radius used to define the area around a line segment. - * A radius of 0 means that the area is reduced to a line joining - * the two segments extremities. */ - itkGetConstMacro(CenterRadius, unsigned int); - - /* Set the radius used to define the area around a line segment. - * A radius of 0 means that the area is reduced to a line joining - * the two segments extremities. */ - itkSetMacro(CenterRadius, unsigned int); - - /* Get the radius used to define the start of the neighboring area. - * Typically this value must be greater than CenterRadius */ - itkGetConstMacro(NeighborhoodBeginRadius, unsigned int); - - /* Set the radius used to define the start of the neighboring area. - * Typically this value must be greater than CenterRadius */ - itkSetMacro(NeighborhoodBeginRadius, unsigned int); - - /* Get the radius used to define the end of the neighboring area. - * Typically this value must be greater than NeighborhoodBeginRadius */ - itkGetConstMacro(NeighborhoodEndRadius, unsigned int); - - /* Set the radius used to define the end of the neighboring area. - * Typically this value must be greater than NeighborhoodBeginRadius */ - itkSetMacro(NeighborhoodEndRadius, unsigned int); - -protected: - RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction(); - ~RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction() override {} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction(const Self&) = delete; - void operator=(const Self&) = delete; - - /** Center radius */ - unsigned int m_CenterRadius; - - /** Neighborhood start radius */ - unsigned int m_NeighborhoodBeginRadius; - - /** Neighborhood end radius */ - unsigned int m_NeighborhoodEndRadius; - -}; - -} -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.hxx" -#endif - -#endif diff --git a/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.hxx b/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.hxx deleted file mode 100644 index eadf8f167ae171fba94d11b0f94a362cdea0435e..0000000000000000000000000000000000000000 --- a/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.hxx +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_hxx -#define otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_hxx - -#include "otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h" - -namespace otb -{ - -/** - * Constructor - */ -template<class TImage, class TCoordRep, class TPrecision> -RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction() : - m_CenterRadius(1), m_NeighborhoodBeginRadius(2), m_NeighborhoodEndRadius(3) -{ -} - -/** - * Standard "PrintSelf" method - */ -template<class TImage, class TCoordRep, class TPrecision> -void RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::PrintSelf(std::ostream& os, - itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -template<class TImage, class TCoordRep, class TPrecision> -typename RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::OutputType RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction< - TImage, TCoordRep, TPrecision>::Evaluate(const DataNodeType& node) const -{ - - // TODO faire avce un ikk - const typename ImageLineIteratorType::PathType* path; - - switch (node.GetNodeType()) - { - case FEATURE_POINT: - { - itkExceptionMacro(<< "This DataNode type is not handled yet"); - break; - } - case FEATURE_LINE: - { - path = node.GetLine(); - break; - } - case FEATURE_POLYGON: - { - path = node.GetPolygonExteriorRing(); - break; - } - default: - { - itkExceptionMacro(<< "This DataNode type is not handle yet"); - break; - } - } - - std::vector<std::pair<IndexType, IndexType> > splitedLineIdNeigh; - std::vector<std::pair<IndexType, IndexType> > splitedLineIdCentral; - - // Split line and polygon into segment (ie. line with two vertex - VertexListConstIteratorType it1 = path->GetVertexList()->Begin(); - VertexListConstIteratorType it2 = path->GetVertexList()->Begin(); - VertexListConstIteratorType itStop = path->GetVertexList()->End(); - - ++it2; - if (it2 == itStop) - { - itkExceptionMacro(<< "Invalid DataNode, must at least contain two points"); - } - - while (it1 != itStop && it2 != itStop) - { - IndexType id1, id2; - id1[0] = static_cast<int> (it1.Value()[0]); - id1[1] = static_cast<int> (it1.Value()[1]); - id2[0] = static_cast<int> (it2.Value()[0]); - id2[1] = static_cast<int> (it2.Value()[1]); - - // Compute the direction of the current line - itk::Vector<double, 2> direction; - direction[0] = it2.Value()[0] - it1.Value()[0]; - direction[1] = it2.Value()[1] - it1.Value()[1]; - direction.Normalize(); - - // Compute the orthogonal direction of the current line - itk::Vector<double, 2> orthogonalDirection; - orthogonalDirection[0] = direction[1]; - orthogonalDirection[1] = -direction[0]; - - splitedLineIdCentral.push_back(IndexPairType(id1, id2)); - for (unsigned int j = 1; j <= m_CenterRadius; ++j) - { - IndexType shift11, shift12; - shift11[0] = id1[0] - j * orthogonalDirection[0]; - shift11[1] = id1[1] - j * orthogonalDirection[1]; - shift12[0] = id1[0] + j * orthogonalDirection[0]; - shift12[1] = id1[1] + j * orthogonalDirection[1]; - IndexType shift21, shift22; - shift21[0] = id2[0] - j * orthogonalDirection[0]; - shift21[1] = id2[1] - j * orthogonalDirection[1]; - shift22[0] = id2[0] + j * orthogonalDirection[0]; - shift22[1] = id2[1] + j * orthogonalDirection[1]; - - splitedLineIdCentral.push_back(IndexPairType(shift11, shift21)); - splitedLineIdCentral.push_back(IndexPairType(shift12, shift22)); - } - - for (unsigned int j = m_NeighborhoodBeginRadius; j <= m_NeighborhoodEndRadius; ++j) - { - IndexType shift11, shift12; - shift11[0] = id1[0] - j * orthogonalDirection[0]; - shift11[1] = id1[1] - j * orthogonalDirection[1]; - shift12[0] = id1[0] + j * orthogonalDirection[0]; - shift12[1] = id1[1] + j * orthogonalDirection[1]; - IndexType shift21, shift22; - shift21[0] = id2[0] - j * orthogonalDirection[0]; - shift21[1] = id2[1] - j * orthogonalDirection[1]; - shift22[0] = id2[0] + j * orthogonalDirection[0]; - shift22[1] = id2[1] + j * orthogonalDirection[1]; - - splitedLineIdNeigh.push_back(IndexPairType(shift11, shift21)); - splitedLineIdNeigh.push_back(IndexPairType(shift12, shift22)); - } - ++it1; - ++it2; - } - - // in FEATURE_POLYGON case, first point appears twice (first vertex and last vertew, thus we create a line of 1 point...) - if (node.GetNodeType() == FEATURE_POLYGON) - { - splitedLineIdCentral.pop_back(); - splitedLineIdNeigh.pop_back(); - splitedLineIdNeigh.pop_back(); - } - - double centralNbVisitedPixel = 0.; - - PixelType centralRadiomAcc(this->GetInputImage()->GetNumberOfComponentsPerPixel()); - centralRadiomAcc.Fill(0); - - for (unsigned int i = 0; i < splitedLineIdCentral.size(); ++i) - { - LineIteratorType lineIt(this->GetInputImage(), splitedLineIdCentral[i].first, splitedLineIdCentral[i].second); - lineIt.GoToBegin(); - - while (!lineIt.IsAtEnd()) - { - if (this->IsInsideBuffer(lineIt.GetIndex())) - { - centralRadiomAcc += this->GetInputImage()->GetPixel( lineIt.GetIndex() ); - centralNbVisitedPixel += 1; - } - ++lineIt; - } - } - - double neighNbVisitedPixel = 0.; - - PixelType neighborRadiomAcc(this->GetInputImage()->GetNumberOfComponentsPerPixel()); - neighborRadiomAcc.Fill(0); - - for (unsigned int i = 0; i < splitedLineIdNeigh.size(); ++i) - { - LineIteratorType lineIt(this->GetInputImage(), splitedLineIdNeigh[i].first, splitedLineIdNeigh[i].second); - lineIt.GoToBegin(); - - while (!lineIt.IsAtEnd()) - { - if (this->IsInsideBuffer(lineIt.GetIndex())) - { - neighborRadiomAcc += this->GetInputImage()->GetPixel( lineIt.GetIndex() ); - neighNbVisitedPixel += 1; - } - ++lineIt; - } - } - - OutputType output; - if (centralNbVisitedPixel > 0 && neighNbVisitedPixel > 0) - { - // Compute averaged radiometry in both areas - centralRadiomAcc /= centralNbVisitedPixel; - neighborRadiomAcc /= neighNbVisitedPixel; - - // Compute the spectral angle between the center area and the neighbor area - SpectralAngleFunctorType spectralAngleFunctor; - double angle = spectralAngleFunctor(neighborRadiomAcc, centralRadiomAcc); - - // Make sure we are in [0, 1] interval - angle /= otb::CONST_PI; - - output.push_back(static_cast<PrecisionType> (angle)); - } - else - { - output.push_back(static_cast<PrecisionType> (0.)); - } - - // TODO: handle streaming, need to output the current state - return output; -} - -} // end namespace otb - -#endif diff --git a/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.h b/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.h deleted file mode 100644 index 1bc3dce3fea38484b86e8629213bf652ef138aeb..0000000000000000000000000000000000000000 --- a/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbSpectralAngleDataNodeFeatureFunction_h -#define otbSpectralAngleDataNodeFeatureFunction_h - -#include "otbDataNodeImageFunction.h" - -#include "otbBinarySpectralAngleFunctor.h" -#include "otbPolyLineImageConstIterator.h" -#include "itkLineConstIterator.h" -#include "itkVariableLengthVector.h" - -namespace otb -{ -/** \class SpectralAngleDataNodeFeatureFunction - * \brief Compute a spectral angle based feature alongside a - * datanode. - * - * This function compute a spectral angle alongside a datanode. - * The feature is the mean spectral angle regarding a - * reference pixel alongside the tested datanode. - * - * The output has three elements: - * - #0: mean spectral angle of a neighborhood around the datanode, weighted to fit in [0, 1] interval - * - #1: accumulator of the spectral angle alongside the datanode - * - #2: number of visited pixel - * - * \ingroup Functions - * \sa DataNodeImageFunction - * \sa NDVIDataNodeFeatureFunction - * - * \ingroup OTBVectorDataManipulation - */ - -template < -class TImage, -class TCoordRep = double, -class TPrecision = double -> -class ITK_EXPORT SpectralAngleDataNodeFeatureFunction : - public DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision> -{ -public: - /** Standard class typedefs. */ - typedef SpectralAngleDataNodeFeatureFunction Self; - typedef DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision> - Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(SpectralAngleDataNodeFeatureFunction, DataNodeImageFunction); - - /** Some typedefs. */ - typedef typename Superclass::DataNodeType DataNodeType; - typedef typename DataNodeType::LineType LineType; - typedef typename LineType::Pointer LinePointer; - typedef typename LineType::ContinuousIndexType ContinuousIndexType; - typedef typename LineType::VertexListConstIteratorType VertexListConstIteratorType; - - typedef TImage InputImageType; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - typedef typename InputImageType::PixelType PixelType; - typedef typename InputImageType::InternalPixelType ScalarRealType; - typedef typename InputImageType::IndexType IndexType; - typedef typename InputImageType::IndexValueType IndexValueType; - - typedef TCoordRep CoordRepType; - - typedef TPrecision PrecisionType; - - typedef itk::VariableLengthVector<PrecisionType> ReferencePixelType; - - typedef PolyLineImageConstIterator<InputImageType, LineType> ImageLineIteratorType; - typedef itk::LineConstIterator<InputImageType> LineIteratorType; - - typedef Functor::BinarySpectralAngleFunctor<PixelType, ReferencePixelType, PrecisionType> - SpectralAngleFunctorType; - - typedef std::pair<IndexType, IndexType> IndexPairType; - typedef std::vector<PrecisionType> OutputType; - - OutputType Evaluate( const DataNodeType& node ) const override; - - /** Set/Get methods */ - itkGetConstMacro(RefPixel, PixelType); - itkSetMacro(RefPixel, PixelType); - - itkGetConstMacro(Radius, unsigned int); - itkSetMacro(Radius, unsigned int); - -protected: - SpectralAngleDataNodeFeatureFunction(); - ~SpectralAngleDataNodeFeatureFunction() override {} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - SpectralAngleDataNodeFeatureFunction(const Self&) = delete; - void operator=(const Self&) = delete; - - /** SpectralAngle Functor & ReferencePixel*/ - ReferencePixelType m_RefPixel; - SpectralAngleFunctorType m_SpectralAngleFunctor; - - /** Neighborhood radius */ - unsigned int m_Radius; -}; - -} -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbSpectralAngleDataNodeFeatureFunction.hxx" -#endif - -#endif diff --git a/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.hxx b/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.hxx deleted file mode 100644 index c2ed9e81e295505f4fbaad58afeeaa772f77770e..0000000000000000000000000000000000000000 --- a/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.hxx +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbSpectralAngleDataNodeFeatureFunction_hxx -#define otbSpectralAngleDataNodeFeatureFunction_hxx - -#include "otbSpectralAngleDataNodeFeatureFunction.h" - -namespace otb -{ - -/** - * Constructor - */ -template<class TImage, class TCoordRep, class TPrecision> -SpectralAngleDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::SpectralAngleDataNodeFeatureFunction() : - m_Radius(2) -{ - //Example for QuickBird images (on a specific image) - m_RefPixel.SetSize(4); - m_RefPixel.SetElement(0, 252.284); - m_RefPixel.SetElement(1, 357.3); - m_RefPixel.SetElement(2, 232.644); - m_RefPixel.SetElement(3, 261.558); -} - -/** - * Standard "PrintSelf" method - */ -template<class TImage, class TCoordRep, class TPrecision> -void SpectralAngleDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::PrintSelf(std::ostream& os, - itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "Reference Pixel: " << m_RefPixel << std::endl; -} - -template<class TImage, class TCoordRep, class TPrecision> -typename SpectralAngleDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::OutputType SpectralAngleDataNodeFeatureFunction< - TImage, TCoordRep, TPrecision>::Evaluate(const DataNodeType& node) const -{ - - // TODO faire avce un ikk - const typename ImageLineIteratorType::PathType* path; - - switch (node.GetNodeType()) - { - case FEATURE_POINT: - { - itkExceptionMacro(<< "This DataNode type is not handle yet"); - break; - } - case FEATURE_LINE: - { - path = node.GetLine(); - break; - } - case FEATURE_POLYGON: - { - path = node.GetPolygonExteriorRing(); - break; - } - default: - { - itkExceptionMacro(<< "This DataNode type is not handle yet"); - break; - } - } - - std::vector<std::pair<IndexType, IndexType> > splitedLineIdNeigh; - std::vector<std::pair<IndexType, IndexType> > splitedLineIdCentral; - - // Split line and polygon into segment (ie. line with two vertex - VertexListConstIteratorType it1 = path->GetVertexList()->Begin(); - VertexListConstIteratorType it2 = path->GetVertexList()->Begin(); - VertexListConstIteratorType itStop = path->GetVertexList()->End(); - - ++it2; - if (it2 == itStop) - { - itkExceptionMacro(<< "Invalid DataNode, must at least contain two points"); - } - - while (it1 != itStop && it2 != itStop) - { - IndexType id1, id2; - id1[0] = static_cast<int> (it1.Value()[0]); - id1[1] = static_cast<int> (it1.Value()[1]); - id2[0] = static_cast<int> (it2.Value()[0]); - id2[1] = static_cast<int> (it2.Value()[1]); - - // Compute the direction of the current line - itk::Vector<double, 2> direction; - direction[0] = it2.Value()[0] - it1.Value()[0]; - direction[1] = it2.Value()[1] - it1.Value()[1]; - direction.Normalize(); - - // Compute the orthogonal direction of the current line - itk::Vector<double, 2> orthogonalDirection; - orthogonalDirection[0] = direction[1]; - orthogonalDirection[1] = -direction[0]; - - splitedLineIdCentral.push_back(IndexPairType(id1, id2)); - - for (unsigned int j = 1; j <= m_Radius; ++j) - { - IndexType shift11, shift12; - shift11[0] = id1[0] - j * orthogonalDirection[0]; - shift11[1] = id1[1] - j * orthogonalDirection[1]; - shift12[0] = id1[0] + j * orthogonalDirection[0]; - shift12[1] = id1[1] + j * orthogonalDirection[1]; - IndexType shift21, shift22; - shift21[0] = id2[0] - j * orthogonalDirection[0]; - shift21[1] = id2[1] - j * orthogonalDirection[1]; - shift22[0] = id2[0] + j * orthogonalDirection[0]; - shift22[1] = id2[1] + j * orthogonalDirection[1]; - - splitedLineIdCentral.push_back(IndexPairType(shift11, shift21)); - splitedLineIdCentral.push_back(IndexPairType(shift12, shift22)); - } - - ++it1; - ++it2; - } - - // in FEATURE_POLYGON case, first point appears twice (first vertex and last vertew, thus we create a line of 1 point...) - if (node.GetNodeType() == FEATURE_POLYGON) - { - splitedLineIdCentral.pop_back(); - } - - double centralAccSpectralAngle = 0.; - //double centralAccSpectralAngleSecondOrder = 0.; - double centralNbVisitedPixel = 0.; - - for (unsigned int i = 0; i < splitedLineIdCentral.size(); ++i) - { - LineIteratorType lineIt(this->GetInputImage(), splitedLineIdCentral[i].first, splitedLineIdCentral[i].second); - lineIt.GoToBegin(); - - while (!lineIt.IsAtEnd()) - { - if (this->IsInsideBuffer(lineIt.GetIndex())) - { - PixelType currPixel = this->GetInputImage()->GetPixel( lineIt.GetIndex() ); - double angle = m_SpectralAngleFunctor(currPixel, this->GetRefPixel()); - centralAccSpectralAngle += angle; - //centralAccSpectralAngleSecondOrder += angle * angle; - centralNbVisitedPixel += 1; - } - ++lineIt; - } - } - - OutputType output; - - double meanCentral = 0.; - //double stddevCentral = 0.; - if (centralNbVisitedPixel != 0.) - { - meanCentral = static_cast<double> (centralAccSpectralAngle) / centralNbVisitedPixel; - //stddevCentral = std::sqrt( centralAccSpectralAngleSecondOrder/centralNbVisitedPixel - meanCentral*meanCentral ); - } - - if (meanCentral == 0.) - { - output.push_back(static_cast<PrecisionType> (0.)); - } - else - { - // Compute the descriptor here - // meanCentral is in [0, pi] - // We need a descriptor in [0 1] - - double descriptor = meanCentral / otb::CONST_PI; - output.push_back(static_cast<PrecisionType>( descriptor )); - } - - output.push_back(static_cast<PrecisionType> (centralAccSpectralAngle)); - output.push_back(static_cast<PrecisionType> (centralNbVisitedPixel)); - - return output; -} - -} // end namespace otb - -#endif diff --git a/Modules/Filtering/VectorDataManipulation/test/CMakeLists.txt b/Modules/Filtering/VectorDataManipulation/test/CMakeLists.txt index 8513e931ac8918b27fe82f9d51d17cacbeb759a9..a4f17c2c5abfea6b32e5f7bc1bdd3270b66e4334 100644 --- a/Modules/Filtering/VectorDataManipulation/test/CMakeLists.txt +++ b/Modules/Filtering/VectorDataManipulation/test/CMakeLists.txt @@ -22,12 +22,10 @@ otb_module_test() set(OTBVectorDataManipulationTests otbVectorDataManipulationTestDriver.cxx -otbDBOverlapDataNodeFeatureFunction.cxx otbVectorDataExtractROI.cxx otbPolygonCompacityFunctor.cxx otbVectorDataToRandomLineGenerator.cxx otbConcatenateVectorDataFilter.cxx -otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.cxx ) add_executable(otbVectorDataManipulationTestDriver ${OTBVectorDataManipulationTests}) @@ -36,18 +34,6 @@ otb_module_target_label(otbVectorDataManipulationTestDriver) # Tests Declaration -otb_add_test(NAME bfTvDBOverlapDataNodeFeatureFunction COMMAND otbVectorDataManipulationTestDriver - --compare-ogr ${NOTOL} - ${BASELINE_FILES}/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp - ${TEMP}/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp - otbDBOverlapDataNodeFeatureFunction - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp - ${TEMP}/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp - 0 - ) - - otb_add_test(NAME coTvVectorDataExtractROI COMMAND otbVectorDataManipulationTestDriver --compare-ogr ${NOTOL} ${BASELINE_FILES}/coVectorDataExtractROIOutput.shp @@ -84,12 +70,10 @@ otb_add_test(NAME bfTvVectorDataToRandomLineGenerator COMMAND otbVectorDataManip ${BASELINE_FILES}/bfTvVectorDataToRandomLineGeneratorOutput.shp ${TEMP}/bfTvVectorDataToRandomLineGeneratorOutput.shp otbVectorDataToRandomLineGenerator - ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01Polygons.shp + ${INPUTDATA}/Capitole-Shadows.shp ${TEMP}/bfTvVectorDataToRandomLineGeneratorOutput.shp ) - - otb_add_test(NAME bfTvConcatenateVectorDataFilter COMMAND otbVectorDataManipulationTestDriver --compare-ogr ${NOTOL} ${BASELINE_FILES}/otbConcatenateVectorDataFilter_Output.shp @@ -99,24 +83,3 @@ otb_add_test(NAME bfTvConcatenateVectorDataFilter COMMAND otbVectorDataManipulat ${INPUTDATA}/waterways.shp ${TEMP}/otbConcatenateVectorDataFilter_Output.shp ) - -otb_add_test(NAME bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_Polygon COMMAND otbVectorDataManipulationTestDriver - --compare-ogr ${EPSILON_3} - ${BASELINE_FILES}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp - ${TEMP}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp - otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF - ${INPUTDATA}/DEM/srtm_directory - ${TEMP}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp - 0 ) -otb_add_test(NAME bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_Line COMMAND otbVectorDataManipulationTestDriver - --compare-ogr ${EPSILON_9} - ${BASELINE_FILES}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp - ${TEMP}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp - otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF - ${INPUTDATA}/DEM/srtm_directory - ${TEMP}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp - 0 ) diff --git a/Modules/Filtering/VectorDataManipulation/test/otbDBOverlapDataNodeFeatureFunction.cxx b/Modules/Filtering/VectorDataManipulation/test/otbDBOverlapDataNodeFeatureFunction.cxx deleted file mode 100644 index 7bc471de7647fdd08f38f284fcabda330f9a50bb..0000000000000000000000000000000000000000 --- a/Modules/Filtering/VectorDataManipulation/test/otbDBOverlapDataNodeFeatureFunction.cxx +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include "otbDBOverlapDataNodeFeatureFunction.h" - -#include "otbVectorData.h" -#include "otbVectorDataFileReader.h" -#include "otbVectorDataFileWriter.h" - - -int otbDBOverlapDataNodeFeatureFunction(int itkNotUsed(argc), char* argv[]) -{ - const char * inputVD = argv[1]; - const char * inputDB = argv[2]; - const char * outputVD = argv[3]; - int DisplayWarnings = atoi(argv[4]); - - typedef double CoordRepType; - typedef double PrecisionType; - typedef otb::VectorData<CoordRepType, 2, PrecisionType> - VectorDataType; - typedef VectorDataType::DataNodeType DataNodeType; - typedef otb::VectorDataFileReader<VectorDataType> VectorDataReaderType; - typedef otb::VectorDataFileWriter<VectorDataType> VectorDataWriterType; - typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> - TreeIteratorType; - - typedef otb::DBOverlapDataNodeFeatureFunction<CoordRepType, PrecisionType> - DataNodeFunctionType; - typedef DataNodeFunctionType::OutputType - FeatureOutputType; - - VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New(); - VectorDataReaderType::Pointer vdDBReader = VectorDataReaderType::New(); - VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New(); - DataNodeFunctionType::Pointer function = DataNodeFunctionType::New(); - - if (!DisplayWarnings) - { - vdReader->SetGlobalWarningDisplay(0); - } - - vdReader->SetFileName(inputVD); - vdReader->Update(); - - vdDBReader->SetFileName(inputDB); - vdDBReader->Update(); - - function->SetInputVectorData(vdDBReader->GetOutput()); - function->SetDistanceThreshold(0.003); - - // Output - VectorDataType::Pointer outVD = VectorDataType::New(); - // Retrieving root node - DataNodeType::Pointer root = outVD->GetDataTree()->GetRoot()->Get(); - // Create the document node - DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - // Adding the layer to the data tree - outVD->GetDataTree()->Add(document, root); - // Create the folder node - DataNodeType::Pointer folder = DataNodeType::New(); - folder->SetNodeType(otb::FOLDER); - // Adding the layer to the data tree - outVD->GetDataTree()->Add(folder, document); - - TreeIteratorType itVector(vdReader->GetOutput()->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsLineFeature() || itVector.Get()->IsPolygonFeature()) - { - const DataNodeType::Pointer currentGeometry = itVector.Get(); - FeatureOutputType currentResult; - currentResult = function->Evaluate(*(currentGeometry.GetPointer())); - currentGeometry->SetFieldAsDouble("DBOVER", (double)(currentResult[0])); - outVD->GetDataTree()->Add(currentGeometry, folder); - } - ++itVector; - } - - vdWriter->SetInput(outVD); - vdWriter->SetFileName(outputVD); - vdWriter->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/VectorDataManipulation/test/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.cxx b/Modules/Filtering/VectorDataManipulation/test/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.cxx deleted file mode 100644 index a5481e05d3f0b64f74f0b2e2153722fa960ff722..0000000000000000000000000000000000000000 --- a/Modules/Filtering/VectorDataManipulation/test/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.cxx +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h" - -#include "otbVectorImage.h" -#include "otbImageFileReader.h" -#include "otbVectorData.h" -#include "otbVectorDataFileReader.h" -#include "otbVectorDataIntoImageProjectionFilter.h" -#include "otbVectorDataFileWriter.h" -#include "itkPreOrderTreeIterator.h" - - -int otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction(int itkNotUsed(argc), char* argv[]) -{ - const char * inputVD = argv[1]; - const char * inputImg = argv[2]; - const char * DEMDir = argv[3]; - const char * outputVD = argv[4]; - int DisplayWarnings = atoi(argv[5]); - - typedef double CoordRepType; - typedef double PrecisionType; - typedef otb::VectorImage<PrecisionType> ImageType; - typedef otb::ImageFileReader<ImageType> ImageReaderType; - typedef otb::VectorData<CoordRepType, 2, PrecisionType> - VectorDataType; - typedef VectorDataType::DataNodeType DataNodeType; - typedef otb::VectorDataFileReader<VectorDataType> VectorDataReaderType; - typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, ImageType> - VectorDataReProjFilter; - typedef otb::VectorDataFileWriter<VectorDataType> VectorDataWriterType; - typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> - TreeIteratorType; - - typedef otb::RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction<ImageType, CoordRepType, PrecisionType> - FeaturefunctionType; - typedef FeaturefunctionType::OutputType - FeatureOutputType; - - ImageReaderType::Pointer imgReader = ImageReaderType::New(); - VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New(); - VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New(); - VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New(); - FeaturefunctionType::Pointer featureFunction = FeaturefunctionType::New(); - - if (!DisplayWarnings) - { - imgReader->SetGlobalWarningDisplay(0); - } - - otb::DEMHandler::Instance()->OpenDEMDirectory(DEMDir); - - vdReader->SetFileName(inputVD); - vdReader->Update(); - - imgReader->SetFileName(inputImg); - imgReader->UpdateOutputInformation(); - imgReader->Update(); //Needed to set m_EndIndex, m_StartIndex in otbDataNodeImageFunction - - vdReProjFilter->SetInputImage(imgReader->GetOutput()); - vdReProjFilter->SetInputVectorData(vdReader->GetOutput()); - vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true); - vdReProjFilter->Update(); - - std::cout<< "vdReProjFilter->GetOutput()->Size(): " - << vdReProjFilter->GetOutput()->Size() << std::endl; - - featureFunction->SetInputImage(imgReader->GetOutput()); - - // Output - VectorDataType::Pointer outVD = VectorDataType::New(); - // Retrieving root node - DataNodeType::Pointer root = outVD->GetDataTree()->GetRoot()->Get(); - // Create the document node - DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - // Adding the layer to the data tree - outVD->GetDataTree()->Add(document, root); - // Create the folder node - DataNodeType::Pointer folder = DataNodeType::New(); - folder->SetNodeType(otb::FOLDER); - // Adding the layer to the data tree - outVD->GetDataTree()->Add(folder, document); - - TreeIteratorType itVector(vdReProjFilter->GetOutput()->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsLineFeature() || itVector.Get()->IsPolygonFeature()) - { - const DataNodeType::Pointer currentGeometry = itVector.Get(); - FeatureOutputType currentResult; - currentResult = featureFunction->Evaluate(*(currentGeometry.GetPointer())); - currentGeometry->SetFieldAsDouble("RADIOM_HOM", (double)(currentResult[0])); - outVD->GetDataTree()->Add(currentGeometry, folder); - } - ++itVector; - } - - vdWriter->SetInput(outVD); - vdWriter->SetFileName(outputVD); - vdWriter->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Filtering/VectorDataManipulation/test/otbVectorDataManipulationTestDriver.cxx b/Modules/Filtering/VectorDataManipulation/test/otbVectorDataManipulationTestDriver.cxx index c4230b11556a036ec89fa39103beba40d12a5252..d09a9aaed3041af20589dc65f6f1a6903c3e4437 100644 --- a/Modules/Filtering/VectorDataManipulation/test/otbVectorDataManipulationTestDriver.cxx +++ b/Modules/Filtering/VectorDataManipulation/test/otbVectorDataManipulationTestDriver.cxx @@ -22,10 +22,8 @@ void RegisterTests() { - REGISTER_TEST(otbDBOverlapDataNodeFeatureFunction); REGISTER_TEST(otbVectorDataExtractROI); REGISTER_TEST(otbPolygonCompacityFunctor); REGISTER_TEST(otbVectorDataToRandomLineGenerator); REGISTER_TEST(otbConcatenateVectorDataFilter); - REGISTER_TEST(otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction); } diff --git a/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.h b/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.h deleted file mode 100644 index 224f16af2c1b9b5f91200dd65209a03e4b231501..0000000000000000000000000000000000000000 --- a/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.h +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbStandardDSCostFunction_h -#define otbStandardDSCostFunction_h - -#include "itkSingleValuedCostFunction.h" - -#include "otbVectorDataToDSValidatedVectorDataFilter.h" -#include <string> - -namespace otb -{ -/** \class StandardDSCostFunction - * \brief Standard Cost Function used to estimate the fuzzy model parameters - * in the Dempster-Shafer framework - * - * This class has been developed to estimate, with the help of the Amoeba - * optimizer, the fuzzy model parameters to be used in the class - * otb::VectorDataToDSValidatedVectorDataFilter. The cost value compute the - * cost according to: - * - an enriched ground truth vector data (using VectorDataToRoadDescription) - * - an enriched negative sample VectorData or at least random samples - * - an hypothesis (the same as the considered DSValidationFilter) - * (by default (NONDVI, ROADSA, NOBUIL)) - * - a weight between 0 and 1 (0.5 by default) corresponding to the situation - * policy regarding under detection/false detection (1 no under detection - * 0 no false detection) - * For now the cost function use the NONDVI Feature, ROADSA Feature and and - * the NOBUIL Feature. - * For each evolution of the VectorDataToDSValidatedVectorDataFilter, - * this cost function must be adapted. - * - * \ingroup CostFunction - * \sa VectorDataToDSValidatedVectorDataFilter - * \sa AmoebaOptimizer - * - * \ingroup OTBDempsterShafer - */ - -template <class TDSValidationFilter> -class ITK_EXPORT StandardDSCostFunction : -public itk::SingleValuedCostFunction -{ -public: - /** Standard class typedefs. */ - typedef StandardDSCostFunction Self; - typedef itk::SingleValuedCostFunction Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(StandardDSCostFunction, itk::SingleValuedCostFunction); - - typedef Superclass::MeasureType MeasureType; //double - typedef Superclass::DerivativeType DerivativeType; //Array<double> - typedef Superclass::ParametersType ParametersType; //Array<double> - - typedef TDSValidationFilter DSValidationFilterType; - typedef typename DSValidationFilterType::VectorDataType - VectorDataType; - typedef typename DSValidationFilterType::TreeIteratorType - TreeIteratorType; - typedef typename DSValidationFilterType::LabelSetType - LabelSetType; - - typedef FuzzyDescriptorsModelManager FuzzyDescriptorsModelManagerType; - - typedef FuzzyDescriptorsModelManager::DescriptorListType - DescriptorListType; - typedef FuzzyDescriptorsModelManager::DescriptorsModelType - DescriptorsModelType; - typedef FuzzyDescriptorsModelManager::PairType PairType; - - typedef Parser ParserType; - - /** This method returns the value of the cost function corresponding - * to the specified parameters. */ - MeasureType GetValue( const ParametersType & parameters ) const override; - - /** This method returns the derivative of the cost function corresponding - * to the specified parameters. */ - void GetDerivative( const ParametersType & parameters, - DerivativeType & derivative ) const override; - - unsigned int GetNumberOfParameters(void) const override; - - itkSetMacro(Weight, double); - itkGetConstMacro(Weight, double); - - itkSetMacro(CriterionFormula, std::string); - itkGetConstMacro(CriterionFormula, std::string); - - void SetDescriptorList(DescriptorListType list) - { - m_DescriptorList = list; - } - - DescriptorListType GetDescriptorList() - { - return m_DescriptorList; - } - - itkSetObjectMacro(GTVectorData, VectorDataType); - itkGetConstObjectMacro(GTVectorData, VectorDataType); - - itkSetObjectMacro(NSVectorData, VectorDataType); - itkGetConstObjectMacro(NSVectorData, VectorDataType); - - - LabelSetType GetBeliefHypothesis() - { - return m_BeliefHypothesis; - } - - void SetBeliefHypothesis(LabelSetType hypothesis) - { - m_BeliefHypothesis = hypothesis; - } - - LabelSetType GetPlausibilityHypothesis() - { - return m_PlausibilityHypothesis; - } - - void SetPlausibilityHypothesis(LabelSetType hypothesis) - { - m_PlausibilityHypothesis = hypothesis; - } - -protected: - /** Constructor */ - StandardDSCostFunction(); - /** Destructor */ - ~StandardDSCostFunction() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - StandardDSCostFunction(const Self &) = delete; - void operator =(const Self&) = delete; - - - typename VectorDataType::Pointer m_GTVectorData; //Ground Truth - typename VectorDataType::Pointer m_NSVectorData; //Negative Samples - - typename ParserType::Pointer m_Parser; - std::string m_CriterionFormula; - - double m_Weight; //range ]0; 1[ - - LabelSetType m_BeliefHypothesis; - LabelSetType m_PlausibilityHypothesis; - - DescriptorListType m_DescriptorList; -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbStandardDSCostFunction.hxx" -#endif - -#endif diff --git a/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.hxx b/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.hxx deleted file mode 100644 index 236c1e5e9ae83b087987a43347be174f80a4d5ac..0000000000000000000000000000000000000000 --- a/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.hxx +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbStandardDSCostFunction_hxx -#define otbStandardDSCostFunction_hxx - -#include "otbStandardDSCostFunction.h" - -namespace otb -{ -// Constructor -template <class TDSValidationFilter> -StandardDSCostFunction<TDSValidationFilter> -::StandardDSCostFunction() : - m_CriterionFormula("((Belief + Plausibility)/2.)"), - m_Weight(0.5) -{ - m_GTVectorData = VectorDataType::New(); - m_NSVectorData = VectorDataType::New(); - m_Parser = ParserType::New(); -} - -template <class TDSValidationFilter> -unsigned int -StandardDSCostFunction<TDSValidationFilter> -::GetNumberOfParameters() const - { - return m_DescriptorList.size()*4; - } - -template <class TDSValidationFilter> -typename StandardDSCostFunction<TDSValidationFilter> -::MeasureType - StandardDSCostFunction<TDSValidationFilter> -::GetValue(const ParametersType & parameters) const - { - if (parameters.size() != m_DescriptorList.size()*4) - { - itkExceptionMacro(<< "Wrong model!" ) - } - - //Initialize parser - m_Parser->SetExpr(m_CriterionFormula); - - DescriptorsModelType descModel; - for (unsigned int i = 0; i < m_DescriptorList.size(); ++i) - { - std::vector<double> tmp; - for (unsigned int j = 0; j < 4; ++j) - { - tmp.push_back(parameters[4*i+j]); - } - PairType pair( m_DescriptorList[i], tmp); - descModel.push_back(pair); - } - - typename DSValidationFilterType::Pointer internalFunctionGT = DSValidationFilterType::New(); - internalFunctionGT->SetCriterionFormula("1"); - internalFunctionGT->SetInput(m_GTVectorData); - internalFunctionGT->SetBeliefHypothesis(m_BeliefHypothesis); - internalFunctionGT->SetPlausibilityHypothesis(m_PlausibilityHypothesis); - try - { - internalFunctionGT->SetDescriptorModels(descModel); - } - catch ( itk::ExceptionObject & ) - { - return 1; - } - internalFunctionGT->Update(); - - typename DSValidationFilterType::Pointer internalFunctionNS = DSValidationFilterType::New(); - internalFunctionNS->SetCriterionFormula("1"); - internalFunctionNS->SetInput(m_NSVectorData); - internalFunctionNS->SetBeliefHypothesis(m_BeliefHypothesis); - internalFunctionNS->SetBeliefHypothesis(m_PlausibilityHypothesis); - try - { - internalFunctionNS->SetDescriptorModels(descModel); - } - catch (itk::ExceptionObject &) - { - return 1; - } - internalFunctionNS->Update(); - - double accGT = 0.0; - double accNS = 0.0; - double nGT = 0.0; - double nNS = 0.0; - - TreeIteratorType itVectorGT(internalFunctionGT->GetOutput()->GetDataTree()); - itVectorGT.GoToBegin(); - while (!itVectorGT.IsAtEnd()) - { - if (!itVectorGT.Get()->IsRoot() && !itVectorGT.Get()->IsDocument() && !itVectorGT.Get()->IsFolder()) - { - double belief = itVectorGT.Get()->GetFieldAsDouble("Belief"); - double plausibility = itVectorGT.Get()->GetFieldAsDouble("Plausi"); - - m_Parser->DefineVar("Belief", &belief); - m_Parser->DefineVar("Plausibility", &plausibility); - - accGT += ((1 - m_Parser->Eval()) * (1 - m_Parser->Eval())); - nGT += 1.0; - - m_Parser->ClearVar(); - } - itVectorGT++; - } - - TreeIteratorType itVectorNS(internalFunctionNS->GetOutput()->GetDataTree()); - itVectorNS.GoToBegin(); - while (!itVectorNS.IsAtEnd()) - { - if (!itVectorNS.Get()->IsRoot() && !itVectorNS.Get()->IsDocument() && !itVectorNS.Get()->IsFolder()) - { - double belief = itVectorNS.Get()->GetFieldAsDouble("Belief"); - double plausibility = itVectorNS.Get()->GetFieldAsDouble("Plausi"); - - m_Parser->DefineVar("Belief", &belief); - m_Parser->DefineVar("Plausibility", &plausibility); - - accNS += (m_Parser->Eval() * m_Parser->Eval()); - nNS += 1.0; - - m_Parser->ClearVar(); - } - itVectorNS++; - } - return (m_Weight * accGT / nGT + (1 - m_Weight) * accNS / nNS); -} - -template <class TDSValidationFilter> -void -StandardDSCostFunction<TDSValidationFilter> -::GetDerivative(const ParametersType & itkNotUsed(parameters), DerivativeType & itkNotUsed(derivative)) const - { - //Not necessary for Amoeba Optimizer - itkExceptionMacro(<< "Not Supposed to be used when using Amoeba Optimizer!") - } - -// PrintSelf Method -template <class TDSValidationFilter> -void -StandardDSCostFunction<TDSValidationFilter> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - - -}// end namespace otb - -#endif diff --git a/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.h b/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.h deleted file mode 100644 index 43a3b9a6f953f658e9217d9a39f6d23a1482acc2..0000000000000000000000000000000000000000 --- a/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbVectorDataToDSValidatedVectorDataFilter_h -#define otbVectorDataToDSValidatedVectorDataFilter_h - -#include "otbMassOfBelief.h" - -#include "otbVectorDataToVectorDataFilter.h" - -#include "itkPreOrderTreeIterator.h" -#include "otbVectorData.h" -#include "otbFuzzyDescriptorsModelManager.h" - -#include "otbFuzzyVariable.h" -#include "otbJointMassOfBeliefFilter.h" -#include "otbParser.h" -#include <string> - -namespace otb -{ -/** \class VectorDataToDSValidatedVectorDataFilter - * \brief VectorData filter validating data nodes using - * Dempster-Shafer theory. - * - * This filter takes as input a vector data containing - * features score and validate (or not) each data node - * according to these features score, a fuzzy model corresponding - * to each feature and a criterion according to the Dempster-Shafer - * theory. By default the filter is (for now) parametrized to process - * VectorDatas providing by the VectorDataToRoadDescriptionFilter. - * The hypothesis must be set using the SetHypothesis method. - * The convention is for each feature Fe, a mass of Belief is defined - * with two variables named Fe and Fe_. Thus, an hypothesis must declared: - * VectorDataToVectorDataFilter::LabelSetType hyp; - * hyp.insert("Fe(i)"); - * hyp.insert("Fe(j)_"); - * hyp.insert("Fe(k)_"); - * - * Fe(i), Fe(j) and Fe(k) being descriptors. - * - * The criterion can be set through SetCriterionFormula() as a - * string referring to "Belief" and "Plausibility" from the - * Dempster-Shafer theory. By default the criterion is: - * "((Belief + Plausibility)/2) >= 0.5" - * - * The considered features will be the intersection between - * the features embedded in this filter and the features embedded - * in the input vector data. For now, the filter uses "NONDVI" and - * "ROADSA" features. - * - * - * \ingroup VectorDataFilter - * \sa VectorDataToRoadDescriptionFilter - * \sa VectorDataToBuildingDescriptionFilter - * - * \ingroup OTBDempsterShafer - */ - -template <class TVectorData, class TPrecision=float> -class ITK_EXPORT VectorDataToDSValidatedVectorDataFilter : -public otb::VectorDataToVectorDataFilter<TVectorData, TVectorData> -{ -public: - /** Standard class typedefs. */ - typedef VectorDataToDSValidatedVectorDataFilter Self; - typedef VectorDataToVectorDataFilter<TVectorData, - TVectorData> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(VectorDataToDSValidatedVectorDataFilter, VectorDataToVectorDataFilter); - - /** Some typedefs. */ - typedef TVectorData VectorDataType; - typedef typename VectorDataType::Pointer VectorDataPointer; - typedef typename VectorDataType::DataNodeType DataNodeType; - typedef itk::PreOrderTreeIterator<typename VectorDataType::DataTreeType> - TreeIteratorType; - - typedef TPrecision PrecisionType; - typedef MassOfBelief<std::string, PrecisionType> - MassOfBeliefFunctionType; - typedef typename MassOfBeliefFunctionType::LabelSetType - LabelSetType; - typedef JointMassOfBeliefFilter<MassOfBeliefFunctionType> - JointMassOfBeliefFilterType; - typedef Parser ParserType; - - typedef itk::DataObject::Pointer DataObjectPointer; - typedef itk::DataObject DataObject; - - - typedef FuzzyVariable<std::string, PrecisionType> FuzzyVarType; - - typedef FuzzyDescriptorsModelManager::PairType PairType; - typedef FuzzyDescriptorsModelManager::DescriptorsModelType DescriptorModelsType; - - /** Descriptor model accessors. */ - virtual void AddDescriptor(const std::string& key, std::vector<double> model); - virtual void ClearDescriptors(); - - void SetDescriptorModels( DescriptorModelsType model ); - DescriptorModelsType GetDescriptorModels() - { - return m_DescriptorModels; - } - - /** Parameter accessors. */ - itkGetConstMacro(CriterionFormula, std::string); - itkSetMacro(CriterionFormula, std::string); - - itkGetMacro(CriterionThreshold, double); - itkSetMacro(CriterionThreshold, double); - - LabelSetType GetBeliefHypothesis() - { - return m_BeliefHypothesis; - } - - void SetBeliefHypothesis(LabelSetType hypothesis) - { - m_BeliefHypothesis = hypothesis; - } - - LabelSetType GetPlausibilityHypothesis() - { - return m_PlausibilityHypothesis; - } - - void SetPlausibilityHypothesis(LabelSetType hypothesis) - { - m_PlausibilityHypothesis = hypothesis; - } - - unsigned int GetNumberOfParameters() - { - return (m_DescriptorModels.size() * 4); - } - - -protected: - /** Triggers the Computation */ - void GenerateData(void) override; - /** Constructor */ - VectorDataToDSValidatedVectorDataFilter(); - /** Destructor */ - ~VectorDataToDSValidatedVectorDataFilter() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - - std::string GetNextID() - { - std::ostringstream oss; - oss << m_CurrentID++; - return oss.str(); - } - -private: - VectorDataToDSValidatedVectorDataFilter(const Self &) = delete; - void operator =(const Self&) = delete; - - // Descriptor bench - DescriptorModelsType m_DescriptorModels; - std::vector< typename FuzzyVarType::Pointer > m_FuzzyVars; - LabelSetType m_Universe, - m_BeliefHypothesis, - m_PlausibilityHypothesis; - double m_Bel, m_Plau; - typename ParserType::Pointer m_Parser; - - std::string m_CriterionFormula; - double m_CriterionThreshold; - unsigned int m_CurrentID; -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbVectorDataToDSValidatedVectorDataFilter.hxx" -#endif - -#endif diff --git a/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.hxx b/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.hxx deleted file mode 100644 index 8e07927bb6fd9106cce86ea182c59e9da92d690c..0000000000000000000000000000000000000000 --- a/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.hxx +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbVectorDataToDSValidatedVectorDataFilter_hxx -#define otbVectorDataToDSValidatedVectorDataFilter_hxx - -#include "otbVectorDataToDSValidatedVectorDataFilter.h" -#include <iostream> - -namespace otb -{ - -// Constructor -template <class TVectorData, class TPrecision> - VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision> -::VectorDataToDSValidatedVectorDataFilter() : - m_Bel(0.0), - m_Plau(0.0), - m_CriterionFormula("((Belief + Plausibility)/2.)"), - m_CriterionThreshold(0.5), - m_CurrentID(0) -{ - this->SetNumberOfRequiredInputs(1); - - m_Parser = ParserType::New(); -} - - -template <class TVectorData, class TPrecision> -void -VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision> -::AddDescriptor(const std::string& key, std::vector<double> model) -{ - bool alreadyExist = false; - - if (model.size() != 4) - { - itkExceptionMacro(<< "Wrong model! Size(=" << model.size() << ") > 4" ) - } - else if (model[0]<0 || model[1]<model[0] || model[2]<model[1] || model[2]>1) - { - itkExceptionMacro(<< "Wrong model! Values have to be 0<=v1<=v2<=v3<=1" ) - } - else if (model[3]<.75 || model[3]>1.0) - { - itkExceptionMacro(<< "Wrong model! Values have to be 0.75<=v4<=1" ) - } - else - { - for (unsigned int i=0; i<m_DescriptorModels.size(); ++i) - { - if (m_DescriptorModels[i].first.compare(key) == 0) - { - for (unsigned int j=0; j<4; ++j) - { - m_DescriptorModels[i].second.at(j) = model[j]; - } - alreadyExist = true; - } - } - if (!alreadyExist) - { - m_DescriptorModels.push_back(std::pair<std::string, std::vector<double> >(key, model)); - } - } - - this->Modified(); -} - - -template <class TVectorData, class TPrecision> -void -VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision> -::ClearDescriptors() -{ - m_DescriptorModels.clear(); -} - -template <class TVectorData, class TPrecision> -void -VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision> -::SetDescriptorModels(DescriptorModelsType model) -{ - for (unsigned int i=0; i<model.size(); ++i) - { - this->AddDescriptor(model[i].first, model[i].second); - } -} - - -template <class TVectorData, class TPrecision> -void -VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision> -::GenerateData() -{ - //Initialize Dempster Shafer tools - if( m_DescriptorModels.size() == 0 ) - { - itkExceptionMacro(<< "No defined Descriptor. Please add a descriptor model."); - } - - for (unsigned int i=0; i<m_DescriptorModels.size(); ++i) - { - typename FuzzyVarType::Pointer fuz = FuzzyVarType::New(); - std::string fuzName, fuzName_; - fuzName = m_DescriptorModels[i].first; - fuzName_ = m_DescriptorModels[i].first + "_"; - - fuz->SetMembership(fuzName, - 0.0, - 0.0, - m_DescriptorModels[i].second[0], - m_DescriptorModels[i].second[1], - 0.0, - m_DescriptorModels[i].second[3]); - fuz->SetMembership(fuzName_, - m_DescriptorModels[i].second[1], - m_DescriptorModels[i].second[2], - 1.0, - 1.0, - 0.0, - m_DescriptorModels[i].second[3]); - - m_FuzzyVars.push_back(fuz); - - m_Universe.insert(fuzName); - m_Universe.insert(fuzName_); - } - - //Initialize parser - m_Parser->SetExpr(m_CriterionFormula); - m_Parser->DefineVar("Belief", &m_Bel); - m_Parser->DefineVar("Plausibility", &m_Plau); - - // Output - this->GetOutput(0)->SetMetaDataDictionary(this->GetInput()->GetMetaDataDictionary()); - // Retrieving root node - typename DataNodeType::Pointer root = this->GetOutput(0)->GetDataTree()->GetRoot()->Get(); - // Create the document node - typename DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - // Adding the layer to the data tree - this->GetOutput(0)->GetDataTree()->Add(document, root); - // Create the folder node - typename DataNodeType::Pointer folder = DataNodeType::New(); - folder->SetNodeType(otb::FOLDER); - // Adding the layer to the data tree - this->GetOutput(0)->GetDataTree()->Add(folder, document); - this->GetOutput(0)->SetProjectionRef(this->GetInput()->GetProjectionRef()); - - TreeIteratorType itVector(this->GetInput()->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (!itVector.Get()->IsRoot() && !itVector.Get()->IsDocument() && !itVector.Get()->IsFolder()) - { - typename DataNodeType::Pointer currentGeometry = itVector.Get(); - typename JointMassOfBeliefFilterType::Pointer jointMassFilter = JointMassOfBeliefFilterType::New(); - - for (unsigned int i=0; i<m_DescriptorModels.size(); ++i) - { - if (currentGeometry->HasField(m_DescriptorModels[i].first)) - { - LabelSetType H, H_; - std::string fuzName, fuzName_; - fuzName = m_DescriptorModels[i].first; - fuzName_ = m_DescriptorModels[i].first + "_"; - - typename MassOfBeliefFunctionType::Pointer mass = MassOfBeliefFunctionType::New(); - mass->InitializePowerSetMasses(m_Universe); - - H.insert(fuzName); - H_.insert(fuzName_); - - mass->SetMass(H, m_FuzzyVars[i]->GetMembership(fuzName, currentGeometry->GetFieldAsDouble(fuzName))); - mass->SetMass(H_, m_FuzzyVars[i]->GetMembership(fuzName_, currentGeometry->GetFieldAsDouble(fuzName))); - - mass->EstimateUncertainty(); - - jointMassFilter->PushBackInput(mass); - } - } - jointMassFilter->Update(); - m_Bel = jointMassFilter->GetOutput()->GetBelief(m_BeliefHypothesis); - m_Plau = jointMassFilter->GetOutput()->GetPlausibility(m_PlausibilityHypothesis); - - if (m_Parser->Eval() >= m_CriterionThreshold) - { - currentGeometry->SetNodeId(this->GetNextID()); - currentGeometry->SetFieldAsDouble("Belief", m_Bel); - currentGeometry->SetFieldAsDouble("Plausi", m_Plau); - this->GetOutput(0)->GetDataTree()->Add(currentGeometry, folder); - } - } - ++itVector; - } -} - - -// PrintSelf Method -template <class TVectorData, class TPrecision> -void -VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -} // end namespace otb - -#endif diff --git a/Modules/Learning/DempsterShafer/test/CMakeLists.txt b/Modules/Learning/DempsterShafer/test/CMakeLists.txt index d999a90fa0638dc4c981451209009bb73d925a46..9ebe35857fe75dfddf2560633365b8cfe8145a65 100644 --- a/Modules/Learning/DempsterShafer/test/CMakeLists.txt +++ b/Modules/Learning/DempsterShafer/test/CMakeLists.txt @@ -24,7 +24,6 @@ set(OTBDempsterShaferTests otbDempsterShaferTestDriver.cxx otbMassOfBeliefDSApplied.cxx otbConfusionMatrixToMassOfBeliefTest.cxx -otbVectorDataToDSValidatedVectorDataFilter.cxx otbDempsterShaferFusionTests.cxx otbDSFusionOfClassifiersImageFilterTest.cxx otbJointMassOfBeliefFilter.cxx @@ -85,16 +84,6 @@ otb_add_test(NAME fzTvConfusionMatrixToMassOfBeliefTestRecall COMMAND otbDempste otbConfusionMatrixToMassOfBeliefTest RECALL) -otb_add_test(NAME fzTvVectorDataToDSValidatedVectorDataFilter COMMAND otbDempsterShaferTestDriver - --compare-ogr ${EPSILON_9} - ${BASELINE_FILES}/fzTvDSValidatedRoadVectorDataOutput.shp - ${TEMP}/fzTvDSValidatedRoadVectorDataOutput.shp - otbVectorDataToDSValidatedVectorDataFilter - ${TEMP}/fzTvVectorDataToRoadDescriptionFilterOutput.shp - ${TEMP}/fzTvDSValidatedRoadVectorDataOutput.shp - ) -set_property(TEST fzTvVectorDataToDSValidatedVectorDataFilter PROPERTY DEPENDS fzTvVectorDataToRoadDescriptionFilter) - otb_add_test(NAME fzDSFusionTestConfMatFileVCMTestPrecision COMMAND otbDempsterShaferTestDriver otbDempsterShaferFusionConfMatFileTest ${INPUTDATA}/Classification/QB_1_ortho_C1_V.csv diff --git a/Modules/Learning/DempsterShafer/test/otbDempsterShaferTestDriver.cxx b/Modules/Learning/DempsterShafer/test/otbDempsterShaferTestDriver.cxx index c38750c9cbd2443e8282a74b0005689c78455836..d8b30b333994660ead3a090f59519756a05a8330 100644 --- a/Modules/Learning/DempsterShafer/test/otbDempsterShaferTestDriver.cxx +++ b/Modules/Learning/DempsterShafer/test/otbDempsterShaferTestDriver.cxx @@ -24,7 +24,6 @@ void RegisterTests() { REGISTER_TEST(otbMassOfBeliefDSApplied); REGISTER_TEST(otbConfusionMatrixToMassOfBeliefTest); - REGISTER_TEST(otbVectorDataToDSValidatedVectorDataFilter); REGISTER_TEST(otbDempsterShaferFusionOptRecConfMatTest); REGISTER_TEST(otbDempsterShaferFusionOptRecTest); REGISTER_TEST(otbDempsterShaferFusionOptTest); diff --git a/Modules/Learning/DempsterShafer/test/otbVectorDataToDSValidatedVectorDataFilter.cxx b/Modules/Learning/DempsterShafer/test/otbVectorDataToDSValidatedVectorDataFilter.cxx deleted file mode 100644 index d237ea5d2f5de3a453a862dac05964355ea6d0c8..0000000000000000000000000000000000000000 --- a/Modules/Learning/DempsterShafer/test/otbVectorDataToDSValidatedVectorDataFilter.cxx +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include "otbVectorDataToDSValidatedVectorDataFilter.h" - -#include "otbVectorDataFileReader.h" -#include "otbVectorDataFileWriter.h" - - -int otbVectorDataToDSValidatedVectorDataFilter(int itkNotUsed(argc), char* argv[]) -{ - const char * inputVD = argv[1]; - const char * outputVD = argv[2]; - - typedef float PrecisionType; - typedef otb::VectorData<PrecisionType> VectorDataType; - typedef otb::VectorDataFileReader<VectorDataType> - VectorDataReaderType; - typedef otb::VectorDataFileWriter<VectorDataType> - VectorDataWriterType; - - typedef otb::VectorDataToDSValidatedVectorDataFilter<VectorDataType, PrecisionType> - VectorDataValidationFilterType; - typedef VectorDataValidationFilterType::LabelSetType - LabelSetType; - typedef otb::FuzzyDescriptorsModelManager - FuzzyManagerType; - VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New(); - VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New(); - - VectorDataValidationFilterType::Pointer filter = - VectorDataValidationFilterType::New(); - - vdReader->SetFileName(inputVD); - vdReader->Update(); - - filter->SetInput(vdReader->GetOutput()); - //filter->GetDescriptorModels(); - FuzzyManagerType::Print(filter->GetDescriptorModels()); - LabelSetType plau, bel; - plau.insert("NONDVI"); - plau.insert("ROADSA"); - plau.insert("NOBUIL"); - filter->SetPlausibilityHypothesis(plau); - bel.insert("ROADSA"); - bel.insert("NONDVI"); - bel.insert("NOBUIL"); - filter->SetBeliefHypothesis(bel); - - std::vector<double> stdModel; - stdModel.push_back(0.25); - stdModel.push_back(0.50); - stdModel.push_back(0.75); - stdModel.push_back(0.90); - filter->AddDescriptor("NONDVI", stdModel); - filter->AddDescriptor("ROADSA", stdModel); - filter->AddDescriptor("NOBUIL", stdModel); - - FuzzyManagerType::Print(filter->GetDescriptorModels()); - - vdWriter->SetFileName(outputVD); - vdWriter->SetInput(filter->GetOutput()); - vdWriter->Update(); - - std::cout << "Input VectorData Size : " - << vdReader->GetOutput()->Size() << std::endl - << "CriterionFormula : " - << filter->GetCriterionFormula() << std::endl - << "Output VecttorData Size : " - << filter->GetOutput()->Size() - << std::endl; - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/CMakeLists.txt b/Modules/OBIA/RCC8/CMakeLists.txt deleted file mode 100644 index 6fca751fa59c10469a9a3699bad9ee2b893dcd8b..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -project(OTBRCC8) - -set(OTBRCC8_LIBRARIES OTBRCC8) -otb_module_impl() diff --git a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.h b/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.h deleted file mode 100644 index 9169b4ecd88b7b116268d4e70297078ddd320348..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbImageListToRCC8GraphFilter_h -#define otbImageListToRCC8GraphFilter_h - -#include "otbRCC8GraphSource.h" -#include "otbImageList.h" - -namespace otb -{ -/** \class ImageListToRCC8GraphFilter - * \brief Base class for filters taking an images list as input to - * produce a RCC8 graph. - * - * \ingroup OTBRCC8 - */ -template <class TInputImage, class TOutputGraph> -class ITK_EXPORT ImageListToRCC8GraphFilter - : public RCC8GraphSource<TOutputGraph> -{ -public: - /** Standard typedefs */ - typedef ImageListToRCC8GraphFilter Self; - typedef RCC8GraphSource<TOutputGraph> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Type macro */ - itkNewMacro(Self); - /** Creation through object factory macro */ - itkTypeMacro(ImageListToRCC8GraphFilter, RCC8GraphSource); - /** Template input parameters typedefs */ - typedef TInputImage InputImageType; - typedef typename InputImageType::ConstPointer InputImagePointer; - typedef typename InputImageType::RegionType InputImageRegionType; - typedef typename InputImageType::PixelType InputImagePixelType; - typedef typename InputImageType::SizeType SizeType; - typedef typename InputImageType::ValueType ValueType; - typedef ImageList<InputImageType> InputImageListType; - typedef typename InputImageListType::Pointer InputImageListPointerType; - typedef typename InputImageListType::ConstPointer InputImageListConstPointer; - /** Template output parameters typedefs */ - typedef TOutputGraph OutputGraphType; - typedef typename Superclass::OutputGraphPointerType OutputGraphPointerType; - typedef typename OutputGraphType::VertexType VertexType; - typedef typename VertexType::Pointer VertexPointerType; - typedef typename OutputGraphType::RCC8ValueType RCC8ValueType; - /** InputImage dimension constant */ - itkStaticConstMacro(InputImageDimension, unsigned int, TInputImage::ImageDimension); - /** Overriding the SetInput() and GetInput() methods */ - using Superclass::SetInput; - virtual void SetInput(const InputImageListType * imageList); - virtual InputImageListType * GetInput(void); - -protected: - /** Constructor */ - ImageListToRCC8GraphFilter(); - /** Destructor */ - ~ImageListToRCC8GraphFilter() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - ImageListToRCC8GraphFilter(const Self &) = delete; - void operator =(const Self&) = delete; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbImageListToRCC8GraphFilter.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.hxx b/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.hxx deleted file mode 100644 index cab322360e9c030331788328f1e7069c0dd3c63d..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.hxx +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbImageListToRCC8GraphFilter_hxx -#define otbImageListToRCC8GraphFilter_hxx - -#include "otbImageListToRCC8GraphFilter.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TInputImage, class TOutputGraph> -ImageListToRCC8GraphFilter<TInputImage, TOutputGraph> -::ImageListToRCC8GraphFilter() -{ - this->SetNumberOfRequiredInputs(1); -} -/** - * Input Connection - * \param image The input image. - */ -template <class TInputImage, class TOutputGraph> -void -ImageListToRCC8GraphFilter<TInputImage, TOutputGraph> -::SetInput(const InputImageListType *imageList) -{ - // A single input image - this->itk::ProcessObject::SetNthInput(0, const_cast<InputImageListType*>(imageList)); -} -/** - * Input image retrieval - * \return The input image. - */ -template <class TInputImage, class TOutputGraph> -typename ImageListToRCC8GraphFilter<TInputImage, TOutputGraph>::InputImageListType * -ImageListToRCC8GraphFilter<TInputImage, TOutputGraph> -::GetInput(void) -{ - // If there is no input - if (this->GetNumberOfInputs() < 1) - { - // exit - return nullptr; - } - // else return the first input - return static_cast<InputImageListType *> - (this->itk::ProcessObject::GetInput(0)); -} -/** - * PrintSelf Method - */ -template <class TInputImage, class TOutputGraph> -void -ImageListToRCC8GraphFilter<TInputImage, TOutputGraph> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.h b/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.h deleted file mode 100644 index 5c198e6720935e7699397a4132035b1b1a65f40f..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbImageMultiSegmentationToRCC8GraphFilter_h -#define otbImageMultiSegmentationToRCC8GraphFilter_h - -#include "otbImageListToRCC8GraphFilter.h" - -namespace otb -{ -/** - * \class ImageMultiSegmentationToRCC8GraphFilter - * \brief This class takes a list of labelled segmentation images - * and build the RCC8 graph of the set of regions it represents. - * - * \ingroup OTBRCC8 - */ -template <class TInputImage, class TOutputGraph> -class ITK_EXPORT ImageMultiSegmentationToRCC8GraphFilter - : public ImageListToRCC8GraphFilter<TInputImage, TOutputGraph> -{ -public: - /** Standard class typedefs. */ - typedef ImageMultiSegmentationToRCC8GraphFilter Self; - typedef ImageListToRCC8GraphFilter<TInputImage, TOutputGraph> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Method for creation through the object factory. */ - itkNewMacro(Self); - /** Run-time type information (and related methods). */ - itkTypeMacro(ImageMultiSegmentationToRCC8GraphFilter, ImageListToRCC8GraphFilter); - /** Input related typedefs */ - typedef TInputImage InputImageType; - typedef typename InputImageType::PixelType PixelType; - typedef typename InputImageType::Pointer InputImagePointerType; - typedef typename Superclass::InputImageListType InputImageListType; - typedef typename InputImageListType::Pointer InputImageListPointerType; - typedef typename InputImageListType::ConstIterator ConstListIteratorType; - /** Output related typedefs */ - typedef TOutputGraph OutputGraphType; - typedef typename OutputGraphType::Pointer OutputGraphPointerType; - typedef typename OutputGraphType::VertexType VertexType; - typedef typename VertexType::Pointer VertexPointerType; - typedef typename VertexType::PathType PathType; - typedef typename OutputGraphType::VertexDescriptorType VertexDescriptorType; - /** Knowledge enum typedef */ - typedef typename OutputGraphType::RCC8ValueType RCC8ValueType; - typedef enum {NO_INFO, LEVEL_1, LEVEL_3, FULL} KnowledgeValueType; - typedef std::pair<KnowledgeValueType, RCC8ValueType> KnowledgeStateType; - /** Toogle optimisation flag */ - itkBooleanMacro(Optimisation); - itkSetMacro(Optimisation, bool); - - /** - * Get the number of occurrences of the given value - * \return The value. - */ - unsigned int GetRelationsCount(RCC8ValueType val); - - /** - * Get number of relations - * \return The number of relations. - */ - unsigned int GetNumberOfRelations(void); - -protected: - /** Constructor */ - ImageMultiSegmentationToRCC8GraphFilter(); - /** Destructor */ - ~ImageMultiSegmentationToRCC8GraphFilter() override; - /** Main computation method */ - void GenerateData() override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** - * Get the composition knowledge. - * \param r1 First RCC8 relation value, - * \param r2 Second RCC8 relation value, - * \return The knowledge associated with the composition. - */ - KnowledgeStateType GetKnowledge(RCC8ValueType r1, RCC8ValueType r2); - -private: - /** Optimisation flag */ - bool m_Optimisation; - unsigned int m_Accumulator[8]; - -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbImageMultiSegmentationToRCC8GraphFilter.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.hxx b/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.hxx deleted file mode 100644 index 8b9906bc6b92547e7bf10d9696597b9ea6f8f296..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.hxx +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbImageMultiSegmentationToRCC8GraphFilter_hxx -#define otbImageMultiSegmentationToRCC8GraphFilter_hxx - -#include "otbImageMultiSegmentationToRCC8GraphFilter.h" -#include "itkMinimumMaximumImageCalculator.h" -#include "otbPolygonToPolygonRCC8Calculator.h" -#include "otbRCC8VertexIterator.h" -#include "otbRCC8InEdgeIterator.h" -#include "otbRCC8OutEdgeIterator.h" -#include "itkProgressReporter.h" -#include "otbImageToEdgePathFilter.h" -#include "otbSimplifyPathListFilter.h" - -namespace otb -{ -/** - * Constructor. - */ -template <class TInputImage, class TOutputGraph> -ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph> -::ImageMultiSegmentationToRCC8GraphFilter() -{ - m_Optimisation = false; -} -/** - * Destructor. - */ -template <class TInputImage, class TOutputGraph> -ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph> -::~ImageMultiSegmentationToRCC8GraphFilter() -{} - -template <class TInputImage, class TOutputGraph> -unsigned int -ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph> -::GetRelationsCount(RCC8ValueType val) -{ - return m_Accumulator[val]; -} - -template <class TInputImage, class TOutputGraph> -unsigned int -ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph> -::GetNumberOfRelations() -{ - unsigned int result = 0; - for (unsigned int i = 0; i < 8; ++i) - { - result += m_Accumulator[i]; - - } - return result; -} -template <class TInputImage, class TOutputGraph> -typename ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph> -::KnowledgeStateType -ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph> -::GetKnowledge(RCC8ValueType r1, RCC8ValueType r2) -{ - m_Accumulator[0] = 0; - m_Accumulator[1] = 0; - m_Accumulator[2] = 0; - m_Accumulator[3] = 0; - m_Accumulator[4] = 0; - m_Accumulator[5] = 0; - m_Accumulator[6] = 0; - m_Accumulator[7] = 0; - - // otbMsgDebugMacro(<<"RCC8GraphFilter: entering GetKnowledge method."); - // This is the RCC8 composition table - const int knowledge[8][8] - = - { - /** DC EC PO TPP TPPi NTPP i EQ */ - /** DC */ {-3, -2, -2, -2, 0, -2, 0, 0}, - /** EC */ {-1, -3, -2, -3, -1, -3, 0, 1}, - /** PO */ {-1, -1, -3, -3, -1, -3, -1, 2}, - /** TPP */ { 0, -1, -2, -3, -3, 5, -1, 3}, - /** TPPi*/ {-1, -1, -1, -3, -1, -3, 6, 4}, - /** NTPP*/ { 0, 0, -2, 5, -2, 5, -3, 5}, - /** NTPPi*/ {-1, -1, -1, -1, 6, -3, 6, 6}, - /** EQ */ { 0, 1, 2, 3, 4, 5, 6, 7} - }; - - int value = knowledge[r1][r2]; - // Each negative case correspond to a level of knowledge - if (value >= 0) - { - // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method: FULL"); - return KnowledgeStateType(FULL, static_cast<RCC8ValueType>(value)); - } - else if (value == -1) - { - // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method: LEVEL_1"); - return KnowledgeStateType(LEVEL_1, OTB_RCC8_DC); - } - else if (value == -2) - { - // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method.LEVEL_3"); - return KnowledgeStateType(LEVEL_3, OTB_RCC8_DC); - } - else - { - // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method.NO_INFO"); - return KnowledgeStateType(NO_INFO, OTB_RCC8_DC); - } -} -/** - * Main computation method. - */ -template <class TInputImage, class TOutputGraph> -void -ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph> -::GenerateData() -{ - // Input image list pointer - InputImageListPointerType segList = this->GetInput(); - - // Output graph pointer - OutputGraphPointerType graph = this->GetOutput(); - - // invert value vector - RCC8ValueType invert[8] = {OTB_RCC8_DC, OTB_RCC8_EC, OTB_RCC8_PO, OTB_RCC8_TPPI, - OTB_RCC8_TPP, OTB_RCC8_NTPPI, OTB_RCC8_NTPP, OTB_RCC8_EQ}; - - // Some typedefs - typedef otb::ImageToEdgePathFilter<InputImageType, PathType> EdgeExtractionFilterType; - typedef otb::SimplifyPathListFilter<PathType> SimplifyPathFilterType; - typedef typename SimplifyPathFilterType::InputListType PathListType; - - typedef itk::MinimumMaximumImageCalculator<InputImageType> MinMaxCalculatorType; - typedef PolygonToPolygonRCC8Calculator<PathType> RCC8CalculatorType; - typedef RCC8VertexIterator<OutputGraphType> VertexIteratorType; - typedef RCC8InEdgeIterator<OutputGraphType> InEdgeIteratorType; - - - // Vector of label - std::vector<PixelType> maxLabelVector; - - // Vertex indexes - unsigned int vertexIndex = 0; - unsigned int segmentationImageIndex = 0; - unsigned int nbVertices = 0; - - // For each segmentation image - for (ConstListIteratorType it = segList->Begin(); it != segList->End(); ++it) - { - // Compute the maximum label - typename MinMaxCalculatorType::Pointer minMax = MinMaxCalculatorType::New(); - minMax->SetImage(it.Get()); - minMax->ComputeMaximum(); - maxLabelVector.push_back(minMax->GetMaximum()); - otbMsgDebugMacro(<< "Number of objects in image " << segmentationImageIndex << ": " - << minMax->GetMaximum()); - - // then for each region of the images - for (PixelType label = 1; label <= maxLabelVector.back(); ++label) - { - typename PathListType::Pointer region = PathListType::New(); - typename EdgeExtractionFilterType::Pointer extraction = EdgeExtractionFilterType::New(); - extraction->SetInput(it.Get()); - extraction->SetForegroundValue(label); - extraction->Update(); - region->PushBack(extraction->GetOutput()); - typename SimplifyPathFilterType::Pointer simplifier = SimplifyPathFilterType::New(); - simplifier->SetInput(region); - simplifier->GetFunctor().SetTolerance(0.1); - simplifier->Update(); - - // Create a new vertex - VertexPointerType vertex = VertexType::New(); - // Set its properties - vertex->SetPath(simplifier->GetOutput()->GetNthElement(0)); - vertex->SetSegmentationLevel(segmentationImageIndex / 2); - vertex->SetSegmentationType(segmentationImageIndex % 2); - // Put it in the graph - graph->SetVertex(vertexIndex, vertex); - ++vertexIndex; - ++nbVertices; - } - ++segmentationImageIndex; - } - - itk::ProgressReporter progress(this, 0, nbVertices*nbVertices); - - VertexIteratorType vIt1(graph); - VertexIteratorType vIt2(graph); - - // For each couple of vertices - for (vIt1.GoToBegin(); !vIt1.IsAtEnd(); ++vIt1) - { - for (vIt2.GoToBegin(); !vIt2.IsAtEnd(); ++vIt2) - { - //We do not examine each couple because of the RCC8 symmetry - if (vIt1.GetIndex() < vIt2.GetIndex()) - { - - // Compute the RCC8 relation - typename RCC8CalculatorType::Pointer calc = RCC8CalculatorType::New(); - calc->SetPolygon1(vIt1.Get()->GetPath()); - calc->SetPolygon2(vIt2.Get()->GetPath()); - RCC8ValueType value = OTB_RCC8_DC; - - // if the optimisations are activated - if (m_Optimisation) - { - // otbMsgDebugMacro(<<"RCC8GraphFilter: Entering optimisation loop"); - InEdgeIteratorType inIt1(vIt1.GetIndex(), graph); - InEdgeIteratorType inIt2(vIt2.GetIndex(), graph); - // otbMsgDebugMacro(<<"Optimisation loop: iterators initialised"); - VertexDescriptorType betweenIndex; - KnowledgeStateType know(NO_INFO, OTB_RCC8_DC); - inIt1.GoToBegin(); - - // Iterate through the edges going to the first vertex - while (!inIt1.IsAtEnd() && (know.first != FULL)) - { - betweenIndex = inIt1.GetSourceIndex(); - inIt2.GoToBegin(); - bool edgeFound = false; - while (!inIt2.IsAtEnd() && (know.first != FULL)) - { - // try to find an intermediate vertex between the two ones which - // we vant to compute the relationship - if (inIt2.GetSourceIndex() == betweenIndex) - { - // if an intermediate vertex is found - edgeFound = true; - // otbMsgDebugMacro(<<"Optimisation loop: found an intermediary vertex:" <<betweenIndex); - // See if it brings some info on the RCCC8 value - know = GetKnowledge(invert[inIt1.GetValue()], inIt2.GetValue()); - calc->SetLevel1APrioriKnowledge(know.first == LEVEL_1); - calc->SetLevel3APrioriKnowledge(know.first == LEVEL_3); - // otbMsgDebugMacro(<<"Optimisation loop: knowledge: "<<know.first<<","<<know.second); - } - ++inIt2; - } - // If no intermediate was found - if (!edgeFound) - { - // otbMsgDebugMacro(<<"Optimisation loop: found an intermediary vertex:" <<betweenIndex); - // Try using a DC relationship - know = GetKnowledge(invert[inIt1.GetValue()], OTB_RCC8_DC); - calc->SetLevel1APrioriKnowledge(know.first == LEVEL_1); - calc->SetLevel3APrioriKnowledge(know.first == LEVEL_3); - // otbMsgDebugMacro(<<"Optimisation loop: knowledge: "<<know.first<<","<<know.second); - } - ++inIt1; - } - // If the search has fully determined the RCC8 - if (know.first == FULL) - { - // Get the value - value = know.second; - } - else - { - // Else trigger the computation - // (which will take the optimisation phase info into account) - calc->Compute(); - value = calc->GetValue(); - } - // otbMsgDebugMacro(<<"RCC8GraphFilter: Leaving optimisation loop"); - } - // If the optimisations are not activated - else - { - calc->Compute(); - value = calc->GetValue(); - } - m_Accumulator[value] += 1; - m_Accumulator[invert[value]] += 1; - // If the vertices are connected - if (value > OTB_RCC8_DC) - { - // Add the edge to the graph. - otbMsgDevMacro(<< "Adding edge: " << vIt1.GetIndex() << " -> " << vIt2.GetIndex() << ": " << value); - graph->AddEdge(vIt1.GetIndex(), vIt2.GetIndex(), value); - } - } - progress.CompletedPixel(); - progress.CompletedPixel(); - } - } -} - -template <class TInputImage, class TOutputGraph> -void -ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // end namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.h b/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.h deleted file mode 100644 index d2a4fb922a0b22534b1ee8e10775c094be823ddf..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.h +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbImageToImageRCC8Calculator_h -#define otbImageToImageRCC8Calculator_h - -#include "itkImageToImageFilter.h" -#include "itkObjectFactory.h" -#include "otbRCC8Value.h" -#include "otbImage.h" - -namespace otb -{ -/** - * \class ImageToImageRCC8Calculator - * \brief This class compute the RCC8 relation between the regions from two segmentation images. - * - * The RCC8 system comes from qualitative spatial reasoning. - * It is a set of pairwise disjoint exhaustive relation between two closed region of space. - * There are 8 possible relations : - * DC: Disconnected - * EC: Externaly connected - * PO: Partial overlap - * TPP: Tangential proper part - * NTPP: Non tangential proper part - * TPPI: Tangential proper part inverse - * NTPPI: Non tangential proper part inverse - * EQ: Equivalence - * - * The goal of this class is to determine which of these 8 relations link the two inputs regions represented - * by the segmentation images. Since this class will further be used iteratively on a possibly large set - * of region, it is optimised : the decision is managed by a decision tree, and the input data size is reduced - * to the smallest set needed to determine the relation. - * - * \ingroup OTBRCC8 - */ -template <class TInputImage> -class ITK_EXPORT ImageToImageRCC8Calculator : public itk::ImageToImageFilter<TInputImage, TInputImage> -{ -public: - /** Standard class typedefs. */ - typedef ImageToImageRCC8Calculator Self; - typedef itk::ImageToImageFilter<TInputImage, TInputImage> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Method for creation through the object factory. */ - itkNewMacro(Self); - /** Run-time type information (and related methods). */ - itkTypeMacro(ImageToImageRCC8Calculator, ImageToImageFilter); - /** Types definitions for the input image. */ - typedef TInputImage ImageType; - typedef typename ImageType::Pointer ImagePointerType; - typedef typename ImageType::ConstPointer ImageConstPointerType; - typedef typename ImageType::PixelType PixelType; - typedef typename ImageType::IndexType IndexType; - typedef typename ImageType::RegionType RegionType; - /** Internal bool image type */ - typedef bool BoolPixelType; - typedef otb::Image<BoolPixelType, ImageType::ImageDimension> BoolImageType; - typedef typename BoolImageType::Pointer BoolImagePointerType; - - /** RCC8 values type */ - typedef RCC8Value RCC8ValueType; - /** - * Get the RCC8 relation. - * \return The RCC8 relation value. - */ - RCC8ValueType GetValue(void); - /** - * Set the first input image. - * \param image - */ - void SetInput1(ImageType * image); - /** - * Set the second input image. - * \param image - */ - void SetInput2(ImageType * image); - /** - * Get the first input image. - * \return The first input image. - */ - ImageType * GetInput1(void); - /** - * Get the second input image. - * \return The second input image. - */ - ImageType * GetInput2(void); - /** Set/Get the inside value of the region of image 1*/ - itkSetMacro(InsideValue1, PixelType); - itkGetMacro(InsideValue1, PixelType); - /** Set/Get the inside value of the region of image 2*/ - itkSetMacro(InsideValue2, PixelType); - itkGetMacro(InsideValue2, PixelType); - /** Set external knowledge to help the decision process */ - itkSetMacro(Level1APrioriKnowledge, bool); - itkSetMacro(Level3APrioriKnowledge, bool); - itkGetMacro(Level1APrioriKnowledge, bool); - itkGetMacro(Level3APrioriKnowledge, bool); -protected: - /** Constructor */ - ImageToImageRCC8Calculator(); - /** Destructor */ - ~ImageToImageRCC8Calculator() override {} - /** - * Compute the minimal image region required. - * \return The minimal region required. - */ - RegionType ComputeMinimalRegion(void); - /** - * Compute the intersection between regions edges. - * \return true if the intersection is not empty. - */ - bool ComputeEdgeEdgeBool(void); - /** - * Compute the intersection between exterior of region1 and - * interior of region2. - * \return true if the intersection is not empty. - */ - bool ComputeExterInterBool(void); - /** - * Compute the intersection between interior of region1 and - * exterior of region2. - * \return true if the intersection is not empty. - */ - bool ComputeInterExterBool(void); - /** - * Compute the intersection between regions interiors. - * \return true if the intersection is not empty. - */ - bool ComputeInterInterBool(void); - /** - * Compute the relation value from the input booleans. Please note - * that the actual computed value is set to the m_Value parameters, and has - * nothing to do with the returned boolean, which indicates if the determination - * process was successful. - * \param edgeEdgeBool True if edge-edge intersection is not empty. - * \param interExterBool True if interior-exterior intersection is not empty. - * \param exterInterBool True if exterior-interior intersection is not empty. - * \return True if the decision process was successful. - */ - bool ComputeRelation(bool edgeEdgeBool, bool interExterBool, bool exterInterBool); - /** - * Test if the boolean image is totally black or not. This is a based on the lazy operator - * paradigm. - * \param image The image to test. - * \return True or false. - */ - bool IsBoolImageNotEmpty(BoolImagePointerType image); - /** - * Compute a bool image of minimal ROI size, surrounded by a false padding, and corresponding - * to the input image. - * \param image The image to convert. - * \param insideValue The inside value. - * \return The converted image - */ - BoolImagePointerType ConvertToBoolImage(ImagePointerType image, PixelType insideValue); - /** Main computation method */ - void GenerateData(void) override; - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - /** The RCC8 relation value */ - RCC8ValueType m_Value; - /** The minimal ROI needed to compute the relation value */ - RegionType m_MinimalROI; - /** Decision tree Level 1 A priori knowledge */ - bool m_Level1APrioriKnowledge; - /** Decision tree Level 3 A priori knowledge */ - bool m_Level3APrioriKnowledge; - /** Inside value 1 */ - PixelType m_InsideValue1; - /** Inside value 2 */ - PixelType m_InsideValue2; - /** Internal bool image representation*/ - BoolImagePointerType m_BoolImage1; - BoolImagePointerType m_BoolImage2; -}; -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbImageToImageRCC8Calculator.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.hxx b/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.hxx deleted file mode 100644 index decd905bf7c446e19bfd0206bea0e59bd43e77ed..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.hxx +++ /dev/null @@ -1,528 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbImageToImageRCC8Calculator_hxx -#define otbImageToImageRCC8Calculator_hxx - -#include "otbImageToImageRCC8Calculator.h" -#include "itkUnaryFunctorImageFilter.h" -#include "itkBinaryDilateImageFilter.h" -#include "itkBinaryBallStructuringElement.h" -#include "itkInvertIntensityImageFilter.h" -#include "itkSubtractImageFilter.h" -#include "itkAndImageFilter.h" -#include "itkImageRegionIterator.h" -#include "otbBinaryImageMinimalBoundingRegionCalculator.h" -#include "otbMacro.h" - -//TODELETE #include "otbImageFileWriter.h" -//TODELETE #include "itkCastImageFilter.h" - -namespace otb -{ -/** - * Constructor - */ -template<class TInputImage> -ImageToImageRCC8Calculator<TInputImage> -::ImageToImageRCC8Calculator() -{ - m_Value = OTB_RCC8_DC; - m_InsideValue1 = static_cast<PixelType>(255); - m_InsideValue2 = static_cast<PixelType>(255); - m_Level1APrioriKnowledge = false; - m_Level3APrioriKnowledge = false; - this->SetNumberOfRequiredInputs(2); -} -/** - * Set the first input image. - * \param image - */ -template<class TInputImage> -void -ImageToImageRCC8Calculator<TInputImage> -::SetInput1(ImageType * image) -{ - this->SetNthInput(0, const_cast<ImageType *>(image)); -} -/** - * Set the second input image. - * \param image - */ -template<class TInputImage> -void -ImageToImageRCC8Calculator<TInputImage> -::SetInput2(ImageType * image) -{ - this->SetNthInput(1, const_cast<ImageType *>(image)); -} -/** - * Get the first input image. - * \return The first input image. - */ -template<class TInputImage> -typename ImageToImageRCC8Calculator<TInputImage> -::ImageType* -ImageToImageRCC8Calculator<TInputImage> -::GetInput1(void) -{ - return dynamic_cast<ImageType*>(this->itk::ProcessObject::GetInput(0)); -} -/** - * Get the second input image. - * \return The second input image. - */ -template<class TInputImage> -typename ImageToImageRCC8Calculator<TInputImage> -::ImageType* -ImageToImageRCC8Calculator<TInputImage> -::GetInput2(void) -{ - return dynamic_cast<ImageType*>(this->itk::ProcessObject::GetInput(1)); -} -/** - * Get the RCC8 relation. - * \return The RCC8 relation value. - */ -template <class TInputImage> -typename ImageToImageRCC8Calculator<TInputImage> -::RCC8ValueType -ImageToImageRCC8Calculator<TInputImage> -::GetValue(void) -{ - return m_Value; -} -/** - * Compute the minimal image region required. - * \return The minimal region required. - */ -template <class TInputImage> -typename ImageToImageRCC8Calculator<TInputImage> -::RegionType -ImageToImageRCC8Calculator<TInputImage> -::ComputeMinimalRegion(void) -{ - // Input images pointers - typename ImageType::Pointer image1 = this->GetInput1(); - typename ImageType::Pointer image2 = this->GetInput2(); - typename ImageType::RegionType region1, region2, region; - typedef otb::BinaryImageMinimalBoundingRegionCalculator<ImageType> RegionCalculator; - typename RegionCalculator::Pointer rc = RegionCalculator::New(); - rc->SetInput(image1); - rc->SetPad(2); - rc->SetInsideValue(this->GetInsideValue1()); - rc->Update(); - region1 = rc->GetRegion(); - rc = RegionCalculator::New(); - rc->SetInput(image2); - rc->SetPad(2); - rc->SetInsideValue(this->GetInsideValue2()); - rc->Update(); - region2 = rc->GetRegion(); - // otbMsgDebugMacro(<<"RCC8Calculator->ComputeMinimalRegion() Region1: index: "<<region1.GetIndex()<<" size: "<<region1.GetSize()); - // otbMsgDebugMacro(<<"RCC8Calculator->ComputeMinimalRegion() Region2: index: "<<region2.GetIndex()<<" size: "<<region2.GetSize()); - - //TODELETE std::cout<<"RCC8Calculator->ComputeMinimalRegion() Region1: index: "<<region1.GetIndex()<<" size: "<<region1.GetSize()<<std::endl; -//TODELETE std::cout<<"RCC8Calculator->ComputeMinimalRegion() Region2: index: "<<region2.GetIndex()<<" size: "<<region2.GetSize()<<std::endl; - - typename ImageType::SizeType size; - typename ImageType::IndexType index; - - for (unsigned int i = 0; i < ImageType::ImageDimension; ++i) - { - index[i] = std::min(region1.GetIndex()[i], region2.GetIndex()[i]); - int potSize = std::max(region1.GetIndex()[i] + region1.GetSize()[i], - region2.GetIndex()[i] + region2.GetSize()[i]); - size[i] = (potSize - index[i] < 0 ? 0 : potSize - index[i]); - } - region.SetIndex(index); - region.SetSize(size); - region.PadByRadius(2); - region.Crop(image1->GetLargestPossibleRegion()); - region.Crop(image2->GetLargestPossibleRegion()); - // otbMsgDebugMacro(<<"RCC8Calculator->ComputeMinimalRegion(): index: "<<index<<" size: "<<size); - //TODELETE std::cout<<"RCC8Calculator->ComputeMinimalRegion(): index: "<<index<<" size: "<<size<<std::endl; - return region; -} -/** - * Compute a bool image of minimal ROI size, surrounded by a false padding, and corresponding - * to the input image. - * \param image The image to convert. - * \param insideValue The inside value. - * \return The converted image - */ -template<class TInputImage> -typename ImageToImageRCC8Calculator<TInputImage> -::BoolImagePointerType -ImageToImageRCC8Calculator<TInputImage> -::ConvertToBoolImage(ImagePointerType image, PixelType insideValue) -{ - typedef itk::ImageRegionConstIterator<ImageType> ConstIterator; - typedef itk::ImageRegionIterator<BoolImageType> Iterator; - typename BoolImageType::Pointer output = BoolImageType::New(); - typename BoolImageType::SizeType boolImageSize; - boolImageSize[0] = m_MinimalROI.GetSize()[0] + 2; - boolImageSize[1] = m_MinimalROI.GetSize()[1] + 2; - typename BoolImageType::IndexType boolImageIndex; - boolImageIndex[0] = m_MinimalROI.GetIndex()[0] - 1; - boolImageIndex[1] = m_MinimalROI.GetIndex()[1] - 1; - //otbMsgDebugMacro(<<"RCC8Calculator->ConvertToBoolImage() size: "<<boolImageSize<<" index: "<<boolImageIndex); - - typename BoolImageType::RegionType boolRegion; - boolRegion.SetSize(boolImageSize); - boolRegion.SetIndex(boolImageIndex); - output->SetRegions(boolRegion); - output->Allocate(); - output->FillBuffer(false); - - ConstIterator inputIt(image, m_MinimalROI); - Iterator outputIt(output, m_MinimalROI); - inputIt.GoToBegin(); - outputIt.GoToBegin(); - while (!inputIt.IsAtEnd() && !outputIt.IsAtEnd()) - { - outputIt.Set(inputIt.Get() == insideValue); - ++inputIt; - ++outputIt; - } - - return output; -} -/** - * Compute the intersection between regions edges. - * \return true if the intersection is not empty. - */ -template<class TInputImage> -bool -ImageToImageRCC8Calculator<TInputImage> -::ComputeEdgeEdgeBool(void) -{ - - /// Definition of the Filters used to compute the boolean - typedef itk::SubtractImageFilter<BoolImageType, BoolImageType, - BoolImageType> - SubtractFilterType; - typedef itk::BinaryBallStructuringElement<bool, - BoolImageType::ImageDimension> - BinaryBallStructuringElementType; - typedef itk::BinaryDilateImageFilter<BoolImageType, BoolImageType, BinaryBallStructuringElementType> DilateFilterType; - typedef itk::AndImageFilter<BoolImageType, BoolImageType, BoolImageType> AndFilterType; - /// Declaration and instantiation - typename DilateFilterType::Pointer dilateFilter1 = DilateFilterType::New(); - typename DilateFilterType::Pointer dilateFilter2 = DilateFilterType::New(); - typename SubtractFilterType::Pointer subtractFilter1 = SubtractFilterType::New(); - typename SubtractFilterType::Pointer subtractFilter2 = SubtractFilterType::New(); - typename AndFilterType::Pointer andFilter = AndFilterType::New(); - /// Configuration of the erosion filter - BinaryBallStructuringElementType structElement1, structElement2; - structElement1.SetRadius(1); - structElement2.SetRadius(1); - structElement1.CreateStructuringElement(); - structElement2.CreateStructuringElement(); - dilateFilter1->SetKernel(structElement1); - dilateFilter2->SetKernel(structElement2); - /// The erosion is performed to get the surrounding edge of this - /// region by subtraction to the original image - dilateFilter1->SetInput(m_BoolImage1); - dilateFilter1->Update(); - subtractFilter1->SetInput2(m_BoolImage1); - subtractFilter1->SetInput1(dilateFilter1->GetOutput()); - subtractFilter1->Update(); - /// The erosion is performed to get the surrounding edge of this - /// region by subtraction to the original image - dilateFilter2->SetInput(m_BoolImage2); - dilateFilter2->Update(); - subtractFilter2->SetInput2(m_BoolImage2); - subtractFilter2->SetInput1(dilateFilter2->GetOutput()); - subtractFilter2->Update(); - /// Now we can compute the intersection between the 2 edges - andFilter->SetInput1(subtractFilter1->GetOutput()); - andFilter->SetInput2(subtractFilter2->GetOutput()); - andFilter->Update(); - /// test if the intersection is empty or not - return this->IsBoolImageNotEmpty(andFilter->GetOutput()); -} -/** - * Compute the intersection between exterior of region1 and - * interior of region2. - * \return true if the intersection is not empty. - */ -template<class TInputImage> -bool -ImageToImageRCC8Calculator<TInputImage> -::ComputeExterInterBool(void) -{ - /// Definition of the filters used - typedef itk::InvertIntensityImageFilter<BoolImageType, BoolImageType> InvertFilterType; - typedef itk::AndImageFilter<BoolImageType, BoolImageType, BoolImageType> AndFilterType; - /// Declaration and instantiation - typename InvertFilterType::Pointer invert = InvertFilterType::New(); - typename AndFilterType::Pointer andFilter = AndFilterType::New(); - /// The exterior is the inverted input image - invert->SetMaximum(true); - invert->SetInput(m_BoolImage1); - andFilter->SetInput1(m_BoolImage2); - andFilter->SetInput2(invert->GetOutput()); - andFilter->Update(); - /// test if the intersection is empty or not - return IsBoolImageNotEmpty(andFilter->GetOutput()); -} -/** - * Compute the intersection between interior of region1 and - * exterior of region2. - * \return true if the intersection is not empty. - */ -template<class TInputImage> -bool -ImageToImageRCC8Calculator<TInputImage> -::ComputeInterExterBool(void) -{ - /// Definition of the filters used - typedef itk::InvertIntensityImageFilter<BoolImageType, BoolImageType> InvertFilterType; - typedef itk::AndImageFilter<BoolImageType, BoolImageType, BoolImageType> AndFilterType; -//TODELETE typedef otb::Image<unsigned char, 2> TmpImageType; -//TODELETE typedef itk::CastImageFilter<BoolImageType, TmpImageType> CastFilterType; - -//TODELETE typedef ImageFileWriter<TmpImageType> WriterType; -/// Declaration and instantiation - typename InvertFilterType::Pointer invert = InvertFilterType::New(); - typename AndFilterType::Pointer andFilter = AndFilterType::New(); - /// The exterior is the inverted input image - invert->SetMaximum(true); - invert->SetInput(m_BoolImage2); - -//TODELETE typename CastFilterType::Pointer caster = CastFilterType::New(); -//TODELETE caster->SetInput(invert->GetOutput()); -//TODELETE typename WriterType::Pointer writer = WriterType::New(); -//TODELETE writer->SetFileName("invert.tif"); -//TODELETE writer->SetInput(caster->GetOutput()); -//TODELETE writer->Update(); - - andFilter->SetInput1(m_BoolImage1); - andFilter->SetInput2(invert->GetOutput()); - andFilter->Update(); - -//TODELETE caster = CastFilterType::New(); -//TODELETE caster->SetInput(andFilter->GetOutput()); -//TODELETE writer = WriterType::New(); -//TODELETE writer->SetFileName("and.tif"); -//TODELETE writer->SetInput(caster->GetOutput()); -//TODELETE writer->Update(); - - /// test if the intersection is empty or not - return IsBoolImageNotEmpty(andFilter->GetOutput()); -} -/** - * Compute the intersection between regions interiors. - * \return true if the intersection is not empty. - */ -template<class TInputImage> -bool -ImageToImageRCC8Calculator<TInputImage> -::ComputeInterInterBool(void) -{ - /// Definition of the filters used - typedef itk::AndImageFilter<BoolImageType, BoolImageType, BoolImageType> AndFilterType; - - /// Declaration and instantiation - typename AndFilterType::Pointer andFilter = AndFilterType::New(); - /// The exterior is the inverted input image - andFilter->SetInput1(m_BoolImage1); - andFilter->SetInput2(m_BoolImage2); - andFilter->Update(); - /// test if the intersection is empty or not - return IsBoolImageNotEmpty(andFilter->GetOutput()); -} -/** - * Compute the relation value from the input booleans. Please note - * that the actual computed value is set to the m_Value parameters, and has - * nothing to do with the returned boolean, which indicates if the determination - * process was successful. - * \param edgeEdgeBool True if edge-edge intersection is not empty. - * \param interExterBool True if interior-exterior intersection is not empty. - * \param exterInterBool True if exterior-interior intersection is not empty. - * \return True if the decision process was successful. - */ -template<class TInputImage> -bool -ImageToImageRCC8Calculator<TInputImage> -::ComputeRelation(bool edgeEdgeBool, bool interExterBool, bool exterInterBool) -{ - // otbMsgDebugMacro(<<"RCC8Calculator->ComputeRelation()"); - // This decision process is based on a decision tree - if ((!interExterBool) && (edgeEdgeBool) && (!exterInterBool)) - { - m_Value = OTB_RCC8_EQ; - return true; - } - else if ((!interExterBool) && (edgeEdgeBool) && (exterInterBool)) - { - m_Value = OTB_RCC8_TPP; - return true; - } - else if ((interExterBool) && (!edgeEdgeBool) && (!exterInterBool)) - { - m_Value = OTB_RCC8_NTPPI; - return true; - } - else if ((interExterBool) && (!edgeEdgeBool) && (exterInterBool)) - { - m_Value = OTB_RCC8_DC; - return true; - } - else if ((interExterBool) && (edgeEdgeBool) && (!exterInterBool)) - { - m_Value = OTB_RCC8_TPPI; - return true; - } - else - { - return false; - } -} -/** - * Test if the boolean image is totally black or not. This is a based on the lazy operator - * paradigm. - * \param image The image to test. - * \return True or false. - */ -template<class TInputImage> -bool -ImageToImageRCC8Calculator<TInputImage> -::IsBoolImageNotEmpty(BoolImagePointerType image) -{ - typedef itk::ImageRegionConstIterator<BoolImageType> IteratorType; - // TODO : we'll eventually need to change something. - IteratorType it(image, image->GetLargestPossibleRegion()); - it.GoToBegin(); - while (!it.IsAtEnd()) - { - if (it.Get()) - { - return true; - } - ++it; - } - return false; -} -/** - * Main computation method. - */ -template <class TInputImage> -void -ImageToImageRCC8Calculator<TInputImage> -::GenerateData(void) -{ - // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData()"); - /// First we compute the minimal region of interest we will use for the relation computation - m_MinimalROI = this->ComputeMinimalRegion(); - /// If they are disjoint, the answer is trivial - if ((m_MinimalROI.GetSize()[0] <= 1) || (m_MinimalROI.GetSize()[1] <= 1)) - { - /// The relation is DC - m_Value = OTB_RCC8_DC; - // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): Disjoint regions"); - } - else - { - /// else each input images is cast to boolean type and reduced to - // the minimal region - m_BoolImage1 = ConvertToBoolImage(this->GetInput1(), m_InsideValue1); - m_BoolImage2 = ConvertToBoolImage(this->GetInput2(), m_InsideValue2); - // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): Bool images computed: "<<m_BoolImage1->GetLargestPossibleRegion().GetSize()); - /// Then the boolean which will be used to determine the relation - /// are declared - bool edgeEdgeBool, interExterBool, exterInterBool, interInterBool; - /// The boolean edgeEdge is needed in each case, so it si computed - /// now - edgeEdgeBool = ComputeEdgeEdgeBool(); - // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): edgeEdge "<<edgeEdgeBool); - //TODELETE std::cout<<"RCC8Calculator->GenerateData(): edgeEdge "<<edgeEdgeBool<<std::endl; - /// Here comes the outside knowledge - if (this->GetLevel1APrioriKnowledge()) - { - /// If the Level1APrioriKnowledge is set, then the - /// interExterBool is set to true - // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): Level1APrioriKnowledge."); - interExterBool = true; - } - else - { - /// Else it must be computed - interExterBool = ComputeInterExterBool(); - // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): interExter "<<interExterBool); - } - /// At this stage we can determine if the relation is of type NTPP - //TODELETE std::cout<<"RCC8Calculator->GenerateData(): interExter "<<interExterBool<<std::endl; - if ((!interExterBool) && (!edgeEdgeBool)) - { - m_Value = OTB_RCC8_NTPP; - } - else - { - /// If not, we must consider the intersection between exterior - if (this->GetLevel3APrioriKnowledge()) - { - /// If the Level3APRioriKnowledge flag is set, this boolean - /// can be determined from the two others - // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): Level3APrioriKnowledge."); - exterInterBool = true; - } - else - { - /// Else it must be computed - exterInterBool = ComputeExterInterBool(); - // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): ExterInter "<<exterInterBool); - } - //TODELETE std::cout<<"RCC8Calculator->GenerateData(): ExterInter "<<exterInterBool<<std::endl; - /// If it is not sufficient to compute the relation - if (!ComputeRelation(edgeEdgeBool, interExterBool, exterInterBool)) - { - /// Compute the last boolean - interInterBool = ComputeInterInterBool(); - //TODELETE std::cout<<"RCC8Calculator->GenerateData(): InterInter "<<interInterBool<<std::endl; - // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): InterInter "<<interInterBool); - /// Which allow the full determination - if ((interExterBool) && (edgeEdgeBool) && (exterInterBool) && (!interInterBool)) - { - m_Value = OTB_RCC8_EC; - } - else - { - m_Value = OTB_RCC8_PO; - } - } - } - } -} -/** -* PrintSelf method -*/ -template<class TInputImage> -void -ImageToImageRCC8Calculator<TInputImage> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -} // end namespace itk - -#endif diff --git a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.h b/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.h deleted file mode 100644 index 7c2d8175a3cccfa6282af5e58125269886fd980b..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbPolygonListToRCC8GraphFilter_h -#define otbPolygonListToRCC8GraphFilter_h - -#include "otbRCC8GraphSource.h" -#include "otbPolygonToPolygonRCC8Calculator.h" -#include "otbRCC8VertexIterator.h" -#include "otbRCC8InEdgeIterator.h" -#include "otbRCC8OutEdgeIterator.h" - -namespace otb -{ -/** - * \class PolygonListToRCC8GraphFilter - * \brief This class computes an RCC8 graph from a set of polygons. - * \sa ImageMultiSegmentationToRCC8GraphFilter - * - * \ingroup OTBRCC8 - */ -template <class TPolygonList, class TOutputGraph> -class ITK_EXPORT PolygonListToRCC8GraphFilter - : public RCC8GraphSource<TOutputGraph> -{ -public: - /** Standard class typedefs. */ - typedef PolygonListToRCC8GraphFilter Self; - typedef RCC8GraphSource<TOutputGraph> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Method for creation through the object factory. */ - itkNewMacro(Self); - /** Run-time type information (and related methods). */ - itkTypeMacro(PolygonListToRCC8GraphFilter, RCC8GraphSource); - - /** Input related typedef */ - typedef TPolygonList PolygonListType; - typedef typename PolygonListType::ConstPointer PolygonListConstPointerType; - typedef typename PolygonListType::ObjectType PolygonType; - typedef typename PolygonType::Pointer PolygonPointerType; - - /** Output related typedefs */ - typedef TOutputGraph OutputGraphType; - typedef typename OutputGraphType::Pointer OutputGraphPointerType; - typedef typename OutputGraphType::VertexType VertexType; - typedef typename VertexType::Pointer VertexPointerType; - typedef typename VertexType::PathType PathType; - typedef typename OutputGraphType::VertexDescriptorType VertexDescriptorType; - - /** Knowledge enum typedef */ - typedef typename OutputGraphType::RCC8ValueType RCC8ValueType; - typedef enum {NO_INFO, LEVEL_1, LEVEL_3, FULL} KnowledgeValueType; - typedef std::pair<KnowledgeValueType, RCC8ValueType> KnowledgeStateType; - - /** RCC8 calculator typedef */ - typedef PolygonToPolygonRCC8Calculator<PolygonType> RCC8CalculatorType; - - /** Graph iterators typedefs */ - typedef RCC8VertexIterator<OutputGraphType> VertexIteratorType; - typedef RCC8InEdgeIterator<OutputGraphType> InEdgeIteratorType; - typedef RCC8OutEdgeIterator<OutputGraphType> OutEdgeIteratorType; - - typedef typename VertexIteratorType::VertexDescriptorType EdgePairElementType; - typedef std::pair<EdgePairElementType, EdgePairElementType> EdgePairType; - typedef std::map<EdgePairType, RCC8ValueType> EdgeMapType; - typedef std::vector<EdgeMapType> EdgeMapVectorType; - - typedef std::vector<unsigned int> SegmentationRangesType; - - /** Toogle optimisation flag */ - itkBooleanMacro(Optimisation); - itkSetMacro(Optimisation, bool); - itkBooleanMacro(UseInverted); - itkSetMacro(UseInverted, bool); - - void SetSegmentationRanges(SegmentationRangesType ranges) - { - m_SegmentationRanges = ranges; - } - - const SegmentationRangesType& GetSegmentationRanges() const - { - return m_SegmentationRanges; - } - - /** - * Get the number of occurrences of the given value - * \return The value. - */ - unsigned int GetRelationsCount(RCC8ValueType val); - - /** - * Get number of relations - * \return The number of relations. - */ - unsigned int GetNumberOfRelations(void); - - using Superclass::SetInput; - /** Set the input of the filter */ - virtual void SetInput(const PolygonListType *input); - /** Get the input of the filter */ - const PolygonListType * GetInput(void); - -protected: - /** Constructor */ - PolygonListToRCC8GraphFilter(); - /** Destructor */ - ~PolygonListToRCC8GraphFilter() override; - /** Main computation method */ - void GenerateData() override; - - /** Multi-threading implementation */ - - virtual void BeforeThreadedGenerateData(); - - virtual void AfterThreadedGenerateData(); - - /** startIndex and stopIndex represent the indices of the vertex to - examine in thread threadId */ - virtual void ThreadedGenerateData(unsigned int startIndex, unsigned int stopIndex, itk::ThreadIdType threadId); - - /** Static function used as a "callback" by the MultiThreader. The threading - * library will call this routine for each thread, which will delegate the - * control to ThreadedGenerateData(). */ - static ITK_THREAD_RETURN_TYPE ThreaderCallback(void *arg); - - /** Internal structure used for passing image data into the threading library */ - struct ThreadStruct - { - Pointer Filter; - }; - - /** End Multi-threading implementation */ - - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** - * Get the composition knowledge. - * \param r1 First RCC8 relation value, - * \param r2 Second RCC8 relation value, - * \return The knowledge associated with the composition. - */ - KnowledgeStateType GetKnowledge(RCC8ValueType r1, RCC8ValueType r2); - -private: - /** Optimisation flag */ - bool m_Optimisation; - unsigned int m_Accumulator[8]; - EdgeMapVectorType m_EdgesPerThread; - - /** This array stores the indices corresponding to each segmentation */ - SegmentationRangesType m_SegmentationRanges; - - /** If set to true, the filter will also add the invert relationship - * between v2 and v1 */ - bool m_UseInverted; -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbPolygonListToRCC8GraphFilter.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.hxx b/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.hxx deleted file mode 100644 index 10842bf64866a0753828b9cf23f056173dd90ee1..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.hxx +++ /dev/null @@ -1,460 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbPolygonListToRCC8GraphFilter_hxx -#define otbPolygonListToRCC8GraphFilter_hxx - -#include "otbPolygonListToRCC8GraphFilter.h" -#include "itkProgressReporter.h" - -namespace otb -{ -/** - * Constructor. - */ -template <class TPolygonList, class TOutputGraph> -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::PolygonListToRCC8GraphFilter() -{ - this->SetNumberOfRequiredInputs(1); - m_Optimisation = false; - m_UseInverted = false; -} -/** - * Destructor. - */ -template <class TPolygonList, class TOutputGraph> -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::~PolygonListToRCC8GraphFilter() -{} - -template <class TPolygonList, class TOutputGraph> -void -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::SetInput(const PolygonListType *input) -{ - // Process object is not const-correct so the const_cast is required here - this->itk::ProcessObject::SetNthInput(0, - const_cast<PolygonListType *>(input)); -} - -template <class TPolygonList, class TOutputGraph> -const typename PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>::PolygonListType * -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::GetInput(void) -{ - if (this->GetNumberOfInputs() < 1) - { - return nullptr; - } - - return static_cast<const TPolygonList *> - (this->itk::ProcessObject::GetInput(0)); -} - -template <class TPolygonList, class TOutputGraph> -unsigned int -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::GetRelationsCount(RCC8ValueType val) -{ - return m_Accumulator[val]; -} - -template <class TPolygonList, class TOutputGraph> -unsigned int -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::GetNumberOfRelations() -{ - unsigned int result = 0; - for (unsigned int i = 0; i < 8; ++i) - { - result += m_Accumulator[i]; - - } - return result; -} -template <class TPolygonList, class TOutputGraph> -typename PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::KnowledgeStateType -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::GetKnowledge(RCC8ValueType r1, RCC8ValueType r2) -{ - m_Accumulator[0] = 0; - m_Accumulator[1] = 0; - m_Accumulator[2] = 0; - m_Accumulator[3] = 0; - m_Accumulator[4] = 0; - m_Accumulator[5] = 0; - m_Accumulator[6] = 0; - m_Accumulator[7] = 0; - - // otbMsgDebugMacro(<<"RCC8GraphFilter: entering GetKnowledge method."); - // This is the RCC8 composition table - const int knowledge[8][8] - = - { - /** DC EC PO TPP TPPi NTPP i EQ */ - /** DC */ {-3, -2, -2, -2, 0, -2, 0, 0}, - /** EC */ {-1, -3, -2, -3, -1, -3, 0, 1}, - /** PO */ {-1, -1, -3, -3, -1, -3, -1, 2}, - /** TPP */ { 0, -1, -2, -3, -3, 5, -1, 3}, - /** TPPi*/ {-1, -1, -1, -3, -1, -3, 6, 4}, - /** NTPP*/ { 0, 0, -2, 5, -2, 5, -3, 5}, - /** NTPPi*/ {-1, -1, -1, -1, 6, -3, 6, 6}, - /** EQ */ { 0, 1, 2, 3, 4, 5, 6, 7} - }; - - int value = knowledge[r1][r2]; - // Each negative case correspond to a level of knowledge - if (value >= 0) - { - // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method: FULL"); - return KnowledgeStateType(FULL, static_cast<RCC8ValueType>(value)); - } - else if (value == -1) - { - // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method: LEVEL_1"); - return KnowledgeStateType(LEVEL_1, OTB_RCC8_DC); - } - else if (value == -2) - { - // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method.LEVEL_3"); - return KnowledgeStateType(LEVEL_3, OTB_RCC8_DC); - } - else - { - // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method.NO_INFO"); - return KnowledgeStateType(NO_INFO, OTB_RCC8_DC); - } -} -/** - * Main computation method. - */ -template <class TPolygonList, class TOutputGraph> -void -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::GenerateData() -{ - // Call a method that can be overridden by a subclass to perform - // some calculations prior to splitting the main computations into - // separate threads - this->BeforeThreadedGenerateData(); - - // Set up the multithreaded processing - ThreadStruct str; - str.Filter = this; - - // // Initializing edges vectors per thread - EdgeMapType defaultEdgeMap; - m_EdgesPerThread = EdgeMapVectorType(this->GetNumberOfThreads(), defaultEdgeMap); - - // Setting up multithreader - this->GetMultiThreader()->SetNumberOfThreads(this->GetNumberOfThreads()); - this->GetMultiThreader()->SetSingleMethod(this->ThreaderCallback, &str); - - // multithread the execution - this->GetMultiThreader()->SingleMethodExecute(); - - // Call a method that can be overridden by a subclass to perform - // some calculations after all the threads have completed - this->AfterThreadedGenerateData(); -} - -template <class TPolygonList, class TOutputGraph> -void -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::BeforeThreadedGenerateData() -{ - // Output graph pointer - OutputGraphPointerType graph = this->GetOutput(); - PolygonListConstPointerType inputPtr = this->GetInput(); - -// Initializing output graph - graph->SetNumberOfVertices(inputPtr->Size()); - graph->Build(); - - // Vertex indexes - unsigned int nbVertices = 0; - - typedef typename PolygonListType::ConstIterator PolygonListConstIteratorType; - - // Loads the polygons list to graph nodes - for (PolygonListConstIteratorType it = inputPtr->Begin(); - it != inputPtr->End(); ++it) - { - // Create a new vertex - VertexPointerType vertex = VertexType::New(); - // Set its properties - vertex->SetPath(it.Get()); - - // look for the appropriate segmentation index - - unsigned int segIndex = 1; - - while (segIndex < m_SegmentationRanges.size() && - (nbVertices < m_SegmentationRanges[segIndex - 1] || nbVertices >= m_SegmentationRanges[segIndex])) - { - ++segIndex; - } - - vertex->SetSegmentationLevel(segIndex - 1); - - // Put it in the graph - graph->SetVertex(nbVertices, vertex); - otbMsgDevMacro(<< "Adding vertex: " << nbVertices); - ++nbVertices; - } -} - -template <class TPolygonList, class TOutputGraph> -void -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::ThreadedGenerateData(unsigned int startIndex, unsigned int stopIndex, itk::ThreadIdType threadId) -{ - //std::cout<<"Starting thread "<<threadId <<" to work on range ["<<startIndex<<", "<<stopIndex<<"]"<<std::endl; - - // Output graph pointer - OutputGraphPointerType graph = this->GetOutput(); - PolygonListConstPointerType inputPtr = this->GetInput(); - - // invert value vector - RCC8ValueType invert[8] = {OTB_RCC8_DC, OTB_RCC8_EC, OTB_RCC8_PO, OTB_RCC8_TPPI, - OTB_RCC8_TPP, OTB_RCC8_NTPPI, OTB_RCC8_NTPP, OTB_RCC8_EQ}; - - unsigned int nbVertices = graph->GetNumberOfVertices(); - itk::ProgressReporter progress(this, threadId, ((int) stopIndex - (int) startIndex)*nbVertices); - - otbMsgDevMacro(<< "Adjacency matrix size: " << nbVertices * nbVertices); - - VertexIteratorType vIt1(graph); - VertexIteratorType vIt2(graph); - - unsigned int count = 0; - - // For each couple of vertices - for (vIt1.GoToBegin(); !vIt1.IsAtEnd(); ++vIt1) - { - // TODO: this is not correct and should be replaced by a - // vIt1(graph, index1, index2), which does not exist for the moment - if ((count >= startIndex) && (count < stopIndex)) - { - for (vIt2.GoToBegin(); !vIt2.IsAtEnd(); ++vIt2) - { - //We do not examine each couple because of the RCC8 symmetry - if (vIt1.GetIndex() < vIt2.GetIndex()) - { - - // Compute the RCC8 relation - typename RCC8CalculatorType::Pointer calc = RCC8CalculatorType::New(); - calc->SetPolygon1(vIt1.Get()->GetPath()); - calc->SetPolygon2(vIt2.Get()->GetPath()); - RCC8ValueType value = OTB_RCC8_DC; - - // if the optimisations are activated - if (m_Optimisation) - { - // otbMsgDebugMacro(<<"RCC8GraphFilter: Entering optimisation loop"); - InEdgeIteratorType inIt1(vIt1.GetIndex(), graph); - InEdgeIteratorType inIt2(vIt2.GetIndex(), graph); - // otbMsgDebugMacro(<<"Optimisation loop: iterators initialised"); - VertexDescriptorType betweenIndex; - KnowledgeStateType know(NO_INFO, OTB_RCC8_DC); - inIt1.GoToBegin(); - - // Iterate through the edges going to the first vertex - while (!inIt1.IsAtEnd() && (know.first != FULL)) - { - betweenIndex = inIt1.GetSourceIndex(); - inIt2.GoToBegin(); - bool edgeFound = false; - while (!inIt2.IsAtEnd() && (know.first != FULL)) - { - // try to find an intermediate vertex between the two ones which - // we vant to compute the relationship - if (inIt2.GetSourceIndex() == betweenIndex) - { - // if an intermediate vertex is found - edgeFound = true; - // otbMsgDebugMacro(<<"Optimisation loop: found an intermediary vertex:" <<betweenIndex); - // See if it brings some info on the RCCC8 value - know = GetKnowledge(invert[inIt1.GetValue()], inIt2.GetValue()); - calc->SetLevel1APrioriKnowledge(know.first == LEVEL_1); - calc->SetLevel3APrioriKnowledge(know.first == LEVEL_3); - // otbMsgDebugMacro(<<"Optimisation loop: knowledge: "<<know.first<<","<<know.second); - } - ++inIt2; - } - // If no intermediate was found - if (!edgeFound) - { - // otbMsgDebugMacro(<<"Optimisation loop: found an intermediary vertex:" <<betweenIndex); - // Try using a DC relationship - know = GetKnowledge(invert[inIt1.GetValue()], OTB_RCC8_DC); - calc->SetLevel1APrioriKnowledge(know.first == LEVEL_1); - calc->SetLevel3APrioriKnowledge(know.first == LEVEL_3); - // otbMsgDebugMacro(<<"Optimisation loop: knowledge: "<<know.first<<","<<know.second); - } - ++inIt1; - } - // If the search has fully determined the RCC8 - if (know.first == FULL) - { - // Get the value - value = know.second; - } - else - { - // Else trigger the computation - // (which will take the optimisation phase info into account) - calc->Compute(); - value = calc->GetValue(); - } - // otbMsgDebugMacro(<<"RCC8GraphFilter: Leaving optimisation loop"); - } - // If the optimisations are not activated - else - { - calc->Compute(); - value = calc->GetValue(); - } - m_Accumulator[value] += 1; - m_Accumulator[invert[value]] += 1; - // If the vertices are connected - if (value > OTB_RCC8_DC) - { - // Add the edge to the graph. - otbMsgDevMacro(<< "Adding edge: " << vIt1.GetIndex() << " -> " << vIt2.GetIndex() << ": " << value); - if (value == OTB_RCC8_NTPPI) - { - m_EdgesPerThread[threadId][EdgePairType(vIt2.GetIndex(), vIt1.GetIndex())] = OTB_RCC8_NTPP; - } - else if (value == OTB_RCC8_TPPI) - { - m_EdgesPerThread[threadId][EdgePairType(vIt2.GetIndex(), vIt1.GetIndex())] = OTB_RCC8_TPP; - } - else - { - m_EdgesPerThread[threadId][EdgePairType(vIt1.GetIndex(), vIt2.GetIndex())] = value; - } - if (m_UseInverted) - { - m_EdgesPerThread[threadId][EdgePairType(vIt2.GetIndex(), vIt1.GetIndex())] = invert[value]; - } - } - } - progress.CompletedPixel(); - progress.CompletedPixel(); - } - } - ++count; - } - otbMsgDebugMacro(<< "End thread " << threadId); -} - -template <class TPolygonList, class TOutputGraph> -void -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::AfterThreadedGenerateData() -{ - // in order to have the same output graph whatever the number of - // thread is, we use a map to sort the edges in lexicographical - // order - - OutputGraphPointerType graph = this->GetOutput(); - EdgeMapType globalEdgeMap; - - // merge all edges - for (typename EdgeMapVectorType::iterator vIt = m_EdgesPerThread.begin(); - vIt != m_EdgesPerThread.end(); ++vIt) - { - for (typename EdgeMapType::iterator mIt = (*vIt).begin(); - mIt != (*vIt).end(); ++mIt) - { - globalEdgeMap[mIt->first] = mIt->second; - } - } - - // Report edges to the graph - for (typename EdgeMapType::iterator mIt = globalEdgeMap.begin(); - mIt != globalEdgeMap.end(); ++mIt) - { - graph->AddEdge(mIt->first.first, mIt->first.second, mIt->second); - } -} - -// Callback routine used by the threading library. This routine just calls -// the ThreadedGenerateData method after setting the correct region for this -// thread. - -template <class TPolygonList, class TOutputGraph> -ITK_THREAD_RETURN_TYPE -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::ThreaderCallback(void *arg) -{ - ThreadStruct *str; - int threadId, threadCount; - unsigned int total, start, stop; - - threadId = ((itk::MultiThreader::ThreadInfoStruct *) (arg))->ThreadID; - threadCount = ((itk::MultiThreader::ThreadInfoStruct *) (arg))->NumberOfThreads; - str = (ThreadStruct *) (((itk::MultiThreader::ThreadInfoStruct *) (arg))->UserData); - - total = str->Filter->GetOutput()->GetNumberOfVertices(); - - if (threadId < static_cast<int>(total)) - { - - // Split the adjacency matrix in strip of equal dimension - start = - static_cast<unsigned int>(std::floor(total * - std::sqrt(static_cast<double>(threadId) / - static_cast<double>(threadCount)) + 0.5)); - stop = - static_cast<unsigned int>(std::floor(total * - std::sqrt(static_cast<double>(threadId + - 1) / static_cast<double>(threadCount)) + 0.5)); - if (stop > total) stop = total; - - // For very small graphs it might occur that start = stop. In this - // case the vertex at that index will be processed in the next strip. - if (start != stop) - { - str->Filter->ThreadedGenerateData(start, stop, threadId); - } - } - // else - // { - // otherwise don't use this thread. Sometimes the threads don't - // break up very well and it is just as efficient to leave a - // few threads idle. - // } - - return ITK_THREAD_RETURN_VALUE; -} - -template <class TPolygonList, class TOutputGraph> -void -PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // end namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.h b/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.h deleted file mode 100644 index b19cf4a7a31d6d30959b4fe39d193535021376f8..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbPolygonToPolygonRCC8Calculator_h -#define otbPolygonToPolygonRCC8Calculator_h - -#include "itkObject.h" -#include "otbRCC8Value.h" -#include "otbImage.h" - -namespace otb -{ -/** - * \class PolygonToPolygonRCC8Calculator - * \brief This class compute the RCC8 relation between the regions from two segmentation images. - * - * The RCC8 system comes from qualitative spatial reasoning. - * It is a set of pairwise disjoint exhaustive relation between two closed region of space. - * There are 8 possible relations : - * DC: Disconnected - * EC: Externaly connected - * PO: Partial overlap - * TPP: Tangential proper part - * NTPP: Non tangential proper part - * TPPI: Tangential proper part inverse - * NTPPI: Non tangential proper part inverse - * EQ: Equivalence - * - * The goal of this class is to determine which of these 8 relations link the two inputs regions represented - * by the closed input path. Since this class will further be used iteratively on a possibly large set - * of regiosn, it is optimised : the decision is managed by a decision tree. - * - * \ingroup OTBRCC8 - */ -template <class TInputPolygon> -class ITK_EXPORT PolygonToPolygonRCC8Calculator : public itk::Object -{ -public: - /** Standard class typedefs. */ - typedef PolygonToPolygonRCC8Calculator Self; - typedef itk::Object Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Method for creation through the object factory. */ - itkNewMacro(Self); - /** Run-time type information (and related methods). */ - itkTypeMacro(PolygonToPolygonRCC8Calculator, Object); - /** Types definitions for the input image. */ - typedef TInputPolygon PolygonType; - typedef typename PolygonType::Pointer PolygonPointerType; - typedef typename PolygonType::ConstPointer PolygonConstPointerType; - typedef typename PolygonType::VertexListType VertexListType; - typedef typename PolygonType::ContinuousIndexType ContinuousIndexType; - typedef typename PolygonType::RegionType::ImageRegionType RegionType; - typedef typename VertexListType::ConstIterator VertexListConstIteratorType; - typedef std::vector<bool> BoolVectorType; - - /** RCC8 values type */ - typedef RCC8Value RCC8ValueType; - - /** - * Get the RCC8 relation. - * \return The RCC8 relation value. - */ - RCC8ValueType GetValue(void); - - /** Set external knowledge to help the decision process */ - itkSetMacro(Level1APrioriKnowledge, bool); - itkSetMacro(Level3APrioriKnowledge, bool); - itkGetMacro(Level1APrioriKnowledge, bool); - itkGetMacro(Level3APrioriKnowledge, bool); - - itkSetObjectMacro(Polygon1, PolygonType); - itkSetObjectMacro(Polygon2, PolygonType); - itkGetObjectMacro(Polygon1, PolygonType); - itkGetObjectMacro(Polygon2, PolygonType); - - /** Main computation method */ - void Compute(void); - - virtual bool ComputeRelation(bool edgeEdgeBool, bool interExterBool, bool exterInterBool); - - virtual bool ComputeInterExter(PolygonPointerType path1, PolygonPointerType path2); - - virtual bool ComputeEdgeEdge(PolygonPointerType path1, PolygonPointerType path2); - - virtual bool ComputeInterInter(PolygonPointerType path1, PolygonPointerType path2); - - virtual bool RegionsIntersectionIsNull(const RegionType& region1, const RegionType& region2); - -protected: - /** Constructor */ - PolygonToPolygonRCC8Calculator(); - /** Destructor */ - ~PolygonToPolygonRCC8Calculator() override {} - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - /** The RCC8 relation value */ - RCC8ValueType m_Value; - /** Decision tree Level 1 A priori knowledge */ - bool m_Level1APrioriKnowledge; - /** Decision tree Level 3 A priori knowledge */ - bool m_Level3APrioriKnowledge; - /** Polygon of region 1 */ - PolygonPointerType m_Polygon1; - /** Polygon of region 2 */ - PolygonPointerType m_Polygon2; - /** Epsilon */ - double m_Epsilon; - -}; -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbPolygonToPolygonRCC8Calculator.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.hxx b/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.hxx deleted file mode 100644 index bcb836fa4c5baf6e07c9a9bb782b6d90042455d9..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.hxx +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbPolygonToPolygonRCC8Calculator_hxx -#define otbPolygonToPolygonRCC8Calculator_hxx - -#include "otbPolygonToPolygonRCC8Calculator.h" -#include "otbMacro.h" - -namespace otb -{ -/** - * Constructor - */ -template<class TInputPolygon> -PolygonToPolygonRCC8Calculator<TInputPolygon> -::PolygonToPolygonRCC8Calculator() -{ - m_Value = OTB_RCC8_DC; - m_Level1APrioriKnowledge = false; - m_Level3APrioriKnowledge = false; -} -/** - * Get the RCC8 relation. - * \return The RCC8 relation value. - */ -template <class TInputPolygon> -typename PolygonToPolygonRCC8Calculator<TInputPolygon> -::RCC8ValueType -PolygonToPolygonRCC8Calculator<TInputPolygon> -::GetValue(void) -{ - return m_Value; -} - -template<class TInputPolygon> -void -PolygonToPolygonRCC8Calculator<TInputPolygon> -::Compute(void) -{ - // First check if bounding regions are disjoints - RegionType region1 = m_Polygon1->GetBoundingRegion().GetImageRegion(); - RegionType region2 = m_Polygon2->GetBoundingRegion().GetImageRegion(); - - // If intersection is not null, we have to do the computation - if (!RegionsIntersectionIsNull(region1, region2)) - { - - bool edgeEdgeBool, interExterBool, exterInterBool, interInterBool; - /// The boolean edgeEdge is needed in each case, so it si computed - /// now - edgeEdgeBool = ComputeEdgeEdge(m_Polygon1, m_Polygon2); - - //std::cout<<"EdgeEdge: "<<edgeEdgeBool<<std::endl; - - if (this->GetLevel1APrioriKnowledge()) - { - interExterBool = true; - } - else - { - /// Else it must be computed - interExterBool = ComputeInterExter(m_Polygon1, m_Polygon2); - } - - //std::cout<<"InterExter: "<<interExterBool<<std::endl; - - /// At this stage we can determine if the relation is of type NTPP - if ((!interExterBool) && (!edgeEdgeBool)) - { - m_Value = OTB_RCC8_NTPP; - } - else - { - /// If not, we must consider the intersection between exterior - if (this->GetLevel3APrioriKnowledge()) - { - /// If the Level3APRioriKnowledge flag is set, this boolean - /// can be determined from the two others - exterInterBool = true; - } - else - { - /// Else it must be computed - exterInterBool = ComputeInterExter(m_Polygon2, m_Polygon1); - } - - //std::cout<<"ExterInter: "<<exterInterBool<<std::endl; - - /// If it is not sufficient to compute the relation - if (!ComputeRelation(edgeEdgeBool, interExterBool, exterInterBool)) - { - /// Compute the last boolean - interInterBool = ComputeInterInter(m_Polygon1, m_Polygon2); - - //std::cout<<"InterInter: "<<interInterBool<<std::endl; - - /// Which allow the full determination - if ((interExterBool) && (edgeEdgeBool) && (exterInterBool) && (!interInterBool)) - { - m_Value = OTB_RCC8_EC; - } - else - { - m_Value = OTB_RCC8_PO; - } - } - } - } -} - -template<class TInputPolygon> -bool -PolygonToPolygonRCC8Calculator<TInputPolygon> -::RegionsIntersectionIsNull(const RegionType& region1, const RegionType& region2) -{ - for (unsigned int dim = 0; dim < RegionType::ImageDimension; ++dim) - { - if (region1.GetIndex()[dim] + static_cast<int>(region1.GetSize()[dim]) < region2.GetIndex()[dim]) - { - return true; - } - else if (region2.GetIndex()[dim] + static_cast<int>(region2.GetSize()[dim]) < region1.GetIndex()[dim]) - { - return true; - } - } - return false; -} - -template<class TInputPolygon> -bool -PolygonToPolygonRCC8Calculator<TInputPolygon> -::ComputeRelation(bool edgeEdgeBool, bool interExterBool, bool exterInterBool) -{ - // This decision process is based on a decision tree - if ((!interExterBool) && (edgeEdgeBool) && (!exterInterBool)) - { - m_Value = OTB_RCC8_EQ; - return true; - } - else if ((!interExterBool) && (edgeEdgeBool) && (exterInterBool)) - { - m_Value = OTB_RCC8_TPP; - return true; - } - else if ((interExterBool) && (!edgeEdgeBool) && (!exterInterBool)) - { - m_Value = OTB_RCC8_NTPPI; - return true; - } - else if ((interExterBool) && (!edgeEdgeBool) && (exterInterBool)) - { - m_Value = OTB_RCC8_DC; - return true; - } - else if ((interExterBool) && (edgeEdgeBool) && (!exterInterBool)) - { - m_Value = OTB_RCC8_TPPI; - return true; - } - else - { - return false; - } -} - -template<class TInputPolygon> -bool -PolygonToPolygonRCC8Calculator<TInputPolygon> -::ComputeInterExter(PolygonPointerType polygon1, PolygonPointerType polygon2) -{ - bool resp = false; - VertexListConstIteratorType it = polygon1->GetVertexList()->Begin(); - VertexListConstIteratorType it_end = polygon1->GetVertexList()->End(); - - ContinuousIndexType current = it.Value(); - ContinuousIndexType first = current; - bool isInside = polygon2->IsInside(current); - bool firstIsInside = isInside; - bool isExterior = !isInside && !polygon2->IsOnEdge(current); - - //std::cout<<current<<" is inside: "<<isInside<<std::endl; - //std::cout<<current<<" is on edge: "<<polygon2->IsOnEdge(current)<<std::endl; - - unsigned int index = 0; - if (isExterior) - { - resp = true; - } - ++it; - while (!resp && it != it_end) - { - bool nextIsInside = polygon2->IsInside(it.Value()); - - if (isInside && nextIsInside) - { - //std::cout<<current<<" is inside and "<<it.Value()<<" is inside, nb crossings: "<<polygon2->NbCrossing(current, it.Value())<<std::endl; - resp = polygon2->NbCrossing(current, it.Value()) > 0; - } - current = it.Value(); - isInside = nextIsInside; - isExterior = !isInside && !polygon2->IsOnEdge(current); - //std::cout<<current<<" is inside: "<<isInside<<std::endl; - //std::cout<<current<<" is on edge: "<<polygon2->IsOnEdge(current)<<std::endl; - if (isExterior) - { - resp = true; - } - - ++index; - ++it; - } - - if (!resp && isInside && firstIsInside) - { - resp = polygon2->NbCrossing(current, first) > 0; - //std::cout<<current<<" is inside and "<<first<<" is inside, nb crossings: "<<polygon2->NbCrossing(current, first)<<std::endl; - } - - return resp; -} - -template<class TInputPolygon> -bool -PolygonToPolygonRCC8Calculator<TInputPolygon> -::ComputeInterInter(PolygonPointerType polygon1, PolygonPointerType polygon2) -{ - bool resp = false; - VertexListConstIteratorType it = polygon1->GetVertexList()->Begin(); - VertexListConstIteratorType it_end = polygon1->GetVertexList()->End(); - ContinuousIndexType current = it.Value(); - ContinuousIndexType first = current; - bool currentIsInside = polygon2->IsInside(current); - bool firstIsInside = currentIsInside; - - if (currentIsInside) - { - resp = true; - } - ++it; - while (!resp && it != it_end) - { - bool nextIsInside = polygon2->IsInside(it.Value()); - - if (!currentIsInside && !nextIsInside && !polygon2->IsOnEdge(current) && !polygon2->IsOnEdge(it.Value())) - { - unsigned int nbCrossings = polygon2->NbCrossing(current, it.Value()); - - resp = nbCrossings > 0; - } - currentIsInside = nextIsInside; - current = it.Value(); - - if (currentIsInside) - { - resp = true; - } - ++it; - } - - if (!resp && !currentIsInside && !firstIsInside && !polygon2->IsOnEdge(current) && !polygon2->IsOnEdge(first)) - { - unsigned int nbCrossings = polygon2->NbCrossing(current, first); - - resp = nbCrossings > 0; - } - return resp; -} -template<class TInputPolygon> -bool -PolygonToPolygonRCC8Calculator<TInputPolygon> -::ComputeEdgeEdge(PolygonPointerType polygon1, PolygonPointerType polygon2) -{ - bool resp = false; - VertexListConstIteratorType it = polygon1->GetVertexList()->Begin(); - VertexListConstIteratorType it_end = polygon1->GetVertexList()->End(); - - ContinuousIndexType current = it.Value(); - resp = polygon2->IsOnEdge(current); - //std::cout<<"IsOnEdge: "<<current<<": "<<polygon2->IsOnEdge(current)<<std::endl; - ContinuousIndexType first = current; - ++it; - - while (!resp && it != it_end) - { - if (polygon2->NbTouching(current, it.Value()) > 0) - { - resp = true; - //std::cout<<"NbCrossing: "<<current<<" -> "<<it.Value()<<": "<<polygon2->NbCrossing(current, it.Value())<<std::endl; - } - if (polygon2->NbCrossing(current, it.Value()) > 0) - { - resp = true; - //std::cout<<"NbTouching: "<<current<<" -> "<<it.Value()<<": "<<polygon2->NbTouching(current, it.Value())<<std::endl; - } - current = it.Value(); - - if (polygon2->IsOnEdge(current)) - { - resp = true; - //std::cout<<"IsOnEdge: "<<current<<": "<<polygon2->IsOnEdge(current)<<std::endl; - } - ++it; - } - if (!resp && polygon2->NbTouching(current, first) > 0) - { - resp = true; - //std::cout<<"NbCrossing: "<<current<<" -> "<<first<<": "<<polygon2->NbCrossing(current, first)<<std::endl; - } - if (polygon2->NbCrossing(current, first) > 0) - { - resp = true; - //std::cout<<"NbTouching: "<<current<<" -> "<<first<<": "<<polygon2->NbTouching(current, first)<<std::endl; - } - - return resp; -} -/** - * PrintSelf method - */ -template<class TInputPolygon> -void -PolygonToPolygonRCC8Calculator<TInputPolygon> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // end namespace otb - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8Edge.h b/Modules/OBIA/RCC8/include/otbRCC8Edge.h deleted file mode 100644 index e85d8d3c755e5bfb363551519bde0aafaab2ffbd..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8Edge.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8Edge_h -#define otbRCC8Edge_h - -#include "itkDataObject.h" -#include "itkObjectFactory.h" -#include "otbRCC8Value.h" - -namespace otb -{ -/** \class RCC8Edge - * \brief Base class to represent an edge in a RCC8 Graph. - * - * \sa RCC8Graph, RCC8VertexBase - * - * \ingroup OTBRCC8 - */ -class ITK_EXPORT RCC8Edge : public itk::DataObject -{ -public: - /** Standard class typedefs */ - typedef RCC8Edge Self; - typedef itk::DataObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Method for creation through the object factory. */ - itkNewMacro(Self); - /** Run-time type information (and related methods). */ - itkTypeMacro(RCC8Edge, DataObject); - /** RCC8 values typedef */ - typedef RCC8Value RCC8ValueType; - /** RCC8 relation value accessors */ - itkGetMacro(Value, RCC8ValueType); - itkSetMacro(Value, RCC8ValueType); - -protected: - /** Constructor */ - RCC8Edge(); - /** Desctructor */ - ~RCC8Edge() override {} - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - /** The RCC8 value */ - RCC8ValueType m_Value; -}; -} // end namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.h b/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.h deleted file mode 100644 index c7096be92632966c1df05f1c522c0c68f6baa411..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8EdgeIterator_h -#define otbRCC8EdgeIterator_h - -#include "otbRCC8Graph.h" - -namespace otb -{ -/** - * \class RCC8EdgeIterator - * \brief Iterates on the graph edges. - * - * \ingroup OTBRCC8 - */ -template <class TGraph> -class ITK_EXPORT RCC8EdgeIterator -{ -public: - /** self typedef */ - typedef RCC8EdgeIterator Self; - - /** Graph typedef */ - typedef TGraph GraphType; - typedef typename GraphType::InternalGraphType InternalGraphType; - typedef typename GraphType::Pointer GraphPointerType; - typedef typename GraphType::EdgePointerType EdgePointerType; - typedef typename GraphType::VertexPointerType VertexPointerType; - typedef typename GraphType::VertexDescriptorType VertexDescriptorType; - typedef typename GraphType::RCC8ValueType RCC8ValueType; - /** typedef of the internal iterator */ - typedef typename boost::graph_traits<InternalGraphType>::edge_iterator InternalIteratorType; - /** Typedef of the index map */ - typedef typename boost::property_map<InternalGraphType, boost::vertex_index_t>::type IndexMapType; - - /** Constructor */ - RCC8EdgeIterator(); - /** Copy constructor */ - RCC8EdgeIterator(const Self &iter); - /** Constructor with input graph */ - RCC8EdgeIterator(TGraph * graph); - /** - * Get the current edge value. - * \return The value of the current edge pointed by the iterator. - */ - RCC8ValueType GetValue(void); - /** - * Return the source vertex of the current edge. - * \return The source edge. - */ - VertexPointerType GetSourceVertex(void); - /** - * Return the target vertex of the current edge. - * \return The target vertex. - */ - VertexPointerType GetTargetVertex(void); - /** - * Return the source vertex index of the current edge. - * \return The source vertex index. - */ - VertexDescriptorType GetSourceIndex(void); - /** - * Return the target vertex index of the current edge. - * \return The target vertex index. - */ - VertexDescriptorType GetTargetIndex(void); - - /** - * Return true if the iterator is at the end. - * \return True if the iterator is at the end. - */ - bool IsAtEnd(void); - /** - * Go to the beginning. - */ - void GoToBegin(void); - /** - * Increment. - */ - Self& operator ++(); - /** - * Decrement. - */ - Self& operator --(); - /** - * Add - */ - Self& operator +(int i); - - /** - * Remove - */ - Self& operator -(int i); - /** - * Difference comparison operator. - */ - bool operator !=(const Self& it); - /** - * Equality comparison operator. - */ - bool operator ==(const Self& it); - /** - * Instantiation operator. - */ - Self& operator =(const Self& it); -private: - // End - InternalIteratorType m_End; - // Internal iterator. - InternalIteratorType m_Iter; - // Input graph pointer - GraphPointerType m_Graph; -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8EdgeIterator.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.hxx b/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.hxx deleted file mode 100644 index 43989016883e56e95e053e6e547d5b78e0e6ce99..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.hxx +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8EdgeIterator_hxx -#define otbRCC8EdgeIterator_hxx - -#include "otbRCC8EdgeIterator.h" - -namespace otb -{ -/** Constructor */ -template <class TGraph> -RCC8EdgeIterator<TGraph> -::RCC8EdgeIterator() -{ - m_Graph = GraphType::New(); - boost::tuples::tie(m_Iter, m_End) = edges(*m_Graph->GetGraph()); -} -/** - * Copy operator. - */ -template <class TGraph> -RCC8EdgeIterator<TGraph> -::RCC8EdgeIterator(const Self& iter) -{ - m_Iter = iter.m_Iter; - m_Graph = iter.m_Graph; - m_End = iter.m_End; -} -/** - *Constructor with input graph - */ -template <class TGraph> -RCC8EdgeIterator<TGraph> -::RCC8EdgeIterator(TGraph * graph) -{ - m_Graph = graph; - boost::tuples::tie(m_Iter, m_End) = edges(*m_Graph->GetGraph()); -} -/** - * Get the current edge value. - * \return The value of the current edge pointed by the iterator. - */ -template <class TGraph> -typename RCC8EdgeIterator<TGraph> -::RCC8ValueType -RCC8EdgeIterator<TGraph> -::GetValue(void) -{ - return (*m_Graph->GetGraph())[*m_Iter]->GetValue(); -} -/** - * Return the source vertex of the current edge. - * \return The source edge. - */ -template <class TGraph> -typename RCC8EdgeIterator<TGraph> -::VertexPointerType -RCC8EdgeIterator<TGraph> -::GetSourceVertex(void) -{ - return (*m_Graph->GetGraph())[source(*m_Iter, (*m_Graph->GetGraph()))]; -} -/** - * Return the target vertex of the current edge. - * \return The target vertex. - */ -template <class TGraph> -typename RCC8EdgeIterator<TGraph> -::VertexPointerType -RCC8EdgeIterator<TGraph> -::GetTargetVertex(void) -{ - return (*m_Graph->GetGraph())[target(*m_Iter, (*m_Graph->GetGraph()))]; -} -/** - * Return the source vertex index of the current edge. - * \return The source vertex index. - */ -template <class TGraph> -typename RCC8EdgeIterator<TGraph> -::VertexDescriptorType -RCC8EdgeIterator<TGraph> -::GetSourceIndex(void) -{ - IndexMapType index = get(boost::vertex_index, (*m_Graph->GetGraph())); - return index[source(*m_Iter, (*m_Graph->GetGraph()))]; -} -/** - * Return the target vertex index of the current edge. - * \return The target vertex index. - */ -template <class TGraph> -typename RCC8EdgeIterator<TGraph> -::VertexDescriptorType -RCC8EdgeIterator<TGraph> -::GetTargetIndex(void) -{ - IndexMapType index = get(boost::vertex_index, (*m_Graph->GetGraph())); - return index[target(*m_Iter, (*m_Graph->GetGraph()))]; -} -/** - * Return true if the iterator is at the end. - * \return True if the iterator is at the end. - */ -template <class TGraph> -bool -RCC8EdgeIterator<TGraph> -::IsAtEnd(void) -{ - return (m_Iter == m_End); -} -/** - * Go to the beginning. - */ -template <class TGraph> -void -RCC8EdgeIterator<TGraph> -::GoToBegin(void) -{ - boost::tuples::tie(m_Iter, m_End) = edges(*m_Graph->GetGraph()); -} -/** - * Increment. - */ -template <class TGraph> -typename RCC8EdgeIterator<TGraph> -::Self& -RCC8EdgeIterator<TGraph> -::operator++ () - { - ++m_Iter; - return *this; - } -/** - * Decrement. - */ -template <class TGraph> -typename RCC8EdgeIterator<TGraph> -::Self& -RCC8EdgeIterator<TGraph> -::operator-- () - { - --m_Iter; - return *this; - } -/** - * Add - */ -template <class TGraph> -typename RCC8EdgeIterator<TGraph> -::Self& -RCC8EdgeIterator<TGraph> -::operator + (int i) - { - m_Iter = m_Iter + i; - return *this; - } -/** - * Remove - */ -template <class TGraph> -typename RCC8EdgeIterator<TGraph> -::Self& -RCC8EdgeIterator<TGraph> -::operator - (int i) - { - m_Iter = m_Iter - i; - return *this; - } -/** - * Difference comparison operator. - */ -template <class TGraph> -bool -RCC8EdgeIterator<TGraph> -::operator != (const Self &iter) - { - return (m_Iter != iter.m_Iter); - } -/** - * Equality comparison operator. - */ -template <class TGraph> -bool -RCC8EdgeIterator<TGraph> -::operator == (const Self &iter) - { - return (m_Iter == iter.m_Iter); - } -/** - * Instantiation operator. - */ -template <class TGraph> -typename RCC8EdgeIterator<TGraph> -::Self& -RCC8EdgeIterator<TGraph> -::operator = (const Self &iter) - { - m_Iter = iter.m_Iter; - return *this; - } -} // End namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8Graph.h b/Modules/OBIA/RCC8/include/otbRCC8Graph.h deleted file mode 100644 index 9caa3ef59626a55d833fda5aaebebd1b09a28f6e..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8Graph.h +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8Graph_h -#define otbRCC8Graph_h - -#include "otbRCC8Edge.h" - -//fix compilation in VS7.1 for boost 1.42 -//similar to the fix in Monteverdi -#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST -#define BOOST_NO_0X_HDR_INITIALIZER_LIST -#endif - -#include "otb_boost_graph_header.h" - -#include "otbImage.h" -#include "otbImageList.h" - -namespace otb -{ -/** - * \class RCC8Graph - * \brief This class is a data structure designed to store RCC8 Graph - * computed from a pyramidal segmentation. - * - * A batch of boost operation has been embedded in order to provide - * basic functionality such as adding a new edge, or retrieving the - * number of vertices. A method is also provided to retrieve the boost - * graph object, in case more advanced processing is required. One - * should remember that if a peculiar operation is needed for some - * applications, one should provide a patch for this class including - * the new functionnalities, for consistency reason. - * - * \ingroup OTBRCC8 - */ -template <class TVertex> -class ITK_EXPORT RCC8Graph : - public itk::DataObject -{ -public: - /** Standard class typedefs. */ - typedef RCC8Graph Self; - typedef itk::DataObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Method for creation through the object factory. */ - itkNewMacro(Self); - /** Run-time type information (and related methods). */ - itkTypeMacro(RCC8Graph, itk::DataObject); - /** Vertex typedef */ - typedef TVertex VertexType; - typedef typename VertexType::Pointer VertexPointerType; - /** Edge typedef */ - typedef RCC8Edge EdgeType; - typedef typename EdgeType::Pointer EdgePointerType; - typedef typename EdgeType::RCC8ValueType RCC8ValueType; - /** Typedef for the boost graph representation */ - typedef boost::adjacency_list - <boost::vecS, boost::vecS, boost::bidirectionalS, - VertexPointerType, EdgePointerType> InternalGraphType; - /** Edges and vertices descriptors typedefs (boost objects)*/ - typedef typename InternalGraphType::vertex_descriptor VertexDescriptorType; - typedef typename InternalGraphType::edge_descriptor EdgeDescriptorType; - - /** Getters and Setters for the number of vertices */ - itkSetMacro(NumberOfVertices, unsigned int); - itkGetConstReferenceMacro(NumberOfVertices, unsigned int); - - /** - * Return the internal boost graph object. - * \return The internal boost graph object - */ - InternalGraphType * GetGraph(void) - { - return &m_Graph; - } - /** - * Since the number of vertices is mandatory to instantiate the - * internal boost representation, the build method has to be called - * once this parameter is set. - */ - void Build(void); - /** - * Set a vertex. - * \param index The index of the vertex in the graph. - * \param vertex The vertex to set. - */ - void SetVertex(unsigned int index, VertexPointerType vertex); - /** - * Get a vertex. - * \param index The index of the vertex in the graph - * \return The vertex. - */ - VertexPointerType GetVertex(unsigned int index); - /** - * Add an edge in the graph. - * \param index1 The index of the source vertex. - * \param index2 The index of the target vertex. - * \param r The RCC8 value. - */ - void AddEdge(unsigned int index1, unsigned int index2, RCC8ValueType r); - /** - * Get number of edges - * /return The number of edges. - */ - unsigned int GetNumberOfEdges(void); - -protected: - /** Constructor */ - RCC8Graph(); - /** Destructor */ - ~RCC8Graph() override {} - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** - * Initialize a range of vertex. - * \param num The index of the last vertices to initialize. - */ - void InitializeGraph(unsigned int num); - -private: - - /** Defines the number of vertices (ie total number of segmentation regions)*/ - unsigned int m_NumberOfVertices; - /** Internal representation using the boost graph library */ - InternalGraphType m_Graph; -}; -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8Graph.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8Graph.hxx b/Modules/OBIA/RCC8/include/otbRCC8Graph.hxx deleted file mode 100644 index f429442c2dd820447bc547283af733bf68f448b4..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8Graph.hxx +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8Graph_hxx -#define otbRCC8Graph_hxx - -#include "otbRCC8Graph.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TVertex> -RCC8Graph<TVertex> -::RCC8Graph() -{ - m_NumberOfVertices = 0; -} -/** - * since the number of vertices is mandatory to instantiate the - * internal boost representation, the build method has to be called - * once this parameter is set. - */ -template <class TVertex> -void -RCC8Graph<TVertex> -::Build(void) -{ - this->InitializeGraph(m_NumberOfVertices - 1); -} -/** - * Initialize a range of vertex. - * \param num The index of the last vertices to initialize. - */ -template <class TVertex> -void -RCC8Graph<TVertex> -::InitializeGraph(unsigned int num) -{ - for (unsigned int i = boost::num_vertices(m_Graph); i <= num; ++i) - { - VertexDescriptorType id = boost::add_vertex(m_Graph); - VertexPointerType vertex = VertexType::New(); - m_Graph[id] = vertex; - } -} -/** - * Set a vertex. - * \param index The index of the vertex in the graph. - * \param vertex The vertex to set. - */ -template<class TVertex> -void -RCC8Graph<TVertex> -::SetVertex(unsigned int index, VertexPointerType vertex) -{ - if (index >= m_NumberOfVertices) - { - this->InitializeGraph(index); - m_NumberOfVertices = index + 1; - } - VertexDescriptorType v = *boost::vertices(m_Graph).first; - m_Graph[v + index] = vertex; -} -/** - * Get a vertex. - * \param index The index of the vertex in the graph - * \return The vertex. - */ -template <class TVertex> -typename RCC8Graph<TVertex> -::VertexPointerType -RCC8Graph<TVertex> -::GetVertex(unsigned int index) -{ - VertexDescriptorType v = *boost::vertices(m_Graph).first; - return m_Graph[v + index]; -} -/** - * Add an edge in the graph. - * \param index1 The index of the source vertex. - * \param index2 The index of the target vertex. - * \param r The rcc8 value associated to the edge. - */ -template <class TVertex> -void -RCC8Graph<TVertex> -::AddEdge(unsigned int index1, unsigned int index2, RCC8ValueType r) -{ - EdgeDescriptorType e = boost::add_edge(index1, index2, m_Graph).first; - EdgeType::Pointer edge = EdgeType::New(); - edge->SetValue(r); - m_Graph[e] = edge; -} -/** - * Get number of edges - * /return The number of edges. - */ -template <class TVertex> -unsigned int -RCC8Graph<TVertex> -::GetNumberOfEdges(void) -{ - return num_edges(m_Graph); -} -/** - * PrintSelf method - */ -template <class TVertex> -void -RCC8Graph<TVertex> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // end namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.h b/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.h deleted file mode 100644 index 0811898a0c6f4f3cbac0d80d93acb28481578bcd..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8GraphFileReader_h -#define otbRCC8GraphFileReader_h - -#include "otbRCC8GraphSource.h" -#include "itkMacro.h" -#include <string> - -namespace otb -{ -/** \class RCC8GraphFileReaderException - * \brief Base exception class for IO problems during reading. - * - * \ingroup OTBRCC8 - */ -class ITK_EXPORT RCC8GraphFileReaderException - : public itk::ExceptionObject -{ -public: - /** Run-time information. */ - itkTypeMacro(RCC8GraphFileReaderException, ExceptionObject); - - /** Constructor. */ - RCC8GraphFileReaderException(const char *file, unsigned int line, - const char* message = "Error in IO", - const char* loc = "Unknown") : - ExceptionObject(file, line, message, loc) {} - /** Constructor. */ - RCC8GraphFileReaderException(const std::string & file, unsigned int line, - const char* message = "Error in IO", - const char* loc = "Unknown") : - ExceptionObject(file, line, message, loc) {} -}; -/** - * \class RCC8GraphFileReader - * \brief This class reads a RCC8 graph from a .dot file (graphviz format). - * - * The parsing algorithm reads the lines from the file, deciding if the line is - * a vertex or edge line. It then call the correct parse method between ParseEdge - * and ParseVertex. The ParseVertex use builds an AttributesMap and pass it to a new - * vertex. - * - * \sa RCC8GraphFileWriter - * \sa RCC8Graph - * - * \ingroup OTBRCC8 - */ -template <class TOutputGraph> -class ITK_EXPORT RCC8GraphFileReader : public RCC8GraphSource<TOutputGraph> -{ -public: - /** Standards typedef */ - typedef RCC8GraphFileReader Self; - typedef RCC8GraphSource<TOutputGraph> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Creation through the object factory */ - itkNewMacro(Self); - /** Runtime type information */ - itkTypeMacro(RCC8GraphFileReader, RCC8GraphSource); - /** Output related typedefs */ - typedef TOutputGraph OutputGraphType; - typedef typename Superclass::OutputGraphPointerType OutputGraphPointerType; - typedef typename OutputGraphType::VertexType VertexType; - typedef typename VertexType::Pointer VertexPointerType; - typedef typename OutputGraphType::RCC8ValueType RCC8ValueType; - - /** Set the filename */ - itkSetStringMacro(FileName); - /** Get the filename */ - itkGetStringMacro(FileName); - -protected: - /** Constructor */ - RCC8GraphFileReader(); - /** Destructor */ - ~RCC8GraphFileReader() override; - /** Main computation method */ - void GenerateData() override; - /** - * Parse edge information from a given line. - * \param line The line to parse. - */ - void ParseEdge(const std::string& line); - /** - * Parse vertex information from a given line. - * \param line The line to parse. - */ - void ParseVertex(const std::string& line); - - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - /** File name */ - std::string m_FileName; -}; -} -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8GraphFileReader.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.hxx b/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.hxx deleted file mode 100644 index 2bab0d9fc2e0ef0ce2398a2fcadff43e9426a21d..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.hxx +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8GraphFileReader_hxx -#define otbRCC8GraphFileReader_hxx - -#include "otbRCC8GraphFileReader.h" -#include "otbRCC8VertexIterator.h" -#include "otbMacro.h" -#include <fstream> -#include <iostream> -#include <string> - -namespace otb -{ -/** - * Constructor - */ -template <class TOutputGraph> -RCC8GraphFileReader<TOutputGraph> -::RCC8GraphFileReader() -{ - m_FileName = ""; -} -/** - * Destructor - */ -template <class TOutputGraph> -RCC8GraphFileReader<TOutputGraph> -::~RCC8GraphFileReader() -{ -} -/** - * Parse edge information from a given line. - * \param line The line to parse. - */ -template <class TOutputGraph> -void -RCC8GraphFileReader<TOutputGraph> -::ParseEdge(const std::string& line) -{ - typename std::string::size_type pos1 = line.find_first_of(" ", 0); - typename std::string::size_type pos2 = line.find_first_of(" ", pos1 + 1); - typename std::string::size_type pos3 = line.find_first_of(" ", pos2 + 1); - unsigned int source = atoi(line.substr(0, pos1).c_str()); - unsigned int target = atoi(line.substr(pos2 + 1, pos3 - pos2 - 1).c_str()); - typename std::string::size_type pos4 = line.find_first_of("\"", 0); - typename std::string::size_type pos5 = line.find_first_of("\" ", pos4 + 1); - RCC8ValueType value = static_cast<RCC8ValueType>(atoi(line.substr(pos4 + 1, pos5 - pos4 - 1).c_str())); - otbMsgDevMacro(<< "RCC8GraphFileReader: Edge line parsed: " << source << " -> " - << target << " " << value); - this->GetOutput()->AddEdge(source, target, value); -} -/** - * Parse vertex information from a given line. - * \param line The line to parse. - */ -template <class TOutputGraph> -void -RCC8GraphFileReader<TOutputGraph> -::ParseVertex(const std::string& line) -{ - typename VertexType::AttributesMapType attr; - typename std::string::size_type pos = line.find_first_of(" ", 0); - unsigned int index = atoi(line.substr(0, pos).c_str()); - otbMsgDevMacro(<< "RCC8GraphFileReader: Vertex index: " << index); - typename std::string::size_type midPos, nextPos; - - midPos = line.find_first_of("\"", pos + 2); - nextPos = line.find_first_of("\"", midPos + 1); - std::string key, value; - while ((midPos != std::string::npos) && (nextPos != std::string::npos)) - { - key = line.substr(pos + 2, midPos - pos - 3); - value = line.substr(midPos + 1, nextPos - midPos - 1); - attr[key] = value; - otbMsgDevMacro(<< "RCC8GraphFileReader: Vertex attribute: " << key << " " << value); - pos = nextPos; - midPos = line.find_first_of("\"", pos + 2); - nextPos = line.find_first_of("\"", midPos + 1); - } - typename VertexType::Pointer vertex = VertexType::New(); - vertex->SetAttributesMap(attr); - this->GetOutput()->SetVertex(index, vertex); -} - -/** - * Generate data method - */ -template <class TOutputGraph> -void -RCC8GraphFileReader<TOutputGraph> -::GenerateData() -{ - std::ifstream fin; - std::string line; - - // open file input stream - fin.open(m_FileName); - - // Test if the file has been opened correctly - if (!fin) - { - RCC8GraphFileReaderException e(__FILE__, __LINE__); - std::ostringstream msg; - msg << " Could not create IO object for file "; - msg << m_FileName << "." << std::endl; - e.SetDescription(msg.str()); - throw e; - return; - } - - // if so, parse it - while (!fin.eof()) - { - std::getline(fin, line); - if (line.find("->") != std::string::npos) - { - // edge line - this->ParseEdge(line); - } - else if (line.find("[") != std::string::npos) - { - // vertex line - this->ParseVertex(line); - } - } - fin.close(); -} -/** - * PrintSelf method - */ -template <class TInputGraph> -void -RCC8GraphFileReader<TInputGraph> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // end namespace otb - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.h b/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.h deleted file mode 100644 index 4e4284dde3abfd86f2f5dc5a5e996c98d82c924c..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8GraphFileWriter_h -#define otbRCC8GraphFileWriter_h - -#include "itkProcessObject.h" -#include "itkMacro.h" -#include "otbRCC8Graph.h" -#include <string> - -namespace otb -{ -/** \class RCC8GraphFileWriterException - * \brief Base exception class for IO problems during writing. - * - * \ingroup OTBRCC8 - */ -class ITK_EXPORT RCC8GraphFileWriterException - : public itk::ExceptionObject -{ -public: - /** Run-time information. */ - itkTypeMacro(RCC8GraphFileWriterException, ExceptionObject); - - /** Constructor. */ - RCC8GraphFileWriterException(const char *file, unsigned int line, - const char* message = "Error in IO", - const char* loc = "Unknown") : - ExceptionObject(file, line, message, loc) {} - /** Constructor. */ - RCC8GraphFileWriterException(const std::string & file, unsigned int line, - const char* message = "Error in IO", - const char* loc = "Unknown") : - ExceptionObject(file, line, message, loc) {} -}; -/** - * \class RCC8GraphFileWriter - * \brief This class writes a RCC8 Graph to a dot file (graphviz file format). - * - * The writer first loops on the vertices of the graph, getting the property map - * from each vertex and printing it in a line. - * - * It then iterates on the edges of the graphs, printing source index, target index, - * and RCC8 value in a line for each of them. - * - * \sa RCC8GraphFileReader - * \sa RCC8Graph - * - * \ingroup OTBRCC8 - */ -template <class TInputGraph> -class ITK_EXPORT RCC8GraphFileWriter - : public itk::ProcessObject -{ -public: - /** Standards typedefs */ - typedef RCC8GraphFileWriter Self; - typedef itk::ProcessObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Method for creation through the object factory */ - itkNewMacro(Self); - /** Run-time type information (and related methods). */ - itkTypeMacro(RCC8GraphFileWriter, ProcessObject); - /** Typedefs for the output graph type */ - typedef TInputGraph InputGraphType; - typedef typename InputGraphType::Pointer InputGraphPointerType; - typedef typename InputGraphType::VertexType VertexType; - typedef typename VertexType::Pointer VertexPointerType; - typedef typename InputGraphType::VertexDescriptorType VertexDescriptorType; - typedef typename InputGraphType::RCC8ValueType RCC8ValueType; - typedef typename VertexType::AttributesMapType AttributesMapType; - typedef typename AttributesMapType::iterator IteratorType; - - /** Set the filename */ - itkSetStringMacro(FileName); - /** Get the filename */ - itkGetStringMacro(FileName); - - using Superclass::SetInput; - /** - * Set the input graph. - * \param inputGraph The graph to write. - */ - virtual void SetInput(const InputGraphType* inputGraph); - /** - * Get the input graph. - * \return The input graph pointer. - */ - virtual InputGraphPointerType GetInput(); - /** - * Update method. - */ - void Update(void) override; - -protected: - /** Constructor */ - RCC8GraphFileWriter(); - /** Destructor */ - ~RCC8GraphFileWriter() override; - /** - * Main computation method. - */ - void GenerateData(void) override; - /** - * Write Method. - * Performs checkings and invoke GenerateData(). - */ - virtual void Write(void); - /** - * Write an edge to file. - * \param of The output file stream. - * \param source The index of the source vertex. - * \param target The index of the target vertex. - * \param value The value of the edge. - */ - void WriteEdge(std::ofstream& of, VertexDescriptorType source, - VertexDescriptorType target, RCC8ValueType value); - /** - * Write a vertex to file. - * \param of The output file stream. - * \param index The index of the edge to write. - * \param vertex The pointer to the vertex object. - */ - void WriteVertex(std::ofstream& of, VertexDescriptorType index, - VertexPointerType vertex); - /** - * PrintSelf method - */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - /** Filename of the graph file to write */ - std::string m_FileName; -}; -} // namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8GraphFileWriter.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.hxx b/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.hxx deleted file mode 100644 index c864a7c47b9ee4b17f187ad5d0b7059c43cc575a..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.hxx +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8GraphFileWriter_hxx -#define otbRCC8GraphFileWriter_hxx - -#include "otbRCC8GraphFileWriter.h" -#include "otbRCC8VertexIterator.h" -#include "otbRCC8EdgeIterator.h" -#include "otbMacro.h" -#include <fstream> - -namespace otb -{ -/** - * Constructor - */ -template <class TInputGraph> -RCC8GraphFileWriter<TInputGraph> -::RCC8GraphFileWriter() -{ - this->SetNumberOfRequiredInputs(1); - m_FileName = ""; -} -/** - * Destructor - */ -template <class TInputGraph> -RCC8GraphFileWriter<TInputGraph> -::~RCC8GraphFileWriter() -{ -} -/** - * Set the input graph. - * \param graph The graph to write. - */ -template <class TInputGraph> -void -RCC8GraphFileWriter<TInputGraph> -::SetInput(const InputGraphType * graph) -{ - this->itk::ProcessObject::SetNthInput(0, const_cast<TInputGraph *>(graph)); -} -/** - * Get the input graph. - * \return The input graph pointer. - */ -template <class TInputGraph> -typename RCC8GraphFileWriter<TInputGraph> -::InputGraphPointerType -RCC8GraphFileWriter<TInputGraph> -::GetInput(void) -{ - return static_cast<TInputGraph*>(this->itk::ProcessObject::GetInput(0)); -} -/** - * Update method. - * (Call the Write() method). - */ -template <class TInputGraph> -void -RCC8GraphFileWriter<TInputGraph> -::Update(void) -{ - this->Write(); -} -/** - * Write Method. - * Performs checkings and invoke GenerateData(). - */ -template <class TInputGraph> -void -RCC8GraphFileWriter<TInputGraph> -::Write(void) -{ - InputGraphType * input = this->GetInput(); - - itkDebugMacro(<< "Writing a RCC8Graph file"); - - // Make sure input is available - if (input == nullptr) - { - itkExceptionMacro(<< "No input to writer!"); - } - - // Make sure that we can write the file given the name - // - if (m_FileName == "") - { - itkExceptionMacro(<< "No filename was specified"); - } - - // Pipeline updating sequence - input->UpdateOutputInformation(); - input->PropagateRequestedRegion(); - input->UpdateOutputData(); - // GenerateData (actually write file) - this->GenerateData(); -} -/** - * Main computation method. - */ -template <class TInputGraph> -void -RCC8GraphFileWriter<TInputGraph> -::GenerateData() -{ - otbMsgDevMacro(<< "RCC8GraphFileWriter: GenerateData call"); - // input graph pointer - InputGraphPointerType input = this->GetInput(); - - // iterators typedefs - typedef otb::RCC8VertexIterator<InputGraphType> VertexIteratorType; - typedef otb::RCC8EdgeIterator<InputGraphType> EdgeIteratorType; - - // Output file stream - std::ofstream out; - - // open the outputfile - out.open(m_FileName, std::ios::out); - - // Test if the file has been opened correctly - if (!out) - { - RCC8GraphFileWriterException e(__FILE__, __LINE__); - std::ostringstream msg; - msg << " Could not create IO object for file "; - msg << m_FileName << "." << std::endl; - e.SetDescription(msg.str()); - throw e; - return; - } - - // Start writing the graph to file - out << "digraph G {" << std::endl; - - // For each vertex in the graph - VertexIteratorType vIt(input); - for (vIt.GoToBegin(); !vIt.IsAtEnd(); ++vIt) - { - this->WriteVertex(out, vIt.GetIndex(), vIt.Get()); - } - - // For each edge in the graph - EdgeIteratorType eIt(input); - for (eIt.GoToBegin(); !eIt.IsAtEnd(); ++eIt) - { - this->WriteEdge(out, eIt.GetSourceIndex(), - eIt.GetTargetIndex(), - eIt.GetValue()); - } - - // Ends the graph writing - out << "}" << std::endl; - - // Close the file - out.close(); -} -/** - * Write an edge to file. - * \param of The output file stream. - * \param source The index of the source vertex. - * \param target The index of the target vertex. - * \param value The value of the edge. - */ -template <class TInputGraph> -void -RCC8GraphFileWriter<TInputGraph> -::WriteEdge(std::ofstream& of, VertexDescriptorType source, - VertexDescriptorType target, RCC8ValueType value) -{ - otbMsgDevMacro(<< "RCC8GraphFileWriter: WriteEdge call: " << source << " " << target << " " << value); - of << source << " -> " << target << " "; - of << "[Value=\"" << value << "\"];"; - of << std::endl; -} -/** - * Write a vertex to file. - * \param of The output file stream. - * \param index The index of the edge to write. - * \param vertex The pointer to the vertex object. - */ -template <class TInputGraph> -void -RCC8GraphFileWriter<TInputGraph> -::WriteVertex(std::ofstream& of, VertexDescriptorType index, - VertexPointerType vertex) -{ - AttributesMapType attr = vertex->GetAttributesMap(); - otbMsgDevMacro(<< "RCC8GraphFileWriter: WriteVertex call: " << index); - of << index << " ["; - IteratorType it = attr.begin(); - while (it != attr.end()) - { - of << (*it).first << "=\""; - of << (*it).second << "\""; - ++it; - if (it == attr.end()) - { - of << "];" << std::endl; - } - else - { - of << ","; - } - } -} -/** - * PrintSelf method - */ -template <class TInputGraph> -void -RCC8GraphFileWriter<TInputGraph> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.h b/Modules/OBIA/RCC8/include/otbRCC8GraphSource.h deleted file mode 100644 index 2a893e4d6c653c67094e26ef0999723bc278878a..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8GraphSource_h -#define otbRCC8GraphSource_h - -#include "itkProcessObject.h" - -namespace otb -{ -/** \class RCC8GraphSource - * \brief Base class for all the filters producing an otbRCC8Graph - * \ingroup DataSources - * - * \ingroup OTBRCC8 - */ -template <class TOutputGraph> -class ITK_EXPORT RCC8GraphSource - : public itk::ProcessObject -{ -public: - /** Standard typedefs */ - typedef RCC8GraphSource Self; - typedef itk::ProcessObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Type macro */ - itkNewMacro(Self); - /** Creation through object factory macro */ - itkTypeMacro(RCC8GraphSource, itk::ProcessObject); - /** Data object pointer type */ - typedef itk::DataObject::Pointer DataObjectPointer; - /** Template parameter typedef*/ - typedef TOutputGraph OutputGraphType; - typedef typename OutputGraphType::Pointer OutputGraphPointerType; - /** Overriding of the GetOutput() method */ - virtual OutputGraphType * GetOutput(void); - -protected: - /** Constructor */ - RCC8GraphSource(); - /** Destructor */ - ~RCC8GraphSource() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - RCC8GraphSource(const Self &) = delete; - void operator =(const Self&) = delete; -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8GraphSource.hxx" -#endif -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.hxx b/Modules/OBIA/RCC8/include/otbRCC8GraphSource.hxx deleted file mode 100644 index ce8d6b707213701de9078dc906c0d4ecedef81bc..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.hxx +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8GraphSource_hxx -#define otbRCC8GraphSource_hxx - -#include "otbRCC8GraphSource.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TOutputGraph> -RCC8GraphSource<TOutputGraph> -::RCC8GraphSource() -{ - this->Superclass::SetNumberOfRequiredOutputs(1); - this->Superclass::SetNthOutput(0, TOutputGraph::New().GetPointer()); -} -/** - * Get the output Graph - * \return The output graph produced. - */ -template <class TOutputGraph> -typename RCC8GraphSource<TOutputGraph>::OutputGraphType * -RCC8GraphSource<TOutputGraph> -::GetOutput(void) -{ - if (this->GetNumberOfOutputs() < 1) - { - return nullptr; - } - return static_cast<OutputGraphType *> (this->ProcessObject::GetOutput(0)); -} -/** - * PrintSelf Method - */ -template<class TOutputGraph> -void -RCC8GraphSource<TOutputGraph> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.h b/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.h deleted file mode 100644 index 8c3242ed14651805c7eee908bb8edb18a5362ca4..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8InEdgeIterator_h -#define otbRCC8InEdgeIterator_h - -#include "otbRCC8Graph.h" - -namespace otb -{ -/** - * \class RCC8InEdgeIterator - * \brief Iterates on the graph in edges from a vertex. - * - * \ingroup OTBRCC8 - */ -template <class TGraph> -class ITK_EXPORT RCC8InEdgeIterator -{ -public: - /** self typedef */ - typedef RCC8InEdgeIterator Self; - - /** Graph typedef */ - typedef TGraph GraphType; - typedef typename GraphType::InternalGraphType InternalGraphType; - typedef typename GraphType::Pointer GraphPointerType; - typedef typename GraphType::EdgePointerType EdgePointerType; - typedef typename GraphType::VertexPointerType VertexPointerType; - typedef typename GraphType::VertexDescriptorType VertexDescriptorType; - typedef typename GraphType::RCC8ValueType RCC8ValueType; - /** typedef of the internal iterator */ - typedef typename boost::graph_traits<InternalGraphType>::in_edge_iterator InternalIteratorType; - /** Typedef of the index map */ - typedef typename boost::property_map<InternalGraphType, boost::vertex_index_t>::type IndexMapType; - - /** Constructor */ - RCC8InEdgeIterator(); - /** Copy constructor */ - RCC8InEdgeIterator(const Self &iter); - /** Constructor with input graph */ - RCC8InEdgeIterator(VertexDescriptorType vertex, GraphType * graph); - /** - * Get the current edge value. - * \return The value of the current edge pointed by the iterator. - */ - RCC8ValueType GetValue(void); - /** - * Return the source vertex of the current edge. - * \return The source edge. - */ - VertexPointerType GetSourceVertex(void); - /** - * Return the source vertex index of the current edge. - * \return The source vertex index. - */ - VertexDescriptorType GetSourceIndex(void); - /** - * Return true if the iterator is at the end. - * \return True if the iterator is at the end. - */ - bool IsAtEnd(void); - /** - * Go to the beginning. - */ - void GoToBegin(void); - /** - * Increment. - */ - Self& operator ++(); - /** - * Decrement. - */ - Self& operator --(); - /** - * Add - */ - Self& operator +(int i); - - /** - * Remove - */ - Self& operator -(int i); - /** - * Difference comparison operator. - */ - bool operator !=(const Self& it); - /** - * Equality comparison operator. - */ - bool operator ==(const Self& it); - /** - * Instantiation operator. - */ - Self& operator =(const Self& it); -private: - // End - InternalIteratorType m_End; - // Internal iterator. - InternalIteratorType m_Iter; - // Input graph pointer - GraphPointerType m_Graph; - // Target vertex index - VertexDescriptorType m_VertexIndex; -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8InEdgeIterator.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.hxx b/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.hxx deleted file mode 100644 index 5fb34dce81bd7e9f27a2b24dc2e3c851bcce20da..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.hxx +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8InEdgeIterator_hxx -#define otbRCC8InEdgeIterator_hxx - -#include "otbRCC8InEdgeIterator.h" - -namespace otb -{ -/** Constructor */ -template <class TGraph> -RCC8InEdgeIterator<TGraph> -::RCC8InEdgeIterator() -{ - m_Graph = GraphType::New(); - boost::tuples::tie(m_Iter, m_End) = in_edges(0, *m_Graph->GetGraph()); -} -/** - * Copy operator. - */ -template <class TGraph> -RCC8InEdgeIterator<TGraph> -::RCC8InEdgeIterator(const Self& iter) -{ - m_Iter = iter.m_Iter; - m_Graph = iter.m_Graph; - m_VertexIndex = iter.m_VertexIndex; - m_End = iter.m_End; -} -/** - *Constructor with input graph - */ -template <class TGraph> -RCC8InEdgeIterator<TGraph> -::RCC8InEdgeIterator(VertexDescriptorType vertex, GraphType * graph) -{ - m_Graph = graph; - m_VertexIndex = vertex; - boost::tuples::tie(m_Iter, m_End) = in_edges(vertex, *m_Graph->GetGraph()); -} -/** - * Get the current edge value. - * \return The value of the current edge pointed by the iterator. - */ -template <class TGraph> -typename RCC8InEdgeIterator<TGraph> -::RCC8ValueType -RCC8InEdgeIterator<TGraph> -::GetValue(void) -{ - return (*m_Graph->GetGraph())[*m_Iter]->GetValue(); -} -/** - * Return the source vertex of the current edge. - * \return The source edge. - */ -template <class TGraph> -typename RCC8InEdgeIterator<TGraph> -::VertexPointerType -RCC8InEdgeIterator<TGraph> -::GetSourceVertex(void) -{ - return (*m_Graph->GetGraph())[source(*m_Iter, (*m_Graph->GetGraph()))]; -} -/** - * Return the source vertex index of the current edge. - * \return The source vertex index. - */ -template <class TGraph> -typename RCC8InEdgeIterator<TGraph> -::VertexDescriptorType -RCC8InEdgeIterator<TGraph> -::GetSourceIndex(void) -{ - IndexMapType index = get(boost::vertex_index, (*m_Graph->GetGraph())); - return index[source(*m_Iter, (*m_Graph->GetGraph()))]; -} -/** - * Return true if the iterator is at the end. - * \return True if the iterator is at the end. - */ -template <class TGraph> -bool -RCC8InEdgeIterator<TGraph> -::IsAtEnd(void) -{ - return (m_Iter == m_End); -} -/** - * Go to the beginning. - */ -template <class TGraph> -void -RCC8InEdgeIterator<TGraph> -::GoToBegin(void) -{ - boost::tuples::tie(m_Iter, m_End) = in_edges(m_VertexIndex, *m_Graph->GetGraph()); -} -/** - * Increment. - */ -template <class TGraph> -typename RCC8InEdgeIterator<TGraph> -::Self& -RCC8InEdgeIterator<TGraph> -::operator++ () - { - ++m_Iter; - return *this; - } -/** - * Decrement. - */ -template <class TGraph> -typename RCC8InEdgeIterator<TGraph> -::Self& -RCC8InEdgeIterator<TGraph> -::operator-- () - { - --m_Iter; - return *this; - } -/** - * Add - */ -template <class TGraph> -typename RCC8InEdgeIterator<TGraph> -::Self& -RCC8InEdgeIterator<TGraph> -::operator + (int i) - { - m_Iter = m_Iter + i; - return *this; - } -/** - * Remove - */ -template <class TGraph> -typename RCC8InEdgeIterator<TGraph> -::Self& -RCC8InEdgeIterator<TGraph> -::operator - (int i) - { - m_Iter = m_Iter - i; - return *this; - } -/** - * Difference comparison operator. - */ -template <class TGraph> -bool -RCC8InEdgeIterator<TGraph> -::operator != (const Self &iter) - { - return (m_Iter != iter.m_Iter); - } -/** - * Equality comparison operator. - */ -template <class TGraph> -bool -RCC8InEdgeIterator<TGraph> -::operator == (const Self &iter) - { - return (m_Iter == iter.m_Iter); - } -/** - * Instantiation operator. - */ -template <class TGraph> -typename RCC8InEdgeIterator<TGraph> -::Self& -RCC8InEdgeIterator<TGraph> -::operator = (const Self &iter) - { - m_Iter = iter.m_Iter; - return *this; - } -} // End namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.h b/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.h deleted file mode 100644 index 3d22bc092c7d8fcc56d71ccb350faca408442961..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8OutEdgeIterator_h -#define otbRCC8OutEdgeIterator_h - -#include "otbRCC8Graph.h" - -namespace otb -{ -/** - * \class RCC8OutEdgeIterator - * \brief Iterates on the graph out edges from a vertex. - * - * \ingroup OTBRCC8 - */ -template <class TGraph> -class ITK_EXPORT RCC8OutEdgeIterator -{ -public: - /** self typedef */ - typedef RCC8OutEdgeIterator Self; - - /** Graph typedef */ - typedef TGraph GraphType; - typedef typename GraphType::InternalGraphType InternalGraphType; - typedef typename GraphType::Pointer GraphPointerType; - typedef typename GraphType::EdgePointerType EdgePointerType; - typedef typename GraphType::VertexPointerType VertexPointerType; - typedef typename GraphType::VertexDescriptorType VertexDescriptorType; - typedef typename GraphType::RCC8ValueType RCC8ValueType; - /** typedef of the internal iterator */ - typedef typename boost::graph_traits<InternalGraphType>::out_edge_iterator InternalIteratorType; - /** Typedef of the index map */ - typedef typename boost::property_map<InternalGraphType, boost::vertex_index_t>::type IndexMapType; - - /** Constructor */ - RCC8OutEdgeIterator(); - /** Copy constructor */ - RCC8OutEdgeIterator(const Self &iter); - /** Constructor with input graph */ - RCC8OutEdgeIterator(VertexDescriptorType vertex, TGraph * graph); - /** - * Get the current edge value. - * \return The value of the current edge pointed by the iterator. - */ - RCC8ValueType GetValue(void); - /** - * Return the target vertex of the current edge. - * \return The target vertex. - */ - VertexPointerType GetTargetVertex(void); - /** - * Return the target vertex index of the current edge. - * \return The target vertex index. - */ - VertexDescriptorType GetTargetIndex(void); - - /** - * Return true if the iterator is at the end. - * \return True if the iterator is at the end. - */ - bool IsAtEnd(void); - /** - * Go to the beginning. - */ - void GoToBegin(void); - /** - * Increment. - */ - Self& operator ++(); - /** - * Decrement. - */ - Self& operator --(); - /** - * Add - */ - Self& operator +(int i); - /** - * Remove - */ - Self& operator -(int i); - /** - * Difference comparison operator. - */ - bool operator !=(const Self& it); - /** - * Equality comparison operator. - */ - bool operator ==(const Self& it); - /** - * Instantiation operator. - */ - Self& operator =(const Self& it); -private: - // End - InternalIteratorType m_End; - // Internal iterator. - InternalIteratorType m_Iter; - // Input graph pointer - GraphPointerType m_Graph; - // source vertex descriptor - VertexDescriptorType m_VertexIndex; -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8OutEdgeIterator.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.hxx b/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.hxx deleted file mode 100644 index 811e850eda67dcac88f74c85c8f44369b92c413e..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.hxx +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8OutEdgeIterator_hxx -#define otbRCC8OutEdgeIterator_hxx - -#include "otbRCC8OutEdgeIterator.h" - -namespace otb -{ -/** Constructor */ -template <class TGraph> -RCC8OutEdgeIterator<TGraph> -::RCC8OutEdgeIterator() -{ - m_Graph = GraphType::New(); - tie(m_Iter, m_End) = out_edges(0, *m_Graph->GetGraph()); -} -/** - * Copy operator. - */ -template <class TGraph> -RCC8OutEdgeIterator<TGraph> -::RCC8OutEdgeIterator(const Self& iter) -{ - m_Iter = iter.m_Iter; - m_Graph = iter.m_Graph; - m_VertexIndex = iter.m_VertexIndex; - m_End = iter.m_End; -} -/** - *Constructor with input graph - */ -template <class TGraph> -RCC8OutEdgeIterator<TGraph> -::RCC8OutEdgeIterator(VertexDescriptorType vertex, TGraph * graph) -{ - m_Graph = graph; - m_VertexIndex = vertex; - tie(m_Iter, m_End) = out_edges(vertex, *m_Graph->GetGraph()); -} -/** - * Get the current edge value. - * \return The value of the current edge pointed by the iterator. - */ -template <class TGraph> -typename RCC8OutEdgeIterator<TGraph> -::RCC8ValueType -RCC8OutEdgeIterator<TGraph> -::GetValue(void) -{ - return (*m_Graph->GetGraph())[*m_Iter]->GetValue(); -} -/** - * Return the target vertex of the current edge. - * \return The target vertex. - */ -template <class TGraph> -typename RCC8OutEdgeIterator<TGraph> -::VertexPointerType -RCC8OutEdgeIterator<TGraph> -::GetTargetVertex(void) -{ - return (*m_Graph->GetGraph())[target(*m_Iter, (*m_Graph->GetGraph()))]; -} -/** - * Return the target vertex index of the current edge. - * \return The target vertex index. - */ -template <class TGraph> -typename RCC8OutEdgeIterator<TGraph> -::VertexDescriptorType -RCC8OutEdgeIterator<TGraph> -::GetTargetIndex(void) -{ - IndexMapType index = get(boost::vertex_index, (*m_Graph->GetGraph())); - return index[target(*m_Iter, (*m_Graph->GetGraph()))]; -} -/** - * Return true if the iterator is at the end. - * \return True if the iterator is at the end. - */ -template <class TGraph> -bool -RCC8OutEdgeIterator<TGraph> -::IsAtEnd(void) -{ - return (m_Iter == m_End); -} -/** - * Go to the beginning. - */ -template <class TGraph> -void -RCC8OutEdgeIterator<TGraph> -::GoToBegin(void) -{ - tie(m_Iter, m_End) = out_edges(m_VertexIndex, *m_Graph->GetGraph()); -} -/** - * Increment. - */ -template <class TGraph> -typename RCC8OutEdgeIterator<TGraph> -::Self& -RCC8OutEdgeIterator<TGraph> -::operator++ () - { - ++m_Iter; - return *this; - } -/** - * Decrement. - */ -template <class TGraph> -typename RCC8OutEdgeIterator<TGraph> -::Self& -RCC8OutEdgeIterator<TGraph> -::operator-- () - { - --m_Iter; - return *this; - } -/** - * Add - */ -template <class TGraph> -typename RCC8OutEdgeIterator<TGraph> -::Self& -RCC8OutEdgeIterator<TGraph> -::operator + (int i) - { - m_Iter = m_Iter + i; - return *this; - } -/** - * Remove - */ -template <class TGraph> -typename RCC8OutEdgeIterator<TGraph> -::Self& -RCC8OutEdgeIterator<TGraph> -::operator - (int i) - { - m_Iter = m_Iter - i; - return *this; - } -/** - * Difference comparison operator. - */ -template <class TGraph> -bool -RCC8OutEdgeIterator<TGraph> -::operator != (const Self &iter) - { - return (m_Iter != iter.m_Iter); - } -/** - * Equality comparison operator. - */ -template <class TGraph> -bool -RCC8OutEdgeIterator<TGraph> -::operator == (const Self &iter) - { - return (m_Iter == iter.m_Iter); - } -/** - * Instantiation operator. - */ -template <class TGraph> -typename RCC8OutEdgeIterator<TGraph> -::Self& -RCC8OutEdgeIterator<TGraph> -::operator = (const Self &iter) - { - m_Iter = iter.m_Iter; - return *this; - } -} // End namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8Value.h b/Modules/OBIA/RCC8/include/otbRCC8Value.h deleted file mode 100644 index 24bc9c96c1039c35daae218c76ebe8fe233ffee6..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8Value.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8Value_h -#define otbRCC8Value_h - -namespace otb -{ -// Coding enum system to represent the RCC8 relation values. -typedef enum - { - OTB_RCC8_DC, - OTB_RCC8_EC, - OTB_RCC8_PO, - OTB_RCC8_TPP, - OTB_RCC8_TPPI, - OTB_RCC8_NTPP, - OTB_RCC8_NTPPI, - OTB_RCC8_EQ - } -RCC8Value; -} // End namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexBase.h b/Modules/OBIA/RCC8/include/otbRCC8VertexBase.h deleted file mode 100644 index 3876c423319ecb4768529dbaa454a7d1f1e14bb4..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8VertexBase.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8VertexBase_h -#define otbRCC8VertexBase_h - -#include "itkDataObject.h" -#include "itkObjectFactory.h" -#include <cstdlib> - -namespace otb -{ -/** \class RCC8VertexBase - * \brief Base class to represent a vertex in a RCC8 Graph. - * - * This class can be derived to add attributes to the vertices of the - * RCC8 graph. - * - * \sa RCC8Graph, RCC8Edge - * - * \ingroup OTBRCC8 - */ -template <class TPath> -class ITK_EXPORT RCC8VertexBase - : public itk::DataObject -{ -public: - /** Standard class typedefs */ - typedef RCC8VertexBase Self; - typedef itk::DataObject Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Method for creation through the object factory. */ - itkNewMacro(Self); - /** Run-time type information (and related methods). */ - itkTypeMacro(RCC8VertexBase, DataObject); - /** Input image associated typedefs*/ - typedef TPath PathType; - typedef typename PathType::Pointer PathPointerType; - typedef typename PathType::ContinuousIndexType ContinuousIndexType; - - /** char* vector attributes */ - typedef std::map<std::string, std::string> AttributesMapType; - - /** Segmentation image index accessors */ - itkGetMacro(SegmentationLevel, unsigned int); - itkSetMacro(SegmentationLevel, unsigned int); - itkGetMacro(SegmentationType, bool); - itkSetMacro(SegmentationType, bool); - /** Object label in image accessor */ - itkGetObjectMacro(Path, PathType); - itkSetObjectMacro(Path, PathType); - /** - * Set the VertexBase attributes from the attributes vector. - * \param attributes The vector containing the parsed attributes. - */ - virtual void SetAttributesMap(AttributesMapType attributes); - /** - * Get an attributes vector representing the VertexBase attributes. - * \return The attributes vector - */ - virtual AttributesMapType GetAttributesMap(void); - -protected: - /** Constructor */ - RCC8VertexBase(); - /** Desctructor */ - ~RCC8VertexBase() override {} - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - /** The segmentation level */ - unsigned int m_SegmentationLevel; - /** True if bright details, false otherwise */ - bool m_SegmentationType; - /** The path of the edge of the region */ - PathPointerType m_Path; -}; -} // end namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8VertexBase.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexBase.hxx b/Modules/OBIA/RCC8/include/otbRCC8VertexBase.hxx deleted file mode 100644 index 3464483c73676d4ef2b909bc129cfd34058570cb..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8VertexBase.hxx +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8VertexBase_hxx -#define otbRCC8VertexBase_hxx - -#include "otbRCC8VertexBase.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TPath> -RCC8VertexBase<TPath> -::RCC8VertexBase() -{ - m_SegmentationLevel = 0; - m_SegmentationType = true; - m_Path = PathType::New(); - m_Path->Initialize(); -} -/** - * Set the VertexBase attributes from the attributes vector. - * \param attributes The vector containing the parsed attributes. - */ -template <class TPath> -void -RCC8VertexBase<TPath> -::SetAttributesMap(AttributesMapType attributes) -{ - m_SegmentationLevel = static_cast<unsigned int>(atoi(attributes["SegmentationLevel"].c_str())); - m_SegmentationType = static_cast<bool>(atoi(attributes["SegmentationType"].c_str())); - unsigned int nbPoints = static_cast<unsigned int>(atoi(attributes["NumberOfPointsInPath"].c_str())); - - std::ostringstream oss; - - m_Path = PathType::New(); - m_Path->Initialize(); - - for (unsigned int i = 0; i < nbPoints; ++i) - { - ContinuousIndexType newPoint; - oss << "P" << i << "x"; - newPoint[0] = atof(attributes[oss.str()].c_str()); - oss.str(""); - oss << "P" << i << "y"; - newPoint[1] = atof(attributes[oss.str()].c_str()); - oss.str(""); - m_Path->AddVertex(newPoint); - } -} -/** - * Get an attributes vector representing the VertexBase attributes. - * \return The attributes vector - */ -template <class TPath> -typename RCC8VertexBase<TPath>::AttributesMapType -RCC8VertexBase<TPath> -::GetAttributesMap(void) -{ - std::ostringstream oss; - AttributesMapType results; - oss << m_SegmentationLevel; - results["SegmentationLevel"] = oss.str(); - oss.str(""); - oss << m_SegmentationType; - results["SegmentationType"] = oss.str(); - oss.str(""); - oss << m_Path->GetVertexList()->Size(); - results["NumberOfPointsInPath"] = oss.str(); - oss.str(""); - - typename PathType::VertexListType::ConstIterator it; - unsigned int index = 0; - - for (it = m_Path->GetVertexList()->Begin(); it != m_Path->GetVertexList()->End(); ++it, ++index) - { - ContinuousIndexType point = it.Value(); - oss << "P" << index << "x"; - std::string key = oss.str(); - oss.str(""); - oss << point[0]; - results[key] = oss.str(); - oss.str(""); - oss << "P" << index << "y"; - key = oss.str(); - oss.str(""); - oss << point[1]; - results[key] = oss.str(); - oss.str(""); - } - return results; -} -/** - * PrintSelf method - */ -template <class TPath> -void -RCC8VertexBase<TPath> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "SegmentationLevel: " << m_SegmentationLevel << std::endl; - os << indent << "SegmentationType: " << m_SegmentationType << std::endl; -} -} // end namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.h b/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.h deleted file mode 100644 index 51d771e11ae2298f66fdacb4b2ec3c16e7a28cea..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8VertexIterator_h -#define otbRCC8VertexIterator_h - -#include "otbRCC8Graph.h" - -namespace otb -{ -/** - * \class RCC8VertexIterator - * \brief Iterates on the graph vertices - * - * \ingroup OTBRCC8 - */ -template <class TGraph> -class ITK_EXPORT RCC8VertexIterator -{ -public: - /** self typedef */ - typedef RCC8VertexIterator Self; - - /** Graph typedef */ - typedef TGraph GraphType; - typedef typename GraphType::InternalGraphType InternalGraphType; - typedef typename GraphType::Pointer GraphPointerType; - typedef typename GraphType::VertexPointerType VertexPointerType; - typedef typename GraphType::VertexDescriptorType VertexDescriptorType; - /** typedef of the internal iterator */ - typedef typename boost::graph_traits<InternalGraphType>::vertex_iterator InternalIteratorType; - /** Typedef of the index map */ - typedef typename boost::property_map<InternalGraphType, boost::vertex_index_t>::type IndexMapType; - /** Constructor */ - RCC8VertexIterator(); - /** Copy constructor */ - RCC8VertexIterator(const Self &iter); - /** Constructor with input graph */ - RCC8VertexIterator(TGraph * graph); - /** - * Get the current vertex. - * \return The current vertex pointed by the iterator. - */ - VertexPointerType Get(void); - /** - * Set the current vertex. - * \param vertex The vertex to set. - */ - void Set(VertexPointerType vertex); - /** - * Get the current vertex index. - * \return The current vertex index. - */ - VertexDescriptorType GetIndex(void); - /** - * Return true if the iterator is at the end. - * \return True if the iterator is at the end. - */ - bool IsAtEnd(void); - /** - * Go to the beginning. - */ - void GoToBegin(void); - /** - * Increment. - */ - Self& operator ++(); - /** - * Decrement. - */ - Self& operator --(); - /** - * Add - */ - Self& operator +(int i); - - /** - * Remove - */ - Self& operator -(int i); - /** - * Difference comparison operator. - */ - bool operator !=(const Self& it); - /** - * Equality comparison operator. - */ - bool operator ==(const Self& it); - /** - * Instantiation operator. - */ - Self& operator =(const Self& it); -private: - // End - InternalIteratorType m_End; - // Internal iterator. - InternalIteratorType m_Iter; - // Input graph pointer - GraphPointerType m_Graph; -}; -} // End namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8VertexIterator.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.hxx b/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.hxx deleted file mode 100644 index 29d13da47d71fa201169c86f2c03f14a6fddbc21..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.hxx +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8VertexIterator_hxx -#define otbRCC8VertexIterator_hxx - -#include "otbRCC8VertexIterator.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TGraph> -RCC8VertexIterator<TGraph> -::RCC8VertexIterator() -{ - m_Graph = GraphType::New(); - boost::tie(m_Iter, m_End) = boost::vertices(*(m_Graph->GetGraph())); -} -/** - * Copy operator. - */ -template <class TGraph> -RCC8VertexIterator<TGraph> -::RCC8VertexIterator(const Self& iter) -{ - m_Iter = iter.m_Iter; - m_Graph = iter.m_Graph; - m_End = iter.m_End; -} -/** - *Constructor with input graph - */ -template <class TGraph> -RCC8VertexIterator<TGraph> -::RCC8VertexIterator(TGraph * graph) -{ - m_Graph = graph; - boost::tie(m_Iter, m_End) = boost::vertices(*(m_Graph->GetGraph())); -} -/** - * Get the current object. - * \return The current object pointed by the iterator. - */ -template <class TGraph> -typename RCC8VertexIterator<TGraph> -::VertexPointerType -RCC8VertexIterator<TGraph> -::Get(void) -{ - return (*(m_Graph->GetGraph()))[*m_Iter]; -} -/** - * Set the current vertex. - * \param vertex The vertex to set. - */ -template <class TGraph> -void -RCC8VertexIterator<TGraph> -::Set(VertexPointerType vertex) -{ - (*(m_Graph->GetGraph()))[*m_Iter] = vertex; -} -/** - * Get the current vertex index. - * \return The current vertex index. - */ -template <class TGraph> -typename RCC8VertexIterator<TGraph> -::VertexDescriptorType -RCC8VertexIterator<TGraph> -::GetIndex(void) -{ - IndexMapType index = get(boost::vertex_index, (*m_Graph->GetGraph())); - return index[*m_Iter]; -} -/** - * Return true if the iterator is at the end. - * \return True if the iterator is at the end. - */ -template <class TGraph> -bool -RCC8VertexIterator<TGraph> -::IsAtEnd(void) -{ - return (m_Iter == m_End); -} -/** - * Go to the beginning. - */ -template <class TGraph> -void -RCC8VertexIterator<TGraph> -::GoToBegin(void) -{ - boost::tie(m_Iter, m_End) = boost::vertices(*(m_Graph->GetGraph())); -} -/** - * Increment. - */ -template <class TGraph> -typename RCC8VertexIterator<TGraph> -::Self& -RCC8VertexIterator<TGraph> -::operator++ () - { - ++m_Iter; - return *this; - } -/** - * Decrement. - */ -template <class TGraph> -typename RCC8VertexIterator<TGraph> -::Self& -RCC8VertexIterator<TGraph> -::operator-- () - { - --m_Iter; - return *this; - } -/** - * Add - */ -template <class TGraph> -typename RCC8VertexIterator<TGraph> -::Self& -RCC8VertexIterator<TGraph> -::operator + (int i) - { - m_Iter = m_Iter + i; - return *this; - } -/** - * Remove - */ -template <class TGraph> -typename RCC8VertexIterator<TGraph> -::Self& -RCC8VertexIterator<TGraph> -::operator - (int i) - { - m_Iter = m_Iter - i; - return *this; - } -/** - * Difference comparison operator. - */ -template <class TGraph> -bool -RCC8VertexIterator<TGraph> -::operator != (const Self &iter) - { - return (m_Iter != iter.m_Iter); - } -/** - * Equality comparison operator. - */ -template <class TGraph> -bool -RCC8VertexIterator<TGraph> -::operator == (const Self &iter) - { - return (m_Iter == iter.m_Iter); - } -/** - * Instantiation operator. - */ -template <class TGraph> -typename RCC8VertexIterator<TGraph> -::Self& -RCC8VertexIterator<TGraph> -::operator = (const Self &iter) - { - m_Iter = iter.m_Iter; - return *this; - } -} // End namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.h b/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.h deleted file mode 100644 index 8b87a877ad3b3c54111a4f66b9d4dd120cd36a62..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8VertexWithCompacity_h -#define otbRCC8VertexWithCompacity_h - -#include "otbRCC8VertexBase.h" - -namespace otb -{ -/** \class RCC8VertexWithCompacity - * \brief Class to represent a vertex in a RCC8 Graph with the compacity value of - * the represented region. - * - * \sa RCC8Graph, RCC8Edge, RCC8VertexBase - * - * \ingroup OTBRCC8 - */ -template <class TPath, class TPrecision = float> -class ITK_EXPORT RCC8VertexWithCompacity - : public RCC8VertexBase<TPath> -{ -public: - /** Standard class typedefs */ - typedef RCC8VertexWithCompacity Self; - typedef otb::RCC8VertexBase<TPath> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Method for creation through the object factory. */ - itkNewMacro(Self); - /** Run-time type information (and related methods). */ - itkTypeMacro(RCC8VertexWithCompacity, RCC8VertexBase); - /** Input image associated typedefs*/ - typedef TPath PathType; - /** Precision typedef */ - typedef TPrecision PrecisionType; - /** char* vector attributes */ - typedef typename Superclass::AttributesMapType AttributesMapType; - - /** Segmentation image index accessors */ - itkGetMacro(Compacity, PrecisionType); - itkSetMacro(Compacity, PrecisionType); - /** - * Set the VertexWithCompacity attributes from the attributes vector. - * \param attributes The vector containing the parsed attributes. - */ - void SetAttributesMap(AttributesMapType attributes) override; - /** - * Get an attributes vector representing the VertexWithCompacity attributes. - * \return The attributes vector - */ - AttributesMapType GetAttributesMap(void) override; - -protected: - /** Constructor */ - RCC8VertexWithCompacity(); - /** Desctructor */ - ~RCC8VertexWithCompacity() override {} - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - /** The compacity */ - PrecisionType m_Compacity; -}; -} // end namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8VertexWithCompacity.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.hxx b/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.hxx deleted file mode 100644 index 9ad40b3424598407c9686e51f24835f57ff3c6e8..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.hxx +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8VertexWithCompacity_hxx -#define otbRCC8VertexWithCompacity_hxx - -#include "otbRCC8VertexWithCompacity.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TPath, class TPrecision> -RCC8VertexWithCompacity<TPath, TPrecision> -::RCC8VertexWithCompacity() -{ - m_Compacity = 0.0; -} -/** - * Set the VertexWithCompacity attributes from the attributes vector. - * \param attributes The vector containing the parsed attributes. - */ -template <class TPath, class TPrecision> -void -RCC8VertexWithCompacity<TPath, TPrecision> -::SetAttributesMap(AttributesMapType attributes) -{ - this->Superclass::SetAttributesMap(attributes); - m_Compacity = static_cast<TPrecision>(atof(attributes["Compacity"].c_str())); -} -/** - * Get an attributes vector representing the VertexBase attributes. - * \return The attributes vector - */ -template <class TPath, class TPrecision> -typename RCC8VertexWithCompacity<TPath, TPrecision>::AttributesMapType -RCC8VertexWithCompacity<TPath, TPrecision> -::GetAttributesMap(void) -{ - std::stringstream oss; - AttributesMapType results; - results = this->Superclass::GetAttributesMap(); - oss << m_Compacity; - results["Compacity"] = oss.str(); - oss.str(""); - return results; -} -/** - * PrintSelf method - */ -template <class TPath, class TPrecision> -void -RCC8VertexWithCompacity<TPath, TPrecision> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "Compacity: " << m_Compacity << std::endl; -} -} // end namespace otb -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.h b/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.h deleted file mode 100644 index 6916c936f5fb7c376123c59e0801fb9623cd8105..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8VertexWithRegionCenter_h -#define otbRCC8VertexWithRegionCenter_h - -#include "otbRCC8VertexBase.h" - -namespace otb -{ -/** \class RCC8VertexWithRegionCenter - * \brief Class to represent a vertex in a RCC8 Graph with the compacity value of - * the represented region. - * - * \sa RCC8Graph, RCC8Edge, RCC8VertexBase - * - * \ingroup OTBRCC8 - */ -template <class TLabel, class TPrecision = float> -class ITK_EXPORT RCC8VertexWithRegionCenter - : public RCC8VertexBase<TLabel> -{ -public: - /** Standard class typedefs */ - typedef RCC8VertexWithRegionCenter Self; - typedef otb::RCC8VertexBase<TLabel> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - /** Method for creation through the object factory. */ - itkNewMacro(Self); - /** Run-time type information (and related methods). */ - itkTypeMacro(RCC8VertexWithRegionCenter, RCC8VertexBase); - /** Input image associated typedefs*/ - typedef TLabel LabelType; - /** Precision typedef */ - typedef TPrecision PrecisionType; - /** char* vector attributes */ - typedef typename Superclass::AttributesMapType AttributesMapType; - - itkGetMacro(RegionCenterXCoordinate, PrecisionType); - itkSetMacro(RegionCenterXCoordinate, PrecisionType); - itkGetMacro(RegionCenterYCoordinate, PrecisionType); - itkSetMacro(RegionCenterYCoordinate, PrecisionType); - /** - * Set the VertexWithRegionCenter attributes from the attributes vector. - * \param attributes The vector containing the parsed attributes. - */ - void SetAttributesMap(AttributesMapType attributes); - /** - * Get an attributes vector representing the VertexWithRegionCenter attributes. - * \return The attributes vector - */ - AttributesMapType GetAttributesMap(void); - -protected: - /** Constructor */ - RCC8VertexWithRegionCenter(); - /** Desctructor */ - ~RCC8VertexWithRegionCenter() {} - /** PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const; - -private: - /** The compacity */ - PrecisionType m_RegionCenterXCoordinate; - PrecisionType m_RegionCenterYCoordinate; -}; -} // end namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbRCC8VertexWithRegionCenter.hxx" -#endif - -#endif diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.hxx b/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.hxx deleted file mode 100644 index 42f9c3adc5872e069ebefc923dec5faf5578069b..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.hxx +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbRCC8VertexWithRegionCenter_hxx -#define otbRCC8VertexWithRegionCenter_hxx - -#include "otbRCC8VertexWithRegionCenter.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TLabel, class TPrecision> -RCC8VertexWithRegionCenter<TLabel, TPrecision> -::RCC8VertexWithRegionCenter() -{ - m_RegionCenterXCoordinate = 0.0; - m_RegionCenterYCoordinate = 0.0; -} -/** - * Set the VertexWithRegionCenter attributes from the attributes vector. - * \param attributes The vector containing the parsed attributes. - */ -template <class TLabel, class TPrecision> -void -RCC8VertexWithRegionCenter<TLabel, TPrecision> -::SetAttributesMap(AttributesMapType attributes) -{ - this->Superclass::SetAttributesMap(attributes); - m_RegionCenterXCoordinate = static_cast<TPrecision>(atof(attributes["RegionCenterXCoordinate"].c_str())); - m_RegionCenterYCoordinate = static_cast<TPrecision>(atof(attributes["RegionCenterYCoordinate"].c_str())); -} -/** - * Get an attributes vector representing the VertexBase attributes. - * \return The attributes vector - */ -template <class TLabel, class TPrecision> -typename RCC8VertexWithRegionCenter<TLabel, TPrecision>::AttributesMapType -RCC8VertexWithRegionCenter<TLabel, TPrecision> -::GetAttributesMap(void) -{ - std::stringstream oss; - AttributesMapType results; - results = this->Superclass::GetAttributesMap(); - oss << m_RegionCenterXCoordinate; - results["RegionCenterXCoordinate"] = oss.str(); - oss.str(""); - oss << m_RegionCenterYCoordinate; - results["RegionCenterYCoordinate"] = oss.str(); - oss.str(""); - return results; -} -/** - * PrintSelf method - */ -template <class TLabel, class TPrecision> -void -RCC8VertexWithRegionCenter<TLabel, TPrecision> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "RegionCenterXCoordinate: " << m_RegionCenterXCoordinate << std::endl; - os << indent << "RegionCenterXCoordinate: " << m_RegionCenterYCoordinate << std::endl; -} -} // end namespace otb -#endif diff --git a/Modules/OBIA/RCC8/otb-module.cmake b/Modules/OBIA/RCC8/otb-module.cmake deleted file mode 100644 index 5e9a368a74170e6094b54479d9477820fd6e7511..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/otb-module.cmake +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -set(DOCUMENTATION "The region connection calculus (RCC) is used for qualitative -spatial representation and . RCC abstractly describes regions by their possible -relations to each other (8 basic relations are possible between two regions). The -RCC8 constraint language has been popularly adopted by the GIS communities. This -module provides classes related to this purpose.") - -otb_module(OTBRCC8 - DEPENDS - OTBITK - OTBImageBase - OTBRoadExtraction - OTBImageManipulation - OTBPath - OTBCommon - OTBBoostAdapters - OTBObjectList - - TEST_DEPENDS - OTBVectorDataBase - OTBTestKernel - OTBImageIO - - DESCRIPTION - "${DOCUMENTATION}" -) diff --git a/Modules/OBIA/RCC8/src/CMakeLists.txt b/Modules/OBIA/RCC8/src/CMakeLists.txt deleted file mode 100644 index 1b18d1544cc6d894fe150c1c4efa644f2b875ae1..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/src/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -set(OTBRCC8_SRC - otbRCC8Edge.cxx - ) - -add_library(OTBRCC8 ${OTBRCC8_SRC}) -target_link_libraries(OTBRCC8 - ${OTBImageManipulation_LIBRARIES} - ${OTBImageBase_LIBRARIES} - ${OTBCommon_LIBRARIES} - ${OTBBoost_LIBRARIES} - - ) - -otb_module_target(OTBRCC8) diff --git a/Modules/OBIA/RCC8/src/otbRCC8Edge.cxx b/Modules/OBIA/RCC8/src/otbRCC8Edge.cxx deleted file mode 100644 index 361123310263e7d8c2b4165490e2cc799fd21f0a..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/src/otbRCC8Edge.cxx +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#include "otbRCC8Edge.h" - -namespace otb -{ -/** - * Constructor - */ -RCC8Edge::RCC8Edge() -{ - m_Value = OTB_RCC8_DC; -} -/** - * PrintSelf method - */ -void -RCC8Edge::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); - os << indent << "RCC8 Value: " << m_Value << std::endl; -} -} // end namespace otb diff --git a/Modules/OBIA/RCC8/test/CMakeLists.txt b/Modules/OBIA/RCC8/test/CMakeLists.txt deleted file mode 100644 index 72b127feda0de107037af29017097f9bbde8b9c1..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/CMakeLists.txt +++ /dev/null @@ -1,170 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -otb_module_test() - -set(OTBRCC8Tests -otbRCC8TestDriver.cxx -otbRCC8GraphFileReader.cxx -otbRCC8GraphIOEndToEnd.cxx -otbPolygonListToRCC8GraphFilter.cxx -otbRCC8VertexBase.cxx -otbPolygonToPolygonRCC8Calculator.cxx -otbImageToImageRCC8Calculator.cxx -otbRCC8Edge.cxx -otbRCC8VertexWithCompacity.cxx -otbRCC8Graph.cxx -otbRCC8GraphFileWriter.cxx -otbImageMultiSegmentationToRCC8GraphFilter.cxx -) - -add_executable(otbRCC8TestDriver ${OTBRCC8Tests}) -target_link_libraries(otbRCC8TestDriver ${OTBRCC8-Test_LIBRARIES}) -otb_module_target_label(otbRCC8TestDriver) - -# Tests Declaration - -otb_add_test(NAME srTvRCC8GraphFileReader COMMAND otbRCC8TestDriver - otbRCC8GraphFileReader - ${TEMP}/srRCC8GraphWriterOutput1.dot - ) -set_property(TEST srTvRCC8GraphFileReader PROPERTY DEPENDS srTvRCC8GraphFileWriter) - -otb_add_test(NAME srTvRCC8GraphIOEndToEnd COMMAND otbRCC8TestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/srRCC8GraphWriterOutput1.dot - ${TEMP}/srRCC8GraphIOEndToEndOut.dot - otbRCC8GraphIOEndToEnd - ${BASELINE_FILES}/srRCC8GraphWriterOutput1.dot - ${TEMP}/srRCC8GraphIOEndToEndOut.dot - ) - -otb_add_test(NAME srTvPolygonListToRCC8GraphFilter COMMAND otbRCC8TestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/srTvPolygonListToRCC8GraphFilterOutput.dot - ${TEMP}/srTvPolygonListToRCC8GraphFilterOutput.dot - otbPolygonListToRCC8GraphFilter - ${TEMP}/srTvPolygonListToRCC8GraphFilterOutput.dot) - -otb_add_test(NAME srTvRCC8VertexBase COMMAND otbRCC8TestDriver - otbRCC8VertexBase - 5 - 5 - ) - -otb_add_test(NAME srTvPolygonRCC8Calculator COMMAND otbRCC8TestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/srRCC8PolygonToPolygonCalculatorOutput.txt - ${TEMP}/srRCC8PolygonToPolygonCalculatorOutput.txt - otbPolygonToPolygonRCC8Calculator - 4 - ${TEMP}/srRCC8PolygonToPolygonCalculatorOutput.txt - ${INPUTDATA}/rcc8_mire1.png - ${INPUTDATA}/rcc8_mire2.png - ${INPUTDATA}/rcc8_mire3.png - ${INPUTDATA}/rcc8_mire4.png - ) - -otb_add_test(NAME srTvRCC8Calculator COMMAND otbRCC8TestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/srRCC8CalculatorOutput.txt - ${TEMP}/srRCC8CalculatorOutput.txt - otbImageToImageRCC8Calculator - 4 - ${TEMP}/srRCC8CalculatorOutput.txt - ${INPUTDATA}/rcc8_mire1.png - ${INPUTDATA}/rcc8_mire2.png - ${INPUTDATA}/rcc8_mire3.png - ${INPUTDATA}/rcc8_mire4.png - ) - -otb_add_test(NAME srTvRCC8Edge COMMAND otbRCC8TestDriver - otbRCC8Edge - ) - -otb_add_test(NAME srTvRCC8VertexWithCompacity COMMAND otbRCC8TestDriver - otbRCC8VertexWithCompacity - 5 - 5 - 0.125354 - ) - -otb_add_test(NAME srTvRCC8Graph COMMAND otbRCC8TestDriver - otbRCC8Graph - ) - -otb_add_test(NAME srTvRCC8GraphFileWriter COMMAND otbRCC8TestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/srRCC8GraphWriterOutput1.dot - ${TEMP}/srRCC8GraphWriterOutput1.dot - otbRCC8GraphFileWriter - ${TEMP}/srRCC8GraphWriterOutput1.dot - ) - -otb_add_test(NAME srTvMultiSegToRCC8GraphFilter1 COMMAND otbRCC8TestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/srRCC8GraphFilterOutput.dot - ${TEMP}/srRCC8GraphFilterOutput.dot - otbImageMultiSegmentationToRCC8GraphFilter - ${TEMP}/srRCC8GraphFilterOutput.dot - 0 - 2 - ${INPUTDATA}/Seg1InputForRCC8Graph.tif - ${INPUTDATA}/Seg2InputForRCC8Graph.tif - ) - -otb_add_test(NAME srTvMultiSegToRCC8GraphFilter2 COMMAND otbRCC8TestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/srRCC8GraphFilterOutput2.dot - ${TEMP}/srRCC8GraphFilterOutput2.dot - otbImageMultiSegmentationToRCC8GraphFilter - ${TEMP}/srRCC8GraphFilterOutput2.dot - 0 - 3 - ${INPUTDATA}/Seg3InputForRCC8Graph.tif - ${INPUTDATA}/Seg4InputForRCC8Graph.tif - ${INPUTDATA}/Seg5InputForRCC8Graph.tif - ) - -otb_add_test(NAME srTvMultiSegToRCC8GraphFilter2WithOpti COMMAND otbRCC8TestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/srRCC8GraphFilterOutput2.dot - ${TEMP}/srRCC8GraphFilterOutput2WithOpti.dot - otbImageMultiSegmentationToRCC8GraphFilter - ${TEMP}/srRCC8GraphFilterOutput2WithOpti.dot - 1 - 3 - ${INPUTDATA}/Seg3InputForRCC8Graph.tif - ${INPUTDATA}/Seg4InputForRCC8Graph.tif - ${INPUTDATA}/Seg5InputForRCC8Graph.tif - ) - -otb_add_test(NAME srTvMultiSegToRCC8GraphFilter1WithOpti COMMAND otbRCC8TestDriver - --compare-ascii ${NOTOL} - ${BASELINE_FILES}/srRCC8GraphFilterOutput.dot - ${TEMP}/srRCC8GraphFilterOutputWithOpti.dot - otbImageMultiSegmentationToRCC8GraphFilter - ${TEMP}/srRCC8GraphFilterOutputWithOpti.dot - 1 - 2 - ${INPUTDATA}/Seg1InputForRCC8Graph.tif - ${INPUTDATA}/Seg2InputForRCC8Graph.tif - ) - diff --git a/Modules/OBIA/RCC8/test/otbImageMultiSegmentationToRCC8GraphFilter.cxx b/Modules/OBIA/RCC8/test/otbImageMultiSegmentationToRCC8GraphFilter.cxx deleted file mode 100644 index b212a1a3ff8e28f4d3d77959fb6765fdac815625..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbImageMultiSegmentationToRCC8GraphFilter.cxx +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbImageList.h" -#include "otbPolygon.h" -#include "otbRCC8VertexBase.h" -#include "otbImageMultiSegmentationToRCC8GraphFilter.h" -#include "otbImageFileReader.h" -#include "otbRCC8GraphFileWriter.h" - -int otbImageMultiSegmentationToRCC8GraphFilter(int itkNotUsed(argc), char* argv[]) -{ - const unsigned int Dimension = 2; - char * outputFilename = argv[1]; - int useOptimisation = atoi(argv[2]); - unsigned int nbImages = atoi(argv[3]); - - // typedefs - typedef unsigned short LabelPixelType; - typedef otb::Image<LabelPixelType, Dimension> LabelImageType; - typedef otb::Polygon<> PolygonType; - typedef otb::RCC8VertexBase<PolygonType> VertexType; - typedef otb::RCC8Graph<VertexType> RCC8GraphType; - typedef otb::ImageMultiSegmentationToRCC8GraphFilter<LabelImageType, RCC8GraphType> - RCC8GraphFilterType; - typedef otb::ImageList<LabelImageType> ImageListType; - typedef otb::ImageFileReader<LabelImageType> ReaderType; - typedef otb::RCC8GraphFileWriter<RCC8GraphType> GraphWriterType; - - ImageListType::Pointer inputList = ImageListType::New(); - - // Reading input images - for (unsigned int i = 0; i < nbImages; ++i) - { - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(argv[4 + i]); - reader->Update(); - inputList->PushBack(reader->GetOutput()); - } - std::cout << "Input image loaded into images list." << std::endl; - // Instantiation - RCC8GraphFilterType::Pointer filter = RCC8GraphFilterType::New(); - filter->SetInput(inputList); - filter->SetOptimisation(useOptimisation > 0); - - // Writing output graph - GraphWriterType::Pointer writer = GraphWriterType::New(); - writer->SetFileName(outputFilename); - writer->SetInput(filter->GetOutput()); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/test/otbImageToImageRCC8Calculator.cxx b/Modules/OBIA/RCC8/test/otbImageToImageRCC8Calculator.cxx deleted file mode 100644 index 0a5d2e1f1c86ac6317c7c83a35d9711b73904d6c..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbImageToImageRCC8Calculator.cxx +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbImageToImageRCC8Calculator.h" -#include "otbImageList.h" -#include "otbImageFileReader.h" - -int otbImageToImageRCC8Calculator(int itkNotUsed(argc), char* argv[]) -{ - const unsigned int Dimension = 2; - - int nbImages = atoi(argv[1]); - char * outfile = argv[2]; - - typedef unsigned char PixelType; - typedef otb::Image<PixelType, Dimension> ImageType; - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef otb::ImageToImageRCC8Calculator<ImageType> CalculatorType; - typedef otb::ImageList<ImageType> ImageListType; - typedef ImageListType::Iterator IteratorType; - // reference image list - ImageListType::Pointer images = ImageListType::New(); - - // Reading input images - std::ofstream out; - out.open(outfile, std::ios::out); - out << "Test results from otbImageToImageRCC8calculator test." << std::endl; - for (int k = 1; k <= nbImages; ++k) - { - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(argv[2 + k]); - reader->Update(); - images->PushBack(reader->GetOutput()); - } - // Declaration - CalculatorType::Pointer calc, calc1, calc2; - // Computing relations for each images couple - int i = 1; - int j = 1; - for (IteratorType it1 = images->Begin(); it1 != images->End(); ++it1) - { - for (IteratorType it2 = images->Begin(); it2 != images->End(); ++it2) - { - std::cout << "Test: computing relation " << i << "," << j << std::endl; - calc = CalculatorType::New(); - calc->SetInput1(it1.Get()); - calc->SetInput2(it2.Get()); - calc->Update(); - out << calc->GetValue() << "\t"; - - if (calc->GetValue() < 3 - || calc->GetValue() == 4 - || calc->GetValue() == 6) - { - calc1 = CalculatorType::New(); - calc1->SetInput1(it1.Get()); - calc1->SetInput2(it2.Get()); - calc1->SetLevel1APrioriKnowledge(true); - calc1->Update(); - if (calc1->GetValue() != calc->GetValue()) - { - std::cout << "Test failed: Result with level1AprioriKnowledge "; - std::cout << "different from result without a priori knowledge" << std::endl; - std::cout << calc->GetValue() << "!=" << calc1->GetValue() << std::endl; - return EXIT_FAILURE; - } - } - if (calc->GetValue() < 4) - { - calc2 = CalculatorType::New(); - calc2->SetInput1(it1.Get()); - calc2->SetInput2(it2.Get()); - calc2->SetLevel3APrioriKnowledge(true); - calc2->Update(); - if (calc2->GetValue() != calc->GetValue()) - { - std::cout << "Test failed: Result with level3AprioriKnowledge "; - std::cout << "different from result without a priori knowledge" << std::endl; - std::cout << calc->GetValue() << "!=" << calc2->GetValue() << std::endl; - return EXIT_FAILURE; - } - } - ++j; - } - j = 1; - ++i; - out << std::endl; - } - out.close(); - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/test/otbPolygonListToRCC8GraphFilter.cxx b/Modules/OBIA/RCC8/test/otbPolygonListToRCC8GraphFilter.cxx deleted file mode 100644 index fd136fba08b08afb0be9a7e6ed23acf0ca4d9d6c..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbPolygonListToRCC8GraphFilter.cxx +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbPolygon.h" -#include "otbObjectList.h" -#include "otbRCC8VertexBase.h" -#include "otbPolygonListToRCC8GraphFilter.h" -#include "otbRCC8GraphFileWriter.h" - -// typedefs -typedef otb::Polygon<> PolygonType; -typedef otb::ObjectList<PolygonType> PolygonListType; -typedef otb::RCC8VertexBase<PolygonType> VertexType; -typedef otb::RCC8Graph<VertexType> RCC8GraphType; -typedef otb::PolygonListToRCC8GraphFilter<PolygonListType, RCC8GraphType> RCC8GraphFilterType; -typedef otb::RCC8GraphFileWriter<RCC8GraphType> GraphWriterType; - - -PolygonType::VertexType Vertex(double i,double j) -{ - PolygonType::VertexType vertex; - vertex[0] = i; - vertex[1] = j; - - return vertex; -} - - -int otbPolygonListToRCC8GraphFilter(int itkNotUsed(argc), char* argv[]) -{ - char * outfile = argv[1]; - - PolygonListType::Pointer regions = PolygonListType::New(); - - RCC8GraphFilterType::SegmentationRangesType ranges; - - ranges.push_back(0); - - PolygonType::Pointer polygon = PolygonType::New(); - polygon->AddVertex(Vertex(0,0)); - polygon->AddVertex(Vertex(2,0)); - polygon->AddVertex(Vertex(2,6)); - polygon->AddVertex(Vertex(0,6)); - regions->PushBack(polygon); - - polygon = PolygonType::New(); - polygon->AddVertex(Vertex(1,1)); - polygon->AddVertex(Vertex(4,1)); - polygon->AddVertex(Vertex(4,5)); - polygon->AddVertex(Vertex(1,5)); - regions->PushBack(polygon); - - ranges.push_back(2); - - polygon = PolygonType::New(); - polygon->AddVertex(Vertex(3,1)); - polygon->AddVertex(Vertex(4,1)); - polygon->AddVertex(Vertex(4,2)); - polygon->AddVertex(Vertex(3,2)); - regions->PushBack(polygon); - - polygon = PolygonType::New(); - polygon->AddVertex(Vertex(5,1)); - polygon->AddVertex(Vertex(8,1)); - polygon->AddVertex(Vertex(8,5)); - polygon->AddVertex(Vertex(5,5)); - regions->PushBack(polygon); - - ranges.push_back(4); - - polygon = PolygonType::New(); - polygon->AddVertex(Vertex(6,2)); - polygon->AddVertex(Vertex(7,2)); - polygon->AddVertex(Vertex(7,3)); - polygon->AddVertex(Vertex(6,3)); - regions->PushBack(polygon); - - polygon = PolygonType::New(); - polygon->AddVertex(Vertex(8,1)); - polygon->AddVertex(Vertex(9,1)); - polygon->AddVertex(Vertex(9,5)); - polygon->AddVertex(Vertex(8,5)); - regions->PushBack(polygon); - - // Filter instantiation - RCC8GraphFilterType::Pointer filter = RCC8GraphFilterType::New(); - - filter->SetInput(regions); - filter->SetSegmentationRanges(ranges); - - GraphWriterType::Pointer writer = GraphWriterType::New(); - writer->SetInput(filter->GetOutput()); - writer->SetFileName(outfile); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/test/otbPolygonToPolygonRCC8Calculator.cxx b/Modules/OBIA/RCC8/test/otbPolygonToPolygonRCC8Calculator.cxx deleted file mode 100644 index 3f3aa4a6c1f9c203a7e0ae98d4b710a68786c9db..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbPolygonToPolygonRCC8Calculator.cxx +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbPolygonToPolygonRCC8Calculator.h" -#include "otbImageFileReader.h" -#include "otbPolygon.h" -#include "otbImageToEdgePathFilter.h" -#include "otbSimplifyPathListFilter.h" - -int otbPolygonToPolygonRCC8Calculator(int itkNotUsed(argc), char* argv[]) -{ - const unsigned int Dimension = 2; - - int nbImages = atoi(argv[1]); - char * outfile = argv[2]; - - typedef unsigned char PixelType; - typedef otb::Polygon<> PolygonType; - typedef otb::Image<PixelType, Dimension> ImageType; - typedef otb::ImageToEdgePathFilter<ImageType, PolygonType> EdgeExtractionFilterType; - typedef otb::SimplifyPathListFilter<PolygonType> SimplifyPathFilterType; - typedef SimplifyPathFilterType::InputListType PathListType; - typedef otb::ImageFileReader<ImageType> ReaderType; - typedef otb::PolygonToPolygonRCC8Calculator<PolygonType> CalculatorType; - - PolygonType::Pointer path = PolygonType::New(); - - PolygonType::ContinuousIndexType a1, a2, a3, a4, a5, a6, a7; - - a1[0] = 0; - a1[1] = 0; - a2[0] = 10; - a2[1] = 0; - a3[0] = 10; - a3[1] = 10; - a4[0] = 10; - a4[1] = 0; - - a5[0] = 5; - a5[1] = 5; - - a6[0] = 5; - a6[1] = 0; - - a7[0] = 100; - a7[1] = 100; - - path->AddVertex(a1); - path->AddVertex(a2); - path->AddVertex(a3); - path->AddVertex(a4); - - CalculatorType::Pointer calc = CalculatorType::New(); - - typedef PathListType::Iterator IteratorType; - - // reference image list - PathListType::Pointer regions = PathListType::New(); - - // Reading input images - std::ofstream out; - out.open(outfile, std::ios::out); - out << "Test results from otbPolygonToPolygonRCC8calculator test." << std::endl; - for (int cpt = 1; cpt <= nbImages; ++cpt) - { - ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(argv[2 + cpt]); - EdgeExtractionFilterType::Pointer extraction = EdgeExtractionFilterType::New(); - extraction->SetInput(reader->GetOutput()); - extraction->SetForegroundValue(255); - extraction->Update(); - regions->PushBack(extraction->GetOutput()); - } - - SimplifyPathFilterType::Pointer simplifier = SimplifyPathFilterType::New(); - simplifier->SetInput(regions); - simplifier->GetFunctor().SetTolerance(0.1); - simplifier->Update(); - - // Declaration - CalculatorType::Pointer calc1, calc2, calc3; - // Computing relations for each images couple - unsigned int i = 1; - unsigned int j = 1; - for (IteratorType it1 = simplifier->GetOutput()->Begin(); it1 != simplifier->GetOutput()->End(); ++it1) - { - for (IteratorType it2 = simplifier->GetOutput()->Begin(); it2 != simplifier->GetOutput()->End(); ++it2) - { - std::cout << "Test: computing relation " << i << "," << j << std::endl; - calc1 = CalculatorType::New(); - calc1->SetPolygon1(it1.Get()); - calc1->SetPolygon2(it2.Get()); - calc1->Compute(); - out << calc1->GetValue() << "\t"; - std::cout << "Result without a priori knowledge " << calc1->GetValue() << std::endl; - - if (calc1->GetValue() < 3 - || calc1->GetValue() == 4 - || calc1->GetValue() == 6) - { - calc2 = CalculatorType::New(); - calc2->SetPolygon1(it1.Get()); - calc2->SetPolygon2(it2.Get()); - calc2->SetLevel1APrioriKnowledge(true); - calc2->Compute(); - std::cout << "Result with level1 a priori knowledge " << calc2->GetValue() << std::endl; - if (calc2->GetValue() != calc1->GetValue()) - { - std::cout << "Test failed: Result with level1AprioriKnowledge "; - std::cout << "different from result without a priori knowledge" << std::endl; - std::cout << calc1->GetValue() << "!=" << calc2->GetValue() << std::endl; - return EXIT_FAILURE; - } - } - if (calc1->GetValue() < 4) - { - calc3 = CalculatorType::New(); - calc3->SetPolygon1(it1.Get()); - calc3->SetPolygon2(it2.Get()); - calc3->SetLevel3APrioriKnowledge(true); - calc3->Compute(); - std::cout << "Result with level3 a priori knowledge " << calc3->GetValue() << std::endl; - if (calc3->GetValue() != calc1->GetValue()) - { - std::cout << "Test failed: Result with level3AprioriKnowledge "; - std::cout << "different from result without a priori knowledge" << std::endl; - std::cout << calc1->GetValue() << "!=" << calc3->GetValue() << std::endl; - return EXIT_FAILURE; - } - } - ++j; - } - j = 1; - ++i; - out << std::endl; - } - out.close(); - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/test/otbRCC8Edge.cxx b/Modules/OBIA/RCC8/test/otbRCC8Edge.cxx deleted file mode 100644 index 31087db07704262c17156a98e79155651fbbc707..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbRCC8Edge.cxx +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "otbRCC8Edge.h" -#include <cstdlib> - -int otbRCC8Edge(int itkNotUsed(argc), char * itkNotUsed(argv) []) -{ - typedef otb::RCC8Edge RCC8EdgeType; - typedef RCC8EdgeType::RCC8ValueType RCC8ValueType; - RCC8ValueType value = otb::OTB_RCC8_DC; - - // Instantiation - RCC8EdgeType::Pointer edge = RCC8EdgeType::New(); - edge->SetValue(value); - - if (edge->GetValue() != value) - { - std::cout << "Test failed: edge->GetValue()!=value" << std::endl; - return EXIT_FAILURE; - } - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/test/otbRCC8Graph.cxx b/Modules/OBIA/RCC8/test/otbRCC8Graph.cxx deleted file mode 100644 index 47e5bb08efc4b453abf16a9ab4d0c495b80ed239..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbRCC8Graph.cxx +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbRCC8VertexBase.h" -#include "otbRCC8VertexIterator.h" -#include "otbRCC8EdgeIterator.h" -#include "otbRCC8InEdgeIterator.h" -#include "otbRCC8OutEdgeIterator.h" -#include "otbMacro.h" -#include "otbPolygon.h" - -int otbRCC8Graph(int itkNotUsed(argc), char * itkNotUsed(argv) []) -{ - const unsigned int nbVertices = 2; - typedef otb::Polygon<> PathType; - typedef PathType::VertexType PointType; - typedef otb::RCC8VertexBase<PathType> VertexType; - typedef otb::RCC8Graph<VertexType> RCC8GraphType; - typedef otb::RCC8VertexIterator<RCC8GraphType> VertexIteratorType; - typedef otb::RCC8EdgeIterator<RCC8GraphType> EdgeIteratorType; - - // Instantiation - RCC8GraphType::Pointer rcc8Graph = RCC8GraphType::New(); - // Setting the number of vertices - rcc8Graph->SetNumberOfVertices(nbVertices - 1); - // Call to the build method - rcc8Graph->Build(); - - PointType p1, p2, p3, p4, p5, p6; - - p1[0] = 0; - p1[1] = 0; - p2[0] = 10; - p2[1] = 10; - p3[0] = 10; - p3[1] = 0; - p4[0] = 20; - p4[1] = 20; - p5[0] = 20; - p5[1] = 10; - p6[0] = 10; - p6[1] = 20; - - unsigned int vertex1SegLevel = 0; - unsigned int vertex2SegLevel = 10; - bool vertex1SegType = true; - bool vertex2SegType = false; - - PathType::Pointer path1 = PathType::New(); - path1->AddVertex(p1); - path1->AddVertex(p2); - path1->AddVertex(p3); - - VertexType::Pointer vertex1 = VertexType::New(); - vertex1->SetSegmentationLevel(vertex1SegLevel); - vertex1->SetSegmentationType(vertex1SegType); - vertex1->SetPath(path1); - - PathType::Pointer path2 = PathType::New(); - path2->AddVertex(p4); - path2->AddVertex(p5); - path2->AddVertex(p6); - - VertexType::Pointer vertex2 = VertexType::New(); - vertex2->SetSegmentationLevel(vertex2SegLevel); - vertex2->SetSegmentationType(vertex2SegType); - vertex2->SetPath(path2); - - rcc8Graph->SetVertex(0, vertex1); - rcc8Graph->SetVertex(1, vertex2); - - otbControlConditionTestMacro(rcc8Graph->GetNumberOfVertices() != nbVertices, - "rcc8Graph->GetNumberOfVertices()!=nbVertices"); - otbControlConditionTestMacro(rcc8Graph->GetVertex(0)->GetSegmentationLevel() != vertex1SegLevel, - "rcc8Graph->GetVertex(0)->GetSegmentationLevel()!=vertex1SegLevel"); - otbControlConditionTestMacro(rcc8Graph->GetVertex(0)->GetSegmentationType() != vertex1SegType, - "rcc8Graph->GetVertex(0)->GetSegmentationType()!=vertex1SegType"); - otbControlConditionTestMacro(rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(0) != p1, - "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(0)!=p1"); - otbControlConditionTestMacro(rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(1) != p2, - "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(1)!=p2"); - otbControlConditionTestMacro(rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(2) != p3, - "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(2)!=p3"); - otbControlConditionTestMacro(rcc8Graph->GetVertex(1)->GetSegmentationLevel() != vertex2SegLevel, - "rcc8Graph->GetVertex(1)->GetSegmentationLevel()!=vertex2SegLevel"); - otbControlConditionTestMacro(rcc8Graph->GetVertex(1)->GetSegmentationType() != vertex2SegType, - "rcc8Graph->GetVertex(1)->GetObjectLabelInImgage()!=vertex2SegType"); - otbControlConditionTestMacro(rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(0) != p4, - "rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(0)!=p4"); - otbControlConditionTestMacro(rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(1) != p5, - "rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(1)!=p5"); - otbControlConditionTestMacro(rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(2) != p6, - "rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(2)!=p6"); - - VertexIteratorType v(rcc8Graph); - v.GoToBegin(); - otbControlConditionTestMacro(v.Get()->GetSegmentationLevel() != vertex1SegLevel, - "v.Get()->GetSegmentationLevel()!=vertex1SegLevel"); - otbControlConditionTestMacro(v.Get()->GetSegmentationType() != vertex1SegType, - "v.Get()->GetSegmentationType()!=vertex1SegType"); - otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(0) != p1, - "v.Get()->GetPath()->GetVertexList()->GetElement(0)!=p1"); - otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(1) != p2, - "v.Get()->GetPath()->GetVertexList()->GetElement(1)!=p2"); - otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(2) != p3, - "v.Get()->GetPath()->GetVertexList()->GetElement(2)!=p3"); - ++v; - otbControlConditionTestMacro(v.Get()->GetSegmentationLevel() != vertex2SegLevel, - "v.Get()->GetSegmentationLevel()!=vertex2SegLevel"); - otbControlConditionTestMacro(v.Get()->GetSegmentationType() != vertex2SegType, - "v.Get()->GetObjectLabelInImgage()!=vertex2SegType"); - otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(0) != p4, - "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(0)!=p4"); - otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(1) != p5, - "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(1)!=p5"); - otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(2) != p6, - "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(2)!=p6"); - - // Testing the edge iterator - rcc8Graph->AddEdge(0, 1, otb::OTB_RCC8_NTPPI); - - otbControlConditionTestMacro(rcc8Graph->GetNumberOfEdges() != 1, - "rcc8Graph->GetNumberOfEdges()!=1"); - - EdgeIteratorType e(rcc8Graph); - e.GoToBegin(); - otbControlConditionTestMacro(e.GetValue() != otb::OTB_RCC8_NTPPI, - "e.GetValue()!=otb::OTB_RCC8_NTPPI"); - otbControlConditionTestMacro(e.GetSourceIndex() != 0, - "e.GetSourceIndex()!=0"); - otbControlConditionTestMacro(e.GetTargetIndex() != 1, - "e.GetTargetIndex()!=1"); - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/test/otbRCC8GraphFileReader.cxx b/Modules/OBIA/RCC8/test/otbRCC8GraphFileReader.cxx deleted file mode 100644 index 6c6807946062948b332eab371e1f49f47f1eb599..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbRCC8GraphFileReader.cxx +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbRCC8VertexIterator.h" -#include "otbRCC8EdgeIterator.h" -#include "otbRCC8VertexBase.h" -#include "otbRCC8GraphFileReader.h" -#include "otbMacro.h" -#include "otbPolygon.h" - -int otbRCC8GraphFileReader(int itkNotUsed(argc), char* argv[]) -{ - char * inputFilename = argv[1]; - typedef otb::Polygon<> PathType; - typedef otb::RCC8VertexBase<PathType> VertexType; - typedef otb::RCC8Graph<VertexType> RCC8GraphType; - typedef otb::RCC8GraphFileReader<RCC8GraphType> RCC8GraphFileReaderType; - typedef otb::RCC8VertexIterator<RCC8GraphType> VertexIteratorType; - typedef otb::RCC8EdgeIterator<RCC8GraphType> EdgeIteratorType; - - // Instantiation - RCC8GraphFileReaderType::Pointer rcc8GraphReader = RCC8GraphFileReaderType::New(); - rcc8GraphReader->SetFileName(inputFilename); - - rcc8GraphReader->Update(); - - // Getting the output graph - RCC8GraphType::Pointer graph = rcc8GraphReader->GetOutput(); - - // Checking vertices - VertexIteratorType vIt(graph); - unsigned int count = 0; - - otbControlConditionTestMacro(graph->GetNumberOfVertices() != 4, - "graph->GetNumberOfVertices()!=4"); - otbControlConditionTestMacro(graph->GetNumberOfEdges() != 6, - "graph->GetNumberOfEdges()!=6"); - - // Checking edges - EdgeIteratorType eIt(graph); - count = 0; - for (eIt.GoToBegin(); !eIt.IsAtEnd(); ++eIt, ++count) - { - switch (count) - { - case 0: - otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_EC, - "eIt.GetValue()!=otb::OTB_RCC8_EC"); - otbControlConditionTestMacro(eIt.GetSourceIndex() != 0, - "eIt.GetSourceIndex()!=0"); - otbControlConditionTestMacro(eIt.GetTargetIndex() != 1, - "eIt.GetTargetIndex()!=1"); - break; - case 1: - otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_PO, - "eIt.GetValue()!=otb::OTB_RCC8_PO"); - otbControlConditionTestMacro(eIt.GetSourceIndex() != 1, - "eIt.GetSourceIndex()!=1"); - otbControlConditionTestMacro(eIt.GetTargetIndex() != 2, - "eIt.GetTargetIndex()!=2"); - break; - case 2: - otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_TPP, - "eIt.GetValue()!=otb::OTB_RCC8_TPP"); - otbControlConditionTestMacro(eIt.GetSourceIndex() != 2, - "eIt.GetSourceIndex()!=2"); - otbControlConditionTestMacro(eIt.GetTargetIndex() != 3, - "eIt.GetTargetIndex()!=3"); - break; - case 3: - otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_TPPI, - "eIt.GetValue()!=otb::OTB_RCC8_TPPI"); - otbControlConditionTestMacro(eIt.GetSourceIndex() != 0, - "eIt.GetSourceIndex()!=0"); - otbControlConditionTestMacro(eIt.GetTargetIndex() != 2, - "eIt.GetTargetIndex()!=2"); - break; - case 4: - otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_NTPP, - "eIt.GetValue()!=otb::OTB_RCC8_NTPP"); - otbControlConditionTestMacro(eIt.GetSourceIndex() != 1, - "eIt.GetSourceIndex()!=1"); - otbControlConditionTestMacro(eIt.GetTargetIndex() != 3, - "eIt.GetTargetIndex()!=3"); - break; - case 5: - otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_NTPPI, - "eIt.GetValue()!=otb::OTB_RCC8_NTPPI"); - otbControlConditionTestMacro(eIt.GetSourceIndex() != 0, - "eIt.GetSourceIndex()!=0"); - otbControlConditionTestMacro(eIt.GetTargetIndex() != 3, - "eIt.GetTargetIndex()!=3"); - break; - default: - otbControlConditionTestMacro(true, "Error in graph reading."); - break; - } - } - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/test/otbRCC8GraphFileWriter.cxx b/Modules/OBIA/RCC8/test/otbRCC8GraphFileWriter.cxx deleted file mode 100644 index 943183126a0653768d444a6c7ba0221443947b3c..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbRCC8GraphFileWriter.cxx +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbRCC8VertexBase.h" -#include "otbRCC8GraphFileWriter.h" -#include "otbPolygon.h" - -int otbRCC8GraphFileWriter(int itkNotUsed(argc), char* argv[]) -{ - const char * outputFile = argv[1]; - - typedef otb::Polygon<> PathType; - typedef otb::RCC8VertexBase<PathType> VertexType; - typedef otb::RCC8Graph<VertexType> RCC8GraphType; - typedef otb::RCC8GraphFileWriter<RCC8GraphType> RCC8GraphFileWriterType; - - // Graph instantiation - RCC8GraphType::Pointer rcc8Graph = RCC8GraphType::New(); - rcc8Graph->SetNumberOfVertices(4); - rcc8Graph->Build(); - - // Vertex filling - PathType::Pointer path = PathType::New(); - path->Initialize(); - - PathType::ContinuousIndexType p1, p2, p3; - - p1[0] = 0; - p1[1] = 0; - - p2[0] = 10; - p2[1] = 10; - - p3[0] = -5; - p3[1] = 2; - - path->AddVertex(p1); - path->AddVertex(p2); - path->AddVertex(p3); - - VertexType::Pointer vertex1, vertex2, vertex3, vertex4; - vertex1 = VertexType::New(); - vertex1->SetSegmentationLevel(0); - vertex1->SetSegmentationType(0); - vertex1->SetPath(path); - rcc8Graph->SetVertex(0, vertex1); - - vertex2 = VertexType::New(); - vertex2->SetSegmentationLevel(1); - vertex2->SetSegmentationType(1); - vertex2->SetPath(path); - rcc8Graph->SetVertex(1, vertex2); - - vertex3 = VertexType::New(); - vertex3->SetSegmentationLevel(2); - vertex3->SetSegmentationType(0); - vertex3->SetPath(path); - rcc8Graph->SetVertex(2, vertex3); - - vertex4 = VertexType::New(); - vertex4->SetSegmentationLevel(3); - vertex4->SetSegmentationType(0); - vertex4->SetPath(path); - rcc8Graph->SetVertex(3, vertex4); - - // Edge filling - rcc8Graph->AddEdge(0, 1, otb::OTB_RCC8_EC); - rcc8Graph->AddEdge(1, 2, otb::OTB_RCC8_PO); - rcc8Graph->AddEdge(2, 3, otb::OTB_RCC8_TPP); - rcc8Graph->AddEdge(0, 2, otb::OTB_RCC8_TPPI); - rcc8Graph->AddEdge(1, 3, otb::OTB_RCC8_NTPP); - rcc8Graph->AddEdge(0, 3, otb::OTB_RCC8_NTPPI); - - // Instantiation - RCC8GraphFileWriterType::Pointer rcc8GraphWriter - = RCC8GraphFileWriterType::New(); - rcc8GraphWriter->SetFileName(outputFile); - rcc8GraphWriter->SetInput(rcc8Graph); - rcc8GraphWriter->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/test/otbRCC8GraphIOEndToEnd.cxx b/Modules/OBIA/RCC8/test/otbRCC8GraphIOEndToEnd.cxx deleted file mode 100644 index 2e274dac4c304505e2b28b82a530fce9d4a45bc9..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbRCC8GraphIOEndToEnd.cxx +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbRCC8VertexBase.h" -#include "otbRCC8GraphFileReader.h" -#include "otbRCC8GraphFileWriter.h" -#include "otbPolygon.h" - -int otbRCC8GraphIOEndToEnd(int itkNotUsed(argc), char* argv[]) -{ - char * inputFilename = argv[1]; - char * outputFilename = argv[2]; - typedef otb::Polygon<> PathType; - typedef otb::RCC8VertexBase<PathType> VertexType; - typedef otb::RCC8Graph<VertexType> RCC8GraphType; - typedef otb::RCC8GraphFileReader<RCC8GraphType> RCC8GraphFileReaderType; - typedef otb::RCC8GraphFileWriter<RCC8GraphType> RCC8GraphFileWriterType; - - // End to end test - RCC8GraphFileReaderType::Pointer rcc8GraphReader = RCC8GraphFileReaderType::New(); - rcc8GraphReader->SetFileName(inputFilename); - RCC8GraphFileWriterType::Pointer rcc8GraphWriter = RCC8GraphFileWriterType::New(); - rcc8GraphWriter->SetInput(rcc8GraphReader->GetOutput()); - rcc8GraphWriter->SetFileName(outputFilename); - rcc8GraphWriter->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/test/otbRCC8TestDriver.cxx b/Modules/OBIA/RCC8/test/otbRCC8TestDriver.cxx deleted file mode 100644 index 8a060d25bf7c343f4a8daa8d4e93f7415bae2507..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbRCC8TestDriver.cxx +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbTestMain.h" - -void RegisterTests() -{ - REGISTER_TEST(otbRCC8GraphFileReader); - REGISTER_TEST(otbRCC8GraphIOEndToEnd); - REGISTER_TEST(otbPolygonListToRCC8GraphFilter); - REGISTER_TEST(otbRCC8VertexBase); - REGISTER_TEST(otbPolygonToPolygonRCC8Calculator); - REGISTER_TEST(otbImageToImageRCC8Calculator); - REGISTER_TEST(otbRCC8Edge); - REGISTER_TEST(otbRCC8VertexWithCompacity); - REGISTER_TEST(otbRCC8Graph); - REGISTER_TEST(otbRCC8GraphFileWriter); - REGISTER_TEST(otbImageMultiSegmentationToRCC8GraphFilter); -} diff --git a/Modules/OBIA/RCC8/test/otbRCC8VertexBase.cxx b/Modules/OBIA/RCC8/test/otbRCC8VertexBase.cxx deleted file mode 100644 index 6578e4f6ae038cad1485118ed773f18f7c757222..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbRCC8VertexBase.cxx +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbRCC8VertexBase.h" -#include "otbPolygon.h" -#include "otbMacro.h" - -int otbRCC8VertexBase(int itkNotUsed(argc), char* argv[]) -{ - typedef otb::Polygon<> PathType; - unsigned int imageLevel = atoi(argv[1]); - bool imageType = atoi(argv[2]); - typedef otb::RCC8VertexBase<PathType> RCC8VertexType; - typedef RCC8VertexType::AttributesMapType AttributesMapType; - // Instantiation - RCC8VertexType::Pointer vertex1 = RCC8VertexType::New(); - - PathType::Pointer path = PathType::New(); - path->Initialize(); - - PathType::ContinuousIndexType p1, p2, p3; - - p1[0] = 0; - p1[1] = 0; - - p2[0] = 10; - p2[1] = 10; - - p3[0] = -5; - p3[1] = 2; - - path->AddVertex(p1); - path->AddVertex(p2); - path->AddVertex(p3); - - // Getters / setters tests - vertex1->SetSegmentationLevel(imageLevel); - vertex1->SetSegmentationType(imageType); - vertex1->SetPath(path); - - otbControlConditionTestMacro(vertex1->GetSegmentationLevel() != imageLevel, - "Test failed: vertex1->GetSegmentationLevel()!=imageLevel"); - otbControlConditionTestMacro(vertex1->GetSegmentationType() != imageType, - "Test failed: vertex1->GetSegmentationType()!=imageType"); - - otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(0) != p1, - "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(0)!=p1"); - otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(1) != p2, - "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(1)!=p2"); - otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(2) != p3, - "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(2)!=p3"); - - // attributes vector set test - AttributesMapType attr1 = vertex1->GetAttributesMap(); - otbControlConditionTestMacro(attr1["SegmentationLevel"].compare(std::string(argv[1])) != 0, - "Test failed: vertex1->GetAttributesMap()[\"SegmentationLevel\"]!=std::string(argv[1])"); - otbControlConditionTestMacro(atoi(attr1["SegmentationType"].c_str()) != static_cast<int>(imageType), - "Test failed:atoi(attr1[\"SegmentationType\"].c_str())!=imageType "); - - otbControlConditionTestMacro(atof(attr1["P0x"].c_str()) != p1[0], - "Test failed: atof(attr1[\"P0x\"].c_str())!=p1[0]"); - otbControlConditionTestMacro(atof(attr1["P0y"].c_str()) != p1[1], - "Test failed: atof(attr1[\"P0y\"].c_str())!=p1[1]"); - otbControlConditionTestMacro(atof(attr1["P1x"].c_str()) != p2[0], - "Test failed: atof(attr1[\"P1x\"].c_str())!=p2[0]"); - otbControlConditionTestMacro(atof(attr1["P1y"].c_str()) != p2[1], - "Test failed: atof(attr1[\"P1y\"].c_str())!=p2[1]"); - otbControlConditionTestMacro(atof(attr1["P2x"].c_str()) != p3[0], - "Test failed: atof(attr1[\"P2x\"].c_str())!=p3[0]"); - otbControlConditionTestMacro(atof(attr1["P2y"].c_str()) != p3[1], - "Test failed: atof( attr1[\"P2y\"].c_str())!=p3[1]"); - - // attributes vector get test - RCC8VertexType::Pointer vertex2 = RCC8VertexType::New(); - vertex2->SetAttributesMap(attr1); - otbControlConditionTestMacro(vertex1->GetSegmentationLevel() != vertex2->GetSegmentationLevel(), - "Test failed: vertex1->GetSegmentationLevel()!=vertex2->GetSegmentationLevel()"); - otbControlConditionTestMacro(vertex1->GetSegmentationType() != vertex2->GetSegmentationType(), - "Test failed: vertex1->GetSegmentationType()!=vertex2->GetSegmentationType()"); - - otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(0) != p1, - "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(0)!=p1"); - otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(1) != p2, - "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(1)!=p2"); - otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(2) != p3, - "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(2)!=p3"); - - return EXIT_SUCCESS; -} diff --git a/Modules/OBIA/RCC8/test/otbRCC8VertexWithCompacity.cxx b/Modules/OBIA/RCC8/test/otbRCC8VertexWithCompacity.cxx deleted file mode 100644 index 697aeda75e5b83da812d4ff32e112d5d88f34e70..0000000000000000000000000000000000000000 --- a/Modules/OBIA/RCC8/test/otbRCC8VertexWithCompacity.cxx +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbRCC8VertexWithCompacity.h" -#include "otbMacro.h" -#include "otbPolygon.h" - -int otbRCC8VertexWithCompacity(int itkNotUsed(argc), char* argv[]) -{ - typedef otb::Polygon<> PathType; - typedef double PrecisionType; - - unsigned int imageLevel = atoi(argv[1]); - bool imageType = atoi(argv[2]); - PrecisionType compacity = atof(argv[3]); - - typedef otb::RCC8VertexWithCompacity<PathType, PrecisionType> RCC8VertexType; - typedef RCC8VertexType::AttributesMapType AttributesMapType; - // Instantiation - RCC8VertexType::Pointer vertex1 = RCC8VertexType::New(); - - PathType::Pointer path = PathType::New(); - path->Initialize(); - - PathType::ContinuousIndexType p1, p2, p3; - - p1[0] = 0; - p1[1] = 0; - - p2[0] = 10; - p2[1] = 10; - - p3[0] = -5; - p3[1] = 2; - - path->AddVertex(p1); - path->AddVertex(p2); - path->AddVertex(p3); - - // Getters / setters tests - vertex1->SetSegmentationLevel(imageLevel); - vertex1->SetSegmentationType(imageType); - vertex1->SetPath(path); - vertex1->SetCompacity(compacity); - - otbControlConditionTestMacro(vertex1->GetSegmentationLevel() != imageLevel, - "Test failed: vertex1->GetSegmentationLevel()!=imageLevel"); - otbControlConditionTestMacro(vertex1->GetSegmentationType() != imageType, - "Test failed: vertex1->GetSegmentationType()!=imageType"); - - otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(0) != p1, - "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(0)!=p1"); - otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(1) != p2, - "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(1)!=p2"); - otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(2) != p3, - "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(2)!=p3"); - otbControlConditionTestMacro(vertex1->GetCompacity() != compacity, - "Test failed: vertex1->GetSegmentationImageIndex()!=imageIndex"); - // attributes vector set test - AttributesMapType attr1 = vertex1->GetAttributesMap(); - - std::ostringstream oss; - oss << p1[0]; - otbControlConditionTestMacro(attr1["P0x"].compare(oss.str()) != 0, - "Test failed:attr1[\"P0x\"].compare(std::string(p1[0]))!=0"); - oss.str(""); - oss << p1[1]; - otbControlConditionTestMacro(attr1["P0y"].compare(oss.str()) != 0, - "Test failed:attr1[\"P0y\"].compare(std::string(p1[1]))!=0"); - oss.str(""); - oss << p2[0]; - otbControlConditionTestMacro(attr1["P1x"].compare(oss.str()) != 0, - "Test failed:attr1[\"P1x\"].compare(std::string(p2[0]))!=0"); - oss.str(""); - oss << p2[1]; - otbControlConditionTestMacro(attr1["P1y"].compare(oss.str()) != 0, - "Test failed:attr1[\"P1y\"].compare(std::string(p2[1]))!=0"); - oss.str(""); - oss << p3[0]; - otbControlConditionTestMacro(attr1["P2x"].compare(oss.str()) != 0, - "Test failed:attr1[\"P2x\"].compare(std::string(p3[0]))!=0"); - oss.str(""); - oss << p3[1]; - otbControlConditionTestMacro(attr1["P2y"].compare(oss.str()) != 0, - "Test failed:attr1[\"P2y\"].compare(std::string(p3[1]))!=0"); - - otbControlConditionTestMacro(attr1["Compacity"].compare(std::string(argv[3])) != 0, - "Test failed: vertex1->GetAttributesMap()[\"Compacity\"]!=std::string(argv[2])"); - // attributes vector get test - RCC8VertexType::Pointer vertex2 = RCC8VertexType::New(); - vertex2->SetAttributesMap(attr1); - otbControlConditionTestMacro(vertex1->GetSegmentationLevel() != vertex2->GetSegmentationLevel(), - "Test failed: vertex1->GetSegmentationLevel()!=vertex2->GetSegmentationLevel()"); - otbControlConditionTestMacro(vertex1->GetSegmentationType() != vertex2->GetSegmentationType(), - "Test failed: vertex1->GetSegmentationType()!=vertex2->GetSegmentationType()"); - - otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(0) != p1, - "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(0)!=p1"); - otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(1) != p2, - "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(1)!=p2"); - otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(2) != p3, - "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(2)!=p3"); - otbControlConditionTestMacro(vertex1->GetCompacity() != vertex2->GetCompacity(), - "Test failed: vertex1->GetCompacity()!=vertex2->GetCompacity()"); - - return EXIT_SUCCESS; -} diff --git a/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.h b/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.h deleted file mode 100644 index 9d17e0198a0af4e365c7af5747f8edd91e1bb1ad..0000000000000000000000000000000000000000 --- a/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNDVIDataNodeFeatureFunction_h -#define otbNDVIDataNodeFeatureFunction_h - -#include "otbDataNodeImageFunction.h" - -#include "otbVegetationIndicesFunctor.h" -#include "otbPolyLineImageConstIterator.h" - -namespace otb -{ -/** \class NDVIDataNodeFeatureFunction - * \brief Compute a NDVI based feature alongside a - * datanode. - * - * This function compute a feature alongside a datanode. - * The feature is (NDVI >= threshold) per cent along the - * tested datanode. - * - * \ingroup Functions - * \sa DataNodeImageFunction - * \sa SpectralAngleDataNodeFeatureFunction - * - * \ingroup OTBIndices - */ - -template < -class TImage, -class TCoordRep = double, -class TPrecision = double -> -class ITK_EXPORT NDVIDataNodeFeatureFunction : - public DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision> -{ -public: - /** Standard class typedefs. */ - typedef NDVIDataNodeFeatureFunction Self; - typedef DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision> - Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(NDVIDataNodeFeatureFunction, DataNodeImageFunction); - - /** Some typedefs. */ - typedef typename Superclass::DataNodeType DataNodeType; - typedef typename DataNodeType::LineType LineType; - - typedef TImage InputImageType; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - typedef typename InputImageType::PixelType PixelType; - typedef typename InputImageType::InternalPixelType ScalarRealType; - typedef typename InputImageType::IndexType IndexType; - typedef typename InputImageType::IndexValueType IndexValueType; - - typedef TCoordRep CoordRepType; - - typedef TPrecision PrecisionType; - - typedef PolyLineImageConstIterator<InputImageType, LineType> - ImageLineIteratorType; - - typedef Functor::NDVI<ScalarRealType, ScalarRealType> NDVIFunctorType; - - typedef std::vector<PrecisionType> OutputType; - - OutputType Evaluate( const DataNodeType& node ) const override; - - /** Set/Get methods */ - itkGetConstMacro(NDVIThreshold, PrecisionType); - itkSetMacro(NDVIThreshold, PrecisionType); - - //TODO replace by metadata parsing - unsigned int GetREDChannelIndex() const - { - return m_NDVIFunctor.GetBandIndex(CommonBandNames::RED); - } - - void SetREDChannelIndex(unsigned int id) - { - m_NDVIFunctor.SetBandIndex(CommonBandNames::RED, id); - } - - unsigned int GetNIRChannelIndex() const - { - return m_NDVIFunctor.GetBandIndex(CommonBandNames::NIR); - } - - void SetNIRChannelIndex(unsigned int id) - { - m_NDVIFunctor.SetBandIndex(CommonBandNames::NIR, id); - } - -protected: - NDVIDataNodeFeatureFunction(); - ~NDVIDataNodeFeatureFunction() override {} - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - NDVIDataNodeFeatureFunction(const Self&) = delete; - void operator=(const Self&) = delete; - - /** NDVI Threshold & Functor */ - PrecisionType m_NDVIThreshold; - NDVIFunctorType m_NDVIFunctor; -}; - -} -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbNDVIDataNodeFeatureFunction.hxx" -#endif - -#endif diff --git a/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.hxx b/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.hxx deleted file mode 100644 index f6f33564d5c29ed8cec88bf73b4a6445df28c076..0000000000000000000000000000000000000000 --- a/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.hxx +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNDVIDataNodeFeatureFunction_hxx -#define otbNDVIDataNodeFeatureFunction_hxx - -#include "otbNDVIDataNodeFeatureFunction.h" - -namespace otb -{ - -/** - * Constructor - */ -template <class TImage, class TCoordRep, class TPrecision> -NDVIDataNodeFeatureFunction<TImage, TCoordRep, TPrecision> -::NDVIDataNodeFeatureFunction() -{ - m_NDVIThreshold = 0.3; //Advised for QuickBird images - this->SetREDChannelIndex(3); //for QuickBird images - this->SetNIRChannelIndex(4); //for QuickBird images -} - -/** - * Standard "PrintSelf" method - */ -template <class TImage, class TCoordRep, class TPrecision> -void -NDVIDataNodeFeatureFunction<TImage, TCoordRep, TPrecision> -::PrintSelf( - std::ostream& os, - itk::Indent indent) const -{ - Superclass::PrintSelf( os, indent ); - os << indent << "NDVI Threshold: " << m_NDVIThreshold << std::endl; - os << indent << "RED Channel Index: " << this->GetREDChannelIndex() << std::endl; - os << indent << "NIR Channel Index: " << this->GetNIRChannelIndex() << std::endl; -} - - -template <class TImage, class TCoordRep, class TPrecision> -typename NDVIDataNodeFeatureFunction<TImage, TCoordRep, TPrecision> -::OutputType - NDVIDataNodeFeatureFunction<TImage, TCoordRep, TPrecision> -::Evaluate( const DataNodeType& node ) const -{ - if(!((this->GetREDChannelIndex() <= this->GetInputImage()->GetNumberOfComponentsPerPixel()) - && (this->GetNIRChannelIndex() <= this->GetInputImage()->GetNumberOfComponentsPerPixel()) - && (this->GetREDChannelIndex() > 0) - && (this->GetNIRChannelIndex() > 0))) - { - itkExceptionMacro(<< "Invalid RED or NIR Channel Index"); - } - - const typename ImageLineIteratorType::PathType* path; - - switch (node.GetNodeType()) - { - case FEATURE_POINT: - { - itkExceptionMacro(<< "This DataNode type is not handle yet"); - break; - } - case FEATURE_LINE: - { - path = node.GetLine(); - break; - } - case FEATURE_POLYGON: - { - path = node.GetPolygonExteriorRing(); - break; - } - default: - { - itkExceptionMacro(<< "This DataNode type is not handle yet"); - break; - } - } - - ImageLineIteratorType lineIt(this->GetInputImage(), path); - lineIt.GoToBegin(); - - double nbValidPixel=0.; - double nbVisitedPixel=0.; - - while(!lineIt.IsAtEnd()) - { - if(this->IsInsideBuffer(lineIt.GetIndex())) - { - PixelType pixel = this->GetInputImage()->GetPixel(lineIt.GetIndex()); - if(m_NDVIFunctor(pixel) >= this->GetNDVIThreshold()) - { - nbValidPixel += 1; - } - nbVisitedPixel += 1; - } - ++lineIt; - } - - OutputType output; - - if(nbVisitedPixel == 0) - { - //std::cout << "nbValidPixel: " << nbValidPixel << "nbVisitedPixel" << nbVisitedPixel << std::endl; - //itkExceptionMacro(<< "The DataNode and the Support Image are disjointed"); - output.push_back(static_cast<PrecisionType>(0.)); - } - else - { - output.push_back(static_cast<PrecisionType>(nbValidPixel/nbVisitedPixel)); - } - - output.push_back(static_cast<PrecisionType>(nbValidPixel)); - output.push_back(static_cast<PrecisionType>(nbVisitedPixel)); - - return output; -} - - -} // end namespace otb - -#endif diff --git a/Modules/Radiometry/Indices/test/CMakeLists.txt b/Modules/Radiometry/Indices/test/CMakeLists.txt index 79e4a828212956c5a5a7aa28977d4767115aa396..1424624291fd33d8f96baac6b64d02de0418e5e8 100644 --- a/Modules/Radiometry/Indices/test/CMakeLists.txt +++ b/Modules/Radiometry/Indices/test/CMakeLists.txt @@ -23,7 +23,6 @@ otb_module_test() set(OTBIndicesTests otbIndicesTestDriver.cxx otbRadiometricIndicesTest.cxx -otbNDVIDataNodeFeatureFunction.cxx otbLandsatTMIndexNDSITest.cxx otbLandsatTMIndexBIOTest.cxx otbLandsatTMIndexMIR2Test.cxx @@ -52,31 +51,6 @@ otb_module_target_label(otbIndicesTestDriver) # Tests Declaration -otb_add_test(NAME bfTvNDVIDataNodeFeatureFunction_Polygon COMMAND otbIndicesTestDriver - --compare-ogr ${EPSILON_3} - ${BASELINE_FILES}/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp - ${TEMP}/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp - otbNDVIDataNodeFeatureFunction - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF - ${INPUTDATA}/DEM/srtm_directory - ${TEMP}/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp - 0 - ) - -otb_add_test(NAME bfTvNDVIDataNodeFeatureFunction_Line COMMAND otbIndicesTestDriver - --compare-ogr ${EPSILON_9} - ${BASELINE_FILES}/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp - ${TEMP}/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp - otbNDVIDataNodeFeatureFunction - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp - ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF - ${INPUTDATA}/DEM/srtm_directory - ${TEMP}/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp - 0 - ) - - otb_add_test(NAME raTvLandsatTMIndexNDSITest COMMAND otbIndicesTestDriver otbLandsatTMIndexNDSI 3 #TM1 diff --git a/Modules/Radiometry/Indices/test/otbIndicesTestDriver.cxx b/Modules/Radiometry/Indices/test/otbIndicesTestDriver.cxx index 884ebeabb10bac520f40d10336bd96aec25b5b93..111d5c05d0978f86930a277975e37ebd58393533 100644 --- a/Modules/Radiometry/Indices/test/otbIndicesTestDriver.cxx +++ b/Modules/Radiometry/Indices/test/otbIndicesTestDriver.cxx @@ -22,7 +22,6 @@ void RegisterTests() { - REGISTER_TEST(otbNDVIDataNodeFeatureFunction); REGISTER_TEST(otbLandsatTMIndexNDSI); REGISTER_TEST(otbLandsatTMIndexBIO); REGISTER_TEST(otbLandsatTMIndexMIR2); diff --git a/Modules/Radiometry/Indices/test/otbNDVIDataNodeFeatureFunction.cxx b/Modules/Radiometry/Indices/test/otbNDVIDataNodeFeatureFunction.cxx deleted file mode 100644 index 18289e76d7a4468aa04fa1057adca4764c42013c..0000000000000000000000000000000000000000 --- a/Modules/Radiometry/Indices/test/otbNDVIDataNodeFeatureFunction.cxx +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include "otbNDVIDataNodeFeatureFunction.h" - -#include "otbVectorImage.h" -#include "otbImageFileReader.h" -#include "otbVectorData.h" -#include "otbVectorDataFileReader.h" -#include "otbVectorDataIntoImageProjectionFilter.h" -#include "otbVectorDataFileWriter.h" -#include "itkPreOrderTreeIterator.h" - - -int otbNDVIDataNodeFeatureFunction(int itkNotUsed(argc), char* argv[]) -{ - const char * inputVD = argv[1]; - const char * inputImg = argv[2]; - const char * DEMDir = argv[3]; - const char * outputVD = argv[4]; - int DisplayWarnings = atoi(argv[5]); - - typedef double CoordRepType; - typedef double PrecisionType; - typedef otb::VectorImage<PrecisionType> ImageType; - typedef otb::ImageFileReader<ImageType> ImageReaderType; - typedef otb::VectorData<CoordRepType, 2, PrecisionType> - VectorDataType; - typedef VectorDataType::DataNodeType DataNodeType; - typedef otb::VectorDataFileReader<VectorDataType> VectorDataReaderType; - typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, ImageType> - VectorDataReProjFilter; - typedef otb::VectorDataFileWriter<VectorDataType> VectorDataWriterType; - typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> - TreeIteratorType; - - typedef otb::NDVIDataNodeFeatureFunction<ImageType, CoordRepType, PrecisionType> - NDVIDataNodeFeaturefunctionType; - typedef NDVIDataNodeFeaturefunctionType::OutputType - NDVIFeatureOutputType; - - ImageReaderType::Pointer imgReader = ImageReaderType::New(); - VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New(); - VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New(); - VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New(); - NDVIDataNodeFeaturefunctionType::Pointer NDVIFeatureFunction = NDVIDataNodeFeaturefunctionType::New(); - - if (!DisplayWarnings) - { - imgReader->SetGlobalWarningDisplay(0); - } - - otb::DEMHandler::Instance()->OpenDEMDirectory(DEMDir); - - vdReader->SetFileName(inputVD); - vdReader->Update(); - - imgReader->SetFileName(inputImg); - imgReader->UpdateOutputInformation(); - imgReader->Update(); //Needed to set m_EndIndex, m_StartIndex in otbDataNodeImageFunction - - vdReProjFilter->SetInputImage(imgReader->GetOutput()); - vdReProjFilter->SetInputVectorData(vdReader->GetOutput()); - vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true); - vdReProjFilter->Update(); -/* - std::cout<< "vdReProjFilter->GetOutput()->Size(): " - << vdReProjFilter->GetOutput()->Size() << std::endl; -*/ - NDVIFeatureFunction->SetREDChannelIndex(3); - NDVIFeatureFunction->SetNIRChannelIndex(4); - NDVIFeatureFunction->SetNDVIThreshold(0.047); - NDVIFeatureFunction->SetInputImage(imgReader->GetOutput()); - - // Output - VectorDataType::Pointer outVD = VectorDataType::New(); - // Retrieving root node - DataNodeType::Pointer root = outVD->GetDataTree()->GetRoot()->Get(); - // Create the document node - DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - // Adding the layer to the data tree - outVD->GetDataTree()->Add(document, root); - // Create the folder node - DataNodeType::Pointer folder = DataNodeType::New(); - folder->SetNodeType(otb::FOLDER); - // Adding the layer to the data tree - outVD->GetDataTree()->Add(folder, document); - - TreeIteratorType itVector(vdReProjFilter->GetOutput()->GetDataTree()); - itVector.GoToBegin(); - while (!itVector.IsAtEnd()) - { - if (itVector.Get()->IsLineFeature() || itVector.Get()->IsPolygonFeature()) - { - const DataNodeType::Pointer currentGeometry = itVector.Get(); - NDVIFeatureOutputType currentResult; - currentResult = NDVIFeatureFunction->Evaluate(*(currentGeometry.GetPointer())); - currentGeometry->SetFieldAsDouble("NDVI", (double)(currentResult[0])); - outVD->GetDataTree()->Add(currentGeometry, folder); - } - ++itVector; - } - - vdWriter->SetInput(outVD); - vdWriter->SetFileName(outputVD); - vdWriter->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Registration/DisplacementField/CMakeLists.txt b/Modules/Registration/DisplacementField/CMakeLists.txt deleted file mode 100644 index a8ad1a8e38bf22af2290f918ff38056abee5ba93..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -project(OTBDisplacementField) -otb_module_impl() diff --git a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.h deleted file mode 100644 index 1e219346e5c7c37c4a32ea87b7dd0937d75325f1..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbBSplinesInterpolateDisplacementFieldGenerator_h -#define otbBSplinesInterpolateDisplacementFieldGenerator_h - -#include "otbPointSetToDisplacementFieldGenerator.h" - -namespace otb -{ -/** \class BSplinesInterpolateDisplacementFieldGenerator - * \brief This filters encapsulate the itk::DisplacementFieldSource to produce a BSpline interpolation of the point in point set whose metric values are - * sufficient. - * \sa itk::DisplacementFieldSource - * \ingroup DisparityMap - * - * \ingroup OTBDisplacementField - */ -template <class TPointSet, class TDisplacementField> -class ITK_EXPORT BSplinesInterpolateDisplacementFieldGenerator - : public PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -{ -public: - /** Standard typedefs */ - typedef BSplinesInterpolateDisplacementFieldGenerator Self; - typedef PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(BSplinesInterpolateDisplacementFieldGenerator, PointSetToDisplacementFieldGenerator); - - /** Template parameters typedefs */ - typedef typename Superclass::PointSetType PointSetType; - typedef typename Superclass::PointSetPointerType PointSetPointerType; - typedef typename Superclass::DisplacementFieldType DisplacementFieldType; - typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType; - typedef typename Superclass::IndexType IndexType; - typedef typename DisplacementFieldType::PixelType PixelType; - typedef typename Superclass::ValueType ValueType; - typedef typename Superclass::PointType PointType; - typedef typename Superclass::IndexVectorType IndexVectorType; - typedef typename Superclass::DistanceVectorType DistanceVectorType; - -protected: - /** Constructor */ - BSplinesInterpolateDisplacementFieldGenerator() {}; - /** Destructor */ - ~BSplinesInterpolateDisplacementFieldGenerator() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** Main computation method */ - void GenerateData() override; - -private: - BSplinesInterpolateDisplacementFieldGenerator(const Self &) = delete; - void operator =(const Self&) = delete; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbBSplinesInterpolateDisplacementFieldGenerator.hxx" -#endif - -#endif diff --git a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.hxx deleted file mode 100644 index 7b12fa7a1881970099fb35781b039856a397d18c..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.hxx +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbBSplinesInterpolateDisplacementFieldGenerator_hxx -#define otbBSplinesInterpolateDisplacementFieldGenerator_hxx - -#include "otbBSplinesInterpolateDisplacementFieldGenerator.h" -// Disabling deprecation warning if on visual -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4996) -#endif -#include "itkLandmarkDisplacementFieldSource.h" -// Enabling remaining deprecation warning -#ifdef _MSC_VER -#pragma warning(pop) -#endif -#include "otbMacro.h" -#include "otbImage.h" -#include "itkImageRegionIterator.h" - -namespace otb -{ -/** Main computation method */ -template <class TPointSet, class TDisplacementField> -void -BSplinesInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField> -::GenerateData(void) -{ - DisplacementFieldPointerType outputPtr = this->GetOutput(); - typedef itk::Vector<ValueType, 2> VectorType; - typedef otb::Image<VectorType, DisplacementFieldType::ImageDimension> ImageType; - typedef itk::LandmarkDisplacementFieldSource<ImageType> DisplacementFieldSourceType; - typedef typename DisplacementFieldSourceType::LandmarkContainer LandmarkContainerType; - typedef typename DisplacementFieldSourceType::LandmarkPointType LandmarkPointType; - typedef typename PointSetType::PointsContainer PointsContainer; - typedef typename PointsContainer::ConstIterator PointsIterator; - typedef typename PointSetType::PointDataContainer PointDataContainer; - typedef typename PointDataContainer::ConstIterator PointDataIterator; - - typename LandmarkContainerType::Pointer sourceLandmarks = LandmarkContainerType::New(); - typename LandmarkContainerType::Pointer targetLandmarks = LandmarkContainerType::New(); - LandmarkPointType sourcePoint; - LandmarkPointType targetPoint; - - PointsIterator pointIterator = this->GetPointSet()->GetPoints()->Begin(); - PointsIterator end = this->GetPointSet()->GetPoints()->End(); - unsigned int pointId = 0; - - PointDataIterator pointDataIterator = this->GetPointSet()->GetPointData()->Begin(); - - while (pointIterator != end) - { - typename PointDataContainer::Element valueAndDisplacements = pointDataIterator.Value(); - - if (std::abs(valueAndDisplacements[0]) >= this->GetMetricThreshold()) - { - typename PointSetType::PointType p = pointIterator.Value(); // access the point - sourcePoint[0] = p[0]; - sourcePoint[1] = p[1]; - targetPoint[0] = p[0] - valueAndDisplacements[1]; - targetPoint[1] = p[1] - valueAndDisplacements[2]; - otbMsgDebugMacro( - << "Adding landmark " << pointId << ", source point: " << sourcePoint << ", targetpoint: " << targetPoint); - sourceLandmarks->InsertElement(pointId, sourcePoint); - targetLandmarks->InsertElement(pointId, targetPoint); - ++pointId; - } - ++pointIterator; - ++pointDataIterator; - } - - typename DisplacementFieldSourceType::Pointer deformer = DisplacementFieldSourceType::New(); - deformer->SetOutputSpacing(this->GetOutputSpacing()); - deformer->SetOutputOrigin(this->GetOutputOrigin()); - deformer->SetOutputRegion(outputPtr->GetRequestedRegion()); - deformer->SetSourceLandmarks(sourceLandmarks.GetPointer()); - deformer->SetTargetLandmarks(targetLandmarks.GetPointer()); - - deformer->Update(); - outputPtr->Allocate(); - PixelType defaultPixel; - defaultPixel.SetSize(2); - defaultPixel.Fill(this->GetDefaultValue()); - outputPtr->FillBuffer(defaultPixel); - typedef itk::ImageRegionIterator<ImageType> ImageIteratorType; - typedef itk::ImageRegionIterator<DisplacementFieldType> OutputIteratorType; - - ImageIteratorType inIt(deformer->GetOutput(), outputPtr->GetRequestedRegion()); - OutputIteratorType outIt(outputPtr, outputPtr->GetRequestedRegion()); - int i = 0; - // Casting otb::Image<itt::Vector<ValueType, 2>, 2> to otb::VectorImage<ValueType, 2> - for (inIt.GoToBegin(), outIt.GoToBegin(); (!inIt.IsAtEnd()) && (!outIt.IsAtEnd()); ++inIt, ++outIt, ++i) - { - typename ImageType::PixelType inPixel; - inPixel = inIt.Get(); - PixelType outPixel; - outPixel.SetSize(2); - outPixel[0] = -inPixel[0]; - outPixel[1] = -inPixel[1]; - outIt.Set(outPixel); - } -} -/** - * PrintSelf Method - */ -template <class TPointSet, class TDisplacementField> -void -BSplinesInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.h deleted file mode 100644 index 6528f55931f87ffab35c48cd7c806495ed13caba..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbBSplinesInterpolateTransformDisplacementFieldGenerator_h -#define otbBSplinesInterpolateTransformDisplacementFieldGenerator_h - -#include "otbPointSetWithTransformToDisplacementFieldGenerator.h" -#include "itkUnaryFunctorImageFilter.h" -#include "itkBSplineScatteredDataPointSetToImageFilter.h" -#include "itkBSplineControlPointImageFunction.h" -#include "otbImage.h" -#include "otbMath.h" -#include <complex> - -namespace otb -{ -/** \class BSplinesInterpolateTransformDisplacementFieldGenerator - * \brief This class generate the displacement field by using spline interpolation on the parameters of the transform. - * - * Spline interpolation of non regularly scattered data is provided - * by the itk::BSplineScatteredDataPointSetToImageFilter. It allows interpolation using any spline order and implements a multi-level approach. - * - * This filter is used for each parameter. One can also specify the indices of the angular parameters. Angular parameters are first - * converted to complex exponential, the interpolated and converted back to the angular space. This is done to avoid interpolating angular discontinuities, - * which is a non-sense. - * - * \sa itk::BSplineScatteredDataPointSetToImageFilter - * - * \ingroup OTBDisplacementField - */ -template <class TPointSet, class TDisplacementField> -class ITK_EXPORT BSplinesInterpolateTransformDisplacementFieldGenerator - : public PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> -{ -public: - /** Standard typedefs */ - typedef BSplinesInterpolateTransformDisplacementFieldGenerator Self; - typedef PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(BSplinesInterpolateTransformDisplacementFieldGenerator, PointSetWithTransformsToDisplacementFieldGenerator); - - /** Template parameters typedefs */ - typedef typename Superclass::PointSetType PointSetType; - typedef typename Superclass::PointSetPointerType PointSetPointerType; - typedef typename Superclass::DisplacementFieldType DisplacementFieldType; - typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType; - typedef typename Superclass::IndexType IndexType; - typedef typename DisplacementFieldType::PixelType PixelType; - typedef typename Superclass::ValueType ValueType; - typedef typename Superclass::PointType PointType; - typedef typename Superclass::IndexVectorType IndexVectorType; - typedef typename Superclass::DistanceVectorType DistanceVectorType; - typedef typename Superclass::ParametersType ParametersType; - - /** Filters definition */ - typedef itk::Vector<ValueType, 2> PointSetDataType; - typedef otb::Image<PointSetDataType, DisplacementFieldType::ImageDimension> InternalImageType; - typedef itk::PointSet<PointSetDataType, PointSetType::PointDimension> InternalPointSetType; - typedef itk::BSplineScatteredDataPointSetToImageFilter<InternalPointSetType, InternalImageType> - SPlineInterpolateFilterType; - typedef typename SPlineInterpolateFilterType::Pointer SPlineInterpolateFilterPointerType; - typedef itk::BSplineControlPointImageFunction<InternalImageType> BSplinerType; - - /** - * Add an angular parameter. Angular parameters are transformed by complex exponential during interpolation so as to avoid discontinuity. - * \param index The index of the angular parameter. - */ - void AddAngularParameter(unsigned int index); - /** - * Remove an angular parameter. - * \param index The index of the angular parameter. - */ - void RemoveAngularParameter(unsigned int index); - - itkSetMacro(SplineOrder, unsigned int); - itkGetMacro(SplineOrder, unsigned int); - itkSetMacro(NumberOfControlPoints, unsigned int); - itkGetMacro(NumberOfControlPoints, unsigned int); - itkSetMacro(NumberOfLevels, unsigned int); - itkGetMacro(NumberOfLevels, unsigned int); - -protected: - /** Constructor */ - BSplinesInterpolateTransformDisplacementFieldGenerator(); - /** Destructor */ - ~BSplinesInterpolateTransformDisplacementFieldGenerator() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** Main computation method */ - void GenerateData() override; - - void GenerateOutputInformation() override; - - /** - * Test whether a parameter is angular or not. - * \param index The index of the parameter to test. - */ - bool IsAngular(unsigned int index); - -private: - BSplinesInterpolateTransformDisplacementFieldGenerator(const Self &) = delete; - void operator =(const Self&) = delete; - - IndexVectorType m_AngularParameters; - - unsigned int m_SplineOrder; - unsigned int m_NumberOfControlPoints; - unsigned int m_NumberOfLevels; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbBSplinesInterpolateTransformDisplacementFieldGenerator.hxx" -#endif - -#endif diff --git a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.hxx deleted file mode 100644 index 6d370825ef6140eead474b2ea98f6cd8f1ae2677..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.hxx +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbBSplinesInterpolateTransformDisplacementFieldGenerator_hxx -#define otbBSplinesInterpolateTransformDisplacementFieldGenerator_hxx - -#include "otbBSplinesInterpolateTransformDisplacementFieldGenerator.h" -#include "itkLandmarkDisplacementFieldSource.h" -#include "otbObjectList.h" -#include "otbMacro.h" - -namespace otb -{ -template <class TPointSet, class TDisplacementField> -BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField> -::BSplinesInterpolateTransformDisplacementFieldGenerator() -{ - m_SplineOrder = 3; - m_NumberOfControlPoints = 4; - m_NumberOfLevels = 6; -} - -template <class TPointSet, class TDisplacementField> -void -BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField> -::GenerateOutputInformation() -{ - Superclass::GenerateOutputInformation(); - this->GetOutput()->SetNumberOfComponentsPerPixel(2); -} - -/** Main computation method */ -template <class TPointSet, class TDisplacementField> -void -BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField> -::GenerateData(void) -{ - DisplacementFieldPointerType outputPtr = this->GetOutput(); - - // Default displacement field - PixelType defaultValue(2); - defaultValue.Fill(this->GetDefaultValue()); - outputPtr->Allocate(); - outputPtr->FillBuffer(defaultValue); - - typedef otb::ObjectList<BSplinerType> SPlineInterpolatorListType; - typedef typename PointSetType::PointsContainer::ConstIterator PointSetIteratorType; - - // Initialization of the splines interpolator - typename SPlineInterpolatorListType::Pointer splineIntList = SPlineInterpolatorListType::New(); - - for (unsigned int paramIndex = 0; paramIndex < this->GetTransform()->GetNumberOfParameters(); ++paramIndex) - { - // Create a new interpolator - splineIntList->PushBack(BSplinerType::New()); - // Create a new point set - typename InternalPointSetType::Pointer tmpPointSet = InternalPointSetType::New(); - tmpPointSet->Initialize(); - unsigned int pointDataCounter = 0; - for (PointSetIteratorType it = this->GetPointSet()->GetPoints()->Begin(); - it != this->GetPointSet()->GetPoints()->End(); - ++it) - { - if (std::abs(this->GetPointSet()->GetPointData()->GetElement(pointDataCounter)[0]) >= this->GetMetricThreshold()) - { - typename InternalPointSetType::PixelType V(0.0); - - if (!IsAngular(paramIndex)) - { - V[0] = this->GetPointSet()->GetPointData()->GetElement(pointDataCounter)[paramIndex + 3]; - V[1] = this->GetPointSet()->GetPointData()->GetElement(pointDataCounter)[paramIndex + 3]; - } - else - { - V[0] = - static_cast<ValueType>(std::cos(this->GetPointSet()->GetPointData()->GetElement(pointDataCounter)[paramIndex - + 3])); - V[1] = - static_cast<ValueType>(std::sin(this->GetPointSet()->GetPointData()->GetElement(pointDataCounter)[paramIndex - + 3])); - } - unsigned long nbPoints = tmpPointSet->GetNumberOfPoints(); - tmpPointSet->SetPoint(nbPoints, it.Value()); - tmpPointSet->SetPointData(nbPoints, V); - } - ++pointDataCounter; - } - - SPlineInterpolateFilterPointerType splineFilter = SPlineInterpolateFilterType::New(); - - // Set the interpolator parameters - splineFilter->SetInput(tmpPointSet); - splineFilter->SetSplineOrder(m_SplineOrder); - typename SPlineInterpolateFilterType::ArrayType ncps; - ncps.Fill(m_NumberOfControlPoints); - splineFilter->SetNumberOfControlPoints(ncps); - splineFilter->SetNumberOfLevels(m_NumberOfLevels); - // splineFilter->SetGenerateOutputImage(false); - - // Define the parametric domain. - splineFilter->SetOrigin(this->GetOutput()->GetOrigin()); - splineFilter->SetSpacing(this->GetOutput()->GetSpacing()); - splineFilter->SetSize(this->GetOutput()->GetLargestPossibleRegion().GetSize()); - splineFilter->Update(); - - // Image function - splineIntList->Back()->SetSplineOrder( splineFilter->GetSplineOrder() ); - splineIntList->Back()->SetSize( splineFilter->GetSize() ); - splineIntList->Back()->SetSpacing( splineFilter->GetSpacing() ); - splineIntList->Back()->SetOrigin( splineFilter->GetOrigin() ); - splineIntList->Back()->SetInputImage( static_cast<const InternalImageType*>(splineFilter->GetPhiLattice().GetPointer()) ); - } - - // Interpolation - typedef itk::ImageRegionIteratorWithIndex<DisplacementFieldType> IteratorType; - IteratorType outIt(outputPtr, outputPtr->GetRequestedRegion()); - - // main loop - for (outIt.GoToBegin(); !outIt.IsAtEnd(); ++outIt) - { - // Index of the pixel - IndexType index = outIt.GetIndex(); - // parameters vector - ParametersType params(this->GetTransform()->GetNumberOfParameters()); - // we iterate over the number of parameters of the transform - for (unsigned int paramIndex = 0; paramIndex < this->GetTransform()->GetNumberOfParameters(); ++paramIndex) - { - typename InternalPointSetType::PointType p; - this->GetOutput()->TransformIndexToPhysicalPoint(index, p); - typename InternalPointSetType::PixelType V(0.0); - // For each parameter we use the associated spline interpolator - if (!IsAngular(paramIndex)) - { - V = splineIntList->GetNthElement(paramIndex)->EvaluateAtParametricPoint(p); - params[paramIndex] = V[0]; - } - else - { - V = splineIntList->GetNthElement(paramIndex)->EvaluateAtParametricPoint(p); - params[paramIndex] = std::atan2(V[1], V[0]); - } - // We then compute the target point using the transform - this->GetTransform()->SetParameters(params); - PointType sourcePoint, targetPoint; - outputPtr->TransformIndexToPhysicalPoint(index, sourcePoint); - targetPoint = this->GetTransform()->TransformPoint(sourcePoint); - - // And the displacement - PixelType pixel; - pixel.SetSize(2); - pixel[0] = static_cast<ValueType>(targetPoint[0] - sourcePoint[0]); - pixel[1] = static_cast<ValueType>(targetPoint[1] - sourcePoint[1]); - outIt.Set(pixel); - } - } -} -template <class TPointSet, class TDisplacementField> -void -BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField> -::AddAngularParameter(unsigned int index) -{ - m_AngularParameters.push_back(index); -} -template <class TPointSet, class TDisplacementField> -void -BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField> -::RemoveAngularParameter(unsigned int index) -{ - m_AngularParameters.erase(index); -} -template <class TPointSet, class TDisplacementField> -bool -BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField> -::IsAngular(unsigned int index) -{ - bool resp = std::binary_search(m_AngularParameters.begin(), m_AngularParameters.end(), index); - return resp; -} -/** - * PrintSelf Method - */ -template <class TPointSet, class TDisplacementField> -void -BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h deleted file mode 100644 index ab4f9d62f4f0a5f0d59b208bf584d7a7050619e9..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNNearestPointsLinearInterpolateDisplacementFieldGenerator_h -#define otbNNearestPointsLinearInterpolateDisplacementFieldGenerator_h - -#include "otbPointSetToDisplacementFieldGenerator.h" - -namespace otb -{ -/** \class NNearestPointsLinearInterpolateDisplacementFieldGenerator - * \brief This class generate the displacement field by performing a linear interpolation of the displacement induced by the n nearest point. - * \ingroup DisparityMap - * - * \ingroup OTBDisplacementField - */ -template <class TPointSet, class TDisplacementField> -class ITK_EXPORT NNearestPointsLinearInterpolateDisplacementFieldGenerator - : public PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -{ -public: - /** Standard typedefs */ - typedef NNearestPointsLinearInterpolateDisplacementFieldGenerator Self; - typedef PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(NNearestPointsLinearInterpolateDisplacementFieldGenerator, PointSetToDisplacementFieldGenerator); - - /** Template parameters typedefs */ - typedef typename Superclass::PointSetType PointSetType; - typedef typename Superclass::PointSetPointerType PointSetPointerType; - typedef typename Superclass::DisplacementFieldType DisplacementFieldType; - typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType; - typedef typename Superclass::IndexType IndexType; - typedef typename DisplacementFieldType::PixelType PixelType; - typedef typename Superclass::ValueType ValueType; - typedef typename Superclass::PointType PointType; - typedef typename Superclass::IndexVectorType IndexVectorType; - typedef typename Superclass::DistanceVectorType DistanceVectorType; - - itkSetMacro(NumberOfPoints, unsigned int); - itkGetMacro(NumberOfPoints, unsigned int); - -protected: - /** Constructor */ - NNearestPointsLinearInterpolateDisplacementFieldGenerator() {}; - /** Destructor */ - ~NNearestPointsLinearInterpolateDisplacementFieldGenerator() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** Main computation method */ - void GenerateData() override; - -private: - NNearestPointsLinearInterpolateDisplacementFieldGenerator(const Self &) = delete; - void operator =(const Self&) = delete; - - unsigned int m_NumberOfPoints; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.hxx" -#endif - -#endif diff --git a/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.hxx deleted file mode 100644 index 873bca0b2efbf8f4588c634043bba2b004c5b534..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.hxx +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNNearestPointsLinearInterpolateDisplacementFieldGenerator_hxx -#define otbNNearestPointsLinearInterpolateDisplacementFieldGenerator_hxx - -#define EPSILON 1e-15 - -#include "otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h" -#include "itkImageRegionIteratorWithIndex.h" -#include "otbMacro.h" - -namespace otb -{ -/** Main computation method */ -template <class TPointSet, class TDisplacementField> -void -NNearestPointsLinearInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField> -::GenerateData(void) -{ - DisplacementFieldPointerType outputPtr = this->GetOutput(); - PixelType defaultValue(2); - defaultValue.Fill(this->GetDefaultValue()); - outputPtr->Allocate(); - outputPtr->FillBuffer(defaultValue); - - typedef itk::ImageRegionIteratorWithIndex<DisplacementFieldType> IteratorType; - IteratorType it(outputPtr, outputPtr->GetRequestedRegion()); - - for (it.GoToBegin(); !it.IsAtEnd(); ++it) - { - IndexType index = it.GetIndex(); - IndexVectorType indexVector = this->GenerateNearestValidPointsPointSet(it.GetIndex(), m_NumberOfPoints); - PixelType pixel(2); - double xdisplacement, ydisplacement, normalization; - xdisplacement = 0; - ydisplacement = 0; - normalization = 0; - - for (typename IndexVectorType::iterator indexIt = indexVector.begin(); indexIt != indexVector.end(); ++indexIt) - { - PointType point; - point[0] = static_cast<double>(this->GetPointSet()->GetPoints()->GetElement(*indexIt)[0]); - point[1] = static_cast<double>(this->GetPointSet()->GetPoints()->GetElement(*indexIt)[1]); - double distance = this->EuclideanDistanceMetric(index, point); - if (distance < EPSILON) - { - distance = EPSILON; - } - xdisplacement += this->GetPointSet()->GetPointData()->GetElement((*indexIt))[1] / distance; - ydisplacement += this->GetPointSet()->GetPointData()->GetElement((*indexIt))[2] / distance; - normalization += 1 / distance; - } - - if (normalization > 0) - { - pixel[0] = static_cast<ValueType>(xdisplacement / normalization); - pixel[1] = static_cast<ValueType>(ydisplacement / normalization); - } - else - { - pixel = defaultValue; - } - it.Set(pixel); - } -} -/** - * PrintSelf Method - */ -template <class TPointSet, class TDisplacementField> -void -NNearestPointsLinearInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h deleted file mode 100644 index 7ab027e0135ab84a80c67be3c8c76117d9283aa4..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator_h -#define otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator_h - -#include "otbPointSetWithTransformToDisplacementFieldGenerator.h" - -namespace otb -{ -/** \class NNearestTransformsLinearInterpolateDisplacementFieldGenerator - * \brief generate the displacement field by performing a linear interpolation - * - * This class generate the displacement field by performing a linear interpolation of - * the displacements from the transforms induced by the n nearest points. - * - * \ingroup DisparityMap - * - * \ingroup OTBDisplacementField - */ -template <class TPointSet, class TDisplacementField> -class ITK_EXPORT NNearestTransformsLinearInterpolateDisplacementFieldGenerator - : public PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> -{ -public: - /** Standard typedefs */ - typedef NNearestTransformsLinearInterpolateDisplacementFieldGenerator Self; - typedef PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(NNearestTransformsLinearInterpolateDisplacementFieldGenerator, - PointSetWithTransformsToDisplacementFieldGenerator); - - /** Template parameters typedefs */ - typedef typename Superclass::PointSetType PointSetType; - typedef typename Superclass::PointSetPointerType PointSetPointerType; - typedef typename Superclass::DisplacementFieldType DisplacementFieldType; - typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType; - typedef typename Superclass::IndexType IndexType; - typedef typename DisplacementFieldType::PixelType PixelType; - typedef typename Superclass::ValueType ValueType; - typedef typename Superclass::PointType PointType; - typedef typename Superclass::IndexVectorType IndexVectorType; - typedef typename Superclass::DistanceVectorType DistanceVectorType; - typedef typename Superclass::TransformType TransformType; - typedef typename TransformType::ParametersType ParametersType; - - itkSetMacro(NumberOfPoints, unsigned int); - itkGetMacro(NumberOfPoints, unsigned int); - -protected: - /** Constructor */ - NNearestTransformsLinearInterpolateDisplacementFieldGenerator() {}; - /** Destructor */ - ~NNearestTransformsLinearInterpolateDisplacementFieldGenerator() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** Main computation method */ - void GenerateData() override; - -private: - NNearestTransformsLinearInterpolateDisplacementFieldGenerator(const Self &) = delete; - void operator =(const Self&) = delete; - - unsigned int m_NumberOfPoints; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.hxx" -#endif - -#endif diff --git a/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.hxx deleted file mode 100644 index dabb7ab6ded475512374a0794b65724fffb3b42b..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.hxx +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator_hxx -#define otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator_hxx - -#define EPSILON 1e-15 - -#include "otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h" -#include "itkImageRegionIteratorWithIndex.h" -#include "otbMacro.h" - -namespace otb -{ -/** Main computation method */ -template <class TPointSet, class TDisplacementField> -void -NNearestTransformsLinearInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField> -::GenerateData(void) -{ - DisplacementFieldPointerType outputPtr = this->GetOutput(); - PixelType defaultValue(2); - defaultValue.Fill(this->GetDefaultValue()); - outputPtr->Allocate(); - outputPtr->FillBuffer(defaultValue); - - typedef itk::ImageRegionIteratorWithIndex<DisplacementFieldType> IteratorType; - IteratorType it(outputPtr, outputPtr->GetRequestedRegion()); - - for (it.GoToBegin(); !it.IsAtEnd(); ++it) - { - IndexType index = it.GetIndex(); - IndexVectorType indexVector = this->GenerateNearestValidPointsPointSet(it.GetIndex(), m_NumberOfPoints); - PixelType pixel(2); - double xdisplacement, ydisplacement, normalization; - xdisplacement = 0; - ydisplacement = 0; - normalization = 0; - - for (typename IndexVectorType::iterator indexIt = indexVector.begin(); indexIt != indexVector.end(); ++indexIt) - { - PointType point; - point[0] = static_cast<double>(this->GetPointSet()->GetPoints()->GetElement(*indexIt)[0]); - point[1] = static_cast<double>(this->GetPointSet()->GetPoints()->GetElement(*indexIt)[1]); - double distance = this->EuclideanDistanceMetric(index, point); - if (distance < EPSILON) - { - distance = EPSILON; - } - - ParametersType params(this->GetTransform()->GetNumberOfParameters()); - for (unsigned int i = 0; i < this->GetTransform()->GetNumberOfParameters(); ++i) - { - params[i] = this->GetPointSet()->GetPointData()->GetElement((*indexIt))[i + 3]; - } - this->GetTransform()->SetParameters(params); - PointType sourcePoint, targetPoint; - - outputPtr->TransformIndexToPhysicalPoint(it.GetIndex(), sourcePoint); - targetPoint = this->GetTransform()->TransformPoint(sourcePoint); - xdisplacement += (targetPoint[0] - sourcePoint[0]) / distance; - ydisplacement += (targetPoint[1] - sourcePoint[1]) / distance; - normalization += 1 / distance; - } - - if (normalization > 0) - { - pixel[0] = static_cast<ValueType>(xdisplacement / normalization); - pixel[1] = static_cast<ValueType>(ydisplacement / normalization); - } - else - { - pixel = defaultValue; - } - it.Set(pixel); - } -} -/** - * PrintSelf Method - */ -template <class TPointSet, class TDisplacementField> -void -NNearestTransformsLinearInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.h deleted file mode 100644 index 158e21b2c13b79a65d8a1217ae3f75134c8da972..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNearestPointDisplacementFieldGenerator_h -#define otbNearestPointDisplacementFieldGenerator_h - -#include "otbPointSetToDisplacementFieldGenerator.h" - -namespace otb -{ -/** \class NearestPointDisplacementFieldGenerator - * \brief This class implements the simplest way to displacement field generation using a point set. - * In each pixel location, the displacement is considered to be the displacement of the nearest seed point in the point set. - * - * \ingroup DisparityMap - * - * \ingroup OTBDisplacementField - */ -template <class TPointSet, class TDisplacementField> -class ITK_EXPORT NearestPointDisplacementFieldGenerator - : public PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -{ -public: - /** Standard typedefs */ - typedef NearestPointDisplacementFieldGenerator Self; - typedef PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(NearestPointDisplacementFieldGenerator, PointSetToDisplacementFieldGenerator); - - /** Template parameters typedefs */ - typedef typename Superclass::PointSetType PointSetType; - typedef typename Superclass::PointSetPointerType PointSetPointerType; - typedef typename Superclass::DisplacementFieldType DisplacementFieldType; - typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType; - typedef typename Superclass::IndexType IndexType; - typedef typename DisplacementFieldType::PixelType PixelType; - typedef typename Superclass::ValueType ValueType; - typedef typename Superclass::IndexVectorType IndexVectorType; - -protected: - /** Constructor */ - NearestPointDisplacementFieldGenerator() {}; - /** Destructor */ - ~NearestPointDisplacementFieldGenerator() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** Main computation method */ - void GenerateData() override; - -private: - NearestPointDisplacementFieldGenerator(const Self &) = delete; - void operator =(const Self&) = delete; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbNearestPointDisplacementFieldGenerator.hxx" -#endif - -#endif diff --git a/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.hxx deleted file mode 100644 index f7194ec39aa8364311fcd003859497361bece1f7..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.hxx +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNearestPointDisplacementFieldGenerator_hxx -#define otbNearestPointDisplacementFieldGenerator_hxx - -#include "otbNearestPointDisplacementFieldGenerator.h" -#include "itkImageRegionIteratorWithIndex.h" -#include "otbMacro.h" - -namespace otb -{ -/** Main computation method */ -template <class TPointSet, class TDisplacementField> -void -NearestPointDisplacementFieldGenerator<TPointSet, TDisplacementField> -::GenerateData(void) -{ - DisplacementFieldPointerType outputPtr = this->GetOutput(); - PixelType defaultValue(2); - defaultValue.Fill(this->GetDefaultValue()); - outputPtr->Allocate(); - outputPtr->FillBuffer(defaultValue); - - typedef itk::ImageRegionIteratorWithIndex<DisplacementFieldType> IteratorType; - IteratorType it(outputPtr, outputPtr->GetRequestedRegion()); - - for (it.GoToBegin(); !it.IsAtEnd(); ++it) - { - IndexVectorType indexVector = this->GenerateNearestValidPointsPointSet(it.GetIndex(), 1); - PixelType p(2); - if (indexVector.size() >= 1) - { - p[0] = static_cast<ValueType>(this->GetPointSet()->GetPointData()->GetElement(indexVector[0])[1]); - p[1] = static_cast<ValueType>(this->GetPointSet()->GetPointData()->GetElement(indexVector[0])[2]); - } - else - { - p = defaultValue; - } - it.Set(p); - } -} -/** - * PrintSelf Method - */ -template <class TPointSet, class TDisplacementField> -void -NearestPointDisplacementFieldGenerator<TPointSet, TDisplacementField> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.h deleted file mode 100644 index 6f4f907802a1b67017396b41c3674e74b95043a0..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNearestTransformDisplacementFieldGenerator_h -#define otbNearestTransformDisplacementFieldGenerator_h - -#include "otbPointSetWithTransformToDisplacementFieldGenerator.h" - -namespace otb -{ -/** \class NearestTransformDisplacementFieldGenerator - * \brief This class implements displacement field generation by taking into account the local transform of the - * nearest point in pointset. - * - * \ingroup DisparityMap - * - * \ingroup OTBDisplacementField - */ -template <class TPointSet, class TDisplacementField> -class ITK_EXPORT NearestTransformDisplacementFieldGenerator - : public PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> -{ -public: - /** Standard typedefs */ - typedef NearestTransformDisplacementFieldGenerator Self; - typedef PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(NearestTransformDisplacementFieldGenerator, PointSetWithTransformToDisplacementFieldGenerator); - - /** Template parameters typedefs */ - typedef typename Superclass::PointSetType PointSetType; - typedef typename Superclass::PointSetPointerType PointSetPointerType; - typedef typename Superclass::DisplacementFieldType DisplacementFieldType; - typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType; - typedef typename Superclass::IndexType IndexType; - typedef typename Superclass::PointType PointType; - typedef typename DisplacementFieldType::PixelType PixelType; - typedef typename Superclass::ValueType ValueType; - typedef typename Superclass::IndexVectorType IndexVectorType; - typedef typename Superclass::TransformType TransformType; - typedef typename TransformType::ParametersType ParametersType; - -protected: - /** Constructor */ - NearestTransformDisplacementFieldGenerator() {}; - /** Destructor */ - ~NearestTransformDisplacementFieldGenerator() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** Main computation method */ - void GenerateData() override; - -private: - NearestTransformDisplacementFieldGenerator(const Self &) = delete; - void operator =(const Self&) = delete; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbNearestTransformDisplacementFieldGenerator.hxx" -#endif - -#endif diff --git a/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.hxx deleted file mode 100644 index e43b4fe7da8daf535e3650bb663fa69b4893f56b..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.hxx +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbNearestTransformDisplacementFieldGenerator_hxx -#define otbNearestTransformDisplacementFieldGenerator_hxx - -#include "otbNearestTransformDisplacementFieldGenerator.h" -#include "itkImageRegionIteratorWithIndex.h" -#include "otbMacro.h" - -namespace otb -{ -/** Main computation method */ -template <class TPointSet, class TDisplacementField> -void -NearestTransformDisplacementFieldGenerator<TPointSet, TDisplacementField> -::GenerateData(void) -{ - DisplacementFieldPointerType outputPtr = this->GetOutput(); - PixelType defaultValue(2); - defaultValue.Fill(this->GetDefaultValue()); - outputPtr->Allocate(); - outputPtr->FillBuffer(defaultValue); - - typedef itk::ImageRegionIteratorWithIndex<DisplacementFieldType> IteratorType; - IteratorType it(outputPtr, outputPtr->GetRequestedRegion()); - - for (it.GoToBegin(); !it.IsAtEnd(); ++it) - { - IndexVectorType indexVector = this->GenerateNearestValidPointsPointSet(it.GetIndex(), 1); - PixelType pixel(2); - if (indexVector.size() >= 1) - { - ParametersType params(this->GetTransform()->GetNumberOfParameters()); - for (unsigned int i = 0; i < this->GetTransform()->GetNumberOfParameters(); ++i) - { - params[i] = this->GetPointSet()->GetPointData()->GetElement(indexVector[0])[i + 3]; - } - this->GetTransform()->SetParameters(params); - PointType sourcePoint, targetPoint; - - outputPtr->TransformIndexToPhysicalPoint(it.GetIndex(), sourcePoint); - targetPoint = this->GetTransform()->TransformPoint(sourcePoint); - pixel[0] = static_cast<ValueType>(targetPoint[0] - sourcePoint[0]); - pixel[1] = static_cast<ValueType>(targetPoint[1] - sourcePoint[1]); - } - else - { - pixel = defaultValue; - } - it.Set(pixel); - } -} -/** - * PrintSelf Method - */ -template <class TPointSet, class TDisplacementField> -void -NearestTransformDisplacementFieldGenerator<TPointSet, TDisplacementField> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.h deleted file mode 100644 index 9624d8ebe16f1af7108870cfe13f54f3da8c2cd3..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbPointSetToDisplacementFieldGenerator_h -#define otbPointSetToDisplacementFieldGenerator_h - -#include "itkImageSource.h" - -namespace otb -{ -namespace Functor -{ -/** \class DistanceComparisonFunctor - * \brief This functor is used in nearest neighborhood sorting. - * \ingroup DisparityMap - * - * \ingroup OTBDisplacementField - */ -class DistanceComparisonFunctor -{ -public: - DistanceComparisonFunctor() {} - virtual ~DistanceComparisonFunctor() {} - typedef std::vector<double> DistanceVectorType; - - void SetDistanceVector(DistanceVectorType& vec) - { - m_DistanceVector = vec; - } - DistanceVectorType GetDistanceVector(void) - { - return m_DistanceVector; - } - inline bool operator ()(const unsigned int a1, const unsigned int a2) - { - return m_DistanceVector[a1] < m_DistanceVector[a2]; - } - -private: - DistanceVectorType m_DistanceVector; -}; -} -/** \class PointSetToDisplacementFieldGenerator - * \brief Base class for filters generating a displacement field from a point set enriched with displacement and local transform information. - * The output of the filters deriving from this base class can be passed to the itk::WarpImageFilter for image resampling. - * \sa DisparityMapEstimationMethod - * \sa itk::WarpImageFilter - * \ingroup DisparityMap - * - * \ingroup OTBDisplacementField - */ -template <class TPointSet, class TDisplacementField> -class ITK_EXPORT PointSetToDisplacementFieldGenerator - : public itk::ImageSource<TDisplacementField> -{ -public: - /** Standard typedefs */ - typedef PointSetToDisplacementFieldGenerator Self; - typedef itk::ImageSource<TDisplacementField> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(PointSetToDisplacementFieldGenerator, ImageSource); - - /** Template parameters typedefs */ - typedef TPointSet PointSetType; - typedef typename PointSetType::Pointer PointSetPointerType; - - typedef TDisplacementField DisplacementFieldType; - typedef typename DisplacementFieldType::Pointer DisplacementFieldPointerType; - typedef typename DisplacementFieldType::IndexType IndexType; - typedef typename DisplacementFieldType::SizeType SizeType; - typedef typename DisplacementFieldType::SpacingType SpacingType; - typedef typename DisplacementFieldType::PointType PointType; - typedef typename DisplacementFieldType::InternalPixelType ValueType; - - /** More typedefs */ - typedef std::vector<double> DistanceVectorType; - typedef std::vector<unsigned int> IndexVectorType; - - /** - * Set the pointset containing the disparity. - * \param pointset The pointset containing the disparity. - */ - void SetPointSet(const TPointSet * pointset); - /** - * Get the pointset containing the disparity. - * \return The pointset containing the disparity. - */ - const TPointSet * GetPointSet(void); - - itkSetMacro(MetricThreshold, double); - itkGetMacro(MetricThreshold, double); - itkSetMacro(DefaultValue, ValueType); - itkGetMacro(DefaultValue, ValueType); - itkSetMacro(OutputSize, SizeType); - itkGetConstReferenceMacro(OutputSize, SizeType); - itkSetMacro(OutputSpacing, SpacingType); - itkGetConstReferenceMacro(OutputSpacing, SpacingType); - itkSetMacro(OutputOrigin, PointType); - itkGetConstReferenceMacro(OutputOrigin, PointType); - -protected: - /** Constructor */ - PointSetToDisplacementFieldGenerator(); - /** Destructor */ - ~PointSetToDisplacementFieldGenerator() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - /** Generate output information */ - void GenerateOutputInformation(void) override; - /** - * Generate the n nearest valid point in point set, where a valid point has a sufficient metric value. - * \param index The index of the pixel to compute. - * \param n The number of nearest point to seek. - * \return A vector containing the index of the nearest point from nearest to most far. - */ - IndexVectorType GenerateNearestValidPointsPointSet(IndexType index, unsigned int n = 1); - - /** Euclidean distance of point to index */ - double EuclideanDistanceMetric(IndexType index, PointType p); - -private: - PointSetToDisplacementFieldGenerator(const Self &) = delete; - void operator =(const Self&) = delete; - - /** - * The threshold of metric value. - */ - double m_MetricThreshold; - /** The output size */ - SizeType m_OutputSize; - /** The output spacing. */ - SpacingType m_OutputSpacing; - /** The output origin */ - PointType m_OutputOrigin; - /** Default value */ - ValueType m_DefaultValue; -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbPointSetToDisplacementFieldGenerator.hxx" -#endif - -#endif diff --git a/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.hxx deleted file mode 100644 index f0b69603156bf68220c8bb698ea2bcfabcd894c3..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.hxx +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbPointSetToDisplacementFieldGenerator_hxx -#define otbPointSetToDisplacementFieldGenerator_hxx - -#include "otbPointSetToDisplacementFieldGenerator.h" -#include "otbMacro.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TPointSet, class TDisplacementField> -PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -::PointSetToDisplacementFieldGenerator() -{ - this->SetNumberOfRequiredInputs(1); - m_MetricThreshold = 0.; - m_OutputSize.Fill(100); - m_OutputSpacing.Fill(1.); - m_OutputOrigin.Fill(0.); - m_DefaultValue = 0; -// m_NearestPoints = PointSetType::New(); -} -/** - * Set the pointset containing the disparity. - * \param pointset The pointset containing the disparity. - */ -template <class TPointSet, class TDisplacementField> -void -PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -::SetPointSet(const TPointSet * pointset) -{ - this->itk::ProcessObject::SetNthInput(0, const_cast<PointSetType *>(pointset)); -} -/** - * Get the pointset containing the disparity. - * \return The pointset containing the disparity. - */ -template <class TPointSet, class TDisplacementField> -const TPointSet * -PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -::GetPointSet(void) -{ - return static_cast<const PointSetType *>(this->itk::ProcessObject::GetInput(0)); -} -/** Generate output information */ -template <class TPointSet, class TDisplacementField> -void -PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -::GenerateOutputInformation(void) -{ - DisplacementFieldPointerType outputPtr = this->GetOutput(); - typename DisplacementFieldType::RegionType largest; - largest.SetSize(m_OutputSize); - IndexType index; - index.Fill(0); - largest.SetIndex(index); - outputPtr->SetRegions(largest); - outputPtr->SetSignedSpacing(m_OutputSpacing); - outputPtr->SetOrigin(m_OutputOrigin); - // Force the displacement field to have vector pixel of size 2. - outputPtr->SetNumberOfComponentsPerPixel(2); -} -/** - * Generate the n nearest point in point set - * \param index The index of the pixel to compute. - * \param n The number of nearest point to seek. - * \return A vector containing the index of the nearest point from nearest to most far. - */ -template <class TPointSet, class TDisplacementField> -typename PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -::IndexVectorType -PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -::GenerateNearestValidPointsPointSet(IndexType index, unsigned int n) -{ - typedef Functor::DistanceComparisonFunctor ComparisonFunctorType; - DistanceVectorType distanceVector; - IndexVectorType indexVector; - IndexVectorType sortVector; - unsigned int i = 0; - unsigned int j = 0; - - typedef typename PointSetType::PointsContainer::ConstIterator PointSetIteratorType; - - PointSetIteratorType it = this->GetPointSet()->GetPoints()->Begin(); - for (; it != this->GetPointSet()->GetPoints()->End(); ++it) - { - PointType p; - p[0] = it.Value()[0]; - p[1] = it.Value()[1]; - if (std::abs(this->GetPointSet()->GetPointData()->GetElement(j)[0]) >= m_MetricThreshold) - { - - distanceVector.push_back(EuclideanDistanceMetric(index, p)); - sortVector.push_back(i); - indexVector.push_back(j); - ++i; - } - ++j; - } - - ComparisonFunctorType comp; - comp.SetDistanceVector(distanceVector); - sort(sortVector.begin(), sortVector.end(), comp); - - // building output vector - unsigned int nbElements = (n < indexVector.size() ? n : indexVector.size()); - IndexVectorType output; - for (i = 0; i < nbElements; ++i) - { - output.push_back(indexVector[sortVector[i]]); - } - return output; -} - -template <class TPointSet, class TDisplacementField> -double -PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -::EuclideanDistanceMetric(IndexType index, PointType p) -{ - PointType pprime; - // our point are expressed in index and not in physical coordinates - //this->GetOutput()->TransformIndexToPhysicalPoint(index, pprime); - return std::sqrt(std::pow(index[0] - p[0], 2) + std::pow(index[1] - p[1], 2)); -} -/** - * PrintSelf Method - */ -template <class TPointSet, class TDisplacementField> -void -PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.h deleted file mode 100644 index a947bb82cd939c29420ed9d917118a23558af2e6..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbPointSetWithTransformToDisplacementFieldGenerator_h -#define otbPointSetWithTransformToDisplacementFieldGenerator_h - -#include "otbPointSetToDisplacementFieldGenerator.h" -#include "itkTransform.h" - -namespace otb -{ -/** \class PointSetWithTransformToDisplacementFieldGenerator - * \brief Base class for filters generating a displacement field from a point set enriched with local transform information. - * - * The output of the filters deriving from this base class can be passed to the itk::WarpImageFilter for image resampling. - * - * \sa DisparityMapEstimationMethod - * \sa itk::WarpImageFilter - * - * \ingroup DisparityMap - * - * \ingroup OTBDisplacementField - */ -template <class TPointSet, class TDisplacementField> -class ITK_EXPORT PointSetWithTransformToDisplacementFieldGenerator - : public PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> -{ -public: - /** Standard typedefs */ - typedef PointSetWithTransformToDisplacementFieldGenerator Self; - typedef PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - /** Type macro */ - itkNewMacro(Self); - - /** Creation through object factory macro */ - itkTypeMacro(PointSetWithTransformToDisplacementFieldGenerator, PointSetToDisplacementFieldGenerator); - - /** Template parameters typedefs */ - typedef TPointSet PointSetType; - typedef typename PointSetType::Pointer PointSetPointerType; - - typedef TDisplacementField DisplacementFieldType; - typedef typename DisplacementFieldType::Pointer DisplacementFieldPointerType; - typedef typename DisplacementFieldType::IndexType IndexType; - typedef typename DisplacementFieldType::SizeType SizeType; - typedef typename DisplacementFieldType::SpacingType SpacingType; - typedef typename DisplacementFieldType::PointType PointType; - typedef typename DisplacementFieldType::InternalPixelType ValueType; - - /** More typedefs */ - typedef typename Superclass::DistanceVectorType DistanceVectorType; - typedef typename Superclass::IndexVectorType IndexVectorType; - - /** Transform typedefs */ - typedef itk::Transform<double, 2, 2> TransformType; - typedef typename TransformType::Pointer TransformPointerType; - typedef typename TransformType::ParametersType ParametersType; - - /** Set/Get the Transform. */ - itkSetObjectMacro(Transform, TransformType); - itkGetObjectMacro(Transform, TransformType); - -protected: - /** Constructor */ - PointSetWithTransformToDisplacementFieldGenerator(); - /** Destructor */ - ~PointSetWithTransformToDisplacementFieldGenerator() override {} - /**PrintSelf method */ - void PrintSelf(std::ostream& os, itk::Indent indent) const override; - -private: - PointSetWithTransformToDisplacementFieldGenerator(const Self &) = delete; - void operator =(const Self&) = delete; - - /** - * The transform used for local registration. - */ - TransformPointerType m_Transform; - -}; -} // End namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbPointSetWithTransformToDisplacementFieldGenerator.hxx" -#endif - -#endif diff --git a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.hxx deleted file mode 100644 index 8cd221644a2d657e8127facbe434b852e4df869a..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.hxx +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef otbPointSetWithTransformToDisplacementFieldGenerator_hxx -#define otbPointSetWithTransformToDisplacementFieldGenerator_hxx - -#include "otbPointSetWithTransformToDisplacementFieldGenerator.h" - -#include "otbMacro.h" - -namespace otb -{ -/** - * Constructor - */ -template <class TPointSet, class TDisplacementField> -PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> -::PointSetWithTransformToDisplacementFieldGenerator() -{ - m_Transform = nullptr; // has to be provided by the user -} -/** - * PrintSelf Method - */ -template <class TPointSet, class TDisplacementField> -void -PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} -} // End namespace otb -#endif diff --git a/Modules/Registration/DisplacementField/otb-module.cmake b/Modules/Registration/DisplacementField/otb-module.cmake deleted file mode 100644 index b8efc64ea38e78fa5dbe0f82615e2abb88f26e59..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/otb-module.cmake +++ /dev/null @@ -1,41 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -set(DOCUMENTATION "This module contains filters that generate a deformation -field by using some interpolation criterion on the deformation values from the point -set. Several interpolation methods are available (Nearest neighbours, linear, -BSpline). The class otb::StereorectificationDisplacementFieldSource is specialized -in generating a deformation field between two images in epipolar geometry -(horizontal shifts).") - -otb_module(OTBDisplacementField - DEPENDS - OTBCommon - OTBITK - OTBImageBase - OTBObjectList - - TEST_DEPENDS - OTBImageIO - OTBTestKernel - - DESCRIPTION - "${DOCUMENTATION}" -) diff --git a/Modules/Registration/DisplacementField/test/CMakeLists.txt b/Modules/Registration/DisplacementField/test/CMakeLists.txt deleted file mode 100644 index 440c6b130cf207b956ef74153868428e58bf8bbe..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/test/CMakeLists.txt +++ /dev/null @@ -1,88 +0,0 @@ -# -# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) -# -# This file is part of Orfeo Toolbox -# -# https://www.orfeo-toolbox.org/ -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -otb_module_test() - -set(OTBDisplacementFieldTests -otbDisplacementFieldTestDriver.cxx -otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.cxx -otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.cxx -otbNearestTransformDisplacementFieldGenerator.cxx -otbNearestPointDisplacementFieldGenerator.cxx -otbBSplinesInterpolateTransformDisplacementFieldGenerator.cxx -otbBSplinesInterpolateDisplacementFieldGenerator.cxx -) - -add_executable(otbDisplacementFieldTestDriver ${OTBDisplacementFieldTests}) -target_link_libraries(otbDisplacementFieldTestDriver ${OTBDisplacementField-Test_LIBRARIES}) -otb_module_target_label(otbDisplacementFieldTestDriver) - -# Tests Declaration - -otb_add_test(NAME dmTvNNearestTransformsLinearInterpolateDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver - --compare-image ${EPSILON_10} - ${BASELINE}/dmTvNNearestTransformsLinearInterpolateDeformationField.tif - ${TEMP}/dmTvNNearestTransformsLinearInterpolateDisplacementField.tif - otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator - ${TEMP}/dmTvNNearestTransformsLinearInterpolateDisplacementField.tif - ) - -otb_add_test(NAME dmTvNNearestPointsLinearInterpolateDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver - --compare-image ${EPSILON_10} - ${BASELINE}/dmTvNNearestPointsLinearInterpolateDeformationField.tif - ${TEMP}/dmTvNNearestPointsLinearInterpolateDisplacementField.tif - otbNNearestPointsLinearInterpolateDisplacementFieldGenerator - ${TEMP}/dmTvNNearestPointsLinearInterpolateDisplacementField.tif - ) - - - -otb_add_test(NAME dmTvNearestTransformDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver - --compare-image ${EPSILON_10} - ${BASELINE}/dmTvNearestTransformDeformationField.tif - ${TEMP}/dmTvNearestTransformDisplacementField.tif - otbNearestTransformDisplacementFieldGenerator - ${TEMP}/dmTvNearestTransformDisplacementField.tif - ) - -otb_add_test(NAME dmTvNearestPointDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver - --compare-image ${EPSILON_10} - ${BASELINE}/dmTvNearestPointDeformationField.tif - ${TEMP}/dmTvNearestPointDisplacementField.tif - otbNearestPointDisplacementFieldGenerator - ${TEMP}/dmTvNearestPointDisplacementField.tif - ) - -#otb_add_test(NAME dmTvBSplinesInterpolateTransformDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver - #--compare-image ${EPSILON_4} - #${BASELINE}/dmTvBSplinesInterpolateTransformDeformationFieldGenerator.tif - #${TEMP}/dmTvBSplinesInterpolateTransformDisplacementFieldGenerator.tif - #otbBSplinesInterpolateTransformDisplacementFieldGenerator - #${TEMP}/dmTvBSplinesInterpolateTransformDisplacementFieldGenerator.tif - #) - -otb_add_test(NAME dmTvBSplinesInterpolateDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver - --compare-image ${EPSILON_10} - ${BASELINE}/dmTvBSplinesInterpolateDeformationField.tif - ${TEMP}/dmTvBSplinesInterpolateDisplacementField.tif - otbBSplinesInterpolateDisplacementFieldGenerator - ${TEMP}/dmTvBSplinesInterpolateDisplacementField.tif - ) - diff --git a/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateDisplacementFieldGenerator.cxx deleted file mode 100644 index 9135073f0ccdadbf018d1f7b2761f1fd91b5d66b..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateDisplacementFieldGenerator.cxx +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "itkPointSet.h" -#include "otbVectorImage.h" -#include "otbBSplinesInterpolateDisplacementFieldGenerator.h" -#include "otbImageFileWriter.h" - -int otbBSplinesInterpolateDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - const char * outfname = argv[1]; - typedef double PixelType; - typedef otb::VectorImage<PixelType, Dimension> ImageType; - typedef itk::Array<double> ParamType; - typedef itk::PointSet<ParamType, Dimension> PointSetType; - typedef PointSetType::PointType PointType; - typedef otb::BSplinesInterpolateDisplacementFieldGenerator<PointSetType, ImageType> FilterType; - typedef otb::ImageFileWriter<ImageType> WriterType; - - ImageType::SizeType size; - size.Fill(100); - double thresh = 0.9; - - // Preparing point set - PointSetType::Pointer ps = PointSetType::New(); - PointType p1, p2, p3, p4, p5; - ParamType pd1(3), pd2(3), pd3(3), pd4(3), pd5(3); - - p1[0] = 10; - p1[1] = 10; - p2[0] = 75; - p2[1] = 10; - p3[0] = 50; - p3[1] = 50; - p4[0] = 10; - p4[1] = 60; - p5[0] = 85; - p5[1] = 70; - - pd1[0] = 0.95; - pd1[1] = 10; - pd1[2] = -5; - pd2[0] = 0.98; - pd2[1] = 2; - pd2[2] = 5; - pd3[0] = 0.5; - pd3[1] = 20; - pd3[2] = -20; - pd4[0] = 0.91; - pd4[1] = 15; - pd4[2] = -5; - pd5[0] = 0.91; - pd5[1] = 5; - pd5[2] = 5; - - ps->SetPoint(0, p1); - ps->SetPointData(0, pd1); - ps->SetPoint(1, p2); - ps->SetPointData(1, pd2); - ps->SetPoint(2, p3); - ps->SetPointData(2, pd3); - ps->SetPoint(3, p4); - ps->SetPointData(3, pd4); - ps->SetPoint(4, p5); - ps->SetPointData(4, pd5); - - // Instantiating object - FilterType::Pointer filter = FilterType::New(); - filter->SetOutputSize(size); - filter->SetMetricThreshold(thresh); - filter->SetPointSet(ps); - - WriterType::Pointer writer = WriterType::New(); - writer->SetInput(filter->GetOutput()); - writer->SetFileName(outfname); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateTransformDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateTransformDisplacementFieldGenerator.cxx deleted file mode 100644 index df178d762b61e25893f176f9aa175645280ed5a3..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateTransformDisplacementFieldGenerator.cxx +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "itkPointSet.h" -#include "otbVectorImage.h" -#include "otbBSplinesInterpolateTransformDisplacementFieldGenerator.h" -#include "otbImageFileWriter.h" -#include "itkEuler2DTransform.h" - -int otbBSplinesInterpolateTransformDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - const char * outfname = argv[1]; - typedef double PixelType; - typedef otb::VectorImage<PixelType, Dimension> ImageType; - typedef itk::Array<double> ParamType; - typedef itk::PointSet<ParamType, Dimension> PointSetType; - typedef PointSetType::PointType PointType; - typedef otb::BSplinesInterpolateTransformDisplacementFieldGenerator<PointSetType, ImageType> FilterType; - typedef otb::ImageFileWriter<ImageType> WriterType; - typedef itk::Euler2DTransform<double> TransformType; - - ImageType::SizeType size; - size.Fill(100); - double thresh = 0.9; - - // Preparing point set - PointSetType::Pointer ps = PointSetType::New(); - PointType p1, p2, p3, p4, p5; - ParamType pd1(6), pd2(6), pd3(6), pd4(6), pd5(6); - itk::Point<double, 2> center; - - p1[0] = 10; - p1[1] = 10; - p2[0] = 75; - p2[1] = 10; - p3[0] = 50; - p3[1] = 50; - p4[0] = 10; - p4[1] = 60; - p5[0] = 85; - p5[1] = 70; - center.Fill(50); - - pd1[0] = 0.95; - pd1[1] = 0; - pd1[2] = 0; - pd1[3] = 0.03925; - pd1[4] = 5; - pd1[5] = 5; - pd2[0] = 0.98; - pd2[1] = 0; - pd2[2] = 0; - pd2[3] = -0.03925; - pd2[4] = 5; - pd2[5] = -5; - pd3[0] = 0.5; - pd3[1] = 0; - pd3[2] = 0; - pd3[3] = 0; - pd3[4] = 0; - pd3[5] = 0; - pd4[0] = 0.91; - pd4[1] = 0; - pd4[2] = 0; - pd4[3] = 0.03925; - pd4[4] = -5; - pd4[5] = 5; - pd5[0] = 0.91; - pd5[1] = 0; - pd5[2] = 0; - pd5[3] = -0.03925; - pd5[4] = -5; - pd5[5] = -5; - - ps->SetPoint(0, p1); - ps->SetPointData(0, pd1); - ps->SetPoint(1, p2); - ps->SetPointData(1, pd2); - ps->SetPoint(2, p3); - ps->SetPointData(2, pd3); - ps->SetPoint(3, p4); - ps->SetPointData(3, pd4); - ps->SetPoint(4, p5); - ps->SetPointData(4, pd5); - - TransformType::Pointer transform = TransformType::New(); - transform->SetCenter(center); - - // Instantiating object - FilterType::Pointer filter = FilterType::New(); - filter->SetOutputSize(size); - filter->SetMetricThreshold(thresh); - filter->SetPointSet(ps); - filter->SetTransform(transform); - filter->AddAngularParameter(0); - - WriterType::Pointer writer = WriterType::New(); - writer->SetInput(filter->GetOutput()); - writer->SetFileName(outfname); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Registration/DisplacementField/test/otbDisplacementFieldTestDriver.cxx b/Modules/Registration/DisplacementField/test/otbDisplacementFieldTestDriver.cxx deleted file mode 100644 index 86d6641fce1b1b594048f20c2648a2e95eabdb88..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/test/otbDisplacementFieldTestDriver.cxx +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "otbTestMain.h" - -void RegisterTests() -{ - REGISTER_TEST(otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator); - REGISTER_TEST(otbNNearestPointsLinearInterpolateDisplacementFieldGenerator); - REGISTER_TEST(otbNearestTransformDisplacementFieldGenerator); - REGISTER_TEST(otbNearestPointDisplacementFieldGenerator); - REGISTER_TEST(otbBSplinesInterpolateTransformDisplacementFieldGenerator); - REGISTER_TEST(otbBSplinesInterpolateDisplacementFieldGenerator); -} diff --git a/Modules/Registration/DisplacementField/test/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.cxx deleted file mode 100644 index b487435899319e9d6562802fe539a35a6240d0b4..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/test/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.cxx +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "itkPointSet.h" -#include "otbVectorImage.h" -#include "otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h" -#include "otbImageFileWriter.h" - -int otbNNearestPointsLinearInterpolateDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - const char * outfname = argv[1]; - typedef double PixelType; - typedef otb::VectorImage<PixelType, Dimension> ImageType; - typedef itk::Array<double> ParamType; - typedef itk::PointSet<ParamType, Dimension> PointSetType; - typedef PointSetType::PointType PointType; - typedef otb::NNearestPointsLinearInterpolateDisplacementFieldGenerator<PointSetType, ImageType> FilterType; - typedef otb::ImageFileWriter<ImageType> WriterType; - - ImageType::SizeType size; - size.Fill(100); - double thresh = 0.9; - - // Preparing point set - PointSetType::Pointer ps = PointSetType::New(); - PointType p1, p2, p3, p4, p5; - ParamType pd1(3), pd2(3), pd3(3), pd4(3), pd5(3); - - p1[0] = 10; - p1[1] = 10; - p2[0] = 75; - p2[1] = 10; - p3[0] = 50; - p3[1] = 50; - p4[0] = 10; - p4[1] = 60; - p5[0] = 85; - p5[1] = 70; - - pd1[0] = 0.95; - pd1[1] = 10; - pd1[2] = -5; - pd2[0] = 0.98; - pd2[1] = 2; - pd2[2] = 5; - pd3[0] = 0.5; - pd3[1] = 20; - pd3[2] = -20; - pd4[0] = 0.91; - pd4[1] = 15; - pd4[2] = -5; - pd5[0] = 0.91; - pd5[1] = 5; - pd5[2] = 5; - - ps->SetPoint(0, p1); - ps->SetPointData(0, pd1); - ps->SetPoint(1, p2); - ps->SetPointData(1, pd2); - ps->SetPoint(2, p3); - ps->SetPointData(2, pd3); - ps->SetPoint(3, p4); - ps->SetPointData(3, pd4); - ps->SetPoint(4, p5); - ps->SetPointData(4, pd5); - - // Instantiating object - FilterType::Pointer filter = FilterType::New(); - filter->SetOutputSize(size); - filter->SetMetricThreshold(thresh); - filter->SetNumberOfPoints(5); - filter->SetPointSet(ps); - - WriterType::Pointer writer = WriterType::New(); - writer->SetInput(filter->GetOutput()); - writer->SetFileName(outfname); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Registration/DisplacementField/test/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.cxx deleted file mode 100644 index fb3b638d83fb61f46aef76faa7204e906c5404f0..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/test/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.cxx +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "itkPointSet.h" -#include "otbVectorImage.h" -#include "otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h" -#include "otbImageFileWriter.h" -#include "itkEuler2DTransform.h" - -int otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - const char * outfname = argv[1]; - typedef double PixelType; - typedef otb::VectorImage<PixelType, Dimension> ImageType; - typedef itk::Array<double> ParamType; - typedef itk::PointSet<ParamType, Dimension> PointSetType; - typedef PointSetType::PointType PointType; - typedef otb::NNearestTransformsLinearInterpolateDisplacementFieldGenerator<PointSetType, ImageType> FilterType; - typedef otb::ImageFileWriter<ImageType> WriterType; - typedef itk::Euler2DTransform<double> TransformType; - - ImageType::SizeType size; - size.Fill(100); - double thresh = 0.9; - - // Preparing point set - PointSetType::Pointer ps = PointSetType::New(); - PointType p1, p2, p3, p4, p5; - ParamType pd1(6), pd2(6), pd3(6), pd4(6), pd5(6); - itk::Point<double, 2> center; - - p1[0] = 10; - p1[1] = 10; - p2[0] = 75; - p2[1] = 10; - p3[0] = 50; - p3[1] = 50; - p4[0] = 10; - p4[1] = 60; - p5[0] = 85; - p5[1] = 70; - center.Fill(50); - - pd1[0] = 0.95; - pd1[1] = 0; - pd1[2] = 0; - pd1[3] = 5; - pd1[4] = 5; - pd1[5] = 0.001769; - pd2[0] = 0.98; - pd2[1] = 0; - pd2[2] = 0; - pd2[3] = -5; - pd2[4] = 5; - pd2[5] = -0.001769; - pd3[0] = 0.5; - pd3[1] = 0; - pd3[2] = 0; - pd3[3] = 0; - pd3[4] = 0; - pd3[5] = 0; - pd4[0] = 0.91; - pd4[1] = 0; - pd4[2] = 0; - pd4[3] = 5; - pd4[4] = -5; - pd4[5] = 0.001769; - pd5[0] = 0.91; - pd5[1] = 0; - pd5[2] = 0; - pd5[3] = -5; - pd5[4] = -5; - pd5[5] = -0.001769; - - ps->SetPoint(0, p1); - ps->SetPointData(0, pd1); - ps->SetPoint(1, p2); - ps->SetPointData(1, pd2); - ps->SetPoint(2, p3); - ps->SetPointData(2, pd3); - ps->SetPoint(3, p4); - ps->SetPointData(3, pd4); - ps->SetPoint(4, p5); - ps->SetPointData(4, pd5); - - TransformType::Pointer transform = TransformType::New(); - transform->SetCenter(center); - - // Instantiating object - FilterType::Pointer filter = FilterType::New(); - filter->SetOutputSize(size); - filter->SetMetricThreshold(thresh); - filter->SetNumberOfPoints(5); - filter->SetPointSet(ps); - filter->SetTransform(transform); - - WriterType::Pointer writer = WriterType::New(); - writer->SetInput(filter->GetOutput()); - writer->SetFileName(outfname); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Registration/DisplacementField/test/otbNearestPointDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbNearestPointDisplacementFieldGenerator.cxx deleted file mode 100644 index b6de1e79ab945896a66ffd7b1ccf2685351a0d6e..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/test/otbNearestPointDisplacementFieldGenerator.cxx +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "itkPointSet.h" -#include "otbVectorImage.h" -#include "otbNearestPointDisplacementFieldGenerator.h" -#include "otbImageFileWriter.h" - -int otbNearestPointDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - const char * outfname = argv[1]; - typedef double PixelType; - typedef otb::VectorImage<PixelType, Dimension> ImageType; - typedef itk::Array<double> ParamType; - typedef itk::PointSet<ParamType, Dimension> PointSetType; - typedef PointSetType::PointType PointType; - typedef otb::NearestPointDisplacementFieldGenerator<PointSetType, ImageType> FilterType; - typedef otb::ImageFileWriter<ImageType> WriterType; - - ImageType::SizeType size; - size.Fill(100); - double thresh = 0.9; - - // Preparing point set - PointSetType::Pointer ps = PointSetType::New(); - PointType p1, p2, p3, p4, p5; - ParamType pd1(3), pd2(3), pd3(3), pd4(3), pd5(3); - - p1[0] = 10; - p1[1] = 10; - p2[0] = 75; - p2[1] = 10; - p3[0] = 50; - p3[1] = 50; - p4[0] = 10; - p4[1] = 60; - p5[0] = 85; - p5[1] = 70; - - pd1[0] = 0.95; - pd1[1] = 10; - pd1[2] = -5; - pd2[0] = 0.98; - pd2[1] = 2; - pd2[2] = 5; - pd3[0] = 0.5; - pd3[1] = 20; - pd3[2] = -20; - pd4[0] = 0.91; - pd4[1] = 15; - pd4[2] = -5; - pd5[0] = 0.91; - pd5[1] = 5; - pd5[2] = 5; - - ps->SetPoint(0, p1); - ps->SetPointData(0, pd1); - ps->SetPoint(1, p2); - ps->SetPointData(1, pd2); - ps->SetPoint(2, p3); - ps->SetPointData(2, pd3); - ps->SetPoint(3, p4); - ps->SetPointData(3, pd4); - ps->SetPoint(4, p5); - ps->SetPointData(4, pd5); - - // Instantiating object - FilterType::Pointer filter = FilterType::New(); - filter->SetOutputSize(size); - filter->SetMetricThreshold(thresh); - filter->SetPointSet(ps); - - WriterType::Pointer writer = WriterType::New(); - writer->SetInput(filter->GetOutput()); - writer->SetFileName(outfname); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Registration/DisplacementField/test/otbNearestTransformDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbNearestTransformDisplacementFieldGenerator.cxx deleted file mode 100644 index abf2463501a6ac807d68850cdf9b8c0e6748a21f..0000000000000000000000000000000000000000 --- a/Modules/Registration/DisplacementField/test/otbNearestTransformDisplacementFieldGenerator.cxx +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES) - * - * This file is part of Orfeo Toolbox - * - * https://www.orfeo-toolbox.org/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "itkMacro.h" -#include "itkPointSet.h" -#include "otbVectorImage.h" -#include "otbNearestTransformDisplacementFieldGenerator.h" -#include "otbImageFileWriter.h" -#include "itkEuler2DTransform.h" - -int otbNearestTransformDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[]) -{ - const unsigned int Dimension = 2; - const char * outfname = argv[1]; - typedef double PixelType; - typedef otb::VectorImage<PixelType, Dimension> ImageType; - typedef itk::Array<double> ParamType; - typedef itk::PointSet<ParamType, Dimension> PointSetType; - typedef PointSetType::PointType PointType; - typedef otb::NearestTransformDisplacementFieldGenerator<PointSetType, ImageType> FilterType; - typedef otb::ImageFileWriter<ImageType> WriterType; - typedef itk::Euler2DTransform<double> TransformType; - - ImageType::SizeType size; - size.Fill(100); - double thresh = 0.9; - - // Preparing point set - PointSetType::Pointer ps = PointSetType::New(); - PointType p1, p2, p3, p4, p5; - ParamType pd1(6), pd2(6), pd3(6), pd4(6), pd5(6); - itk::Point<double, 2> center; - - p1[0] = 10; - p1[1] = 10; - p2[0] = 75; - p2[1] = 10; - p3[0] = 50; - p3[1] = 50; - p4[0] = 10; - p4[1] = 60; - p5[0] = 85; - p5[1] = 70; - center.Fill(50); - - pd1[0] = 0.95; - pd1[1] = 0; - pd1[2] = 0; - pd1[3] = 5; - pd1[4] = 5; - pd1[5] = 0.001769; - pd2[0] = 0.98; - pd2[1] = 0; - pd2[2] = 0; - pd2[3] = -5; - pd2[4] = 5; - pd2[5] = -0.001769; - pd3[0] = 0.5; - pd3[1] = 0; - pd3[2] = 0; - pd3[3] = 0; - pd3[4] = 0; - pd3[5] = 0; - pd4[0] = 0.91; - pd4[1] = 0; - pd4[2] = 0; - pd4[3] = 5; - pd4[4] = -5; - pd4[5] = 0.001769; - pd5[0] = 0.91; - pd5[1] = 0; - pd5[2] = 0; - pd5[3] = -5; - pd5[4] = -5; - pd5[5] = -0.001769; - - ps->SetPoint(0, p1); - ps->SetPointData(0, pd1); - ps->SetPoint(1, p2); - ps->SetPointData(1, pd2); - ps->SetPoint(2, p3); - ps->SetPointData(2, pd3); - ps->SetPoint(3, p4); - ps->SetPointData(3, pd4); - ps->SetPoint(4, p5); - ps->SetPointData(4, pd5); - - TransformType::Pointer transform = TransformType::New(); - transform->SetCenter(center); - - // Instantiating object - FilterType::Pointer filter = FilterType::New(); - filter->SetOutputSize(size); - filter->SetMetricThreshold(thresh); - filter->SetPointSet(ps); - filter->SetTransform(transform); - - WriterType::Pointer writer = WriterType::New(); - writer->SetInput(filter->GetOutput()); - writer->SetFileName(outfname); - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx b/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx index 7e8df6ab358066e14723bad5b162ad9778b56751..2263ed97cee6e57e9401b288077f538329408093 100644 --- a/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx +++ b/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx @@ -98,12 +98,10 @@ int otbMulti3DMapToDEMFilterEPSG(int argc, char* argv[]) for(unsigned int i=0; i<mapSize; i++) { multiFilter->Set3DMapInput(i,mapReaderList->GetNthElement(i)->GetOutput()); - // multiFilter->SetMapKeywordList(i,mapReaderList->GetNthElement(i)->GetOutput()->GetImageKeywordlist()); multiFilter->SetMaskInput(i,maskReaderList->GetNthElement(i)->GetOutput()); } //set output parameters - // multiFilter->SetOutputParametersFrom3DMap(); VectorImageType::IndexType start; start[0] = atoi(argv[argc-9]); start[1] = atoi(argv[argc-8]); @@ -132,7 +130,6 @@ int otbMulti3DMapToDEMFilterEPSG(int argc, char* argv[]) WriterType::Pointer writer = WriterType::New(); multiFilter->SetNumberOfThreads(atoi(argv[argc-11])); - //multiFilter->Update(); writer->SetInput(multiFilter->GetOutput()); @@ -141,153 +138,6 @@ int otbMulti3DMapToDEMFilterEPSG(int argc, char* argv[]) writer->Update(); return EXIT_SUCCESS; - - /* - if (argc != 12) - { - std::cout << argv[0] << - " <input filename> <output filename> <origin easting> <origin northing> <x size> <y size> <x spacing> <y spacing> <UTM zone> <UTM hemisphere>" - << std::endl; - - return EXIT_FAILURE; - } - - typedef otb::VectorImage<double, 2> VectorImageType; - typedef otb::ImageFileReader<VectorImageType> ReaderType; - typedef otb::ImageFileWriter<VectorImageType> WriterType; - typedef otb::UtmInverseProjection UtmMapProjectionType; - typedef otb::OrthoRectificationFilter<VectorImageType, VectorImageType, UtmMapProjectionType> OrthoRectifFilterType; - - //Allocate pointer - ReaderType::Pointer reader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - - OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New(); - UtmMapProjectionType::Pointer utmMapProjection = UtmMapProjectionType::New(); - - // Set parameters ... - reader->SetFileName(argv[1]); - writer->SetFileName(argv[2]); - - reader->GenerateOutputInformation(); - std::cout << reader->GetOutput() << std::endl; - - orthoRectifFilter->SetInput(reader->GetOutput()); - - VectorImageType::IndexType start; - start[0] = 0; - start[1] = 0; - orthoRectifFilter->SetOutputStartIndex(start); - - VectorImageType::SizeType size; - size[0] = atoi(argv[5]); // X size - size[1] = atoi(argv[6]); //Y size - orthoRectifFilter->SetOutputSize(size); - - VectorImageType::SpacingType spacing; - spacing[0] = atof(argv[7]); - spacing[1] = atof(argv[8]); - orthoRectifFilter->SetOutputSpacing(spacing); - - VectorImageType::PointType origin; - origin[0] = strtod(argv[3], NULL); //Origin easting - origin[1] = strtod(argv[4], NULL); //Origin northing - orthoRectifFilter->SetOutputOrigin(origin); - - utmMapProjection->SetZone(atoi(argv[9])); - utmMapProjection->SetHemisphere(argv[10][0]); - orthoRectifFilter->SetMapProjection(utmMapProjection); - - // Deformation Field spacing - VectorImageType::SpacingType gridSpacing; - gridSpacing[0] = atof(argv[11]); - gridSpacing[1] = -atof(argv[11]); - orthoRectifFilter->SetDeformationFieldSpacing(gridSpacing); - - VectorImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel()); - no_data.Fill(0); - orthoRectifFilter->SetEdgePaddingValue(no_data); - - writer->SetInput(orthoRectifFilter->GetOutput()); - writer->SetNumberOfDivisionsTiledStreaming(4); - writer->Update(); - - return EXIT_SUCCESS; */ - - - - - /* - if (argc != 12) - { - std::cout << argv[0] << - " <input filename> <output filename> <origin easting> <origin northing> <x size> <y size> <x spacing> <y spacing> <UTM zone> <UTM hemisphere>" - << std::endl; - - return EXIT_FAILURE; - } - - typedef otb::VectorImage<double, 2> VectorImageType; - typedef otb::ImageFileReader<VectorImageType> ReaderType; - typedef otb::ImageFileWriter<VectorImageType> WriterType; - typedef otb::UtmInverseProjection UtmMapProjectionType; - typedef otb::OrthoRectificationFilter<VectorImageType, VectorImageType, UtmMapProjectionType> OrthoRectifFilterType; - - //Allocate pointer - ReaderType::Pointer reader = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - - OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New(); - UtmMapProjectionType::Pointer utmMapProjection = UtmMapProjectionType::New(); - - // Set parameters ... - reader->SetFileName(argv[1]); - writer->SetFileName(argv[2]); - - reader->GenerateOutputInformation(); - std::cout << reader->GetOutput() << std::endl; - - orthoRectifFilter->SetInput(reader->GetOutput()); - - VectorImageType::IndexType start; - start[0] = 0; - start[1] = 0; - orthoRectifFilter->SetOutputStartIndex(start); - - VectorImageType::SizeType size; - size[0] = atoi(argv[5]); // X size - size[1] = atoi(argv[6]); //Y size - orthoRectifFilter->SetOutputSize(size); - - VectorImageType::SpacingType spacing; - spacing[0] = atof(argv[7]); - spacing[1] = atof(argv[8]); - orthoRectifFilter->SetOutputSpacing(spacing); - - VectorImageType::PointType origin; - origin[0] = strtod(argv[3], NULL); //Origin easting - origin[1] = strtod(argv[4], NULL); //Origin northing - orthoRectifFilter->SetOutputOrigin(origin); - - utmMapProjection->SetZone(atoi(argv[9])); - utmMapProjection->SetHemisphere(argv[10][0]); - orthoRectifFilter->SetMapProjection(utmMapProjection); - - // Deformation Field spacing - VectorImageType::SpacingType gridSpacing; - gridSpacing[0] = atof(argv[11]); - gridSpacing[1] = -atof(argv[11]); - orthoRectifFilter->SetDeformationFieldSpacing(gridSpacing); - - VectorImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel()); - no_data.Fill(0); - orthoRectifFilter->SetEdgePaddingValue(no_data); - - writer->SetInput(orthoRectifFilter->GetOutput()); - writer->SetNumberOfDivisionsTiledStreaming(4); - writer->Update(); - - return EXIT_SUCCESS; */ } int otbMulti3DMapToDEMFilterManual(int argc, char* argv[]) @@ -354,12 +204,10 @@ multiFilter->SetCellFusionMode(fusionMode); for(unsigned int i=0; i<mapSize; i++) { multiFilter->Set3DMapInput(i,mapReaderList->GetNthElement(i)->GetOutput()); - // multiFilter->SetMapKeywordList(i,mapReaderList->GetNthElement(i)->GetOutput()->GetImageKeywordlist()); multiFilter->SetMaskInput(i,maskReaderList->GetNthElement(i)->GetOutput()); } //set output parameters -//multiFilter->SetOutputParametersFrom3DMap(); VectorImageType::IndexType start; start[0] = atoi(argv[argc-7]); start[1] = atoi(argv[argc-8]); @@ -385,7 +233,6 @@ multiFilter->SetOutputOrigin(origin); WriterType::Pointer writer = WriterType::New(); multiFilter->SetNumberOfThreads(atoi(argv[argc-10])); -//multiFilter->Update(); writer->SetInput(multiFilter->GetOutput()); @@ -395,79 +242,6 @@ writer->Update(); return EXIT_SUCCESS; - -/* -if (argc != 12) - { - std::cout << argv[0] << - " <input filename> <output filename> <origin easting> <origin northing> <x size> <y size> <x spacing> <y spacing> <UTM zone> <UTM hemisphere>" - << std::endl; - - return EXIT_FAILURE; - } - -typedef otb::VectorImage<double, 2> VectorImageType; -typedef otb::ImageFileReader<VectorImageType> ReaderType; -typedef otb::ImageFileWriter<VectorImageType> WriterType; -typedef otb::UtmInverseProjection UtmMapProjectionType; -typedef otb::OrthoRectificationFilter<VectorImageType, VectorImageType, UtmMapProjectionType> OrthoRectifFilterType; - -//Allocate pointer -ReaderType::Pointer reader = ReaderType::New(); -WriterType::Pointer writer = WriterType::New(); - -OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New(); -UtmMapProjectionType::Pointer utmMapProjection = UtmMapProjectionType::New(); - -// Set parameters ... -reader->SetFileName(argv[1]); -writer->SetFileName(argv[2]); - -reader->GenerateOutputInformation(); -std::cout << reader->GetOutput() << std::endl; - -orthoRectifFilter->SetInput(reader->GetOutput()); - -VectorImageType::IndexType start; -start[0] = 0; -start[1] = 0; -orthoRectifFilter->SetOutputStartIndex(start); - -VectorImageType::SizeType size; -size[0] = atoi(argv[5]); // X size -size[1] = atoi(argv[6]); //Y size -orthoRectifFilter->SetOutputSize(size); - -VectorImageType::SpacingType spacing; -spacing[0] = atof(argv[7]); -spacing[1] = atof(argv[8]); -orthoRectifFilter->SetOutputSpacing(spacing); - -VectorImageType::PointType origin; -origin[0] = strtod(argv[3], NULL); //Origin easting -origin[1] = strtod(argv[4], NULL); //Origin northing -orthoRectifFilter->SetOutputOrigin(origin); - -utmMapProjection->SetZone(atoi(argv[9])); -utmMapProjection->SetHemisphere(argv[10][0]); -orthoRectifFilter->SetMapProjection(utmMapProjection); - -// Deformation Field spacing -VectorImageType::SpacingType gridSpacing; -gridSpacing[0] = atof(argv[11]); -gridSpacing[1] = -atof(argv[11]); -orthoRectifFilter->SetDeformationFieldSpacing(gridSpacing); - -VectorImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel()); -no_data.Fill(0); -orthoRectifFilter->SetEdgePaddingValue(no_data); - -writer->SetInput(orthoRectifFilter->GetOutput()); -writer->SetNumberOfDivisionsTiledStreaming(4); -writer->Update(); - -return EXIT_SUCCESS; */ - } @@ -529,7 +303,7 @@ int otbMulti3DMapToDEMFilter(int argc, char* argv[]) for(unsigned int i=0; i<mapSize; i++) { multiFilter->Set3DMapInput(i,mapReaderList->GetNthElement(i)->GetOutput()); - // multiFilter->SetMapKeywordList(i,mapReaderList->GetNthElement(i)->GetOutput()->GetImageKeywordlist()); + multiFilter->SetMaskInput(i,maskReaderList->GetNthElement(i)->GetOutput()); } multiFilter->SetOutputParametersFrom3DMap(); @@ -537,7 +311,6 @@ int otbMulti3DMapToDEMFilter(int argc, char* argv[]) WriterType::Pointer writer = WriterType::New(); multiFilter->SetNumberOfThreads(atoi(argv[argc-2])); - //multiFilter->Update(); writer->SetInput(multiFilter->GetOutput()); diff --git a/Modules/Segmentation/Conversion/test/CMakeLists.txt b/Modules/Segmentation/Conversion/test/CMakeLists.txt index 363687e5c3cd789d24cdeaa9b26b594e2f56513d..b704bd6275d83837200861e7448c820f89dda0ac 100644 --- a/Modules/Segmentation/Conversion/test/CMakeLists.txt +++ b/Modules/Segmentation/Conversion/test/CMakeLists.txt @@ -195,19 +195,11 @@ otb_add_test(NAME bfTvVectorDataRasterizeFilterSHP COMMAND otbConversionTestDriv #4 25 0.1 100 #) -otb_add_test(NAME obTvLabelMapToVectorDataFilter2 COMMAND otbConversionTestDriver - --compare-ogr ${NOTOL} - ${BASELINE_FILES}/obTvLabelMapToVectorDataFilter.shp - ${TEMP}/obTvLabelMapToVectorDataFilter2.shp - otbLabelMapToVectorDataFilter - ${INPUTDATA}/rcc8_mire5.png - ${TEMP}/obTvLabelMapToVectorDataFilter2.shp) - otb_add_test(NAME obTvLabelMapToVectorDataFilter COMMAND otbConversionTestDriver --compare-ogr ${NOTOL} ${BASELINE_FILES}/obTvLabelMapToVectorDataFilter.shp ${TEMP}/obTvLabelMapToVectorDataFilter.shp otbLabelMapToVectorDataFilter - ${INPUTDATA}/rcc8_mire1.png + ${INPUTDATA}/labelImage_UnsignedChar.tif ${TEMP}/obTvLabelMapToVectorDataFilter.shp) diff --git a/Modules/Segmentation/Metrics/test/CMakeLists.txt b/Modules/Segmentation/Metrics/test/CMakeLists.txt index 1b286013d0ad582630ea14378ed22f38afca90aa..63f104f6ca630af3b11dd5fb2bc1333a70caad3c 100644 --- a/Modules/Segmentation/Metrics/test/CMakeLists.txt +++ b/Modules/Segmentation/Metrics/test/CMakeLists.txt @@ -47,8 +47,8 @@ otb_add_test(NAME obTvHooverMatrixFilter COMMAND otbMetricsTestDriver ${BASELINE_FILES}/obTvHooverMatrixFilter.txt ${TEMP}/obTvHooverMatrixFilter.txt otbHooverMatrixFilter - ${INPUTDATA}/Seg1InputForRCC8Graph.tif - ${INPUTDATA}/Seg2InputForRCC8Graph.tif + ${INPUTDATA}/labelImage_UnsignedChar.tif + ${INPUTDATA}/labelImage_UnsignedChar.tif ${TEMP}/obTvHooverMatrixFilter.txt ) diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h index 458213a22aa04a63a47064c59030aedf6441e07c..570c6cd0ea1e29a0c77b90fa3019ae9245204711 100644 --- a/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h +++ b/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h @@ -39,8 +39,7 @@ namespace otb * of composition of the two basic morphological operation, the filtered details are dark * on a brighter background. * - * \sa ClosingOpeningMorphologicalFilter, - * MorphologicalPyramidAnalysisFilter + * \sa ClosingOpeningMorphologicalFilter * * \ingroup OTBMorphologicalProfiles */ diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h index df47e1bd469765126ecabfb15e4a2a15163bf1a0..3a329241c20a8bfa13ad8771b3edb46c6d9b4d73 100644 --- a/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h +++ b/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h @@ -39,8 +39,7 @@ namespace otb * of composition of the two basic morphological operation, the filtered details are dark * on a brighter background. * - * \sa ClosingOpeningMorphologicalFilter, - * MorphologicalPyramidAnalyseFilter + * \sa ClosingOpeningMorphologicalFilter * * \ingroup OTBMorphologicalProfiles */