diff --git a/data/airplane.ply b/data/airplane.ply new file mode 100644 index 0000000..00964e4 --- /dev/null +++ b/data/airplane.ply @@ -0,0 +1,3796 @@ +ply +format ascii 1.0 +element vertex 1335 +property float32 x +property float32 y +property float32 z +element face 2452 +property list uint8 int32 vertex_indices +end_header +896.994 48.7601 82.2656 +906.593 48.7601 80.7452 +907.539 55.4902 83.6581 +896.994 55.4902 85.3283 +896.994 42.8477 77.825 +905.221 42.8477 76.522 +896.994 38.0305 72.2152 +903.487 38.0305 71.1868 +896.994 34.5348 65.6995 +901.474 34.5348 64.9899 +896.994 32.5246 58.5837 +899.275 32.5246 58.2225 +896.994 32.0943 51.202 +915.252 48.7601 76.333 +917.053 55.4902 78.8108 +912.642 42.8477 72.7405 +909.345 38.0305 68.2021 +905.515 34.5348 62.9307 +901.333 32.5246 57.174 +922.125 48.7601 69.4607 +924.602 55.4902 71.261 +918.532 42.8477 66.8506 +913.994 38.0305 63.5533 +908.722 34.5348 59.7234 +902.966 32.5246 55.5409 +926.537 48.7601 60.8012 +929.45 55.4902 61.7476 +922.314 42.8477 59.429 +916.978 38.0305 57.6955 +910.782 34.5348 55.682 +904.014 32.5246 53.4831 +928.057 48.7601 51.202 +931.12 55.4902 51.202 +923.617 42.8477 51.202 +918.007 38.0305 51.202 +911.491 34.5348 51.202 +904.375 32.5246 51.202 +926.537 48.7601 41.6029 +929.45 55.4902 40.6564 +922.314 42.8477 42.9751 +916.978 38.0305 44.7086 +910.782 34.5348 46.7221 +904.014 32.5246 48.9209 +922.125 48.7601 32.9433 +924.602 55.4902 31.1431 +918.532 42.8477 35.5534 +913.994 38.0305 38.8508 +908.722 34.5348 42.6806 +902.966 32.5246 46.8632 +915.252 48.7601 26.0711 +917.053 55.4902 23.5932 +912.642 42.8477 29.6635 +909.345 38.0305 34.202 +905.515 34.5348 39.4733 +901.333 32.5246 45.2301 +906.593 48.7601 21.6588 +907.539 55.4902 18.746 +905.221 42.8477 25.882 +903.487 38.0305 31.2173 +901.474 34.5348 37.4141 +899.275 32.5246 44.1816 +896.994 48.7601 20.1385 +896.994 55.4902 17.0757 +896.994 42.8477 24.579 +896.994 38.0305 30.1888 +896.994 34.5348 36.7045 +896.994 32.5246 43.8203 +887.395 48.7601 21.6588 +886.448 55.4902 18.746 +888.767 42.8477 25.882 +890.5 38.0305 31.2173 +892.514 34.5348 37.4141 +894.713 32.5246 44.1816 +878.735 48.7601 26.0711 +876.935 55.4902 23.5932 +881.345 42.8477 29.6635 +884.642 38.0305 34.202 +888.472 34.5348 39.4733 +892.655 32.5246 45.2301 +871.863 48.7601 32.9433 +869.385 55.4902 31.1431 +875.455 42.8477 35.5534 +879.994 38.0305 38.8508 +885.265 34.5348 42.6806 +891.022 32.5246 46.8632 +867.451 48.7601 41.6029 +864.538 55.4902 40.6564 +871.674 42.8477 42.9751 +877.009 38.0305 44.7086 +883.206 34.5348 46.7221 +889.973 32.5246 48.9209 +865.93 48.7601 51.202 +862.867 55.4902 51.202 +870.371 42.8477 51.202 +875.98 38.0305 51.202 +882.496 34.5348 51.202 +889.612 32.5246 51.202 +867.451 48.7601 60.8012 +864.538 55.4902 61.7476 +871.674 42.8477 59.429 +877.009 38.0305 57.6955 +883.206 34.5348 55.682 +889.973 32.5246 53.4831 +871.863 48.7601 69.4607 +869.385 55.4902 71.261 +875.455 42.8477 66.8506 +879.994 38.0305 63.5533 +885.265 34.5348 59.7234 +891.022 32.5246 55.5409 +878.735 48.7601 76.333 +876.935 55.4902 78.8108 +881.345 42.8477 72.7405 +884.642 38.0305 68.2021 +888.472 34.5348 62.9307 +892.655 32.5246 57.174 +887.395 48.7601 80.7452 +886.448 55.4902 83.6581 +888.767 42.8477 76.522 +890.5 38.0305 71.1868 +892.514 34.5348 64.9899 +894.713 32.5246 58.2225 +896.994 955.49 2.7645 +921.01 955.49 6.56826 +923.358 895.49 -8.2572 +896.994 895.49 -12.4329 +896.994 1015.49 16.0985 +918.949 1015.49 19.5759 +896.994 1075.49 35.5104 +915.95 1075.49 38.5128 +896.994 1135.49 84.3781 +908.4 1135.49 86.1847 +896.994 1195.49 108.921 +904.607 1195.49 110.127 +896.994 1237.5 126.461 +901.896 1237.49 127.245 +942.675 955.49 17.6071 +947.141 895.49 3.861 +938.756 1015.49 29.6678 +933.051 1075.49 47.2261 +918.689 1135.49 91.4273 +911.476 1195.49 113.627 +906.319 1237.49 129.498 +959.868 955.49 34.8007 +966.016 895.49 22.7356 +954.474 1015.49 45.3864 +946.622 1075.49 60.7974 +926.855 1135.49 99.5931 +916.927 1195.49 119.078 +909.829 1237.49 133.008 +970.907 955.49 56.4657 +978.134 895.49 46.5189 +964.566 1015.49 65.1929 +955.335 1075.49 77.8982 +932.097 1135.49 109.882 +920.426 1195.49 125.946 +912.082 1237.49 137.431 +974.711 955.49 80.4816 +982.309 895.49 72.883 +968.044 1015.49 87.1486 +958.338 1075.49 96.8546 +933.904 1135.49 121.288 +921.632 1195.49 133.56 +912.859 1237.49 142.334 +970.907 955.49 104.498 +978.134 895.49 99.247 +964.566 1015.49 109.104 +955.335 1075.49 115.811 +932.097 1135.49 132.694 +920.426 1195.49 141.174 +912.082 1237.49 147.236 +959.868 955.49 126.163 +966.016 895.49 123.03 +954.474 1015.49 128.911 +946.622 1075.49 132.912 +926.855 1135.49 142.984 +916.927 1195.49 148.042 +909.829 1237.49 151.659 +942.675 955.49 143.356 +947.141 895.49 141.905 +938.756 1015.49 144.629 +933.051 1075.49 146.483 +918.689 1135.49 151.149 +911.476 1195.49 153.493 +906.319 1237.49 155.169 +921.01 955.49 154.395 +923.358 895.49 154.023 +918.949 1015.49 154.721 +915.95 1075.49 155.196 +908.4 1135.49 156.392 +904.607 1195.49 156.993 +901.896 1237.49 157.422 +896.994 955.49 158.199 +896.994 895.49 158.199 +896.994 1015.49 158.199 +896.994 1075.49 158.199 +896.994 1135.49 158.199 +896.994 1195.49 158.199 +896.994 1237.5 158.206 +896.994 115.49 0 +915.429 115.49 2.91996 +907.539 55.4902 18.7459 +896.994 175.49 -9.65898 +921.232 175.49 -5.82 +896.994 235.49 -12.4329 +923.358 235.49 -8.2572 +932.06 115.49 11.3939 +943.098 175.49 5.3211 +947.141 235.49 3.861 +945.259 115.49 24.5924 +960.45 175.49 22.6738 +966.016 235.49 22.7356 +953.733 115.49 41.2235 +971.591 175.49 44.5395 +978.134 235.49 46.5189 +956.653 115.49 59.6593 +975.43 175.49 68.7778 +982.309 235.49 72.883 +953.733 115.49 78.095 +971.591 175.49 93.0161 +978.134 235.49 99.247 +945.259 115.49 94.7261 +960.45 175.49 114.882 +966.016 235.49 123.03 +932.06 115.49 107.925 +943.098 175.49 132.234 +947.141 235.49 141.905 +915.429 115.49 116.399 +921.232 175.49 143.376 +923.358 235.49 154.023 +896.994 115.49 119.319 +896.994 175.49 147.215 +896.994 235.49 158.199 +896.994 475.49 -17.7412 +928.19 475.49 -17.2253 +923.358 415.49 -8.2572 +896.994 415.49 -12.4329 +896.994 535.49 -17.7412 +928.19 535.49 -17.2253 +896.994 595.49 -17.7412 +928.19 595.49 -17.2253 +896.994 655.49 -17.7412 +928.19 655.49 -17.2253 +896.994 715.49 -12.4329 +923.358 715.49 -8.2572 +958.915 475.49 -12.4545 +947.141 415.49 3.861 +958.915 535.49 -12.4545 +958.915 595.49 -12.4545 +958.915 655.49 -12.4545 +947.141 715.49 3.861 +977.014 475.49 10.782 +966.016 415.49 22.7356 +977.014 535.49 10.782 +977.014 595.49 10.782 +977.014 655.49 10.782 +966.016 715.49 22.7356 +980.825 475.49 41.7158 +978.134 415.49 46.5189 +980.825 535.49 41.7158 +980.825 595.49 41.7158 +980.825 655.49 41.7158 +978.134 715.49 46.5189 +982.309 475.49 72.883 +982.309 415.49 72.883 +982.309 535.49 72.883 +982.309 595.49 72.883 +982.309 655.49 72.883 +982.309 715.49 72.883 +978.134 475.49 99.247 +978.134 415.49 99.247 +978.134 535.49 99.247 +978.134 595.49 99.247 +978.134 655.49 99.247 +978.134 715.49 99.247 +966.016 475.49 123.03 +966.016 415.49 123.03 +966.016 535.49 123.03 +966.016 595.49 123.03 +966.016 655.49 123.03 +966.016 715.49 123.03 +947.141 475.49 141.905 +947.141 415.49 141.905 +947.141 535.49 141.905 +947.141 595.49 141.905 +947.141 655.49 141.905 +947.141 715.49 141.905 +923.358 475.49 154.023 +923.358 415.49 154.023 +923.358 535.49 154.023 +923.358 595.49 154.023 +923.358 655.49 154.023 +923.358 715.49 154.023 +896.994 475.49 158.199 +896.994 415.49 158.199 +896.994 535.49 158.199 +896.994 595.49 158.199 +896.994 655.49 158.199 +896.994 715.49 158.199 +896.994 295.49 -12.4329 +923.358 295.49 -8.2572 +896.994 355.49 -12.4329 +923.358 355.49 -8.2572 +947.141 295.49 3.861 +947.141 355.49 3.861 +966.016 295.49 22.7356 +966.016 355.49 22.7356 +978.134 295.49 46.5189 +978.134 355.49 46.5189 +982.309 295.49 72.883 +982.309 355.49 72.883 +978.134 295.49 99.247 +978.134 355.49 99.247 +966.016 295.49 123.03 +966.016 355.49 123.03 +947.141 295.49 141.905 +947.141 355.49 141.905 +923.358 295.49 154.023 +923.358 355.49 154.023 +896.994 295.49 158.199 +896.994 355.49 158.199 +896.994 775.49 -12.4329 +923.358 775.49 -8.2572 +896.994 835.49 -12.4329 +923.358 835.49 -8.2572 +947.141 775.49 3.861 +947.141 835.49 3.861 +966.016 775.49 22.7356 +966.016 835.49 22.7356 +978.134 775.49 46.5189 +978.134 835.49 46.5189 +982.309 775.49 72.883 +982.309 835.49 72.883 +978.134 775.49 99.247 +978.134 835.49 99.247 +966.016 775.49 123.03 +966.016 835.49 123.03 +947.141 775.49 141.905 +947.141 835.49 141.905 +923.358 775.49 154.023 +923.358 835.49 154.023 +896.994 775.49 158.199 +896.994 835.49 158.199 +897.233 1237.59 157.975 +897.444 1255.06 184.218 +898.44 1245.36 184.218 +898.354 1226.67 157.975 +899.436 1235.66 184.218 +899.476 1215.74 157.975 +900.342 1225.95 184.218 +900.495 1204.81 157.975 +901.075 1216.22 184.218 +901.321 1193.86 157.975 +901.747 1206.49 184.218 +902.077 1182.9 157.975 +902.143 1196.74 184.218 +902.523 1171.93 157.975 +902.326 1186.99 184.218 +902.729 1160.95 157.975 +902.163 1177.24 184.218 +902.546 1149.97 157.975 +901.227 1167.54 184.218 +901.492 1139.05 157.975 +897.444 1159.01 184.218 +897.233 1129.44 157.975 +897.835 1277.52 221.494 +898.643 1269.65 221.494 +899.451 1261.78 221.494 +900.184 1253.91 221.494 +900.779 1246.02 221.494 +901.323 1238.13 221.494 +901.645 1230.23 221.494 +901.793 1222.32 221.494 +901.661 1214.42 221.494 +900.902 1206.55 221.494 +897.835 1199.63 221.494 +897.274 1298.31 250.987 +897.924 1291.98 250.987 +898.574 1285.64 250.987 +899.165 1279.3 250.987 +899.644 1272.95 250.987 +900.082 1266.6 250.987 +900.341 1260.24 250.987 +900.461 1253.88 250.987 +900.354 1247.51 250.987 +899.743 1241.18 250.987 +897.274 1235.61 250.987 +897.929 1319.95 282.13 +897.425 1315.04 282.13 +898.938 1310.12 282.13 +899.396 1305.21 282.13 +899.768 1300.28 282.13 +900.107 1295.35 282.13 +900.308 1290.42 282.13 +900.401 1285.48 282.13 +900.318 1280.55 282.13 +899.844 1275.63 282.13 +897.929 1271.31 282.13 +1103.57 1225.26 165.506 +1102.13 1221.79 168.635 +1103.33 1216.26 166.165 +1103.03 1231.06 165.506 +1100.82 1227.79 169.896 +1102 1236.78 165.506 +1099.49 1233.88 170.638 +1100.73 1242.46 165.506 +1098.16 1240.01 170.901 +1099.31 1248.11 165.506 +1096.83 1246.13 170.607 +1097.75 1253.71 165.506 +1095.5 1252.23 169.881 +1096.1 1259.29 165.506 +1094.18 1258.29 168.943 +1094.35 1264.85 165.506 +1092.86 1264.34 167.87 +1092.55 1270.38 165.506 +1091.55 1270.36 166.714 +1090.7 1275.9 165.506 +1090.24 1276.38 165.506 +1046.28 1196.29 164.832 +1047.76 1189.51 161.801 +1044.68 1203.67 166.38 +1043.05 1211.14 167.291 +1041.41 1218.66 167.614 +1039.78 1226.18 167.254 +1038.15 1233.65 166.362 +1036.53 1241.1 165.211 +1034.91 1248.51 163.894 +1033.3 1255.91 162.475 +1031.69 1263.3 160.993 +990.44 1170.8 161.03 +992.189 1162.77 157.438 +988.537 1179.54 162.865 +986.609 1188.39 163.944 +984.668 1197.31 164.327 +982.728 1206.22 163.9 +980.798 1215.08 162.843 +978.877 1223.9 161.479 +976.963 1232.69 159.918 +975.054 1241.46 158.236 +973.147 1250.22 156.48 +934.754 1144.58 155.668 +936.793 1135.22 151.482 +932.538 1154.76 157.805 +930.29 1165.08 159.062 +928.029 1175.46 159.508 +925.769 1185.85 159.011 +923.52 1196.17 157.78 +921.282 1206.45 156.19 +919.052 1216.69 154.371 +916.827 1226.91 152.412 +914.605 1237.11 150.366 +1102.25 1221.23 163.48 +1100.93 1227.3 162.632 +1099.59 1233.43 162.364 +1098.26 1239.56 162.482 +1096.93 1245.68 162.862 +1095.59 1251.79 163.401 +1094.26 1257.9 163.978 +1092.93 1264.01 164.534 +1091.6 1270.13 164.988 +1090.27 1276.26 165.263 +1046.43 1195.61 158.506 +1044.81 1203.06 157.465 +1043.17 1210.58 157.137 +1041.53 1218.11 157.281 +1039.9 1225.62 157.747 +1038.27 1233.12 158.409 +1036.63 1240.62 159.118 +1035 1248.12 159.8 +1033.36 1255.62 160.357 +990.617 1169.99 153.532 +988.693 1178.82 152.299 +986.753 1187.73 151.909 +984.81 1196.65 152.08 +982.871 1205.56 152.633 +980.936 1214.45 153.417 +979.001 1223.33 154.257 +977.066 1232.22 155.065 +975.128 1241.12 155.726 +934.961 1143.63 146.931 +932.719 1153.93 145.494 +930.458 1164.31 145.04 +928.195 1174.7 145.239 +925.936 1185.08 145.883 +923.68 1195.44 146.797 +921.426 1205.79 147.776 +919.171 1216.14 148.717 +916.913 1226.51 149.488 +1654 661.263 56.4944 +1651.83 658.171 59.6234 +1651.83 652.518 57.1537 +1654.71 667.037 56.4944 +1651.83 664.318 60.8845 +1654.93 672.852 56.4944 +1651.83 670.55 61.6264 +1654.89 678.672 56.4944 +1651.83 676.821 61.8896 +1654.7 684.489 56.4944 +1651.83 683.09 61.5962 +1654.37 690.3 56.4944 +1651.83 689.325 60.8699 +1653.94 696.104 56.4944 +1651.83 695.532 59.9317 +1653.42 701.901 56.4944 +1651.83 701.717 58.8586 +1652.84 707.691 56.4944 +1651.83 707.887 57.7024 +1652.21 713.477 56.4944 +1651.83 714.048 56.495 +1591.84 645.144 55.8212 +1591.84 638.206 52.7902 +1591.84 652.689 57.3688 +1591.84 660.337 58.2794 +1591.84 668.032 58.6024 +1591.84 675.726 58.2424 +1591.84 683.378 57.3511 +1591.84 690.996 56.1996 +1591.84 698.587 54.8827 +1591.84 706.159 53.4635 +1591.84 713.72 51.9818 +1531.85 632.117 52.019 +1531.85 623.894 48.4267 +1531.85 641.059 53.8532 +1531.85 650.123 54.9325 +1531.85 659.244 55.3153 +1531.85 668.363 54.8885 +1531.85 677.432 53.8322 +1531.85 686.46 52.4675 +1531.85 695.456 50.9066 +1531.85 704.431 49.2248 +1531.85 713.392 47.4686 +1471.86 618.345 46.6564 +1471.86 608.764 42.4706 +1471.86 628.764 48.7936 +1471.86 639.326 50.0511 +1471.86 649.953 50.497 +1471.86 660.578 49.9999 +1471.86 671.145 48.769 +1471.86 681.665 47.1789 +1471.86 692.147 45.3602 +1471.86 702.605 43.4005 +1471.86 713.046 41.3543 +1411.87 603.829 44.2106 +1411.87 592.816 39.3994 +1411.87 615.805 46.6672 +1411.87 627.945 48.1126 +1411.87 640.16 48.6251 +1411.87 652.373 48.0537 +1411.87 664.519 46.639 +1411.87 676.61 44.8112 +1411.87 688.659 42.7208 +1411.87 700.679 40.4683 +1411.87 712.68 38.1163 +1351.88 589.934 41.1997 +1351.88 577.55 35.7898 +1351.88 603.4 43.9619 +1351.88 617.051 45.5872 +1351.88 630.786 46.1636 +1351.88 644.518 45.521 +1351.88 658.176 43.9302 +1351.88 671.772 41.875 +1351.88 685.32 39.5245 +1351.88 698.836 36.9916 +1351.88 712.331 34.3469 +1291.9 575.542 36.4022 +1291.9 561.739 30.3721 +1291.9 590.552 39.481 +1291.9 605.767 41.2926 +1291.9 621.076 41.9351 +1291.9 636.383 41.2189 +1291.9 651.606 39.4457 +1291.9 666.761 37.1549 +1291.9 681.862 34.5349 +1291.9 696.927 31.7118 +1291.9 711.969 28.7639 +1231.91 560.654 34.2955 +1231.91 545.382 27.624 +1231.91 577.26 37.7019 +1231.91 594.094 39.7062 +1231.91 611.032 40.417 +1231.91 627.968 39.6246 +1231.91 644.81 37.6628 +1231.91 661.577 35.1283 +1231.91 678.285 32.2296 +1231.91 694.952 29.1062 +1231.91 711.594 25.8447 +1171.92 547.007 31.0585 +1171.92 530.389 23.7989 +1171.92 565.076 34.7651 +1171.92 583.394 36.9461 +1171.92 601.825 37.7195 +1171.92 620.253 36.8573 +1171.92 638.58 34.7226 +1171.92 656.825 31.9647 +1171.92 675.005 28.8105 +1171.92 693.142 25.4117 +1171.92 711.251 21.8628 +1111.94 520.709 30.3918 +1111.94 501.498 21.9991 +1111.94 541.6 34.6769 +1111.94 562.776 37.1983 +1111.94 584.084 38.0925 +1111.94 605.389 37.0957 +1111.94 626.576 34.6277 +1111.94 647.668 31.4394 +1111.94 668.686 27.7929 +1111.94 689.654 23.8637 +1111.94 710.589 19.7608 +1051.96 494.402 27.4954 +1051.96 472.596 17.9692 +1051.96 518.114 32.3593 +1051.96 542.151 35.2213 +1051.96 566.336 36.2362 +1051.96 590.518 35.1047 +1051.96 614.567 32.3035 +1051.96 638.508 28.6845 +1051.96 662.365 24.5455 +1051.96 686.164 20.0856 +1051.96 709.927 15.4286 +987.323 467.355 25.2727 +987.323 442.881 14.5811 +987.323 493.968 30.7316 +987.323 520.945 33.9437 +987.323 548.09 35.0828 +987.323 575.23 33.8129 +987.323 602.221 30.669 +987.323 629.09 26.6073 +987.323 655.866 21.9619 +987.323 682.577 16.9564 +987.323 709.246 11.7297 +1651.83 657.599 54.4685 +1651.83 663.815 53.6203 +1651.83 670.085 53.3527 +1651.83 676.361 53.4702 +1651.83 682.627 53.8504 +1651.83 688.882 54.3893 +1651.83 695.133 54.967 +1651.83 701.386 55.5226 +1651.83 707.647 55.977 +1651.83 713.918 56.2518 +1591.84 644.442 49.4948 +1591.84 652.071 48.4538 +1591.84 659.766 48.1253 +1591.84 667.468 48.2696 +1591.84 675.158 48.7361 +1591.84 682.834 49.3976 +1591.84 690.506 50.1065 +1591.84 698.18 50.7883 +1591.84 705.864 51.3461 +1591.84 713.561 51.6833 +1531.85 631.284 44.5211 +1531.85 640.326 43.2872 +1531.85 649.447 42.898 +1531.85 658.575 43.069 +1531.85 667.689 43.6219 +1531.85 676.787 44.4058 +1531.85 685.879 45.246 +1531.85 694.975 46.0541 +1531.85 704.082 46.7152 +1531.85 713.204 47.1149 +1471.86 617.375 37.9199 +1471.86 627.911 36.4823 +1471.86 638.538 36.0287 +1471.86 649.174 36.2279 +1471.86 659.793 36.8721 +1471.86 670.394 37.7856 +1471.86 680.988 38.7646 +1471.86 691.586 39.7062 +1471.86 702.197 40.4765 +1411.87 602.715 34.1687 +1411.87 614.825 32.5163 +1411.87 627.039 31.9949 +1411.87 639.265 32.2238 +1411.87 651.471 32.9644 +1411.87 663.655 34.0144 +1411.87 675.833 35.1396 +1411.87 688.014 36.2219 +1411.87 700.211 37.1072 +1411.87 712.428 37.6425 +1351.88 588.68 29.9081 +1351.88 602.297 28.05 +1351.88 616.032 27.4638 +1351.88 629.779 27.7213 +1351.88 643.504 28.5539 +1351.88 657.205 29.7346 +1351.88 670.898 30.9998 +1351.88 684.595 32.2168 +1351.88 698.31 33.2123 +1351.88 712.047 33.8142 +1291.9 574.145 23.8163 +1291.9 589.323 21.7453 +1291.9 604.632 21.0919 +1291.9 619.954 21.3788 +1291.9 635.253 22.3069 +1291.9 650.524 23.6228 +1291.9 665.786 25.0331 +1291.9 681.054 26.3896 +1291.9 696.341 27.4993 +1291.9 711.652 28.1701 +1231.91 559.108 20.3707 +1231.91 575.9 18.0793 +1231.91 592.839 17.3564 +1231.91 609.791 17.6739 +1231.91 626.717 18.7007 +1231.91 643.612 20.1567 +1231.91 660.499 21.717 +1231.91 677.39 23.2178 +1231.91 694.303 24.4455 +1231.91 711.244 25.1878 +1171.92 545.324 15.9064 +1171.92 563.597 13.413 +1171.92 582.028 12.6264 +1171.92 600.474 12.9718 +1171.92 618.892 14.0891 +1171.92 637.277 15.6734 +1171.92 655.652 17.3713 +1171.92 674.032 19.0044 +1171.92 692.436 20.3403 +1171.92 710.87 21.148 +1111.94 518.764 12.8746 +1111.94 539.889 9.99216 +1111.94 561.197 9.08274 +1111.94 582.522 9.4821 +1111.94 603.815 10.7738 +1111.94 625.069 12.6054 +1111.94 646.312 14.5682 +1111.94 667.561 16.4563 +1111.94 688.838 18.0007 +1111.94 710.148 18.9344 +1051.96 492.194 7.61238 +1051.96 516.172 4.34058 +1051.96 540.358 3.30834 +1051.96 564.564 3.76164 +1051.96 588.732 5.22774 +1051.96 612.857 7.30674 +1051.96 636.969 9.53472 +1051.96 661.088 11.6777 +1051.96 685.238 13.4307 +1051.96 709.427 14.4905 +987.323 464.878 2.95728 +987.323 491.789 -0.71478 +987.323 518.933 -1.87332 +987.323 546.1 -1.36452 +987.323 573.225 0.28098 +987.323 600.301 2.61432 +987.323 627.363 5.11482 +987.323 654.432 7.51998 +987.323 681.537 9.48744 +870.63 895.49 -8.2572 +872.978 955.49 6.56826 +875.038 1015.49 19.5759 +878.037 1075.49 38.5128 +885.588 1135.49 86.1847 +889.38 1195.49 110.127 +892.091 1237.49 127.245 +846.846 895.49 3.861 +851.313 955.49 17.6071 +855.231 1015.49 29.6678 +860.936 1075.49 47.2261 +875.298 1135.49 91.4273 +882.511 1195.49 113.627 +887.668 1237.49 129.498 +827.972 895.49 22.7356 +834.119 955.49 34.8007 +839.513 1015.49 45.3864 +847.365 1075.49 60.7974 +867.133 1135.49 99.5931 +877.06 1195.49 119.078 +884.159 1237.49 133.008 +815.854 895.49 46.5189 +823.08 955.49 56.4657 +829.421 1015.49 65.1929 +838.652 1075.49 77.8982 +861.89 1135.49 109.882 +873.561 1195.49 125.946 +881.905 1237.49 137.431 +811.678 895.49 72.883 +819.277 955.49 80.4816 +825.943 1015.49 87.1486 +835.65 1075.49 96.8546 +860.083 1135.49 121.288 +872.355 1195.49 133.56 +881.129 1237.49 142.334 +815.854 895.49 99.247 +823.08 955.49 104.498 +829.421 1015.49 109.104 +838.652 1075.49 115.811 +861.89 1135.49 132.694 +873.561 1195.49 141.174 +881.905 1237.49 147.236 +827.972 895.49 123.03 +834.119 955.49 126.163 +839.513 1015.49 128.911 +847.365 1075.49 132.912 +867.133 1135.49 142.984 +877.06 1195.49 148.042 +884.159 1237.49 151.659 +846.846 895.49 141.905 +851.313 955.49 143.356 +855.231 1015.49 144.629 +860.936 1075.49 146.483 +875.298 1135.49 151.149 +882.511 1195.49 153.493 +887.668 1237.49 155.169 +870.63 895.49 154.023 +872.978 955.49 154.395 +875.038 1015.49 154.721 +878.037 1075.49 155.196 +885.588 1135.49 156.392 +889.38 1195.49 156.993 +892.091 1237.49 157.422 +886.448 55.4902 18.7459 +878.558 115.49 2.91996 +872.755 175.49 -5.82 +870.63 235.49 -8.2572 +861.927 115.49 11.3939 +850.89 175.49 5.3211 +846.846 235.49 3.861 +848.728 115.49 24.5924 +833.537 175.49 22.6738 +827.972 235.49 22.7356 +840.254 115.49 41.2235 +822.396 175.49 44.5395 +815.854 235.49 46.5189 +837.334 115.49 59.6593 +818.557 175.49 68.7778 +811.678 235.49 72.883 +840.254 115.49 78.095 +822.396 175.49 93.0161 +815.854 235.49 99.247 +848.728 115.49 94.7261 +833.537 175.49 114.882 +827.972 235.49 123.03 +861.927 115.49 107.925 +850.89 175.49 132.234 +846.846 235.49 141.905 +878.558 115.49 116.399 +872.755 175.49 143.376 +870.63 235.49 154.023 +870.63 415.49 -8.2572 +865.797 475.49 -17.2253 +865.797 535.49 -17.2253 +865.797 595.49 -17.2253 +865.797 655.49 -17.2253 +870.63 715.49 -8.2572 +846.846 415.49 3.861 +835.073 475.49 -12.4545 +835.073 535.49 -12.4545 +835.073 595.49 -12.4545 +835.073 655.49 -12.4545 +846.846 715.49 3.861 +827.972 415.49 22.7356 +816.973 475.49 10.782 +816.973 535.49 10.782 +816.973 595.49 10.782 +816.973 655.49 10.782 +827.972 715.49 22.7356 +815.854 415.49 46.5189 +813.162 475.49 41.7158 +813.162 535.49 41.7158 +813.162 595.49 41.7158 +813.162 655.49 41.7158 +815.854 715.49 46.5189 +811.678 415.49 72.883 +811.678 475.49 72.883 +811.678 535.49 72.883 +811.678 595.49 72.883 +811.678 655.49 72.883 +811.678 715.49 72.883 +815.854 415.49 99.247 +815.854 475.49 99.247 +815.854 535.49 99.247 +815.854 595.49 99.247 +815.854 655.49 99.247 +815.854 715.49 99.247 +827.972 415.49 123.03 +827.972 475.49 123.03 +827.972 535.49 123.03 +827.972 595.49 123.03 +827.972 655.49 123.03 +827.972 715.49 123.03 +846.846 415.49 141.905 +846.846 475.49 141.905 +846.846 535.49 141.905 +846.846 595.49 141.905 +846.846 655.49 141.905 +846.846 715.49 141.905 +870.63 415.49 154.023 +870.63 475.49 154.023 +870.63 535.49 154.023 +870.63 595.49 154.023 +870.63 655.49 154.023 +870.63 715.49 154.023 +870.63 295.49 -8.2572 +870.63 355.49 -8.2572 +846.846 295.49 3.861 +846.846 355.49 3.861 +827.972 295.49 22.7356 +827.972 355.49 22.7356 +815.854 295.49 46.5189 +815.854 355.49 46.5189 +811.678 295.49 72.883 +811.678 355.49 72.883 +815.854 295.49 99.247 +815.854 355.49 99.247 +827.972 295.49 123.03 +827.972 355.49 123.03 +846.846 295.49 141.905 +846.846 355.49 141.905 +870.63 295.49 154.023 +870.63 355.49 154.023 +870.63 775.49 -8.2572 +870.63 835.49 -8.2572 +846.846 775.49 3.861 +846.846 835.49 3.861 +827.972 775.49 22.7356 +827.972 835.49 22.7356 +815.854 775.49 46.5189 +815.854 835.49 46.5189 +811.678 775.49 72.883 +811.678 835.49 72.883 +815.854 775.49 99.247 +815.854 835.49 99.247 +827.972 775.49 123.03 +827.972 835.49 123.03 +846.846 775.49 141.905 +846.846 835.49 141.905 +870.63 775.49 154.023 +870.63 835.49 154.023 +895.633 1226.67 157.975 +895.547 1245.36 184.218 +896.543 1255.06 184.218 +896.755 1237.59 157.975 +894.511 1215.74 157.975 +894.551 1235.66 184.218 +893.492 1204.81 157.975 +893.646 1225.95 184.218 +892.666 1193.86 157.975 +892.912 1216.22 184.218 +891.91 1182.9 157.975 +892.241 1206.49 184.218 +891.464 1171.93 157.975 +891.844 1196.74 184.218 +891.258 1160.95 157.975 +891.661 1186.99 184.218 +891.441 1149.97 157.975 +891.824 1177.24 184.218 +892.496 1139.05 157.975 +892.761 1167.54 184.218 +896.755 1129.44 157.975 +896.543 1159.01 184.218 +895.345 1269.65 221.494 +896.152 1277.52 221.494 +894.537 1261.78 221.494 +893.803 1253.91 221.494 +893.208 1246.02 221.494 +892.664 1238.13 221.494 +892.342 1230.23 221.494 +892.194 1222.32 221.494 +892.326 1214.42 221.494 +893.085 1206.55 221.494 +896.152 1199.63 221.494 +896.063 1291.98 250.987 +896.714 1298.31 250.987 +895.413 1285.64 250.987 +894.822 1279.3 250.987 +894.343 1272.95 250.987 +893.905 1266.6 250.987 +893.646 1260.24 250.987 +893.527 1253.88 250.987 +893.633 1247.51 250.987 +894.244 1241.18 250.987 +896.714 1235.61 250.987 +896.563 1315.04 282.13 +896.058 1319.95 282.13 +895.049 1310.12 282.13 +894.591 1305.21 282.13 +894.22 1300.28 282.13 +893.88 1295.35 282.13 +893.679 1290.42 282.13 +893.586 1285.48 282.13 +893.669 1280.55 282.13 +894.143 1275.63 282.13 +896.058 1271.31 282.13 +690.656 1216.26 166.165 +691.859 1221.79 168.635 +690.419 1225.26 165.506 +693.167 1227.79 169.896 +690.952 1231.06 165.506 +694.493 1233.88 170.638 +691.983 1236.78 165.506 +695.827 1240.01 170.901 +693.259 1242.46 165.506 +697.161 1246.13 170.607 +694.679 1248.11 165.506 +698.487 1252.23 169.881 +696.235 1253.71 165.506 +699.808 1258.29 168.943 +697.892 1259.29 165.506 +701.124 1264.34 167.87 +699.636 1264.85 165.506 +702.437 1270.36 166.714 +701.438 1270.38 165.506 +703.747 1276.38 165.506 +703.285 1275.9 165.506 +746.227 1189.51 161.801 +747.703 1196.29 164.832 +749.308 1203.67 166.38 +750.936 1211.14 167.291 +752.573 1218.66 167.614 +754.21 1226.18 167.254 +755.838 1233.65 166.362 +757.459 1241.1 165.211 +759.074 1248.51 163.894 +760.685 1255.91 162.475 +762.294 1263.3 160.993 +801.798 1162.77 157.438 +803.547 1170.8 161.03 +805.45 1179.54 162.865 +807.379 1188.39 163.944 +809.319 1197.31 164.327 +811.259 1206.22 163.9 +813.189 1215.08 162.843 +815.11 1223.9 161.479 +817.024 1232.69 159.918 +818.934 1241.46 158.236 +820.84 1250.22 156.48 +857.194 1135.22 151.482 +859.233 1144.58 155.668 +861.45 1154.76 157.805 +863.697 1165.08 159.062 +865.958 1175.46 159.508 +868.219 1185.85 159.011 +870.467 1196.17 157.78 +872.705 1206.45 156.19 +874.936 1216.69 154.371 +877.161 1226.91 152.412 +879.382 1237.11 150.366 +691.737 1221.23 163.48 +693.06 1227.3 162.632 +694.394 1233.43 162.364 +695.729 1239.56 162.482 +697.062 1245.68 162.862 +698.393 1251.79 163.401 +699.723 1257.9 163.978 +701.053 1264.01 164.534 +702.386 1270.13 164.988 +703.72 1276.26 165.263 +747.554 1195.61 158.506 +749.177 1203.06 157.465 +750.814 1210.58 157.137 +752.453 1218.11 157.281 +754.089 1225.62 157.747 +755.722 1233.12 158.409 +757.355 1240.62 159.118 +758.988 1248.12 159.8 +760.622 1255.62 160.357 +803.37 1169.99 153.532 +805.294 1178.82 152.299 +807.235 1187.73 151.909 +809.177 1196.65 152.08 +811.116 1205.56 152.633 +813.052 1214.45 153.417 +814.986 1223.33 154.257 +816.922 1232.22 155.065 +818.859 1241.12 155.726 +859.027 1143.63 146.931 +861.268 1153.93 145.494 +863.529 1164.31 145.04 +865.792 1174.7 145.239 +868.052 1185.08 145.883 +870.307 1195.44 146.797 +872.561 1205.79 147.776 +874.816 1216.14 148.717 +877.074 1226.51 149.488 +142.157 652.518 57.1537 +142.157 658.171 59.6234 +139.983 661.263 56.4944 +142.157 664.318 60.8845 +139.272 667.037 56.4944 +142.157 670.55 61.6264 +139.061 672.852 56.4944 +142.157 676.821 61.8896 +139.099 678.672 56.4944 +142.157 683.09 61.5962 +139.286 684.489 56.4944 +142.157 689.325 60.8699 +139.614 690.3 56.4944 +142.157 695.532 59.9317 +140.045 696.104 56.4944 +142.157 701.717 58.8586 +140.568 701.901 56.4944 +142.157 707.887 57.7024 +141.151 707.691 56.4944 +142.157 714.048 56.495 +141.782 713.477 56.4944 +202.147 638.206 52.7902 +202.147 645.144 55.8212 +202.147 652.689 57.3688 +202.147 660.337 58.2794 +202.147 668.032 58.6024 +202.147 675.726 58.2424 +202.147 683.378 57.3511 +202.147 690.996 56.1996 +202.147 698.587 54.8827 +202.147 706.159 53.4635 +202.147 713.72 51.9818 +262.136 623.894 48.4267 +262.136 632.117 52.019 +262.136 641.059 53.8532 +262.136 650.123 54.9325 +262.136 659.244 55.3153 +262.136 668.363 54.8885 +262.136 677.432 53.8322 +262.136 686.46 52.4675 +262.136 695.456 50.9066 +262.136 704.431 49.2248 +262.136 713.392 47.4686 +322.126 608.764 42.4706 +322.126 618.345 46.6564 +322.126 628.764 48.7936 +322.126 639.326 50.0511 +322.126 649.953 50.497 +322.126 660.578 49.9999 +322.126 671.145 48.769 +322.126 681.665 47.1789 +322.126 692.147 45.3602 +322.126 702.605 43.4005 +322.126 713.046 41.3543 +382.114 592.816 39.3994 +382.114 603.829 44.2106 +382.114 615.805 46.6672 +382.114 627.945 48.1126 +382.114 640.16 48.6251 +382.114 652.373 48.0537 +382.114 664.519 46.639 +382.114 676.61 44.8112 +382.114 688.659 42.7208 +382.114 700.679 40.4683 +382.114 712.68 38.1163 +442.103 577.55 35.7898 +442.103 589.934 41.1997 +442.103 603.4 43.9619 +442.103 617.051 45.5872 +442.103 630.786 46.1636 +442.103 644.518 45.521 +442.103 658.176 43.9302 +442.103 671.772 41.875 +442.103 685.32 39.5245 +442.103 698.836 36.9916 +442.103 712.331 34.3469 +502.092 561.739 30.3721 +502.092 575.542 36.4022 +502.092 590.552 39.481 +502.092 605.767 41.2926 +502.092 621.076 41.9351 +502.092 636.383 41.2189 +502.092 651.606 39.4457 +502.092 666.761 37.1549 +502.092 681.862 34.5349 +502.092 696.927 31.7118 +502.092 711.969 28.7639 +562.08 545.382 27.624 +562.08 560.654 34.2955 +562.08 577.26 37.7019 +562.08 594.094 39.7062 +562.08 611.032 40.417 +562.08 627.968 39.6246 +562.08 644.81 37.6628 +562.08 661.577 35.1283 +562.08 678.285 32.2296 +562.08 694.952 29.1062 +562.08 711.594 25.8447 +622.069 530.389 23.7989 +622.069 547.007 31.0585 +622.069 565.076 34.7651 +622.069 583.394 36.9461 +622.069 601.825 37.7195 +622.069 620.253 36.8573 +622.069 638.58 34.7226 +622.069 656.825 31.9647 +622.069 675.005 28.8105 +622.069 693.142 25.4117 +622.069 711.251 21.8628 +682.049 501.498 21.9991 +682.049 520.709 30.3918 +682.049 541.6 34.6769 +682.049 562.776 37.1983 +682.049 584.084 38.0925 +682.049 605.389 37.0957 +682.049 626.576 34.6277 +682.049 647.668 31.4394 +682.049 668.686 27.7929 +682.049 689.654 23.8637 +682.049 710.589 19.7608 +742.028 472.596 17.9692 +742.028 494.402 27.4954 +742.028 518.114 32.3593 +742.028 542.151 35.2213 +742.028 566.336 36.2362 +742.028 590.518 35.1047 +742.028 614.567 32.3035 +742.028 638.508 28.6845 +742.028 662.365 24.5455 +742.028 686.164 20.0856 +742.028 709.927 15.4286 +806.665 442.881 14.5811 +806.665 467.355 25.2727 +806.665 493.968 30.7316 +806.665 520.945 33.9437 +806.665 548.09 35.0828 +806.665 575.23 33.8129 +806.665 602.221 30.669 +806.665 629.09 26.6073 +806.665 655.866 21.9619 +806.665 682.577 16.9564 +806.665 709.246 11.7297 +142.157 657.599 54.4685 +142.157 663.815 53.6203 +142.157 670.085 53.3527 +142.157 676.361 53.4702 +142.157 682.627 53.8504 +142.157 688.882 54.3893 +142.157 695.133 54.967 +142.157 701.386 55.5226 +142.157 707.647 55.977 +142.157 713.918 56.2518 +202.147 644.442 49.4948 +202.147 652.071 48.4538 +202.147 659.766 48.1253 +202.147 667.468 48.2696 +202.147 675.158 48.7361 +202.147 682.834 49.3976 +202.147 690.506 50.1065 +202.147 698.18 50.7883 +202.147 705.864 51.3461 +202.147 713.561 51.6833 +262.136 631.284 44.5211 +262.136 640.326 43.2872 +262.136 649.447 42.898 +262.136 658.575 43.069 +262.136 667.689 43.6219 +262.136 676.787 44.4058 +262.136 685.879 45.246 +262.136 694.975 46.0541 +262.136 704.082 46.7152 +262.136 713.204 47.1149 +322.126 617.375 37.9199 +322.126 627.911 36.4823 +322.126 638.538 36.0287 +322.126 649.174 36.2279 +322.126 659.793 36.8721 +322.126 670.394 37.7856 +322.126 680.988 38.7646 +322.126 691.586 39.7062 +322.126 702.197 40.4765 +382.114 602.715 34.1687 +382.114 614.825 32.5163 +382.114 627.039 31.9949 +382.114 639.265 32.2238 +382.114 651.471 32.9644 +382.114 663.655 34.0144 +382.114 675.833 35.1396 +382.114 688.014 36.2219 +382.114 700.211 37.1072 +382.114 712.428 37.6425 +442.103 588.68 29.9081 +442.103 602.297 28.05 +442.103 616.032 27.4638 +442.103 629.779 27.7213 +442.103 643.504 28.5539 +442.103 657.205 29.7346 +442.103 670.898 30.9998 +442.103 684.595 32.2168 +442.103 698.31 33.2123 +442.103 712.047 33.8142 +502.092 574.145 23.8163 +502.092 589.323 21.7453 +502.092 604.632 21.0919 +502.092 619.954 21.3788 +502.092 635.253 22.3069 +502.092 650.524 23.6228 +502.092 665.786 25.0331 +502.092 681.054 26.3896 +502.092 696.341 27.4993 +502.092 711.652 28.1701 +562.08 559.108 20.3707 +562.08 575.9 18.0793 +562.08 592.839 17.3564 +562.08 609.791 17.6739 +562.08 626.717 18.7007 +562.08 643.612 20.1567 +562.08 660.499 21.717 +562.08 677.39 23.2178 +562.08 694.303 24.4455 +562.08 711.244 25.1878 +622.069 545.324 15.9064 +622.069 563.597 13.413 +622.069 582.028 12.6264 +622.069 600.474 12.9718 +622.069 618.892 14.0891 +622.069 637.277 15.6734 +622.069 655.652 17.3713 +622.069 674.032 19.0044 +622.069 692.436 20.3403 +622.069 710.87 21.148 +682.049 518.764 12.8746 +682.049 539.889 9.99216 +682.049 561.197 9.08274 +682.049 582.522 9.4821 +682.049 603.815 10.7738 +682.049 625.069 12.6054 +682.049 646.312 14.5682 +682.049 667.561 16.4563 +682.049 688.838 18.0007 +682.049 710.148 18.9344 +742.028 492.194 7.61238 +742.028 516.172 4.34058 +742.028 540.358 3.30834 +742.028 564.564 3.76164 +742.028 588.732 5.22774 +742.028 612.857 7.30674 +742.028 636.969 9.53472 +742.028 661.088 11.6777 +742.028 685.238 13.4307 +742.028 709.427 14.4905 +806.665 464.878 2.95728 +806.665 491.789 -0.71478 +806.665 518.933 -1.87332 +806.665 546.1 -1.36452 +806.665 573.225 0.28098 +806.665 600.301 2.61432 +806.665 627.363 5.11482 +806.665 654.432 7.51998 +806.665 681.537 9.48744 +3 0 1 2 +3 0 2 3 +3 4 5 1 +3 4 1 0 +3 6 7 5 +3 6 5 4 +3 8 9 7 +3 8 7 6 +3 10 11 9 +3 10 9 8 +3 12 11 10 +3 1 13 14 +3 1 14 2 +3 5 15 13 +3 5 13 1 +3 7 16 15 +3 7 15 5 +3 9 17 16 +3 9 16 7 +3 11 18 17 +3 11 17 9 +3 12 18 11 +3 13 19 20 +3 13 20 14 +3 15 21 19 +3 15 19 13 +3 16 22 21 +3 16 21 15 +3 17 23 22 +3 17 22 16 +3 18 24 23 +3 18 23 17 +3 12 24 18 +3 19 25 26 +3 19 26 20 +3 21 27 25 +3 21 25 19 +3 22 28 27 +3 22 27 21 +3 23 29 28 +3 23 28 22 +3 24 30 29 +3 24 29 23 +3 12 30 24 +3 25 31 32 +3 25 32 26 +3 27 33 31 +3 27 31 25 +3 28 34 33 +3 28 33 27 +3 29 35 34 +3 29 34 28 +3 30 36 35 +3 30 35 29 +3 12 36 30 +3 31 37 38 +3 31 38 32 +3 33 39 37 +3 33 37 31 +3 34 40 39 +3 34 39 33 +3 35 41 40 +3 35 40 34 +3 36 42 41 +3 36 41 35 +3 12 42 36 +3 37 43 44 +3 37 44 38 +3 39 45 43 +3 39 43 37 +3 40 46 45 +3 40 45 39 +3 41 47 46 +3 41 46 40 +3 42 48 47 +3 42 47 41 +3 12 48 42 +3 43 49 50 +3 43 50 44 +3 45 51 49 +3 45 49 43 +3 46 52 51 +3 46 51 45 +3 47 53 52 +3 47 52 46 +3 48 54 53 +3 48 53 47 +3 12 54 48 +3 49 55 56 +3 49 56 50 +3 51 57 55 +3 51 55 49 +3 52 58 57 +3 52 57 51 +3 53 59 58 +3 53 58 52 +3 54 60 59 +3 54 59 53 +3 12 60 54 +3 55 61 62 +3 55 62 56 +3 57 63 61 +3 57 61 55 +3 58 64 63 +3 58 63 57 +3 59 65 64 +3 59 64 58 +3 60 66 65 +3 60 65 59 +3 12 66 60 +3 61 67 68 +3 61 68 62 +3 63 69 67 +3 63 67 61 +3 64 70 69 +3 64 69 63 +3 65 71 70 +3 65 70 64 +3 66 72 71 +3 66 71 65 +3 12 72 66 +3 67 73 74 +3 67 74 68 +3 69 75 73 +3 69 73 67 +3 70 76 75 +3 70 75 69 +3 71 77 76 +3 71 76 70 +3 72 78 77 +3 72 77 71 +3 12 78 72 +3 73 79 80 +3 73 80 74 +3 75 81 79 +3 75 79 73 +3 76 82 81 +3 76 81 75 +3 77 83 82 +3 77 82 76 +3 78 84 83 +3 78 83 77 +3 12 84 78 +3 79 85 86 +3 79 86 80 +3 81 87 85 +3 81 85 79 +3 82 88 87 +3 82 87 81 +3 83 89 88 +3 83 88 82 +3 84 90 89 +3 84 89 83 +3 12 90 84 +3 85 91 92 +3 85 92 86 +3 87 93 91 +3 87 91 85 +3 88 94 93 +3 88 93 87 +3 89 95 94 +3 89 94 88 +3 90 96 95 +3 90 95 89 +3 12 96 90 +3 91 97 98 +3 91 98 92 +3 93 99 97 +3 93 97 91 +3 94 100 99 +3 94 99 93 +3 95 101 100 +3 95 100 94 +3 96 102 101 +3 96 101 95 +3 12 102 96 +3 97 103 104 +3 97 104 98 +3 99 105 103 +3 99 103 97 +3 100 106 105 +3 100 105 99 +3 101 107 106 +3 101 106 100 +3 102 108 107 +3 102 107 101 +3 12 108 102 +3 103 109 110 +3 103 110 104 +3 105 111 109 +3 105 109 103 +3 106 112 111 +3 106 111 105 +3 107 113 112 +3 107 112 106 +3 108 114 113 +3 108 113 107 +3 12 114 108 +3 109 115 116 +3 109 116 110 +3 111 117 115 +3 111 115 109 +3 112 118 117 +3 112 117 111 +3 113 119 118 +3 113 118 112 +3 114 120 119 +3 114 119 113 +3 12 120 114 +3 115 0 3 +3 115 3 116 +3 117 4 0 +3 117 0 115 +3 118 6 4 +3 118 4 117 +3 119 8 6 +3 119 6 118 +3 120 10 8 +3 120 8 119 +3 12 10 120 +3 121 122 123 +3 121 123 124 +3 125 126 122 +3 125 122 121 +3 127 128 126 +3 127 126 125 +3 129 130 128 +3 129 128 127 +3 131 132 130 +3 131 130 129 +3 133 134 132 +3 133 132 131 +3 122 135 136 +3 122 136 123 +3 126 137 135 +3 126 135 122 +3 128 138 137 +3 128 137 126 +3 130 139 138 +3 130 138 128 +3 132 140 139 +3 132 139 130 +3 134 141 140 +3 134 140 132 +3 135 142 143 +3 135 143 136 +3 137 144 142 +3 137 142 135 +3 138 145 144 +3 138 144 137 +3 139 146 145 +3 139 145 138 +3 140 147 146 +3 140 146 139 +3 141 148 147 +3 141 147 140 +3 142 149 150 +3 142 150 143 +3 144 151 149 +3 144 149 142 +3 145 152 151 +3 145 151 144 +3 146 153 152 +3 146 152 145 +3 147 154 153 +3 147 153 146 +3 148 155 154 +3 148 154 147 +3 149 156 157 +3 149 157 150 +3 151 158 156 +3 151 156 149 +3 152 159 158 +3 152 158 151 +3 153 160 159 +3 153 159 152 +3 154 161 160 +3 154 160 153 +3 155 162 161 +3 155 161 154 +3 156 163 164 +3 156 164 157 +3 158 165 163 +3 158 163 156 +3 159 166 165 +3 159 165 158 +3 160 167 166 +3 160 166 159 +3 161 168 167 +3 161 167 160 +3 162 169 168 +3 162 168 161 +3 163 170 171 +3 163 171 164 +3 165 172 170 +3 165 170 163 +3 166 173 172 +3 166 172 165 +3 167 174 173 +3 167 173 166 +3 168 175 174 +3 168 174 167 +3 169 176 175 +3 169 175 168 +3 170 177 178 +3 170 178 171 +3 172 179 177 +3 172 177 170 +3 173 180 179 +3 173 179 172 +3 174 181 180 +3 174 180 173 +3 175 182 181 +3 175 181 174 +3 176 183 182 +3 176 182 175 +3 177 184 185 +3 177 185 178 +3 179 186 184 +3 179 184 177 +3 180 187 186 +3 180 186 179 +3 181 188 187 +3 181 187 180 +3 182 189 188 +3 182 188 181 +3 183 190 189 +3 183 189 182 +3 184 191 192 +3 184 192 185 +3 186 193 191 +3 186 191 184 +3 187 194 193 +3 187 193 186 +3 188 195 194 +3 188 194 187 +3 189 196 195 +3 189 195 188 +3 190 197 196 +3 190 196 189 +3 198 199 200 +3 198 200 62 +3 201 202 199 +3 201 199 198 +3 203 204 202 +3 203 202 201 +3 199 205 50 +3 199 50 200 +3 202 206 205 +3 202 205 199 +3 204 207 206 +3 204 206 202 +3 205 208 44 +3 205 44 50 +3 206 209 208 +3 206 208 205 +3 207 210 209 +3 207 209 206 +3 208 211 38 +3 208 38 44 +3 209 212 211 +3 209 211 208 +3 210 213 212 +3 210 212 209 +3 211 214 32 +3 211 32 38 +3 212 215 214 +3 212 214 211 +3 213 216 215 +3 213 215 212 +3 214 217 26 +3 214 26 32 +3 215 218 217 +3 215 217 214 +3 216 219 218 +3 216 218 215 +3 217 220 20 +3 217 20 26 +3 218 221 220 +3 218 220 217 +3 219 222 221 +3 219 221 218 +3 220 223 14 +3 220 14 20 +3 221 224 223 +3 221 223 220 +3 222 225 224 +3 222 224 221 +3 223 226 2 +3 223 2 14 +3 224 227 226 +3 224 226 223 +3 225 228 227 +3 225 227 224 +3 226 229 3 +3 226 3 2 +3 227 230 229 +3 227 229 226 +3 228 231 230 +3 228 230 227 +3 232 233 234 +3 232 234 235 +3 236 237 233 +3 236 233 232 +3 238 239 237 +3 238 237 236 +3 240 241 239 +3 240 239 238 +3 242 243 241 +3 242 241 240 +3 233 244 245 +3 233 245 234 +3 237 246 244 +3 237 244 233 +3 239 247 246 +3 239 246 237 +3 241 248 247 +3 241 247 239 +3 243 249 248 +3 243 248 241 +3 244 250 251 +3 244 251 245 +3 246 252 250 +3 246 250 244 +3 247 253 252 +3 247 252 246 +3 248 254 253 +3 248 253 247 +3 249 255 254 +3 249 254 248 +3 250 256 257 +3 250 257 251 +3 252 258 256 +3 252 256 250 +3 253 259 258 +3 253 258 252 +3 254 260 259 +3 254 259 253 +3 255 261 260 +3 255 260 254 +3 256 262 263 +3 256 263 257 +3 258 264 262 +3 258 262 256 +3 259 265 264 +3 259 264 258 +3 260 266 265 +3 260 265 259 +3 261 267 266 +3 261 266 260 +3 262 268 269 +3 262 269 263 +3 264 270 268 +3 264 268 262 +3 265 271 270 +3 265 270 264 +3 266 272 271 +3 266 271 265 +3 267 273 272 +3 267 272 266 +3 268 274 275 +3 268 275 269 +3 270 276 274 +3 270 274 268 +3 271 277 276 +3 271 276 270 +3 272 278 277 +3 272 277 271 +3 273 279 278 +3 273 278 272 +3 274 280 281 +3 274 281 275 +3 276 282 280 +3 276 280 274 +3 277 283 282 +3 277 282 276 +3 278 284 283 +3 278 283 277 +3 279 285 284 +3 279 284 278 +3 280 286 287 +3 280 287 281 +3 282 288 286 +3 282 286 280 +3 283 289 288 +3 283 288 282 +3 284 290 289 +3 284 289 283 +3 285 291 290 +3 285 290 284 +3 286 292 293 +3 286 293 287 +3 288 294 292 +3 288 292 286 +3 289 295 294 +3 289 294 288 +3 290 296 295 +3 290 295 289 +3 291 297 296 +3 291 296 290 +3 298 299 204 +3 298 204 203 +3 300 301 299 +3 300 299 298 +3 235 234 301 +3 235 301 300 +3 299 302 207 +3 299 207 204 +3 301 303 302 +3 301 302 299 +3 234 245 303 +3 234 303 301 +3 302 304 210 +3 302 210 207 +3 303 305 304 +3 303 304 302 +3 245 251 305 +3 245 305 303 +3 304 306 213 +3 304 213 210 +3 305 307 306 +3 305 306 304 +3 251 257 307 +3 251 307 305 +3 306 308 216 +3 306 216 213 +3 307 309 308 +3 307 308 306 +3 257 263 309 +3 257 309 307 +3 308 310 219 +3 308 219 216 +3 309 311 310 +3 309 310 308 +3 263 269 311 +3 263 311 309 +3 310 312 222 +3 310 222 219 +3 311 313 312 +3 311 312 310 +3 269 275 313 +3 269 313 311 +3 312 314 225 +3 312 225 222 +3 313 315 314 +3 313 314 312 +3 275 281 315 +3 275 315 313 +3 314 316 228 +3 314 228 225 +3 315 317 316 +3 315 316 314 +3 281 287 317 +3 281 317 315 +3 316 318 231 +3 316 231 228 +3 317 319 318 +3 317 318 316 +3 287 293 319 +3 287 319 317 +3 320 321 243 +3 320 243 242 +3 322 323 321 +3 322 321 320 +3 124 123 323 +3 124 323 322 +3 321 324 249 +3 321 249 243 +3 323 325 324 +3 323 324 321 +3 123 136 325 +3 123 325 323 +3 324 326 255 +3 324 255 249 +3 325 327 326 +3 325 326 324 +3 136 143 327 +3 136 327 325 +3 326 328 261 +3 326 261 255 +3 327 329 328 +3 327 328 326 +3 143 150 329 +3 143 329 327 +3 328 330 267 +3 328 267 261 +3 329 331 330 +3 329 330 328 +3 150 157 331 +3 150 331 329 +3 330 332 273 +3 330 273 267 +3 331 333 332 +3 331 332 330 +3 157 164 333 +3 157 333 331 +3 332 334 279 +3 332 279 273 +3 333 335 334 +3 333 334 332 +3 164 171 335 +3 164 335 333 +3 334 336 285 +3 334 285 279 +3 335 337 336 +3 335 336 334 +3 171 178 337 +3 171 337 335 +3 336 338 291 +3 336 291 285 +3 337 339 338 +3 337 338 336 +3 178 185 339 +3 178 339 337 +3 338 340 297 +3 338 297 291 +3 339 341 340 +3 339 340 338 +3 185 192 341 +3 185 341 339 +3 342 343 344 +3 342 344 345 +3 345 344 346 +3 345 346 347 +3 347 346 348 +3 347 348 349 +3 349 348 350 +3 349 350 351 +3 351 350 352 +3 351 352 353 +3 353 352 354 +3 353 354 355 +3 355 354 356 +3 355 356 357 +3 357 356 358 +3 357 358 359 +3 359 358 360 +3 359 360 361 +3 361 360 362 +3 361 362 363 +3 343 364 365 +3 343 365 344 +3 344 365 366 +3 344 366 346 +3 346 366 367 +3 346 367 348 +3 348 367 368 +3 348 368 350 +3 350 368 369 +3 350 369 352 +3 352 369 370 +3 352 370 354 +3 354 370 371 +3 354 371 356 +3 356 371 372 +3 356 372 358 +3 358 372 373 +3 358 373 360 +3 360 373 374 +3 360 374 362 +3 364 375 376 +3 364 376 365 +3 365 376 377 +3 365 377 366 +3 366 377 378 +3 366 378 367 +3 367 378 379 +3 367 379 368 +3 368 379 380 +3 368 380 369 +3 369 380 381 +3 369 381 370 +3 370 381 382 +3 370 382 371 +3 371 382 383 +3 371 383 372 +3 372 383 384 +3 372 384 373 +3 373 384 385 +3 373 385 374 +3 375 386 387 +3 375 387 376 +3 376 387 388 +3 376 388 377 +3 377 388 389 +3 377 389 378 +3 378 389 390 +3 378 390 379 +3 379 390 391 +3 379 391 380 +3 380 391 392 +3 380 392 381 +3 381 392 393 +3 381 393 382 +3 382 393 394 +3 382 394 383 +3 383 394 395 +3 383 395 384 +3 384 395 396 +3 384 396 385 +3 397 398 399 +3 400 401 398 +3 400 398 397 +3 402 403 401 +3 402 401 400 +3 404 405 403 +3 404 403 402 +3 406 407 405 +3 406 405 404 +3 408 409 407 +3 408 407 406 +3 410 411 409 +3 410 409 408 +3 412 413 411 +3 412 411 410 +3 414 415 413 +3 414 413 412 +3 416 417 415 +3 416 415 414 +3 398 418 419 +3 398 419 399 +3 401 420 418 +3 401 418 398 +3 403 421 420 +3 403 420 401 +3 405 422 421 +3 405 421 403 +3 407 423 422 +3 407 422 405 +3 409 424 423 +3 409 423 407 +3 411 425 424 +3 411 424 409 +3 413 426 425 +3 413 425 411 +3 415 427 426 +3 415 426 413 +3 417 428 427 +3 417 427 415 +3 418 429 430 +3 418 430 419 +3 420 431 429 +3 420 429 418 +3 421 432 431 +3 421 431 420 +3 422 433 432 +3 422 432 421 +3 423 434 433 +3 423 433 422 +3 424 435 434 +3 424 434 423 +3 425 436 435 +3 425 435 424 +3 426 437 436 +3 426 436 425 +3 427 438 437 +3 427 437 426 +3 428 439 438 +3 428 438 427 +3 429 440 441 +3 429 441 430 +3 431 442 440 +3 431 440 429 +3 432 443 442 +3 432 442 431 +3 433 444 443 +3 433 443 432 +3 434 445 444 +3 434 444 433 +3 435 446 445 +3 435 445 434 +3 436 447 446 +3 436 446 435 +3 437 448 447 +3 437 447 436 +3 438 449 448 +3 438 448 437 +3 439 450 449 +3 439 449 438 +3 399 451 397 +3 397 451 452 +3 397 452 400 +3 400 452 453 +3 400 453 402 +3 402 453 454 +3 402 454 404 +3 404 454 455 +3 404 455 406 +3 406 455 456 +3 406 456 408 +3 408 456 457 +3 408 457 410 +3 410 457 458 +3 410 458 412 +3 412 458 459 +3 412 459 414 +3 414 459 460 +3 414 460 417 +3 399 419 461 +3 399 461 451 +3 451 461 462 +3 451 462 452 +3 452 462 463 +3 452 463 453 +3 453 463 464 +3 453 464 454 +3 454 464 465 +3 454 465 455 +3 455 465 466 +3 455 466 456 +3 456 466 467 +3 456 467 457 +3 457 467 468 +3 457 468 458 +3 458 468 469 +3 458 469 459 +3 459 469 428 +3 459 428 460 +3 419 430 470 +3 419 470 461 +3 461 470 471 +3 461 471 462 +3 462 471 472 +3 462 472 463 +3 463 472 473 +3 463 473 464 +3 464 473 474 +3 464 474 465 +3 465 474 475 +3 465 475 466 +3 466 475 476 +3 466 476 467 +3 467 476 477 +3 467 477 468 +3 468 477 478 +3 468 478 469 +3 469 478 439 +3 469 439 428 +3 430 441 479 +3 430 479 470 +3 470 479 480 +3 470 480 471 +3 471 480 481 +3 471 481 472 +3 472 481 482 +3 472 482 473 +3 473 482 483 +3 473 483 474 +3 474 483 484 +3 474 484 475 +3 475 484 485 +3 475 485 476 +3 476 485 486 +3 476 486 477 +3 477 486 487 +3 477 487 478 +3 478 487 450 +3 478 450 439 +3 488 489 490 +3 491 492 489 +3 491 489 488 +3 493 494 492 +3 493 492 491 +3 495 496 494 +3 495 494 493 +3 497 498 496 +3 497 496 495 +3 499 500 498 +3 499 498 497 +3 501 502 500 +3 501 500 499 +3 503 504 502 +3 503 502 501 +3 505 506 504 +3 505 504 503 +3 507 508 506 +3 507 506 505 +3 489 509 510 +3 489 510 490 +3 492 511 509 +3 492 509 489 +3 494 512 511 +3 494 511 492 +3 496 513 512 +3 496 512 494 +3 498 514 513 +3 498 513 496 +3 500 515 514 +3 500 514 498 +3 502 516 515 +3 502 515 500 +3 504 517 516 +3 504 516 502 +3 506 518 517 +3 506 517 504 +3 508 519 518 +3 508 518 506 +3 509 520 521 +3 509 521 510 +3 511 522 520 +3 511 520 509 +3 512 523 522 +3 512 522 511 +3 513 524 523 +3 513 523 512 +3 514 525 524 +3 514 524 513 +3 515 526 525 +3 515 525 514 +3 516 527 526 +3 516 526 515 +3 517 528 527 +3 517 527 516 +3 518 529 528 +3 518 528 517 +3 519 530 529 +3 519 529 518 +3 520 531 532 +3 520 532 521 +3 522 533 531 +3 522 531 520 +3 523 534 533 +3 523 533 522 +3 524 535 534 +3 524 534 523 +3 525 536 535 +3 525 535 524 +3 526 537 536 +3 526 536 525 +3 527 538 537 +3 527 537 526 +3 528 539 538 +3 528 538 527 +3 529 540 539 +3 529 539 528 +3 530 541 540 +3 530 540 529 +3 531 542 543 +3 531 543 532 +3 533 544 542 +3 533 542 531 +3 534 545 544 +3 534 544 533 +3 535 546 545 +3 535 545 534 +3 536 547 546 +3 536 546 535 +3 537 548 547 +3 537 547 536 +3 538 549 548 +3 538 548 537 +3 539 550 549 +3 539 549 538 +3 540 551 550 +3 540 550 539 +3 541 552 551 +3 541 551 540 +3 542 553 554 +3 542 554 543 +3 544 555 553 +3 544 553 542 +3 545 556 555 +3 545 555 544 +3 546 557 556 +3 546 556 545 +3 547 558 557 +3 547 557 546 +3 548 559 558 +3 548 558 547 +3 549 560 559 +3 549 559 548 +3 550 561 560 +3 550 560 549 +3 551 562 561 +3 551 561 550 +3 552 563 562 +3 552 562 551 +3 553 564 565 +3 553 565 554 +3 555 566 564 +3 555 564 553 +3 556 567 566 +3 556 566 555 +3 557 568 567 +3 557 567 556 +3 558 569 568 +3 558 568 557 +3 559 570 569 +3 559 569 558 +3 560 571 570 +3 560 570 559 +3 561 572 571 +3 561 571 560 +3 562 573 572 +3 562 572 561 +3 563 574 573 +3 563 573 562 +3 564 575 576 +3 564 576 565 +3 566 577 575 +3 566 575 564 +3 567 578 577 +3 567 577 566 +3 568 579 578 +3 568 578 567 +3 569 580 579 +3 569 579 568 +3 570 581 580 +3 570 580 569 +3 571 582 581 +3 571 581 570 +3 572 583 582 +3 572 582 571 +3 573 584 583 +3 573 583 572 +3 574 585 584 +3 574 584 573 +3 575 586 587 +3 575 587 576 +3 577 588 586 +3 577 586 575 +3 578 589 588 +3 578 588 577 +3 579 590 589 +3 579 589 578 +3 580 591 590 +3 580 590 579 +3 581 592 591 +3 581 591 580 +3 582 593 592 +3 582 592 581 +3 583 594 593 +3 583 593 582 +3 584 595 594 +3 584 594 583 +3 585 596 595 +3 585 595 584 +3 586 597 598 +3 586 598 587 +3 588 599 597 +3 588 597 586 +3 589 600 599 +3 589 599 588 +3 590 601 600 +3 590 600 589 +3 591 602 601 +3 591 601 590 +3 592 603 602 +3 592 602 591 +3 593 604 603 +3 593 603 592 +3 594 605 604 +3 594 604 593 +3 595 606 605 +3 595 605 594 +3 596 607 606 +3 596 606 595 +3 597 608 609 +3 597 609 598 +3 599 610 608 +3 599 608 597 +3 600 611 610 +3 600 610 599 +3 601 612 611 +3 601 611 600 +3 602 613 612 +3 602 612 601 +3 603 614 613 +3 603 613 602 +3 604 615 614 +3 604 614 603 +3 605 616 615 +3 605 615 604 +3 606 617 616 +3 606 616 605 +3 607 618 617 +3 607 617 606 +3 608 619 620 +3 608 620 609 +3 610 621 619 +3 610 619 608 +3 611 622 621 +3 611 621 610 +3 612 623 622 +3 612 622 611 +3 613 624 623 +3 613 623 612 +3 614 625 624 +3 614 624 613 +3 615 626 625 +3 615 625 614 +3 616 627 626 +3 616 626 615 +3 617 628 627 +3 617 627 616 +3 618 629 628 +3 618 628 617 +3 490 630 488 +3 488 630 631 +3 488 631 491 +3 491 631 632 +3 491 632 493 +3 493 632 633 +3 493 633 495 +3 495 633 634 +3 495 634 497 +3 497 634 635 +3 497 635 499 +3 499 635 636 +3 499 636 501 +3 501 636 637 +3 501 637 503 +3 503 637 638 +3 503 638 505 +3 505 638 639 +3 505 639 507 +3 490 510 640 +3 490 640 630 +3 630 640 641 +3 630 641 631 +3 631 641 642 +3 631 642 632 +3 632 642 643 +3 632 643 633 +3 633 643 644 +3 633 644 634 +3 634 644 645 +3 634 645 635 +3 635 645 646 +3 635 646 636 +3 636 646 647 +3 636 647 637 +3 637 647 648 +3 637 648 638 +3 638 648 649 +3 638 649 639 +3 510 521 650 +3 510 650 640 +3 640 650 651 +3 640 651 641 +3 641 651 652 +3 641 652 642 +3 642 652 653 +3 642 653 643 +3 643 653 654 +3 643 654 644 +3 644 654 655 +3 644 655 645 +3 645 655 656 +3 645 656 646 +3 646 656 657 +3 646 657 647 +3 647 657 658 +3 647 658 648 +3 648 658 659 +3 648 659 649 +3 521 532 660 +3 521 660 650 +3 650 660 661 +3 650 661 651 +3 651 661 662 +3 651 662 652 +3 652 662 663 +3 652 663 653 +3 653 663 664 +3 653 664 654 +3 654 664 665 +3 654 665 655 +3 655 665 666 +3 655 666 656 +3 656 666 667 +3 656 667 657 +3 657 667 668 +3 657 668 658 +3 658 668 541 +3 658 541 659 +3 532 543 669 +3 532 669 660 +3 660 669 670 +3 660 670 661 +3 661 670 671 +3 661 671 662 +3 662 671 672 +3 662 672 663 +3 663 672 673 +3 663 673 664 +3 664 673 674 +3 664 674 665 +3 665 674 675 +3 665 675 666 +3 666 675 676 +3 666 676 667 +3 667 676 677 +3 667 677 668 +3 668 677 678 +3 668 678 541 +3 543 554 679 +3 543 679 669 +3 669 679 680 +3 669 680 670 +3 670 680 681 +3 670 681 671 +3 671 681 682 +3 671 682 672 +3 672 682 683 +3 672 683 673 +3 673 683 684 +3 673 684 674 +3 674 684 685 +3 674 685 675 +3 675 685 686 +3 675 686 676 +3 676 686 687 +3 676 687 677 +3 677 687 688 +3 677 688 678 +3 554 565 689 +3 554 689 679 +3 679 689 690 +3 679 690 680 +3 680 690 691 +3 680 691 681 +3 681 691 692 +3 681 692 682 +3 682 692 693 +3 682 693 683 +3 683 693 694 +3 683 694 684 +3 684 694 695 +3 684 695 685 +3 685 695 696 +3 685 696 686 +3 686 696 697 +3 686 697 687 +3 687 697 698 +3 687 698 688 +3 565 576 699 +3 565 699 689 +3 689 699 700 +3 689 700 690 +3 690 700 701 +3 690 701 691 +3 691 701 702 +3 691 702 692 +3 692 702 703 +3 692 703 693 +3 693 703 704 +3 693 704 694 +3 694 704 705 +3 694 705 695 +3 695 705 706 +3 695 706 696 +3 696 706 707 +3 696 707 697 +3 697 707 708 +3 697 708 698 +3 576 587 709 +3 576 709 699 +3 699 709 710 +3 699 710 700 +3 700 710 711 +3 700 711 701 +3 701 711 712 +3 701 712 702 +3 702 712 713 +3 702 713 703 +3 703 713 714 +3 703 714 704 +3 704 714 715 +3 704 715 705 +3 705 715 716 +3 705 716 706 +3 706 716 717 +3 706 717 707 +3 707 717 718 +3 707 718 708 +3 587 598 719 +3 587 719 709 +3 709 719 720 +3 709 720 710 +3 710 720 721 +3 710 721 711 +3 711 721 722 +3 711 722 712 +3 712 722 723 +3 712 723 713 +3 713 723 724 +3 713 724 714 +3 714 724 725 +3 714 725 715 +3 715 725 726 +3 715 726 716 +3 716 726 727 +3 716 727 717 +3 717 727 728 +3 717 728 718 +3 598 609 729 +3 598 729 719 +3 719 729 730 +3 719 730 720 +3 720 730 731 +3 720 731 721 +3 721 731 732 +3 721 732 722 +3 722 732 733 +3 722 733 723 +3 723 733 734 +3 723 734 724 +3 724 734 735 +3 724 735 725 +3 725 735 736 +3 725 736 726 +3 726 736 737 +3 726 737 727 +3 727 737 738 +3 727 738 728 +3 609 620 739 +3 609 739 729 +3 729 739 740 +3 729 740 730 +3 730 740 741 +3 730 741 731 +3 731 741 742 +3 731 742 732 +3 732 742 743 +3 732 743 733 +3 733 743 744 +3 733 744 734 +3 734 744 745 +3 734 745 735 +3 735 745 746 +3 735 746 736 +3 736 746 747 +3 736 747 737 +3 737 747 629 +3 737 629 738 +3 124 748 749 +3 124 749 121 +3 121 749 750 +3 121 750 125 +3 125 750 751 +3 125 751 127 +3 127 751 752 +3 127 752 129 +3 129 752 753 +3 129 753 131 +3 131 753 754 +3 131 754 133 +3 748 755 756 +3 748 756 749 +3 749 756 757 +3 749 757 750 +3 750 757 758 +3 750 758 751 +3 751 758 759 +3 751 759 752 +3 752 759 760 +3 752 760 753 +3 753 760 761 +3 753 761 754 +3 755 762 763 +3 755 763 756 +3 756 763 764 +3 756 764 757 +3 757 764 765 +3 757 765 758 +3 758 765 766 +3 758 766 759 +3 759 766 767 +3 759 767 760 +3 760 767 768 +3 760 768 761 +3 762 769 770 +3 762 770 763 +3 763 770 771 +3 763 771 764 +3 764 771 772 +3 764 772 765 +3 765 772 773 +3 765 773 766 +3 766 773 774 +3 766 774 767 +3 767 774 775 +3 767 775 768 +3 769 776 777 +3 769 777 770 +3 770 777 778 +3 770 778 771 +3 771 778 779 +3 771 779 772 +3 772 779 780 +3 772 780 773 +3 773 780 781 +3 773 781 774 +3 774 781 782 +3 774 782 775 +3 776 783 784 +3 776 784 777 +3 777 784 785 +3 777 785 778 +3 778 785 786 +3 778 786 779 +3 779 786 787 +3 779 787 780 +3 780 787 788 +3 780 788 781 +3 781 788 789 +3 781 789 782 +3 783 790 791 +3 783 791 784 +3 784 791 792 +3 784 792 785 +3 785 792 793 +3 785 793 786 +3 786 793 794 +3 786 794 787 +3 787 794 795 +3 787 795 788 +3 788 795 796 +3 788 796 789 +3 790 797 798 +3 790 798 791 +3 791 798 799 +3 791 799 792 +3 792 799 800 +3 792 800 793 +3 793 800 801 +3 793 801 794 +3 794 801 802 +3 794 802 795 +3 795 802 803 +3 795 803 796 +3 797 804 805 +3 797 805 798 +3 798 805 806 +3 798 806 799 +3 799 806 807 +3 799 807 800 +3 800 807 808 +3 800 808 801 +3 801 808 809 +3 801 809 802 +3 802 809 810 +3 802 810 803 +3 804 192 191 +3 804 191 805 +3 805 191 193 +3 805 193 806 +3 806 193 194 +3 806 194 807 +3 807 194 195 +3 807 195 808 +3 808 195 196 +3 808 196 809 +3 809 196 197 +3 809 197 810 +3 62 811 812 +3 62 812 198 +3 198 812 813 +3 198 813 201 +3 201 813 814 +3 201 814 203 +3 811 74 815 +3 811 815 812 +3 812 815 816 +3 812 816 813 +3 813 816 817 +3 813 817 814 +3 74 80 818 +3 74 818 815 +3 815 818 819 +3 815 819 816 +3 816 819 820 +3 816 820 817 +3 80 86 821 +3 80 821 818 +3 818 821 822 +3 818 822 819 +3 819 822 823 +3 819 823 820 +3 86 92 824 +3 86 824 821 +3 821 824 825 +3 821 825 822 +3 822 825 826 +3 822 826 823 +3 92 98 827 +3 92 827 824 +3 824 827 828 +3 824 828 825 +3 825 828 829 +3 825 829 826 +3 98 104 830 +3 98 830 827 +3 827 830 831 +3 827 831 828 +3 828 831 832 +3 828 832 829 +3 104 110 833 +3 104 833 830 +3 830 833 834 +3 830 834 831 +3 831 834 835 +3 831 835 832 +3 110 116 836 +3 110 836 833 +3 833 836 837 +3 833 837 834 +3 834 837 838 +3 834 838 835 +3 116 3 229 +3 116 229 836 +3 836 229 230 +3 836 230 837 +3 837 230 231 +3 837 231 838 +3 235 839 840 +3 235 840 232 +3 232 840 841 +3 232 841 236 +3 236 841 842 +3 236 842 238 +3 238 842 843 +3 238 843 240 +3 240 843 844 +3 240 844 242 +3 839 845 846 +3 839 846 840 +3 840 846 847 +3 840 847 841 +3 841 847 848 +3 841 848 842 +3 842 848 849 +3 842 849 843 +3 843 849 850 +3 843 850 844 +3 845 851 852 +3 845 852 846 +3 846 852 853 +3 846 853 847 +3 847 853 854 +3 847 854 848 +3 848 854 855 +3 848 855 849 +3 849 855 856 +3 849 856 850 +3 851 857 858 +3 851 858 852 +3 852 858 859 +3 852 859 853 +3 853 859 860 +3 853 860 854 +3 854 860 861 +3 854 861 855 +3 855 861 862 +3 855 862 856 +3 857 863 864 +3 857 864 858 +3 858 864 865 +3 858 865 859 +3 859 865 866 +3 859 866 860 +3 860 866 867 +3 860 867 861 +3 861 867 868 +3 861 868 862 +3 863 869 870 +3 863 870 864 +3 864 870 871 +3 864 871 865 +3 865 871 872 +3 865 872 866 +3 866 872 873 +3 866 873 867 +3 867 873 874 +3 867 874 868 +3 869 875 876 +3 869 876 870 +3 870 876 877 +3 870 877 871 +3 871 877 878 +3 871 878 872 +3 872 878 879 +3 872 879 873 +3 873 879 880 +3 873 880 874 +3 875 881 882 +3 875 882 876 +3 876 882 883 +3 876 883 877 +3 877 883 884 +3 877 884 878 +3 878 884 885 +3 878 885 879 +3 879 885 886 +3 879 886 880 +3 881 887 888 +3 881 888 882 +3 882 888 889 +3 882 889 883 +3 883 889 890 +3 883 890 884 +3 884 890 891 +3 884 891 885 +3 885 891 892 +3 885 892 886 +3 887 293 292 +3 887 292 888 +3 888 292 294 +3 888 294 889 +3 889 294 295 +3 889 295 890 +3 890 295 296 +3 890 296 891 +3 891 296 297 +3 891 297 892 +3 203 814 893 +3 203 893 298 +3 298 893 894 +3 298 894 300 +3 300 894 839 +3 300 839 235 +3 814 817 895 +3 814 895 893 +3 893 895 896 +3 893 896 894 +3 894 896 845 +3 894 845 839 +3 817 820 897 +3 817 897 895 +3 895 897 898 +3 895 898 896 +3 896 898 851 +3 896 851 845 +3 820 823 899 +3 820 899 897 +3 897 899 900 +3 897 900 898 +3 898 900 857 +3 898 857 851 +3 823 826 901 +3 823 901 899 +3 899 901 902 +3 899 902 900 +3 900 902 863 +3 900 863 857 +3 826 829 903 +3 826 903 901 +3 901 903 904 +3 901 904 902 +3 902 904 869 +3 902 869 863 +3 829 832 905 +3 829 905 903 +3 903 905 906 +3 903 906 904 +3 904 906 875 +3 904 875 869 +3 832 835 907 +3 832 907 905 +3 905 907 908 +3 905 908 906 +3 906 908 881 +3 906 881 875 +3 835 838 909 +3 835 909 907 +3 907 909 910 +3 907 910 908 +3 908 910 887 +3 908 887 881 +3 838 231 318 +3 838 318 909 +3 909 318 319 +3 909 319 910 +3 910 319 293 +3 910 293 887 +3 242 844 911 +3 242 911 320 +3 320 911 912 +3 320 912 322 +3 322 912 748 +3 322 748 124 +3 844 850 913 +3 844 913 911 +3 911 913 914 +3 911 914 912 +3 912 914 755 +3 912 755 748 +3 850 856 915 +3 850 915 913 +3 913 915 916 +3 913 916 914 +3 914 916 762 +3 914 762 755 +3 856 862 917 +3 856 917 915 +3 915 917 918 +3 915 918 916 +3 916 918 769 +3 916 769 762 +3 862 868 919 +3 862 919 917 +3 917 919 920 +3 917 920 918 +3 918 920 776 +3 918 776 769 +3 868 874 921 +3 868 921 919 +3 919 921 922 +3 919 922 920 +3 920 922 783 +3 920 783 776 +3 874 880 923 +3 874 923 921 +3 921 923 924 +3 921 924 922 +3 922 924 790 +3 922 790 783 +3 880 886 925 +3 880 925 923 +3 923 925 926 +3 923 926 924 +3 924 926 797 +3 924 797 790 +3 886 892 927 +3 886 927 925 +3 925 927 928 +3 925 928 926 +3 926 928 804 +3 926 804 797 +3 892 297 340 +3 892 340 927 +3 927 340 341 +3 927 341 928 +3 928 341 192 +3 928 192 804 +3 929 930 931 +3 929 931 932 +3 933 934 930 +3 933 930 929 +3 935 936 934 +3 935 934 933 +3 937 938 936 +3 937 936 935 +3 939 940 938 +3 939 938 937 +3 941 942 940 +3 941 940 939 +3 943 944 942 +3 943 942 941 +3 945 946 944 +3 945 944 943 +3 947 948 946 +3 947 946 945 +3 949 950 948 +3 949 948 947 +3 930 951 952 +3 930 952 931 +3 934 953 951 +3 934 951 930 +3 936 954 953 +3 936 953 934 +3 938 955 954 +3 938 954 936 +3 940 956 955 +3 940 955 938 +3 942 957 956 +3 942 956 940 +3 944 958 957 +3 944 957 942 +3 946 959 958 +3 946 958 944 +3 948 960 959 +3 948 959 946 +3 950 961 960 +3 950 960 948 +3 951 962 963 +3 951 963 952 +3 953 964 962 +3 953 962 951 +3 954 965 964 +3 954 964 953 +3 955 966 965 +3 955 965 954 +3 956 967 966 +3 956 966 955 +3 957 968 967 +3 957 967 956 +3 958 969 968 +3 958 968 957 +3 959 970 969 +3 959 969 958 +3 960 971 970 +3 960 970 959 +3 961 972 971 +3 961 971 960 +3 962 973 974 +3 962 974 963 +3 964 975 973 +3 964 973 962 +3 965 976 975 +3 965 975 964 +3 966 977 976 +3 966 976 965 +3 967 978 977 +3 967 977 966 +3 968 979 978 +3 968 978 967 +3 969 980 979 +3 969 979 968 +3 970 981 980 +3 970 980 969 +3 971 982 981 +3 971 981 970 +3 972 983 982 +3 972 982 971 +3 984 985 986 +3 986 985 987 +3 986 987 988 +3 988 987 989 +3 988 989 990 +3 990 989 991 +3 990 991 992 +3 992 991 993 +3 992 993 994 +3 994 993 995 +3 994 995 996 +3 996 995 997 +3 996 997 998 +3 998 997 999 +3 998 999 1000 +3 1000 999 1001 +3 1000 1001 1002 +3 1002 1001 1003 +3 1002 1003 1004 +3 984 1005 1006 +3 984 1006 985 +3 985 1006 1007 +3 985 1007 987 +3 987 1007 1008 +3 987 1008 989 +3 989 1008 1009 +3 989 1009 991 +3 991 1009 1010 +3 991 1010 993 +3 993 1010 1011 +3 993 1011 995 +3 995 1011 1012 +3 995 1012 997 +3 997 1012 1013 +3 997 1013 999 +3 999 1013 1014 +3 999 1014 1001 +3 1001 1014 1015 +3 1001 1015 1003 +3 1005 1016 1017 +3 1005 1017 1006 +3 1006 1017 1018 +3 1006 1018 1007 +3 1007 1018 1019 +3 1007 1019 1008 +3 1008 1019 1020 +3 1008 1020 1009 +3 1009 1020 1021 +3 1009 1021 1010 +3 1010 1021 1022 +3 1010 1022 1011 +3 1011 1022 1023 +3 1011 1023 1012 +3 1012 1023 1024 +3 1012 1024 1013 +3 1013 1024 1025 +3 1013 1025 1014 +3 1014 1025 1026 +3 1014 1026 1015 +3 1016 1027 1028 +3 1016 1028 1017 +3 1017 1028 1029 +3 1017 1029 1018 +3 1018 1029 1030 +3 1018 1030 1019 +3 1019 1030 1031 +3 1019 1031 1020 +3 1020 1031 1032 +3 1020 1032 1021 +3 1021 1032 1033 +3 1021 1033 1022 +3 1022 1033 1034 +3 1022 1034 1023 +3 1023 1034 1035 +3 1023 1035 1024 +3 1024 1035 1036 +3 1024 1036 1025 +3 1025 1036 1037 +3 1025 1037 1026 +3 986 1038 984 +3 988 1039 1038 +3 988 1038 986 +3 990 1040 1039 +3 990 1039 988 +3 992 1041 1040 +3 992 1040 990 +3 994 1042 1041 +3 994 1041 992 +3 996 1043 1042 +3 996 1042 994 +3 998 1044 1043 +3 998 1043 996 +3 1000 1045 1044 +3 1000 1044 998 +3 1002 1046 1045 +3 1002 1045 1000 +3 1003 1047 1046 +3 1003 1046 1002 +3 1038 1048 1005 +3 1038 1005 984 +3 1039 1049 1048 +3 1039 1048 1038 +3 1040 1050 1049 +3 1040 1049 1039 +3 1041 1051 1050 +3 1041 1050 1040 +3 1042 1052 1051 +3 1042 1051 1041 +3 1043 1053 1052 +3 1043 1052 1042 +3 1044 1054 1053 +3 1044 1053 1043 +3 1045 1055 1054 +3 1045 1054 1044 +3 1046 1056 1055 +3 1046 1055 1045 +3 1047 1015 1056 +3 1047 1056 1046 +3 1048 1057 1016 +3 1048 1016 1005 +3 1049 1058 1057 +3 1049 1057 1048 +3 1050 1059 1058 +3 1050 1058 1049 +3 1051 1060 1059 +3 1051 1059 1050 +3 1052 1061 1060 +3 1052 1060 1051 +3 1053 1062 1061 +3 1053 1061 1052 +3 1054 1063 1062 +3 1054 1062 1053 +3 1055 1064 1063 +3 1055 1063 1054 +3 1056 1065 1064 +3 1056 1064 1055 +3 1015 1026 1065 +3 1015 1065 1056 +3 1057 1066 1027 +3 1057 1027 1016 +3 1058 1067 1066 +3 1058 1066 1057 +3 1059 1068 1067 +3 1059 1067 1058 +3 1060 1069 1068 +3 1060 1068 1059 +3 1061 1070 1069 +3 1061 1069 1060 +3 1062 1071 1070 +3 1062 1070 1061 +3 1063 1072 1071 +3 1063 1071 1062 +3 1064 1073 1072 +3 1064 1072 1063 +3 1065 1074 1073 +3 1065 1073 1064 +3 1026 1037 1074 +3 1026 1074 1065 +3 1075 1076 1077 +3 1077 1076 1078 +3 1077 1078 1079 +3 1079 1078 1080 +3 1079 1080 1081 +3 1081 1080 1082 +3 1081 1082 1083 +3 1083 1082 1084 +3 1083 1084 1085 +3 1085 1084 1086 +3 1085 1086 1087 +3 1087 1086 1088 +3 1087 1088 1089 +3 1089 1088 1090 +3 1089 1090 1091 +3 1091 1090 1092 +3 1091 1092 1093 +3 1093 1092 1094 +3 1093 1094 1095 +3 1075 1096 1097 +3 1075 1097 1076 +3 1076 1097 1098 +3 1076 1098 1078 +3 1078 1098 1099 +3 1078 1099 1080 +3 1080 1099 1100 +3 1080 1100 1082 +3 1082 1100 1101 +3 1082 1101 1084 +3 1084 1101 1102 +3 1084 1102 1086 +3 1086 1102 1103 +3 1086 1103 1088 +3 1088 1103 1104 +3 1088 1104 1090 +3 1090 1104 1105 +3 1090 1105 1092 +3 1092 1105 1106 +3 1092 1106 1094 +3 1096 1107 1108 +3 1096 1108 1097 +3 1097 1108 1109 +3 1097 1109 1098 +3 1098 1109 1110 +3 1098 1110 1099 +3 1099 1110 1111 +3 1099 1111 1100 +3 1100 1111 1112 +3 1100 1112 1101 +3 1101 1112 1113 +3 1101 1113 1102 +3 1102 1113 1114 +3 1102 1114 1103 +3 1103 1114 1115 +3 1103 1115 1104 +3 1104 1115 1116 +3 1104 1116 1105 +3 1105 1116 1117 +3 1105 1117 1106 +3 1107 1118 1119 +3 1107 1119 1108 +3 1108 1119 1120 +3 1108 1120 1109 +3 1109 1120 1121 +3 1109 1121 1110 +3 1110 1121 1122 +3 1110 1122 1111 +3 1111 1122 1123 +3 1111 1123 1112 +3 1112 1123 1124 +3 1112 1124 1113 +3 1113 1124 1125 +3 1113 1125 1114 +3 1114 1125 1126 +3 1114 1126 1115 +3 1115 1126 1127 +3 1115 1127 1116 +3 1116 1127 1128 +3 1116 1128 1117 +3 1118 1129 1130 +3 1118 1130 1119 +3 1119 1130 1131 +3 1119 1131 1120 +3 1120 1131 1132 +3 1120 1132 1121 +3 1121 1132 1133 +3 1121 1133 1122 +3 1122 1133 1134 +3 1122 1134 1123 +3 1123 1134 1135 +3 1123 1135 1124 +3 1124 1135 1136 +3 1124 1136 1125 +3 1125 1136 1137 +3 1125 1137 1126 +3 1126 1137 1138 +3 1126 1138 1127 +3 1127 1138 1139 +3 1127 1139 1128 +3 1129 1140 1141 +3 1129 1141 1130 +3 1130 1141 1142 +3 1130 1142 1131 +3 1131 1142 1143 +3 1131 1143 1132 +3 1132 1143 1144 +3 1132 1144 1133 +3 1133 1144 1145 +3 1133 1145 1134 +3 1134 1145 1146 +3 1134 1146 1135 +3 1135 1146 1147 +3 1135 1147 1136 +3 1136 1147 1148 +3 1136 1148 1137 +3 1137 1148 1149 +3 1137 1149 1138 +3 1138 1149 1150 +3 1138 1150 1139 +3 1140 1151 1152 +3 1140 1152 1141 +3 1141 1152 1153 +3 1141 1153 1142 +3 1142 1153 1154 +3 1142 1154 1143 +3 1143 1154 1155 +3 1143 1155 1144 +3 1144 1155 1156 +3 1144 1156 1145 +3 1145 1156 1157 +3 1145 1157 1146 +3 1146 1157 1158 +3 1146 1158 1147 +3 1147 1158 1159 +3 1147 1159 1148 +3 1148 1159 1160 +3 1148 1160 1149 +3 1149 1160 1161 +3 1149 1161 1150 +3 1151 1162 1163 +3 1151 1163 1152 +3 1152 1163 1164 +3 1152 1164 1153 +3 1153 1164 1165 +3 1153 1165 1154 +3 1154 1165 1166 +3 1154 1166 1155 +3 1155 1166 1167 +3 1155 1167 1156 +3 1156 1167 1168 +3 1156 1168 1157 +3 1157 1168 1169 +3 1157 1169 1158 +3 1158 1169 1170 +3 1158 1170 1159 +3 1159 1170 1171 +3 1159 1171 1160 +3 1160 1171 1172 +3 1160 1172 1161 +3 1162 1173 1174 +3 1162 1174 1163 +3 1163 1174 1175 +3 1163 1175 1164 +3 1164 1175 1176 +3 1164 1176 1165 +3 1165 1176 1177 +3 1165 1177 1166 +3 1166 1177 1178 +3 1166 1178 1167 +3 1167 1178 1179 +3 1167 1179 1168 +3 1168 1179 1180 +3 1168 1180 1169 +3 1169 1180 1181 +3 1169 1181 1170 +3 1170 1181 1182 +3 1170 1182 1171 +3 1171 1182 1183 +3 1171 1183 1172 +3 1173 1184 1185 +3 1173 1185 1174 +3 1174 1185 1186 +3 1174 1186 1175 +3 1175 1186 1187 +3 1175 1187 1176 +3 1176 1187 1188 +3 1176 1188 1177 +3 1177 1188 1189 +3 1177 1189 1178 +3 1178 1189 1190 +3 1178 1190 1179 +3 1179 1190 1191 +3 1179 1191 1180 +3 1180 1191 1192 +3 1180 1192 1181 +3 1181 1192 1193 +3 1181 1193 1182 +3 1182 1193 1194 +3 1182 1194 1183 +3 1184 1195 1196 +3 1184 1196 1185 +3 1185 1196 1197 +3 1185 1197 1186 +3 1186 1197 1198 +3 1186 1198 1187 +3 1187 1198 1199 +3 1187 1199 1188 +3 1188 1199 1200 +3 1188 1200 1189 +3 1189 1200 1201 +3 1189 1201 1190 +3 1190 1201 1202 +3 1190 1202 1191 +3 1191 1202 1203 +3 1191 1203 1192 +3 1192 1203 1204 +3 1192 1204 1193 +3 1193 1204 1205 +3 1193 1205 1194 +3 1195 1206 1207 +3 1195 1207 1196 +3 1196 1207 1208 +3 1196 1208 1197 +3 1197 1208 1209 +3 1197 1209 1198 +3 1198 1209 1210 +3 1198 1210 1199 +3 1199 1210 1211 +3 1199 1211 1200 +3 1200 1211 1212 +3 1200 1212 1201 +3 1201 1212 1213 +3 1201 1213 1202 +3 1202 1213 1214 +3 1202 1214 1203 +3 1203 1214 1215 +3 1203 1215 1204 +3 1204 1215 1216 +3 1204 1216 1205 +3 1077 1217 1075 +3 1079 1218 1217 +3 1079 1217 1077 +3 1081 1219 1218 +3 1081 1218 1079 +3 1083 1220 1219 +3 1083 1219 1081 +3 1085 1221 1220 +3 1085 1220 1083 +3 1087 1222 1221 +3 1087 1221 1085 +3 1089 1223 1222 +3 1089 1222 1087 +3 1091 1224 1223 +3 1091 1223 1089 +3 1093 1225 1224 +3 1093 1224 1091 +3 1095 1226 1225 +3 1095 1225 1093 +3 1217 1227 1096 +3 1217 1096 1075 +3 1218 1228 1227 +3 1218 1227 1217 +3 1219 1229 1228 +3 1219 1228 1218 +3 1220 1230 1229 +3 1220 1229 1219 +3 1221 1231 1230 +3 1221 1230 1220 +3 1222 1232 1231 +3 1222 1231 1221 +3 1223 1233 1232 +3 1223 1232 1222 +3 1224 1234 1233 +3 1224 1233 1223 +3 1225 1235 1234 +3 1225 1234 1224 +3 1226 1236 1235 +3 1226 1235 1225 +3 1227 1237 1107 +3 1227 1107 1096 +3 1228 1238 1237 +3 1228 1237 1227 +3 1229 1239 1238 +3 1229 1238 1228 +3 1230 1240 1239 +3 1230 1239 1229 +3 1231 1241 1240 +3 1231 1240 1230 +3 1232 1242 1241 +3 1232 1241 1231 +3 1233 1243 1242 +3 1233 1242 1232 +3 1234 1244 1243 +3 1234 1243 1233 +3 1235 1245 1244 +3 1235 1244 1234 +3 1236 1246 1245 +3 1236 1245 1235 +3 1237 1247 1118 +3 1237 1118 1107 +3 1238 1248 1247 +3 1238 1247 1237 +3 1239 1249 1248 +3 1239 1248 1238 +3 1240 1250 1249 +3 1240 1249 1239 +3 1241 1251 1250 +3 1241 1250 1240 +3 1242 1252 1251 +3 1242 1251 1241 +3 1243 1253 1252 +3 1243 1252 1242 +3 1244 1254 1253 +3 1244 1253 1243 +3 1245 1255 1254 +3 1245 1254 1244 +3 1246 1128 1255 +3 1246 1255 1245 +3 1247 1256 1129 +3 1247 1129 1118 +3 1248 1257 1256 +3 1248 1256 1247 +3 1249 1258 1257 +3 1249 1257 1248 +3 1250 1259 1258 +3 1250 1258 1249 +3 1251 1260 1259 +3 1251 1259 1250 +3 1252 1261 1260 +3 1252 1260 1251 +3 1253 1262 1261 +3 1253 1261 1252 +3 1254 1263 1262 +3 1254 1262 1253 +3 1255 1264 1263 +3 1255 1263 1254 +3 1128 1265 1264 +3 1128 1264 1255 +3 1256 1266 1140 +3 1256 1140 1129 +3 1257 1267 1266 +3 1257 1266 1256 +3 1258 1268 1267 +3 1258 1267 1257 +3 1259 1269 1268 +3 1259 1268 1258 +3 1260 1270 1269 +3 1260 1269 1259 +3 1261 1271 1270 +3 1261 1270 1260 +3 1262 1272 1271 +3 1262 1271 1261 +3 1263 1273 1272 +3 1263 1272 1262 +3 1264 1274 1273 +3 1264 1273 1263 +3 1265 1275 1274 +3 1265 1274 1264 +3 1266 1276 1151 +3 1266 1151 1140 +3 1267 1277 1276 +3 1267 1276 1266 +3 1268 1278 1277 +3 1268 1277 1267 +3 1269 1279 1278 +3 1269 1278 1268 +3 1270 1280 1279 +3 1270 1279 1269 +3 1271 1281 1280 +3 1271 1280 1270 +3 1272 1282 1281 +3 1272 1281 1271 +3 1273 1283 1282 +3 1273 1282 1272 +3 1274 1284 1283 +3 1274 1283 1273 +3 1275 1285 1284 +3 1275 1284 1274 +3 1276 1286 1162 +3 1276 1162 1151 +3 1277 1287 1286 +3 1277 1286 1276 +3 1278 1288 1287 +3 1278 1287 1277 +3 1279 1289 1288 +3 1279 1288 1278 +3 1280 1290 1289 +3 1280 1289 1279 +3 1281 1291 1290 +3 1281 1290 1280 +3 1282 1292 1291 +3 1282 1291 1281 +3 1283 1293 1292 +3 1283 1292 1282 +3 1284 1294 1293 +3 1284 1293 1283 +3 1285 1295 1294 +3 1285 1294 1284 +3 1286 1296 1173 +3 1286 1173 1162 +3 1287 1297 1296 +3 1287 1296 1286 +3 1288 1298 1297 +3 1288 1297 1287 +3 1289 1299 1298 +3 1289 1298 1288 +3 1290 1300 1299 +3 1290 1299 1289 +3 1291 1301 1300 +3 1291 1300 1290 +3 1292 1302 1301 +3 1292 1301 1291 +3 1293 1303 1302 +3 1293 1302 1292 +3 1294 1304 1303 +3 1294 1303 1293 +3 1295 1305 1304 +3 1295 1304 1294 +3 1296 1306 1184 +3 1296 1184 1173 +3 1297 1307 1306 +3 1297 1306 1296 +3 1298 1308 1307 +3 1298 1307 1297 +3 1299 1309 1308 +3 1299 1308 1298 +3 1300 1310 1309 +3 1300 1309 1299 +3 1301 1311 1310 +3 1301 1310 1300 +3 1302 1312 1311 +3 1302 1311 1301 +3 1303 1313 1312 +3 1303 1312 1302 +3 1304 1314 1313 +3 1304 1313 1303 +3 1305 1315 1314 +3 1305 1314 1304 +3 1306 1316 1195 +3 1306 1195 1184 +3 1307 1317 1316 +3 1307 1316 1306 +3 1308 1318 1317 +3 1308 1317 1307 +3 1309 1319 1318 +3 1309 1318 1308 +3 1310 1320 1319 +3 1310 1319 1309 +3 1311 1321 1320 +3 1311 1320 1310 +3 1312 1322 1321 +3 1312 1321 1311 +3 1313 1323 1322 +3 1313 1322 1312 +3 1314 1324 1323 +3 1314 1323 1313 +3 1315 1325 1324 +3 1315 1324 1314 +3 1316 1326 1206 +3 1316 1206 1195 +3 1317 1327 1326 +3 1317 1326 1316 +3 1318 1328 1327 +3 1318 1327 1317 +3 1319 1329 1328 +3 1319 1328 1318 +3 1320 1330 1329 +3 1320 1329 1319 +3 1321 1331 1330 +3 1321 1330 1320 +3 1322 1332 1331 +3 1322 1331 1321 +3 1323 1333 1332 +3 1323 1332 1322 +3 1324 1334 1333 +3 1324 1333 1323 +3 1325 1216 1334 +3 1325 1334 1324 diff --git a/data/body-v2.ply b/data/body-v2.ply new file mode 100644 index 0000000..2815a81 Binary files /dev/null and b/data/body-v2.ply differ diff --git a/data/cube.ply b/data/cube.ply new file mode 100644 index 0000000..681156a --- /dev/null +++ b/data/cube.ply @@ -0,0 +1,24 @@ +ply +format ascii 1.0 +comment created by platoply +element vertex 8 +property float32 x +property float32 y +property float32 z +element face 6 +property list uint8 int32 vertex_indices +end_header +-1 -1 -1 +1 -1 -1 +1 1 -1 +-1 1 -1 +-1 -1 1 +1 -1 1 +1 1 1 +-1 1 1 +4 0 1 2 3 +4 5 4 7 6 +4 6 2 1 5 +4 3 7 4 0 +4 7 3 2 6 +4 5 1 0 4 diff --git a/data/teapot.ply b/data/teapot.ply new file mode 100644 index 0000000..4c1a671 --- /dev/null +++ b/data/teapot.ply @@ -0,0 +1,3442 @@ +ply +format ascii 1.0 +element vertex 1177 +property float32 x +property float32 y +property float32 z +element face 2256 +property list uint8 int32 vertex_indices +end_header +1.38137 0 2.45469 +1.4 0 2.4 +1.35074 -0.375926 2.4 +1.33276 -0.370922 2.45469 +1.38426 0 2.4875 +1.33555 -0.371699 2.4875 +1.40312 0 2.49844 +1.35376 -0.376765 2.49844 +1.43241 0 2.4875 +1.38201 -0.384628 2.4875 +1.46655 0 2.45469 +1.41495 -0.393796 2.45469 +1.5 0 2.4 +1.44722 -0.402778 2.4 +1.21126 -0.711407 2.4 +1.19514 -0.701938 2.45469 +1.19764 -0.703409 2.4875 +1.21396 -0.712995 2.49844 +1.2393 -0.727875 2.4875 +1.26884 -0.745225 2.45469 +1.29778 -0.762222 2.4 +0.994 -0.994 2.4 +0.98077 -0.98077 2.45469 +0.982824 -0.982824 2.4875 +0.996219 -0.996219 2.49844 +1.01701 -1.01701 2.4875 +1.04125 -1.04125 2.45469 +1.065 -1.065 2.4 +0.711407 -1.21126 2.4 +0.701938 -1.19514 2.45469 +0.703409 -1.19764 2.4875 +0.712995 -1.21396 2.49844 +0.727875 -1.2393 2.4875 +0.745225 -1.26884 2.45469 +0.762222 -1.29778 2.4 +0.375926 -1.35074 2.4 +0.370922 -1.33276 2.45469 +0.371699 -1.33555 2.4875 +0.376765 -1.35376 2.49844 +0.384628 -1.38201 2.4875 +0.393796 -1.41495 2.45469 +0.402778 -1.44722 2.4 +0 -1.4 2.4 +0 -1.38137 2.45469 +0 -1.38426 2.4875 +0 -1.40312 2.49844 +0 -1.43241 2.4875 +0 -1.46655 2.45469 +0 -1.5 2.4 +-0.375926 -1.35074 2.4 +-0.370922 -1.33276 2.45469 +-0.371699 -1.33555 2.4875 +-0.376765 -1.35376 2.49844 +-0.384628 -1.38201 2.4875 +-0.393796 -1.41495 2.45469 +-0.402778 -1.44722 2.4 +-0.711407 -1.21126 2.4 +-0.701938 -1.19514 2.45469 +-0.703409 -1.19764 2.4875 +-0.712995 -1.21396 2.49844 +-0.727875 -1.2393 2.4875 +-0.745225 -1.26884 2.45469 +-0.762222 -1.29778 2.4 +-0.994 -0.994 2.4 +-0.98077 -0.98077 2.45469 +-0.982824 -0.982824 2.4875 +-0.996219 -0.996219 2.49844 +-1.01701 -1.01701 2.4875 +-1.04125 -1.04125 2.45469 +-1.065 -1.065 2.4 +-1.21126 -0.711407 2.4 +-1.19514 -0.701938 2.45469 +-1.19764 -0.703409 2.4875 +-1.21396 -0.712995 2.49844 +-1.2393 -0.727875 2.4875 +-1.26884 -0.745225 2.45469 +-1.29778 -0.762222 2.4 +-1.35074 -0.375926 2.4 +-1.33276 -0.370922 2.45469 +-1.33555 -0.371699 2.4875 +-1.35376 -0.376765 2.49844 +-1.38201 -0.384628 2.4875 +-1.41495 -0.393796 2.45469 +-1.44722 -0.402778 2.4 +-1.4 0 2.4 +-1.38137 0 2.45469 +-1.38426 0 2.4875 +-1.40312 0 2.49844 +-1.43241 0 2.4875 +-1.46655 0 2.45469 +-1.5 0 2.4 +-1.35074 0.375926 2.4 +-1.33276 0.370922 2.45469 +-1.33555 0.371699 2.4875 +-1.35376 0.376765 2.49844 +-1.38201 0.384628 2.4875 +-1.41495 0.393796 2.45469 +-1.44722 0.402778 2.4 +-1.21126 0.711407 2.4 +-1.19514 0.701938 2.45469 +-1.19764 0.703409 2.4875 +-1.21396 0.712995 2.49844 +-1.2393 0.727875 2.4875 +-1.26884 0.745225 2.45469 +-1.29778 0.762222 2.4 +-0.994 0.994 2.4 +-0.98077 0.98077 2.45469 +-0.982824 0.982824 2.4875 +-0.996219 0.996219 2.49844 +-1.01701 1.01701 2.4875 +-1.04125 1.04125 2.45469 +-1.065 1.065 2.4 +-0.711407 1.21126 2.4 +-0.701938 1.19514 2.45469 +-0.703409 1.19764 2.4875 +-0.712995 1.21396 2.49844 +-0.727875 1.2393 2.4875 +-0.745225 1.26884 2.45469 +-0.762222 1.29778 2.4 +-0.375926 1.35074 2.4 +-0.370922 1.33276 2.45469 +-0.371699 1.33555 2.4875 +-0.376765 1.35376 2.49844 +-0.384628 1.38201 2.4875 +-0.393796 1.41495 2.45469 +-0.402778 1.44722 2.4 +0 1.4 2.4 +0 1.38137 2.45469 +0 1.38426 2.4875 +0 1.40312 2.49844 +0 1.43241 2.4875 +0 1.46655 2.45469 +0 1.5 2.4 +0.375926 1.35074 2.4 +0.370922 1.33276 2.45469 +0.371699 1.33555 2.4875 +0.376765 1.35376 2.49844 +0.384628 1.38201 2.4875 +0.393796 1.41495 2.45469 +0.402778 1.44722 2.4 +0.711407 1.21126 2.4 +0.701938 1.19514 2.45469 +0.703409 1.19764 2.4875 +0.712995 1.21396 2.49844 +0.727875 1.2393 2.4875 +0.745225 1.26884 2.45469 +0.762222 1.29778 2.4 +0.994 0.994 2.4 +0.98077 0.98077 2.45469 +0.982824 0.982824 2.4875 +0.996219 0.996219 2.49844 +1.01701 1.01701 2.4875 +1.04125 1.04125 2.45469 +1.065 1.065 2.4 +1.21126 0.711407 2.4 +1.19514 0.701938 2.45469 +1.19764 0.703409 2.4875 +1.21396 0.712995 2.49844 +1.2393 0.727875 2.4875 +1.26884 0.745225 2.45469 +1.29778 0.762222 2.4 +1.35074 0.375926 2.4 +1.33276 0.370922 2.45469 +1.33555 0.371699 2.4875 +1.35376 0.376765 2.49844 +1.38201 0.384628 2.4875 +1.41495 0.393796 2.45469 +1.44722 0.402778 2.4 +1.62384 0 2.13785 +1.56671 -0.436032 2.13785 +1.74074 0 1.87778 +1.67949 -0.467421 1.87778 +1.84375 0 1.62187 +1.77888 -0.495081 1.62188 +1.92593 0 1.37222 +1.85816 -0.517147 1.37222 +1.98032 0 1.1309 +1.91065 -0.531754 1.1309 +2 0 0.9 +1.92963 -0.537037 0.9 +1.40492 -0.825153 2.13785 +1.50606 -0.884554 1.87778 +1.59519 -0.936898 1.62188 +1.66628 -0.978656 1.37222 +1.71335 -1.0063 1.1309 +1.73037 -1.0163 0.9 +1.15293 -1.15293 2.13785 +1.23593 -1.23593 1.87778 +1.30906 -1.30906 1.62187 +1.36741 -1.36741 1.37222 +1.40603 -1.40603 1.1309 +1.42 -1.42 0.9 +0.825153 -1.40492 2.13785 +0.884554 -1.50606 1.87778 +0.936898 -1.59519 1.62188 +0.978656 -1.66628 1.37222 +1.0063 -1.71335 1.1309 +1.0163 -1.73037 0.9 +0.436032 -1.56671 2.13785 +0.467421 -1.67949 1.87778 +0.495081 -1.77888 1.62187 +0.517147 -1.85816 1.37222 +0.531754 -1.91065 1.1309 +0.537037 -1.92963 0.9 +0 -1.62384 2.13785 +0 -1.74074 1.87778 +0 -1.84375 1.62187 +0 -1.92593 1.37222 +0 -1.98032 1.1309 +0 -2 0.9 +-0.436032 -1.56671 2.13785 +-0.467421 -1.67949 1.87778 +-0.495081 -1.77888 1.62188 +-0.517147 -1.85816 1.37222 +-0.531754 -1.91065 1.1309 +-0.537037 -1.92963 0.9 +-0.825153 -1.40492 2.13785 +-0.884554 -1.50606 1.87778 +-0.936898 -1.59519 1.62188 +-0.978656 -1.66628 1.37222 +-1.0063 -1.71335 1.1309 +-1.0163 -1.73037 0.9 +-1.15293 -1.15293 2.13785 +-1.23593 -1.23593 1.87778 +-1.30906 -1.30906 1.62187 +-1.36741 -1.36741 1.37222 +-1.40603 -1.40603 1.1309 +-1.42 -1.42 0.9 +-1.40492 -0.825153 2.13785 +-1.50606 -0.884554 1.87778 +-1.59519 -0.936898 1.62188 +-1.66628 -0.978656 1.37222 +-1.71335 -1.0063 1.1309 +-1.73037 -1.0163 0.9 +-1.56671 -0.436032 2.13785 +-1.67949 -0.467421 1.87778 +-1.77888 -0.495081 1.62187 +-1.85816 -0.517147 1.37222 +-1.91065 -0.531754 1.1309 +-1.92963 -0.537037 0.9 +-1.62384 0 2.13785 +-1.74074 0 1.87778 +-1.84375 0 1.62187 +-1.92593 0 1.37222 +-1.98032 0 1.1309 +-2 0 0.9 +-1.56671 0.436032 2.13785 +-1.67949 0.467421 1.87778 +-1.77888 0.495081 1.62188 +-1.85816 0.517147 1.37222 +-1.91065 0.531754 1.1309 +-1.92963 0.537037 0.9 +-1.40492 0.825153 2.13785 +-1.50606 0.884554 1.87778 +-1.59519 0.936898 1.62188 +-1.66628 0.978656 1.37222 +-1.71335 1.0063 1.1309 +-1.73037 1.0163 0.9 +-1.15293 1.15293 2.13785 +-1.23593 1.23593 1.87778 +-1.30906 1.30906 1.62187 +-1.36741 1.36741 1.37222 +-1.40603 1.40603 1.1309 +-1.42 1.42 0.9 +-0.825153 1.40492 2.13785 +-0.884554 1.50606 1.87778 +-0.936898 1.59519 1.62188 +-0.978656 1.66628 1.37222 +-1.0063 1.71335 1.1309 +-1.0163 1.73037 0.9 +-0.436032 1.56671 2.13785 +-0.467421 1.67949 1.87778 +-0.495081 1.77888 1.62187 +-0.517147 1.85816 1.37222 +-0.531754 1.91065 1.1309 +-0.537037 1.92963 0.9 +0 1.62384 2.13785 +0 1.74074 1.87778 +0 1.84375 1.62187 +0 1.92593 1.37222 +0 1.98032 1.1309 +0 2 0.9 +0.436032 1.56671 2.13785 +0.467421 1.67949 1.87778 +0.495081 1.77888 1.62188 +0.517147 1.85816 1.37222 +0.531754 1.91065 1.1309 +0.537037 1.92963 0.9 +0.825153 1.40492 2.13785 +0.884554 1.50606 1.87778 +0.936898 1.59519 1.62188 +0.978656 1.66628 1.37222 +1.0063 1.71335 1.1309 +1.0163 1.73037 0.9 +1.15293 1.15293 2.13785 +1.23593 1.23593 1.87778 +1.30906 1.30906 1.62187 +1.36741 1.36741 1.37222 +1.40603 1.40603 1.1309 +1.42 1.42 0.9 +1.40492 0.825153 2.13785 +1.50606 0.884554 1.87778 +1.59519 0.936898 1.62188 +1.66628 0.978656 1.37222 +1.71335 1.0063 1.1309 +1.73037 1.0163 0.9 +1.56671 0.436032 2.13785 +1.67949 0.467421 1.87778 +1.77888 0.495081 1.62187 +1.85816 0.517147 1.37222 +1.91065 0.531754 1.1309 +1.92963 0.537037 0.9 +1.96296 0 0.693403 +1.8939 -0.527092 0.693403 +1.87037 0 0.522222 +1.80456 -0.502229 0.522222 +1.75 0 0.384375 +1.68843 -0.469907 0.384375 +1.62963 0 0.277778 +1.57229 -0.437586 0.277778 +1.53704 0 0.200347 +1.48296 -0.412723 0.200347 +1.5 0 0.15 +1.44722 -0.402778 0.15 +1.69833 -0.997476 0.693403 +1.61822 -0.950425 0.522222 +1.51407 -0.889259 0.384375 +1.40993 -0.828093 0.277778 +1.32982 -0.781043 0.200347 +1.29778 -0.762222 0.15 +1.3937 -1.3937 0.693403 +1.32796 -1.32796 0.522222 +1.2425 -1.2425 0.384375 +1.15704 -1.15704 0.277778 +1.0913 -1.0913 0.200347 +1.065 -1.065 0.15 +0.997476 -1.69833 0.693403 +0.950425 -1.61822 0.522222 +0.889259 -1.51407 0.384375 +0.828093 -1.40993 0.277778 +0.781043 -1.32982 0.200347 +0.762222 -1.29778 0.15 +0.527092 -1.8939 0.693403 +0.502229 -1.80456 0.522222 +0.469907 -1.68843 0.384375 +0.437586 -1.57229 0.277778 +0.412723 -1.48296 0.200347 +0.402778 -1.44722 0.15 +0 -1.96296 0.693403 +0 -1.87037 0.522222 +0 -1.75 0.384375 +0 -1.62963 0.277778 +0 -1.53704 0.200347 +0 -1.5 0.15 +-0.527092 -1.8939 0.693403 +-0.502229 -1.80456 0.522222 +-0.469907 -1.68843 0.384375 +-0.437586 -1.57229 0.277778 +-0.412723 -1.48296 0.200347 +-0.402778 -1.44722 0.15 +-0.997476 -1.69833 0.693403 +-0.950425 -1.61822 0.522222 +-0.889259 -1.51407 0.384375 +-0.828093 -1.40993 0.277778 +-0.781043 -1.32982 0.200347 +-0.762222 -1.29778 0.15 +-1.3937 -1.3937 0.693403 +-1.32796 -1.32796 0.522222 +-1.2425 -1.2425 0.384375 +-1.15704 -1.15704 0.277778 +-1.0913 -1.0913 0.200347 +-1.065 -1.065 0.15 +-1.69833 -0.997476 0.693403 +-1.61822 -0.950425 0.522222 +-1.51407 -0.889259 0.384375 +-1.40993 -0.828093 0.277778 +-1.32982 -0.781043 0.200347 +-1.29778 -0.762222 0.15 +-1.8939 -0.527092 0.693403 +-1.80456 -0.502229 0.522222 +-1.68843 -0.469907 0.384375 +-1.57229 -0.437586 0.277778 +-1.48296 -0.412723 0.200347 +-1.44722 -0.402778 0.15 +-1.96296 0 0.693403 +-1.87037 0 0.522222 +-1.75 0 0.384375 +-1.62963 0 0.277778 +-1.53704 0 0.200347 +-1.5 0 0.15 +-1.8939 0.527092 0.693403 +-1.80456 0.502229 0.522222 +-1.68843 0.469907 0.384375 +-1.57229 0.437586 0.277778 +-1.48296 0.412723 0.200347 +-1.44722 0.402778 0.15 +-1.69833 0.997476 0.693403 +-1.61822 0.950425 0.522222 +-1.51407 0.889259 0.384375 +-1.40993 0.828093 0.277778 +-1.32982 0.781043 0.200347 +-1.29778 0.762222 0.15 +-1.3937 1.3937 0.693403 +-1.32796 1.32796 0.522222 +-1.2425 1.2425 0.384375 +-1.15704 1.15704 0.277778 +-1.0913 1.0913 0.200347 +-1.065 1.065 0.15 +-0.997476 1.69833 0.693403 +-0.950425 1.61822 0.522222 +-0.889259 1.51407 0.384375 +-0.828093 1.40993 0.277778 +-0.781043 1.32982 0.200347 +-0.762222 1.29778 0.15 +-0.527092 1.8939 0.693403 +-0.502229 1.80456 0.522222 +-0.469907 1.68843 0.384375 +-0.437586 1.57229 0.277778 +-0.412723 1.48296 0.200347 +-0.402778 1.44722 0.15 +0 1.96296 0.693403 +0 1.87037 0.522222 +0 1.75 0.384375 +0 1.62963 0.277778 +0 1.53704 0.200347 +0 1.5 0.15 +0.527092 1.8939 0.693403 +0.502229 1.80456 0.522222 +0.469907 1.68843 0.384375 +0.437586 1.57229 0.277778 +0.412723 1.48296 0.200347 +0.402778 1.44722 0.15 +0.997476 1.69833 0.693403 +0.950425 1.61822 0.522222 +0.889259 1.51407 0.384375 +0.828093 1.40993 0.277778 +0.781043 1.32982 0.200347 +0.762222 1.29778 0.15 +1.3937 1.3937 0.693403 +1.32796 1.32796 0.522222 +1.2425 1.2425 0.384375 +1.15704 1.15704 0.277778 +1.0913 1.0913 0.200347 +1.065 1.065 0.15 +1.69833 0.997476 0.693403 +1.61822 0.950425 0.522222 +1.51407 0.889259 0.384375 +1.40993 0.828093 0.277778 +1.32982 0.781043 0.200347 +1.29778 0.762222 0.15 +1.8939 0.527092 0.693403 +1.80456 0.502229 0.522222 +1.68843 0.469907 0.384375 +1.57229 0.437586 0.277778 +1.48296 0.412723 0.200347 +1.44722 0.402778 0.15 +0.605903 0 0.005903 +0 0 0 +0.584584 0.162696 0.005903 +1.02222 0 0.022222 +0.986255 0.274486 0.022222 +1.28437 0 0.046875 +1.23918 0.344878 0.046875 +1.42778 0 0.077778 +1.37754 0.383385 0.077778 +1.48785 0 0.112847 +1.4355 0.399515 0.112847 +0.524218 0.307888 0.005903 +0.884412 0.51944 0.022222 +1.11122 0.652653 0.046875 +1.23529 0.725523 0.077778 +1.28726 0.756047 0.112847 +0.430191 0.430191 0.005903 +0.725778 0.725778 0.022222 +0.911906 0.911906 0.046875 +1.01372 1.01372 0.077778 +1.05637 1.05637 0.112847 +0.307888 0.524218 0.005903 +0.51944 0.884412 0.022222 +0.652653 1.11122 0.046875 +0.725523 1.23529 0.077778 +0.756047 1.28726 0.112847 +0.162696 0.584584 0.005903 +0.274486 0.986255 0.022222 +0.344878 1.23918 0.046875 +0.383385 1.37754 0.077778 +0.399515 1.4355 0.112847 +0 0.605903 0.005903 +0 1.02222 0.022222 +0 1.28437 0.046875 +0 1.42778 0.077778 +0 1.48785 0.112847 +-0.162696 0.584584 0.005903 +-0.274486 0.986255 0.022222 +-0.344878 1.23918 0.046875 +-0.383385 1.37754 0.077778 +-0.399515 1.4355 0.112847 +-0.307888 0.524218 0.005903 +-0.51944 0.884412 0.022222 +-0.652653 1.11122 0.046875 +-0.725523 1.23529 0.077778 +-0.756047 1.28726 0.112847 +-0.430191 0.430191 0.005903 +-0.725778 0.725778 0.022222 +-0.911906 0.911906 0.046875 +-1.01372 1.01372 0.077778 +-1.05637 1.05637 0.112847 +-0.524218 0.307888 0.005903 +-0.884412 0.51944 0.022222 +-1.11122 0.652653 0.046875 +-1.23529 0.725523 0.077778 +-1.28726 0.756047 0.112847 +-0.584584 0.162696 0.005903 +-0.986255 0.274486 0.022222 +-1.23918 0.344878 0.046875 +-1.37754 0.383385 0.077778 +-1.4355 0.399515 0.112847 +-0.605903 0 0.005903 +-1.02222 0 0.022222 +-1.28437 0 0.046875 +-1.42778 0 0.077778 +-1.48785 0 0.112847 +-0.584584 -0.162696 0.005903 +-0.986255 -0.274486 0.022222 +-1.23918 -0.344878 0.046875 +-1.37754 -0.383385 0.077778 +-1.4355 -0.399515 0.112847 +-0.524218 -0.307888 0.005903 +-0.884412 -0.51944 0.022222 +-1.11122 -0.652653 0.046875 +-1.23529 -0.725523 0.077778 +-1.28726 -0.756047 0.112847 +-0.430191 -0.430191 0.005903 +-0.725778 -0.725778 0.022222 +-0.911906 -0.911906 0.046875 +-1.01372 -1.01372 0.077778 +-1.05637 -1.05637 0.112847 +-0.307888 -0.524218 0.005903 +-0.51944 -0.884412 0.022222 +-0.652653 -1.11122 0.046875 +-0.725523 -1.23529 0.077778 +-0.756047 -1.28726 0.112847 +-0.162696 -0.584584 0.005903 +-0.274486 -0.986255 0.022222 +-0.344878 -1.23918 0.046875 +-0.383385 -1.37754 0.077778 +-0.399515 -1.4355 0.112847 +0 -0.605903 0.005903 +0 -1.02222 0.022222 +0 -1.28437 0.046875 +0 -1.42778 0.077778 +0 -1.48785 0.112847 +0.162696 -0.584584 0.005903 +0.274486 -0.986255 0.022222 +0.344878 -1.23918 0.046875 +0.383385 -1.37754 0.077778 +0.399515 -1.4355 0.112847 +0.307888 -0.524218 0.005903 +0.51944 -0.884412 0.022222 +0.652653 -1.11122 0.046875 +0.725523 -1.23529 0.077778 +0.756047 -1.28726 0.112847 +0.430191 -0.430191 0.005903 +0.725778 -0.725778 0.022222 +0.911906 -0.911906 0.046875 +1.01372 -1.01372 0.077778 +1.05637 -1.05637 0.112847 +0.524218 -0.307888 0.005903 +0.884412 -0.51944 0.022222 +1.11122 -0.652653 0.046875 +1.23529 -0.725523 0.077778 +1.28726 -0.756047 0.112847 +0.584584 -0.162696 0.005903 +0.986255 -0.274486 0.022222 +1.23918 -0.344878 0.046875 +1.37754 -0.383385 0.077778 +1.4355 -0.399515 0.112847 +0.2 0 2.7 +0.171296 0 2.78542 +0.165279 -0.046045 2.78542 +0.192963 -0.053704 2.7 +0.148234 -0.087106 2.78542 +0.173037 -0.10163 2.7 +0.121672 -0.121672 2.78542 +0.142 -0.142 2.7 +0.087106 -0.148234 2.78542 +0.10163 -0.173037 2.7 +0.046045 -0.165279 2.78542 +0.053704 -0.192963 2.7 +0 -0.171296 2.78542 +0 -0.2 2.7 +-0.046045 -0.165279 2.78542 +-0.053704 -0.192963 2.7 +-0.087106 -0.148234 2.78542 +-0.10163 -0.173037 2.7 +-0.121672 -0.121672 2.78542 +-0.142 -0.142 2.7 +-0.148234 -0.087106 2.78542 +-0.173037 -0.10163 2.7 +-0.165279 -0.046045 2.78542 +-0.192963 -0.053704 2.7 +-0.171296 0 2.78542 +-0.2 0 2.7 +-0.165279 0.046045 2.78542 +-0.192963 0.053704 2.7 +-0.148234 0.087106 2.78542 +-0.173037 0.10163 2.7 +-0.121672 0.121672 2.78542 +-0.142 0.142 2.7 +-0.087106 0.148234 2.78542 +-0.10163 0.173037 2.7 +-0.046045 0.165279 2.78542 +-0.053704 0.192963 2.7 +0 0.171296 2.78542 +0 0.2 2.7 +0.046045 0.165279 2.78542 +0.053704 0.192963 2.7 +0.087106 0.148234 2.78542 +0.10163 0.173037 2.7 +0.121672 0.121672 2.78542 +0.142 0.142 2.7 +0.148234 0.087106 2.78542 +0.173037 0.10163 2.7 +0.165279 0.046045 2.78542 +0.192963 0.053704 2.7 +0.350926 0 2.63611 +0.338579 -0.09423 2.63611 +0.574074 0 2.58889 +0.553875 -0.15415 2.58889 +0.825 0 2.55 +0.795972 -0.221528 2.55 +1.05926 0 2.51111 +1.02199 -0.284431 2.51111 +1.23241 0 2.46389 +1.18904 -0.330924 2.46389 +1.3 0 2.4 +1.25426 -0.349074 2.4 +0.303616 -0.178322 2.63611 +0.49668 -0.291715 2.58889 +0.713778 -0.419222 2.55 +0.916455 -0.538261 2.51111 +1.06626 -0.626246 2.46389 +1.12474 -0.660593 2.4 +0.249157 -0.249157 2.63611 +0.407593 -0.407593 2.58889 +0.58575 -0.58575 2.55 +0.752074 -0.752074 2.51111 +0.875009 -0.875009 2.46389 +0.923 -0.923 2.4 +0.178322 -0.303616 2.63611 +0.291715 -0.49668 2.58889 +0.419222 -0.713778 2.55 +0.538261 -0.916455 2.51111 +0.626246 -1.06626 2.46389 +0.660593 -1.12474 2.4 +0.09423 -0.338579 2.63611 +0.15415 -0.553875 2.58889 +0.221528 -0.795972 2.55 +0.284431 -1.02199 2.51111 +0.330924 -1.18904 2.46389 +0.349074 -1.25426 2.4 +0 -0.350926 2.63611 +0 -0.574074 2.58889 +0 -0.825 2.55 +0 -1.05926 2.51111 +0 -1.23241 2.46389 +0 -1.3 2.4 +-0.09423 -0.338579 2.63611 +-0.15415 -0.553875 2.58889 +-0.221528 -0.795972 2.55 +-0.284431 -1.02199 2.51111 +-0.330924 -1.18904 2.46389 +-0.349074 -1.25426 2.4 +-0.178322 -0.303616 2.63611 +-0.291715 -0.49668 2.58889 +-0.419222 -0.713778 2.55 +-0.538261 -0.916455 2.51111 +-0.626246 -1.06626 2.46389 +-0.660593 -1.12474 2.4 +-0.249157 -0.249157 2.63611 +-0.407593 -0.407593 2.58889 +-0.58575 -0.58575 2.55 +-0.752074 -0.752074 2.51111 +-0.875009 -0.875009 2.46389 +-0.923 -0.923 2.4 +-0.303616 -0.178322 2.63611 +-0.49668 -0.291715 2.58889 +-0.713778 -0.419222 2.55 +-0.916455 -0.538261 2.51111 +-1.06626 -0.626246 2.46389 +-1.12474 -0.660593 2.4 +-0.338579 -0.09423 2.63611 +-0.553875 -0.15415 2.58889 +-0.795972 -0.221528 2.55 +-1.02199 -0.284431 2.51111 +-1.18904 -0.330924 2.46389 +-1.25426 -0.349074 2.4 +-0.350926 0 2.63611 +-0.574074 0 2.58889 +-0.825 0 2.55 +-1.05926 0 2.51111 +-1.23241 0 2.46389 +-1.3 0 2.4 +-0.338579 0.09423 2.63611 +-0.553875 0.15415 2.58889 +-0.795972 0.221528 2.55 +-1.02199 0.284431 2.51111 +-1.18904 0.330924 2.46389 +-1.25426 0.349074 2.4 +-0.303616 0.178322 2.63611 +-0.49668 0.291715 2.58889 +-0.713778 0.419222 2.55 +-0.916455 0.538261 2.51111 +-1.06626 0.626246 2.46389 +-1.12474 0.660593 2.4 +-0.249157 0.249157 2.63611 +-0.407593 0.407593 2.58889 +-0.58575 0.58575 2.55 +-0.752074 0.752074 2.51111 +-0.875009 0.875009 2.46389 +-0.923 0.923 2.4 +-0.178322 0.303616 2.63611 +-0.291715 0.49668 2.58889 +-0.419222 0.713778 2.55 +-0.538261 0.916455 2.51111 +-0.626246 1.06626 2.46389 +-0.660593 1.12474 2.4 +-0.09423 0.338579 2.63611 +-0.15415 0.553875 2.58889 +-0.221528 0.795972 2.55 +-0.284431 1.02199 2.51111 +-0.330924 1.18904 2.46389 +-0.349074 1.25426 2.4 +0 0.350926 2.63611 +0 0.574074 2.58889 +0 0.825 2.55 +0 1.05926 2.51111 +0 1.23241 2.46389 +0 1.3 2.4 +0.09423 0.338579 2.63611 +0.15415 0.553875 2.58889 +0.221528 0.795972 2.55 +0.284431 1.02199 2.51111 +0.330924 1.18904 2.46389 +0.349074 1.25426 2.4 +0.178322 0.303616 2.63611 +0.291715 0.49668 2.58889 +0.419222 0.713778 2.55 +0.538261 0.916455 2.51111 +0.626246 1.06626 2.46389 +0.660593 1.12474 2.4 +0.249157 0.249157 2.63611 +0.407593 0.407593 2.58889 +0.58575 0.58575 2.55 +0.752074 0.752074 2.51111 +0.875009 0.875009 2.46389 +0.923 0.923 2.4 +0.303616 0.178322 2.63611 +0.49668 0.291715 2.58889 +0.713778 0.419222 2.55 +0.916455 0.538261 2.51111 +1.06626 0.626246 2.46389 +1.12474 0.660593 2.4 +0.338579 0.09423 2.63611 +0.553875 0.15415 2.58889 +0.795972 0.221528 2.55 +1.02199 0.284431 2.51111 +1.18904 0.330924 2.46389 +1.25426 0.349074 2.4 +-1.92454 0 2.02396 +-1.6 0 2.025 +-1.59259 -0.125 2.04167 +-1.92704 -0.125 2.04055 +-2.1963 0 2.01667 +-2.20645 -0.125 2.03272 +-2.4125 0 1.99687 +-2.42824 -0.125 2.01146 +-2.57037 0 1.95833 +-2.58985 -0.125 1.97006 +-2.66713 0 1.89479 +-2.6887 -0.125 1.90181 +-2.7 0 1.8 +-2.72222 -0.125 1.8 +-1.57407 -0.2 2.08333 +-1.9333 -0.2 2.08202 +-2.23182 -0.2 2.07284 +-2.46759 -0.2 2.04792 +-2.63855 -0.2 1.99938 +-2.74263 -0.2 1.91937 +-2.77778 -0.2 1.8 +-1.55 -0.225 2.1375 +-1.94144 -0.225 2.13594 +-2.26481 -0.225 2.125 +-2.51875 -0.225 2.09531 +-2.70185 -0.225 2.0375 +-2.81273 -0.225 1.94219 +-2.85 -0.225 1.8 +-1.52593 -0.2 2.19167 +-1.94957 -0.2 2.18985 +-2.29781 -0.2 2.17716 +-2.56991 -0.2 2.14271 +-2.76516 -0.2 2.07562 +-2.88284 -0.2 1.96501 +-2.92222 -0.2 1.8 +-1.50741 -0.125 2.23333 +-1.95583 -0.125 2.23133 +-2.32318 -0.125 2.21728 +-2.60926 -0.125 2.17917 +-2.81385 -0.125 2.10494 +-2.93676 -0.125 1.98256 +-2.97778 -0.125 1.8 +-1.5 0 2.25 +-1.95833 0 2.24792 +-2.33333 0 2.23333 +-2.625 0 2.19375 +-2.83333 0 2.11667 +-2.95833 0 1.98958 +-3 0 1.8 +-1.50741 0.125 2.23333 +-1.95583 0.125 2.23133 +-2.32318 0.125 2.21728 +-2.60926 0.125 2.17917 +-2.81385 0.125 2.10494 +-2.93676 0.125 1.98256 +-2.97778 0.125 1.8 +-1.52593 0.2 2.19167 +-1.94957 0.2 2.18985 +-2.29781 0.2 2.17716 +-2.56991 0.2 2.14271 +-2.76516 0.2 2.07562 +-2.88284 0.2 1.96501 +-2.92222 0.2 1.8 +-1.55 0.225 2.1375 +-1.94144 0.225 2.13594 +-2.26481 0.225 2.125 +-2.51875 0.225 2.09531 +-2.70185 0.225 2.0375 +-2.81273 0.225 1.94219 +-2.85 0.225 1.8 +-1.57407 0.2 2.08333 +-1.9333 0.2 2.08202 +-2.23182 0.2 2.07284 +-2.46759 0.2 2.04792 +-2.63855 0.2 1.99938 +-2.74263 0.2 1.91937 +-2.77778 0.2 1.8 +-1.59259 0.125 2.04167 +-1.92704 0.125 2.04055 +-2.20645 0.125 2.03272 +-2.42824 0.125 2.01146 +-2.58985 0.125 1.97006 +-2.6887 0.125 1.90181 +-2.72222 0.125 1.8 +-2.68287 0 1.67083 +-2.70418 -0.125 1.66398 +-2.62963 0 1.51667 +-2.64829 -0.125 1.50535 +-2.5375 0 1.35 +-2.55185 -0.125 1.33576 +-2.4037 0 1.18333 +-2.41221 -0.125 1.16687 +-2.22546 0 1.02917 +-2.22668 -0.125 1.01033 +-1.99259 -0.125 0.877778 +-2.75747 -0.2 1.64684 +-2.69492 -0.2 1.47706 +-2.58773 -0.2 1.30017 +-2.43347 -0.2 1.12572 +-2.22972 -0.2 0.963227 +-1.97407 -0.2 0.822222 +-2.82674 -0.225 1.62457 +-2.75556 -0.225 1.44028 +-2.63437 -0.225 1.25391 +-2.46111 -0.225 1.07222 +-2.23368 -0.225 0.901997 +-1.95 -0.225 0.75 +-2.896 -0.2 1.60229 +-2.81619 -0.2 1.4035 +-2.68102 -0.2 1.20764 +-2.48875 -0.2 1.01872 +-2.23764 -0.2 0.840766 +-1.92593 -0.2 0.677778 +-2.94929 -0.125 1.58515 +-2.86283 -0.125 1.37521 +-2.7169 -0.125 1.17205 +-2.51001 -0.125 0.977572 +-2.24068 -0.125 0.793666 +-1.90741 -0.125 0.622222 +-2.9706 0 1.5783 +-2.88148 0 1.36389 +-2.73125 0 1.15781 +-2.51852 0 0.961111 +-2.2419 0 0.774826 +-1.9 0 0.6 +-2.94929 0.125 1.58515 +-2.86283 0.125 1.37521 +-2.7169 0.125 1.17205 +-2.51001 0.125 0.977572 +-2.24068 0.125 0.793666 +-1.90741 0.125 0.622222 +-2.896 0.2 1.60229 +-2.81619 0.2 1.4035 +-2.68102 0.2 1.20764 +-2.48875 0.2 1.01872 +-2.23764 0.2 0.840766 +-1.92593 0.2 0.677778 +-2.82674 0.225 1.62457 +-2.75556 0.225 1.44028 +-2.63437 0.225 1.25391 +-2.46111 0.225 1.07222 +-2.23368 0.225 0.901997 +-1.95 0.225 0.75 +-2.75747 0.2 1.64684 +-2.69492 0.2 1.47706 +-2.58773 0.2 1.30017 +-2.43347 0.2 1.12572 +-2.22972 0.2 0.963227 +-1.97407 0.2 0.822222 +-2.70418 0.125 1.66398 +-2.64829 0.125 1.50535 +-2.55185 0.125 1.33576 +-2.41221 0.125 1.16687 +-2.22668 0.125 1.01033 +-1.99259 0.125 0.877778 +2.0588 0 1.47639 +1.7 0 1.425 +1.7 -0.275 1.36389 +2.07238 -0.262346 1.42521 +2.27037 0 1.61111 +2.29012 -0.23071 1.57202 +2.3875 0 1.8 +2.40972 -0.189583 1.77361 +2.46296 0 2.01389 +2.48765 -0.148457 1.99928 +2.54954 0 2.22361 +2.5804 -0.116821 2.21831 +2.7 0 2.4 +2.74444 -0.104167 2.4 +1.7 -0.44 1.21111 +2.10633 -0.419753 1.29725 +2.33951 -0.369136 1.47428 +2.46528 -0.303333 1.70764 +2.54938 -0.237531 1.96276 +2.65756 -0.186914 2.20507 +2.85556 -0.166667 2.4 +1.7 -0.495 1.0125 +2.15046 -0.472222 1.1309 +2.4037 -0.415278 1.34722 +2.5375 -0.34125 1.62187 +2.62963 -0.267222 1.91528 +2.75787 -0.210278 2.18785 +3 -0.1875 2.4 +1.7 -0.44 0.813889 +2.1946 -0.419753 0.964558 +2.4679 -0.369136 1.22016 +2.60972 -0.303333 1.53611 +2.70988 -0.237531 1.8678 +2.85818 -0.186914 2.17063 +3.14444 -0.166667 2.4 +1.7 -0.275 0.661111 +2.22855 -0.262346 0.8366 +2.51728 -0.23071 1.12243 +2.66528 -0.189583 1.47014 +2.7716 -0.148457 1.83128 +2.93534 -0.116821 2.15738 +3.25556 -0.104167 2.4 +1.7 0 0.6 +2.24213 0 0.785417 +2.53704 0 1.08333 +2.6875 0 1.44375 +2.7963 0 1.81667 +2.9662 0 2.15208 +3.3 0 2.4 +1.7 0.275 0.661111 +2.22855 0.262346 0.8366 +2.51728 0.23071 1.12243 +2.66528 0.189583 1.47014 +2.7716 0.148457 1.83128 +2.93534 0.116821 2.15738 +3.25556 0.104167 2.4 +1.7 0.44 0.813889 +2.1946 0.419753 0.964558 +2.4679 0.369136 1.22016 +2.60972 0.303333 1.53611 +2.70988 0.237531 1.8678 +2.85818 0.186914 2.17063 +3.14444 0.166667 2.4 +1.7 0.495 1.0125 +2.15046 0.472222 1.1309 +2.4037 0.415278 1.34722 +2.5375 0.34125 1.62187 +2.62963 0.267222 1.91528 +2.75787 0.210278 2.18785 +3 0.1875 2.4 +1.7 0.44 1.21111 +2.10633 0.419753 1.29725 +2.33951 0.369136 1.47428 +2.46528 0.303333 1.70764 +2.54938 0.237531 1.96276 +2.65756 0.186914 2.20507 +2.85556 0.166667 2.4 +1.7 0.275 1.36389 +2.07238 0.262346 1.42521 +2.29012 0.23071 1.57202 +2.40972 0.189583 1.77361 +2.48765 0.148457 1.99928 +2.5804 0.116821 2.21831 +2.74444 0.104167 2.4 +2.74907 0 2.43125 +2.79641 -0.101032 2.43193 +2.79259 0 2.45 +2.83978 -0.092978 2.45123 +2.825 0 2.45625 +2.86968 -0.082031 2.45781 +2.84074 0 2.45 +2.88121 -0.070216 2.45154 +2.83426 0 2.43125 +2.86949 -0.059558 2.43231 +2.8 0 2.4 +2.82963 -0.052083 2.4 +2.91474 -0.161574 2.43361 +2.95775 -0.148148 2.45432 +2.98137 -0.129167 2.46172 +2.98237 -0.107407 2.4554 +2.95756 -0.085648 2.43496 +2.9037 -0.066667 2.4 +3.06858 -0.181684 2.43581 +3.11111 -0.165972 2.45833 +3.12656 -0.142969 2.4668 +3.11389 -0.115278 2.46042 +3.07205 -0.085504 2.43841 +3 -0.05625 2.4 +3.22241 -0.16142 2.438 +3.26447 -0.146914 2.46235 +3.27176 -0.125 2.47187 +3.2454 -0.097531 2.46543 +3.18654 -0.066358 2.44186 +3.0963 -0.033333 2.4 +3.34075 -0.100839 2.43969 +3.38244 -0.091435 2.46543 +3.38345 -0.076823 2.47578 +3.34657 -0.05787 2.46929 +3.27461 -0.035446 2.44451 +3.17037 -0.010417 2.4 +3.38808 0 2.44036 +3.42963 0 2.46667 +3.42813 0 2.47734 +3.38704 0 2.47083 +3.30984 0 2.44557 +3.2 0 2.4 +3.34075 0.10108 2.43969 +3.38244 0.093364 2.46543 +3.38345 0.083333 2.47578 +3.34657 0.073303 2.46929 +3.27461 0.065586 2.44451 +3.17037 0.0625 2.4 +3.22241 0.161728 2.438 +3.26447 0.149383 2.46235 +3.27176 0.133333 2.47187 +3.2454 0.117284 2.46543 +3.18654 0.104938 2.44186 +3.0963 0.1 2.4 +3.06858 0.181944 2.43581 +3.11111 0.168056 2.45833 +3.12656 0.15 2.4668 +3.11389 0.131944 2.46042 +3.07205 0.118056 2.43841 +3 0.1125 2.4 +2.91474 0.161728 2.43361 +2.95775 0.149383 2.45432 +2.98137 0.133333 2.46172 +2.98237 0.117284 2.4554 +2.95756 0.104938 2.43496 +2.9037 0.1 2.4 +2.79641 0.10108 2.43193 +2.83978 0.093364 2.45123 +2.86968 0.083333 2.45781 +2.88121 0.073303 2.45154 +2.86949 0.065586 2.43231 +2.82963 0.0625 2.4 +0.278704 0 3.12708 +0 0 3.15 +0.268946 -0.075078 3.12708 +0.362963 0 3.06667 +0.350254 -0.097771 3.06667 +0.325 0 2.98125 +0.313617 -0.087529 2.98125 +0.237037 0 2.88333 +0.228728 -0.063803 2.88333 +0.241285 -0.141931 3.12708 +0.314228 -0.184834 3.06667 +0.281352 -0.165481 2.98125 +0.20518 -0.120647 2.88333 +0.19814 -0.19814 3.12708 +0.258037 -0.258037 3.06667 +0.231031 -0.231031 2.98125 +0.168463 -0.168463 2.88333 +0.141931 -0.241285 3.12708 +0.184834 -0.314228 3.06667 +0.165481 -0.281352 2.98125 +0.120647 -0.20518 2.88333 +0.075078 -0.268946 3.12708 +0.097771 -0.350254 3.06667 +0.087529 -0.313617 2.98125 +0.063803 -0.228728 2.88333 +0 -0.278704 3.12708 +0 -0.362963 3.06667 +0 -0.325 2.98125 +0 -0.237037 2.88333 +-0.075078 -0.268946 3.12708 +-0.097771 -0.350254 3.06667 +-0.087529 -0.313617 2.98125 +-0.063803 -0.228728 2.88333 +-0.141931 -0.241285 3.12708 +-0.184834 -0.314228 3.06667 +-0.165481 -0.281352 2.98125 +-0.120647 -0.20518 2.88333 +-0.19814 -0.19814 3.12708 +-0.258037 -0.258037 3.06667 +-0.231031 -0.231031 2.98125 +-0.168463 -0.168463 2.88333 +-0.241285 -0.141931 3.12708 +-0.314228 -0.184834 3.06667 +-0.281352 -0.165481 2.98125 +-0.20518 -0.120647 2.88333 +-0.268946 -0.075078 3.12708 +-0.350254 -0.097771 3.06667 +-0.313617 -0.087529 2.98125 +-0.228728 -0.063803 2.88333 +-0.278704 0 3.12708 +-0.362963 0 3.06667 +-0.325 0 2.98125 +-0.237037 0 2.88333 +-0.268946 0.075078 3.12708 +-0.350254 0.097771 3.06667 +-0.313617 0.087529 2.98125 +-0.228728 0.063803 2.88333 +-0.241285 0.141931 3.12708 +-0.314228 0.184834 3.06667 +-0.281352 0.165481 2.98125 +-0.20518 0.120647 2.88333 +-0.19814 0.19814 3.12708 +-0.258037 0.258037 3.06667 +-0.231031 0.231031 2.98125 +-0.168463 0.168463 2.88333 +-0.141931 0.241285 3.12708 +-0.184834 0.314228 3.06667 +-0.165481 0.281352 2.98125 +-0.120647 0.20518 2.88333 +-0.075078 0.268946 3.12708 +-0.097771 0.350254 3.06667 +-0.087529 0.313617 2.98125 +-0.063803 0.228728 2.88333 +0 0.278704 3.12708 +0 0.362963 3.06667 +0 0.325 2.98125 +0 0.237037 2.88333 +0.075078 0.268946 3.12708 +0.097771 0.350254 3.06667 +0.087529 0.313617 2.98125 +0.063803 0.228728 2.88333 +0.141931 0.241285 3.12708 +0.184834 0.314228 3.06667 +0.165481 0.281352 2.98125 +0.120647 0.20518 2.88333 +0.19814 0.19814 3.12708 +0.258037 0.258037 3.06667 +0.231031 0.231031 2.98125 +0.168463 0.168463 2.88333 +0.241285 0.141931 3.12708 +0.314228 0.184834 3.06667 +0.281352 0.165481 2.98125 +0.20518 0.120647 2.88333 +0.268946 0.075078 3.12708 +0.350254 0.097771 3.06667 +0.313617 0.087529 2.98125 +0.228728 0.063803 2.88333 +3 0 1 2 +3 0 2 3 +3 4 0 3 +3 4 3 5 +3 6 4 5 +3 6 5 7 +3 8 6 7 +3 8 7 9 +3 10 8 9 +3 10 9 11 +3 12 10 11 +3 12 11 13 +3 3 2 14 +3 3 14 15 +3 5 3 15 +3 5 15 16 +3 7 5 16 +3 7 16 17 +3 9 7 17 +3 9 17 18 +3 11 9 18 +3 11 18 19 +3 13 11 19 +3 13 19 20 +3 15 14 21 +3 15 21 22 +3 16 15 22 +3 16 22 23 +3 17 16 23 +3 17 23 24 +3 18 17 24 +3 18 24 25 +3 19 18 25 +3 19 25 26 +3 20 19 26 +3 20 26 27 +3 22 21 28 +3 22 28 29 +3 23 22 29 +3 23 29 30 +3 24 23 30 +3 24 30 31 +3 25 24 31 +3 25 31 32 +3 26 25 32 +3 26 32 33 +3 27 26 33 +3 27 33 34 +3 29 28 35 +3 29 35 36 +3 30 29 36 +3 30 36 37 +3 31 30 37 +3 31 37 38 +3 32 31 38 +3 32 38 39 +3 33 32 39 +3 33 39 40 +3 34 33 40 +3 34 40 41 +3 36 35 42 +3 36 42 43 +3 37 36 43 +3 37 43 44 +3 38 37 44 +3 38 44 45 +3 39 38 45 +3 39 45 46 +3 40 39 46 +3 40 46 47 +3 41 40 47 +3 41 47 48 +3 43 42 49 +3 43 49 50 +3 44 43 50 +3 44 50 51 +3 45 44 51 +3 45 51 52 +3 46 45 52 +3 46 52 53 +3 47 46 53 +3 47 53 54 +3 48 47 54 +3 48 54 55 +3 50 49 56 +3 50 56 57 +3 51 50 57 +3 51 57 58 +3 52 51 58 +3 52 58 59 +3 53 52 59 +3 53 59 60 +3 54 53 60 +3 54 60 61 +3 55 54 61 +3 55 61 62 +3 57 56 63 +3 57 63 64 +3 58 57 64 +3 58 64 65 +3 59 58 65 +3 59 65 66 +3 60 59 66 +3 60 66 67 +3 61 60 67 +3 61 67 68 +3 62 61 68 +3 62 68 69 +3 64 63 70 +3 64 70 71 +3 65 64 71 +3 65 71 72 +3 66 65 72 +3 66 72 73 +3 67 66 73 +3 67 73 74 +3 68 67 74 +3 68 74 75 +3 69 68 75 +3 69 75 76 +3 71 70 77 +3 71 77 78 +3 72 71 78 +3 72 78 79 +3 73 72 79 +3 73 79 80 +3 74 73 80 +3 74 80 81 +3 75 74 81 +3 75 81 82 +3 76 75 82 +3 76 82 83 +3 78 77 84 +3 78 84 85 +3 79 78 85 +3 79 85 86 +3 80 79 86 +3 80 86 87 +3 81 80 87 +3 81 87 88 +3 82 81 88 +3 82 88 89 +3 83 82 89 +3 83 89 90 +3 85 84 91 +3 85 91 92 +3 86 85 92 +3 86 92 93 +3 87 86 93 +3 87 93 94 +3 88 87 94 +3 88 94 95 +3 89 88 95 +3 89 95 96 +3 90 89 96 +3 90 96 97 +3 92 91 98 +3 92 98 99 +3 93 92 99 +3 93 99 100 +3 94 93 100 +3 94 100 101 +3 95 94 101 +3 95 101 102 +3 96 95 102 +3 96 102 103 +3 97 96 103 +3 97 103 104 +3 99 98 105 +3 99 105 106 +3 100 99 106 +3 100 106 107 +3 101 100 107 +3 101 107 108 +3 102 101 108 +3 102 108 109 +3 103 102 109 +3 103 109 110 +3 104 103 110 +3 104 110 111 +3 106 105 112 +3 106 112 113 +3 107 106 113 +3 107 113 114 +3 108 107 114 +3 108 114 115 +3 109 108 115 +3 109 115 116 +3 110 109 116 +3 110 116 117 +3 111 110 117 +3 111 117 118 +3 113 112 119 +3 113 119 120 +3 114 113 120 +3 114 120 121 +3 115 114 121 +3 115 121 122 +3 116 115 122 +3 116 122 123 +3 117 116 123 +3 117 123 124 +3 118 117 124 +3 118 124 125 +3 120 119 126 +3 120 126 127 +3 121 120 127 +3 121 127 128 +3 122 121 128 +3 122 128 129 +3 123 122 129 +3 123 129 130 +3 124 123 130 +3 124 130 131 +3 125 124 131 +3 125 131 132 +3 127 126 133 +3 127 133 134 +3 128 127 134 +3 128 134 135 +3 129 128 135 +3 129 135 136 +3 130 129 136 +3 130 136 137 +3 131 130 137 +3 131 137 138 +3 132 131 138 +3 132 138 139 +3 134 133 140 +3 134 140 141 +3 135 134 141 +3 135 141 142 +3 136 135 142 +3 136 142 143 +3 137 136 143 +3 137 143 144 +3 138 137 144 +3 138 144 145 +3 139 138 145 +3 139 145 146 +3 141 140 147 +3 141 147 148 +3 142 141 148 +3 142 148 149 +3 143 142 149 +3 143 149 150 +3 144 143 150 +3 144 150 151 +3 145 144 151 +3 145 151 152 +3 146 145 152 +3 146 152 153 +3 148 147 154 +3 148 154 155 +3 149 148 155 +3 149 155 156 +3 150 149 156 +3 150 156 157 +3 151 150 157 +3 151 157 158 +3 152 151 158 +3 152 158 159 +3 153 152 159 +3 153 159 160 +3 155 154 161 +3 155 161 162 +3 156 155 162 +3 156 162 163 +3 157 156 163 +3 157 163 164 +3 158 157 164 +3 158 164 165 +3 159 158 165 +3 159 165 166 +3 160 159 166 +3 160 166 167 +3 162 161 1 +3 162 1 0 +3 163 162 0 +3 163 0 4 +3 164 163 4 +3 164 4 6 +3 165 164 6 +3 165 6 8 +3 166 165 8 +3 166 8 10 +3 167 166 10 +3 167 10 12 +3 168 12 13 +3 168 13 169 +3 170 168 169 +3 170 169 171 +3 172 170 171 +3 172 171 173 +3 174 172 173 +3 174 173 175 +3 176 174 175 +3 176 175 177 +3 178 176 177 +3 178 177 179 +3 169 13 20 +3 169 20 180 +3 171 169 180 +3 171 180 181 +3 173 171 181 +3 173 181 182 +3 175 173 182 +3 175 182 183 +3 177 175 183 +3 177 183 184 +3 179 177 184 +3 179 184 185 +3 180 20 27 +3 180 27 186 +3 181 180 186 +3 181 186 187 +3 182 181 187 +3 182 187 188 +3 183 182 188 +3 183 188 189 +3 184 183 189 +3 184 189 190 +3 185 184 190 +3 185 190 191 +3 186 27 34 +3 186 34 192 +3 187 186 192 +3 187 192 193 +3 188 187 193 +3 188 193 194 +3 189 188 194 +3 189 194 195 +3 190 189 195 +3 190 195 196 +3 191 190 196 +3 191 196 197 +3 192 34 41 +3 192 41 198 +3 193 192 198 +3 193 198 199 +3 194 193 199 +3 194 199 200 +3 195 194 200 +3 195 200 201 +3 196 195 201 +3 196 201 202 +3 197 196 202 +3 197 202 203 +3 198 41 48 +3 198 48 204 +3 199 198 204 +3 199 204 205 +3 200 199 205 +3 200 205 206 +3 201 200 206 +3 201 206 207 +3 202 201 207 +3 202 207 208 +3 203 202 208 +3 203 208 209 +3 204 48 55 +3 204 55 210 +3 205 204 210 +3 205 210 211 +3 206 205 211 +3 206 211 212 +3 207 206 212 +3 207 212 213 +3 208 207 213 +3 208 213 214 +3 209 208 214 +3 209 214 215 +3 210 55 62 +3 210 62 216 +3 211 210 216 +3 211 216 217 +3 212 211 217 +3 212 217 218 +3 213 212 218 +3 213 218 219 +3 214 213 219 +3 214 219 220 +3 215 214 220 +3 215 220 221 +3 216 62 69 +3 216 69 222 +3 217 216 222 +3 217 222 223 +3 218 217 223 +3 218 223 224 +3 219 218 224 +3 219 224 225 +3 220 219 225 +3 220 225 226 +3 221 220 226 +3 221 226 227 +3 222 69 76 +3 222 76 228 +3 223 222 228 +3 223 228 229 +3 224 223 229 +3 224 229 230 +3 225 224 230 +3 225 230 231 +3 226 225 231 +3 226 231 232 +3 227 226 232 +3 227 232 233 +3 228 76 83 +3 228 83 234 +3 229 228 234 +3 229 234 235 +3 230 229 235 +3 230 235 236 +3 231 230 236 +3 231 236 237 +3 232 231 237 +3 232 237 238 +3 233 232 238 +3 233 238 239 +3 234 83 90 +3 234 90 240 +3 235 234 240 +3 235 240 241 +3 236 235 241 +3 236 241 242 +3 237 236 242 +3 237 242 243 +3 238 237 243 +3 238 243 244 +3 239 238 244 +3 239 244 245 +3 240 90 97 +3 240 97 246 +3 241 240 246 +3 241 246 247 +3 242 241 247 +3 242 247 248 +3 243 242 248 +3 243 248 249 +3 244 243 249 +3 244 249 250 +3 245 244 250 +3 245 250 251 +3 246 97 104 +3 246 104 252 +3 247 246 252 +3 247 252 253 +3 248 247 253 +3 248 253 254 +3 249 248 254 +3 249 254 255 +3 250 249 255 +3 250 255 256 +3 251 250 256 +3 251 256 257 +3 252 104 111 +3 252 111 258 +3 253 252 258 +3 253 258 259 +3 254 253 259 +3 254 259 260 +3 255 254 260 +3 255 260 261 +3 256 255 261 +3 256 261 262 +3 257 256 262 +3 257 262 263 +3 258 111 118 +3 258 118 264 +3 259 258 264 +3 259 264 265 +3 260 259 265 +3 260 265 266 +3 261 260 266 +3 261 266 267 +3 262 261 267 +3 262 267 268 +3 263 262 268 +3 263 268 269 +3 264 118 125 +3 264 125 270 +3 265 264 270 +3 265 270 271 +3 266 265 271 +3 266 271 272 +3 267 266 272 +3 267 272 273 +3 268 267 273 +3 268 273 274 +3 269 268 274 +3 269 274 275 +3 270 125 132 +3 270 132 276 +3 271 270 276 +3 271 276 277 +3 272 271 277 +3 272 277 278 +3 273 272 278 +3 273 278 279 +3 274 273 279 +3 274 279 280 +3 275 274 280 +3 275 280 281 +3 276 132 139 +3 276 139 282 +3 277 276 282 +3 277 282 283 +3 278 277 283 +3 278 283 284 +3 279 278 284 +3 279 284 285 +3 280 279 285 +3 280 285 286 +3 281 280 286 +3 281 286 287 +3 282 139 146 +3 282 146 288 +3 283 282 288 +3 283 288 289 +3 284 283 289 +3 284 289 290 +3 285 284 290 +3 285 290 291 +3 286 285 291 +3 286 291 292 +3 287 286 292 +3 287 292 293 +3 288 146 153 +3 288 153 294 +3 289 288 294 +3 289 294 295 +3 290 289 295 +3 290 295 296 +3 291 290 296 +3 291 296 297 +3 292 291 297 +3 292 297 298 +3 293 292 298 +3 293 298 299 +3 294 153 160 +3 294 160 300 +3 295 294 300 +3 295 300 301 +3 296 295 301 +3 296 301 302 +3 297 296 302 +3 297 302 303 +3 298 297 303 +3 298 303 304 +3 299 298 304 +3 299 304 305 +3 300 160 167 +3 300 167 306 +3 301 300 306 +3 301 306 307 +3 302 301 307 +3 302 307 308 +3 303 302 308 +3 303 308 309 +3 304 303 309 +3 304 309 310 +3 305 304 310 +3 305 310 311 +3 306 167 12 +3 306 12 168 +3 307 306 168 +3 307 168 170 +3 308 307 170 +3 308 170 172 +3 309 308 172 +3 309 172 174 +3 310 309 174 +3 310 174 176 +3 311 310 176 +3 311 176 178 +3 312 178 179 +3 312 179 313 +3 314 312 313 +3 314 313 315 +3 316 314 315 +3 316 315 317 +3 318 316 317 +3 318 317 319 +3 320 318 319 +3 320 319 321 +3 322 320 321 +3 322 321 323 +3 313 179 185 +3 313 185 324 +3 315 313 324 +3 315 324 325 +3 317 315 325 +3 317 325 326 +3 319 317 326 +3 319 326 327 +3 321 319 327 +3 321 327 328 +3 323 321 328 +3 323 328 329 +3 324 185 191 +3 324 191 330 +3 325 324 330 +3 325 330 331 +3 326 325 331 +3 326 331 332 +3 327 326 332 +3 327 332 333 +3 328 327 333 +3 328 333 334 +3 329 328 334 +3 329 334 335 +3 330 191 197 +3 330 197 336 +3 331 330 336 +3 331 336 337 +3 332 331 337 +3 332 337 338 +3 333 332 338 +3 333 338 339 +3 334 333 339 +3 334 339 340 +3 335 334 340 +3 335 340 341 +3 336 197 203 +3 336 203 342 +3 337 336 342 +3 337 342 343 +3 338 337 343 +3 338 343 344 +3 339 338 344 +3 339 344 345 +3 340 339 345 +3 340 345 346 +3 341 340 346 +3 341 346 347 +3 342 203 209 +3 342 209 348 +3 343 342 348 +3 343 348 349 +3 344 343 349 +3 344 349 350 +3 345 344 350 +3 345 350 351 +3 346 345 351 +3 346 351 352 +3 347 346 352 +3 347 352 353 +3 348 209 215 +3 348 215 354 +3 349 348 354 +3 349 354 355 +3 350 349 355 +3 350 355 356 +3 351 350 356 +3 351 356 357 +3 352 351 357 +3 352 357 358 +3 353 352 358 +3 353 358 359 +3 354 215 221 +3 354 221 360 +3 355 354 360 +3 355 360 361 +3 356 355 361 +3 356 361 362 +3 357 356 362 +3 357 362 363 +3 358 357 363 +3 358 363 364 +3 359 358 364 +3 359 364 365 +3 360 221 227 +3 360 227 366 +3 361 360 366 +3 361 366 367 +3 362 361 367 +3 362 367 368 +3 363 362 368 +3 363 368 369 +3 364 363 369 +3 364 369 370 +3 365 364 370 +3 365 370 371 +3 366 227 233 +3 366 233 372 +3 367 366 372 +3 367 372 373 +3 368 367 373 +3 368 373 374 +3 369 368 374 +3 369 374 375 +3 370 369 375 +3 370 375 376 +3 371 370 376 +3 371 376 377 +3 372 233 239 +3 372 239 378 +3 373 372 378 +3 373 378 379 +3 374 373 379 +3 374 379 380 +3 375 374 380 +3 375 380 381 +3 376 375 381 +3 376 381 382 +3 377 376 382 +3 377 382 383 +3 378 239 245 +3 378 245 384 +3 379 378 384 +3 379 384 385 +3 380 379 385 +3 380 385 386 +3 381 380 386 +3 381 386 387 +3 382 381 387 +3 382 387 388 +3 383 382 388 +3 383 388 389 +3 384 245 251 +3 384 251 390 +3 385 384 390 +3 385 390 391 +3 386 385 391 +3 386 391 392 +3 387 386 392 +3 387 392 393 +3 388 387 393 +3 388 393 394 +3 389 388 394 +3 389 394 395 +3 390 251 257 +3 390 257 396 +3 391 390 396 +3 391 396 397 +3 392 391 397 +3 392 397 398 +3 393 392 398 +3 393 398 399 +3 394 393 399 +3 394 399 400 +3 395 394 400 +3 395 400 401 +3 396 257 263 +3 396 263 402 +3 397 396 402 +3 397 402 403 +3 398 397 403 +3 398 403 404 +3 399 398 404 +3 399 404 405 +3 400 399 405 +3 400 405 406 +3 401 400 406 +3 401 406 407 +3 402 263 269 +3 402 269 408 +3 403 402 408 +3 403 408 409 +3 404 403 409 +3 404 409 410 +3 405 404 410 +3 405 410 411 +3 406 405 411 +3 406 411 412 +3 407 406 412 +3 407 412 413 +3 408 269 275 +3 408 275 414 +3 409 408 414 +3 409 414 415 +3 410 409 415 +3 410 415 416 +3 411 410 416 +3 411 416 417 +3 412 411 417 +3 412 417 418 +3 413 412 418 +3 413 418 419 +3 414 275 281 +3 414 281 420 +3 415 414 420 +3 415 420 421 +3 416 415 421 +3 416 421 422 +3 417 416 422 +3 417 422 423 +3 418 417 423 +3 418 423 424 +3 419 418 424 +3 419 424 425 +3 420 281 287 +3 420 287 426 +3 421 420 426 +3 421 426 427 +3 422 421 427 +3 422 427 428 +3 423 422 428 +3 423 428 429 +3 424 423 429 +3 424 429 430 +3 425 424 430 +3 425 430 431 +3 426 287 293 +3 426 293 432 +3 427 426 432 +3 427 432 433 +3 428 427 433 +3 428 433 434 +3 429 428 434 +3 429 434 435 +3 430 429 435 +3 430 435 436 +3 431 430 436 +3 431 436 437 +3 432 293 299 +3 432 299 438 +3 433 432 438 +3 433 438 439 +3 434 433 439 +3 434 439 440 +3 435 434 440 +3 435 440 441 +3 436 435 441 +3 436 441 442 +3 437 436 442 +3 437 442 443 +3 438 299 305 +3 438 305 444 +3 439 438 444 +3 439 444 445 +3 440 439 445 +3 440 445 446 +3 441 440 446 +3 441 446 447 +3 442 441 447 +3 442 447 448 +3 443 442 448 +3 443 448 449 +3 444 305 311 +3 444 311 450 +3 445 444 450 +3 445 450 451 +3 446 445 451 +3 446 451 452 +3 447 446 452 +3 447 452 453 +3 448 447 453 +3 448 453 454 +3 449 448 454 +3 449 454 455 +3 450 311 178 +3 450 178 312 +3 451 450 312 +3 451 312 314 +3 452 451 314 +3 452 314 316 +3 453 452 316 +3 453 316 318 +3 454 453 318 +3 454 318 320 +3 455 454 320 +3 455 320 322 +3 456 457 458 +3 459 456 458 +3 459 458 460 +3 461 459 460 +3 461 460 462 +3 463 461 462 +3 463 462 464 +3 465 463 464 +3 465 464 466 +3 322 465 466 +3 322 466 455 +3 458 457 467 +3 460 458 467 +3 460 467 468 +3 462 460 468 +3 462 468 469 +3 464 462 469 +3 464 469 470 +3 466 464 470 +3 466 470 471 +3 455 466 471 +3 455 471 449 +3 467 457 472 +3 468 467 472 +3 468 472 473 +3 469 468 473 +3 469 473 474 +3 470 469 474 +3 470 474 475 +3 471 470 475 +3 471 475 476 +3 449 471 476 +3 449 476 443 +3 472 457 477 +3 473 472 477 +3 473 477 478 +3 474 473 478 +3 474 478 479 +3 475 474 479 +3 475 479 480 +3 476 475 480 +3 476 480 481 +3 443 476 481 +3 443 481 437 +3 477 457 482 +3 478 477 482 +3 478 482 483 +3 479 478 483 +3 479 483 484 +3 480 479 484 +3 480 484 485 +3 481 480 485 +3 481 485 486 +3 437 481 486 +3 437 486 431 +3 482 457 487 +3 483 482 487 +3 483 487 488 +3 484 483 488 +3 484 488 489 +3 485 484 489 +3 485 489 490 +3 486 485 490 +3 486 490 491 +3 431 486 491 +3 431 491 425 +3 487 457 492 +3 488 487 492 +3 488 492 493 +3 489 488 493 +3 489 493 494 +3 490 489 494 +3 490 494 495 +3 491 490 495 +3 491 495 496 +3 425 491 496 +3 425 496 419 +3 492 457 497 +3 493 492 497 +3 493 497 498 +3 494 493 498 +3 494 498 499 +3 495 494 499 +3 495 499 500 +3 496 495 500 +3 496 500 501 +3 419 496 501 +3 419 501 413 +3 497 457 502 +3 498 497 502 +3 498 502 503 +3 499 498 503 +3 499 503 504 +3 500 499 504 +3 500 504 505 +3 501 500 505 +3 501 505 506 +3 413 501 506 +3 413 506 407 +3 502 457 507 +3 503 502 507 +3 503 507 508 +3 504 503 508 +3 504 508 509 +3 505 504 509 +3 505 509 510 +3 506 505 510 +3 506 510 511 +3 407 506 511 +3 407 511 401 +3 507 457 512 +3 508 507 512 +3 508 512 513 +3 509 508 513 +3 509 513 514 +3 510 509 514 +3 510 514 515 +3 511 510 515 +3 511 515 516 +3 401 511 516 +3 401 516 395 +3 512 457 517 +3 513 512 517 +3 513 517 518 +3 514 513 518 +3 514 518 519 +3 515 514 519 +3 515 519 520 +3 516 515 520 +3 516 520 521 +3 395 516 521 +3 395 521 389 +3 517 457 522 +3 518 517 522 +3 518 522 523 +3 519 518 523 +3 519 523 524 +3 520 519 524 +3 520 524 525 +3 521 520 525 +3 521 525 526 +3 389 521 526 +3 389 526 383 +3 522 457 527 +3 523 522 527 +3 523 527 528 +3 524 523 528 +3 524 528 529 +3 525 524 529 +3 525 529 530 +3 526 525 530 +3 526 530 531 +3 383 526 531 +3 383 531 377 +3 527 457 532 +3 528 527 532 +3 528 532 533 +3 529 528 533 +3 529 533 534 +3 530 529 534 +3 530 534 535 +3 531 530 535 +3 531 535 536 +3 377 531 536 +3 377 536 371 +3 532 457 537 +3 533 532 537 +3 533 537 538 +3 534 533 538 +3 534 538 539 +3 535 534 539 +3 535 539 540 +3 536 535 540 +3 536 540 541 +3 371 536 541 +3 371 541 365 +3 537 457 542 +3 538 537 542 +3 538 542 543 +3 539 538 543 +3 539 543 544 +3 540 539 544 +3 540 544 545 +3 541 540 545 +3 541 545 546 +3 365 541 546 +3 365 546 359 +3 542 457 547 +3 543 542 547 +3 543 547 548 +3 544 543 548 +3 544 548 549 +3 545 544 549 +3 545 549 550 +3 546 545 550 +3 546 550 551 +3 359 546 551 +3 359 551 353 +3 547 457 552 +3 548 547 552 +3 548 552 553 +3 549 548 553 +3 549 553 554 +3 550 549 554 +3 550 554 555 +3 551 550 555 +3 551 555 556 +3 353 551 556 +3 353 556 347 +3 552 457 557 +3 553 552 557 +3 553 557 558 +3 554 553 558 +3 554 558 559 +3 555 554 559 +3 555 559 560 +3 556 555 560 +3 556 560 561 +3 347 556 561 +3 347 561 341 +3 557 457 562 +3 558 557 562 +3 558 562 563 +3 559 558 563 +3 559 563 564 +3 560 559 564 +3 560 564 565 +3 561 560 565 +3 561 565 566 +3 341 561 566 +3 341 566 335 +3 562 457 567 +3 563 562 567 +3 563 567 568 +3 564 563 568 +3 564 568 569 +3 565 564 569 +3 565 569 570 +3 566 565 570 +3 566 570 571 +3 335 566 571 +3 335 571 329 +3 567 457 572 +3 568 567 572 +3 568 572 573 +3 569 568 573 +3 569 573 574 +3 570 569 574 +3 570 574 575 +3 571 570 575 +3 571 575 576 +3 329 571 576 +3 329 576 323 +3 572 457 456 +3 573 572 456 +3 573 456 459 +3 574 573 459 +3 574 459 461 +3 575 574 461 +3 575 461 463 +3 576 575 463 +3 576 463 465 +3 323 576 465 +3 323 465 322 +3 577 578 579 +3 577 579 580 +3 580 579 581 +3 580 581 582 +3 582 581 583 +3 582 583 584 +3 584 583 585 +3 584 585 586 +3 586 585 587 +3 586 587 588 +3 588 587 589 +3 588 589 590 +3 590 589 591 +3 590 591 592 +3 592 591 593 +3 592 593 594 +3 594 593 595 +3 594 595 596 +3 596 595 597 +3 596 597 598 +3 598 597 599 +3 598 599 600 +3 600 599 601 +3 600 601 602 +3 602 601 603 +3 602 603 604 +3 604 603 605 +3 604 605 606 +3 606 605 607 +3 606 607 608 +3 608 607 609 +3 608 609 610 +3 610 609 611 +3 610 611 612 +3 612 611 613 +3 612 613 614 +3 614 613 615 +3 614 615 616 +3 616 615 617 +3 616 617 618 +3 618 617 619 +3 618 619 620 +3 620 619 621 +3 620 621 622 +3 622 621 623 +3 622 623 624 +3 624 623 578 +3 624 578 577 +3 625 577 580 +3 625 580 626 +3 627 625 626 +3 627 626 628 +3 629 627 628 +3 629 628 630 +3 631 629 630 +3 631 630 632 +3 633 631 632 +3 633 632 634 +3 635 633 634 +3 635 634 636 +3 626 580 582 +3 626 582 637 +3 628 626 637 +3 628 637 638 +3 630 628 638 +3 630 638 639 +3 632 630 639 +3 632 639 640 +3 634 632 640 +3 634 640 641 +3 636 634 641 +3 636 641 642 +3 637 582 584 +3 637 584 643 +3 638 637 643 +3 638 643 644 +3 639 638 644 +3 639 644 645 +3 640 639 645 +3 640 645 646 +3 641 640 646 +3 641 646 647 +3 642 641 647 +3 642 647 648 +3 643 584 586 +3 643 586 649 +3 644 643 649 +3 644 649 650 +3 645 644 650 +3 645 650 651 +3 646 645 651 +3 646 651 652 +3 647 646 652 +3 647 652 653 +3 648 647 653 +3 648 653 654 +3 649 586 588 +3 649 588 655 +3 650 649 655 +3 650 655 656 +3 651 650 656 +3 651 656 657 +3 652 651 657 +3 652 657 658 +3 653 652 658 +3 653 658 659 +3 654 653 659 +3 654 659 660 +3 655 588 590 +3 655 590 661 +3 656 655 661 +3 656 661 662 +3 657 656 662 +3 657 662 663 +3 658 657 663 +3 658 663 664 +3 659 658 664 +3 659 664 665 +3 660 659 665 +3 660 665 666 +3 661 590 592 +3 661 592 667 +3 662 661 667 +3 662 667 668 +3 663 662 668 +3 663 668 669 +3 664 663 669 +3 664 669 670 +3 665 664 670 +3 665 670 671 +3 666 665 671 +3 666 671 672 +3 667 592 594 +3 667 594 673 +3 668 667 673 +3 668 673 674 +3 669 668 674 +3 669 674 675 +3 670 669 675 +3 670 675 676 +3 671 670 676 +3 671 676 677 +3 672 671 677 +3 672 677 678 +3 673 594 596 +3 673 596 679 +3 674 673 679 +3 674 679 680 +3 675 674 680 +3 675 680 681 +3 676 675 681 +3 676 681 682 +3 677 676 682 +3 677 682 683 +3 678 677 683 +3 678 683 684 +3 679 596 598 +3 679 598 685 +3 680 679 685 +3 680 685 686 +3 681 680 686 +3 681 686 687 +3 682 681 687 +3 682 687 688 +3 683 682 688 +3 683 688 689 +3 684 683 689 +3 684 689 690 +3 685 598 600 +3 685 600 691 +3 686 685 691 +3 686 691 692 +3 687 686 692 +3 687 692 693 +3 688 687 693 +3 688 693 694 +3 689 688 694 +3 689 694 695 +3 690 689 695 +3 690 695 696 +3 691 600 602 +3 691 602 697 +3 692 691 697 +3 692 697 698 +3 693 692 698 +3 693 698 699 +3 694 693 699 +3 694 699 700 +3 695 694 700 +3 695 700 701 +3 696 695 701 +3 696 701 702 +3 697 602 604 +3 697 604 703 +3 698 697 703 +3 698 703 704 +3 699 698 704 +3 699 704 705 +3 700 699 705 +3 700 705 706 +3 701 700 706 +3 701 706 707 +3 702 701 707 +3 702 707 708 +3 703 604 606 +3 703 606 709 +3 704 703 709 +3 704 709 710 +3 705 704 710 +3 705 710 711 +3 706 705 711 +3 706 711 712 +3 707 706 712 +3 707 712 713 +3 708 707 713 +3 708 713 714 +3 709 606 608 +3 709 608 715 +3 710 709 715 +3 710 715 716 +3 711 710 716 +3 711 716 717 +3 712 711 717 +3 712 717 718 +3 713 712 718 +3 713 718 719 +3 714 713 719 +3 714 719 720 +3 715 608 610 +3 715 610 721 +3 716 715 721 +3 716 721 722 +3 717 716 722 +3 717 722 723 +3 718 717 723 +3 718 723 724 +3 719 718 724 +3 719 724 725 +3 720 719 725 +3 720 725 726 +3 721 610 612 +3 721 612 727 +3 722 721 727 +3 722 727 728 +3 723 722 728 +3 723 728 729 +3 724 723 729 +3 724 729 730 +3 725 724 730 +3 725 730 731 +3 726 725 731 +3 726 731 732 +3 727 612 614 +3 727 614 733 +3 728 727 733 +3 728 733 734 +3 729 728 734 +3 729 734 735 +3 730 729 735 +3 730 735 736 +3 731 730 736 +3 731 736 737 +3 732 731 737 +3 732 737 738 +3 733 614 616 +3 733 616 739 +3 734 733 739 +3 734 739 740 +3 735 734 740 +3 735 740 741 +3 736 735 741 +3 736 741 742 +3 737 736 742 +3 737 742 743 +3 738 737 743 +3 738 743 744 +3 739 616 618 +3 739 618 745 +3 740 739 745 +3 740 745 746 +3 741 740 746 +3 741 746 747 +3 742 741 747 +3 742 747 748 +3 743 742 748 +3 743 748 749 +3 744 743 749 +3 744 749 750 +3 745 618 620 +3 745 620 751 +3 746 745 751 +3 746 751 752 +3 747 746 752 +3 747 752 753 +3 748 747 753 +3 748 753 754 +3 749 748 754 +3 749 754 755 +3 750 749 755 +3 750 755 756 +3 751 620 622 +3 751 622 757 +3 752 751 757 +3 752 757 758 +3 753 752 758 +3 753 758 759 +3 754 753 759 +3 754 759 760 +3 755 754 760 +3 755 760 761 +3 756 755 761 +3 756 761 762 +3 757 622 624 +3 757 624 763 +3 758 757 763 +3 758 763 764 +3 759 758 764 +3 759 764 765 +3 760 759 765 +3 760 765 766 +3 761 760 766 +3 761 766 767 +3 762 761 767 +3 762 767 768 +3 763 624 577 +3 763 577 625 +3 764 763 625 +3 764 625 627 +3 765 764 627 +3 765 627 629 +3 766 765 629 +3 766 629 631 +3 767 766 631 +3 767 631 633 +3 768 767 633 +3 768 633 635 +3 769 770 771 +3 769 771 772 +3 773 769 772 +3 773 772 774 +3 775 773 774 +3 775 774 776 +3 777 775 776 +3 777 776 778 +3 779 777 778 +3 779 778 780 +3 781 779 780 +3 781 780 782 +3 772 771 783 +3 772 783 784 +3 774 772 784 +3 774 784 785 +3 776 774 785 +3 776 785 786 +3 778 776 786 +3 778 786 787 +3 780 778 787 +3 780 787 788 +3 782 780 788 +3 782 788 789 +3 784 783 790 +3 784 790 791 +3 785 784 791 +3 785 791 792 +3 786 785 792 +3 786 792 793 +3 787 786 793 +3 787 793 794 +3 788 787 794 +3 788 794 795 +3 789 788 795 +3 789 795 796 +3 791 790 797 +3 791 797 798 +3 792 791 798 +3 792 798 799 +3 793 792 799 +3 793 799 800 +3 794 793 800 +3 794 800 801 +3 795 794 801 +3 795 801 802 +3 796 795 802 +3 796 802 803 +3 798 797 804 +3 798 804 805 +3 799 798 805 +3 799 805 806 +3 800 799 806 +3 800 806 807 +3 801 800 807 +3 801 807 808 +3 802 801 808 +3 802 808 809 +3 803 802 809 +3 803 809 810 +3 805 804 811 +3 805 811 812 +3 806 805 812 +3 806 812 813 +3 807 806 813 +3 807 813 814 +3 808 807 814 +3 808 814 815 +3 809 808 815 +3 809 815 816 +3 810 809 816 +3 810 816 817 +3 812 811 818 +3 812 818 819 +3 813 812 819 +3 813 819 820 +3 814 813 820 +3 814 820 821 +3 815 814 821 +3 815 821 822 +3 816 815 822 +3 816 822 823 +3 817 816 823 +3 817 823 824 +3 819 818 825 +3 819 825 826 +3 820 819 826 +3 820 826 827 +3 821 820 827 +3 821 827 828 +3 822 821 828 +3 822 828 829 +3 823 822 829 +3 823 829 830 +3 824 823 830 +3 824 830 831 +3 826 825 832 +3 826 832 833 +3 827 826 833 +3 827 833 834 +3 828 827 834 +3 828 834 835 +3 829 828 835 +3 829 835 836 +3 830 829 836 +3 830 836 837 +3 831 830 837 +3 831 837 838 +3 833 832 839 +3 833 839 840 +3 834 833 840 +3 834 840 841 +3 835 834 841 +3 835 841 842 +3 836 835 842 +3 836 842 843 +3 837 836 843 +3 837 843 844 +3 838 837 844 +3 838 844 845 +3 840 839 846 +3 840 846 847 +3 841 840 847 +3 841 847 848 +3 842 841 848 +3 842 848 849 +3 843 842 849 +3 843 849 850 +3 844 843 850 +3 844 850 851 +3 845 844 851 +3 845 851 852 +3 847 846 770 +3 847 770 769 +3 848 847 769 +3 848 769 773 +3 849 848 773 +3 849 773 775 +3 850 849 775 +3 850 775 777 +3 851 850 777 +3 851 777 779 +3 852 851 779 +3 852 779 781 +3 853 781 782 +3 853 782 854 +3 855 853 854 +3 855 854 856 +3 857 855 856 +3 857 856 858 +3 859 857 858 +3 859 858 860 +3 861 859 860 +3 861 860 862 +3 245 861 862 +3 245 862 863 +3 854 782 789 +3 854 789 864 +3 856 854 864 +3 856 864 865 +3 858 856 865 +3 858 865 866 +3 860 858 866 +3 860 866 867 +3 862 860 867 +3 862 867 868 +3 863 862 868 +3 863 868 869 +3 864 789 796 +3 864 796 870 +3 865 864 870 +3 865 870 871 +3 866 865 871 +3 866 871 872 +3 867 866 872 +3 867 872 873 +3 868 867 873 +3 868 873 874 +3 869 868 874 +3 869 874 875 +3 870 796 803 +3 870 803 876 +3 871 870 876 +3 871 876 877 +3 872 871 877 +3 872 877 878 +3 873 872 878 +3 873 878 879 +3 874 873 879 +3 874 879 880 +3 875 874 880 +3 875 880 881 +3 876 803 810 +3 876 810 882 +3 877 876 882 +3 877 882 883 +3 878 877 883 +3 878 883 884 +3 879 878 884 +3 879 884 885 +3 880 879 885 +3 880 885 886 +3 881 880 886 +3 881 886 887 +3 882 810 817 +3 882 817 888 +3 883 882 888 +3 883 888 889 +3 884 883 889 +3 884 889 890 +3 885 884 890 +3 885 890 891 +3 886 885 891 +3 886 891 892 +3 887 886 892 +3 887 892 893 +3 888 817 824 +3 888 824 894 +3 889 888 894 +3 889 894 895 +3 890 889 895 +3 890 895 896 +3 891 890 896 +3 891 896 897 +3 892 891 897 +3 892 897 898 +3 893 892 898 +3 893 898 899 +3 894 824 831 +3 894 831 900 +3 895 894 900 +3 895 900 901 +3 896 895 901 +3 896 901 902 +3 897 896 902 +3 897 902 903 +3 898 897 903 +3 898 903 904 +3 899 898 904 +3 899 904 905 +3 900 831 838 +3 900 838 906 +3 901 900 906 +3 901 906 907 +3 902 901 907 +3 902 907 908 +3 903 902 908 +3 903 908 909 +3 904 903 909 +3 904 909 910 +3 905 904 910 +3 905 910 911 +3 906 838 845 +3 906 845 912 +3 907 906 912 +3 907 912 913 +3 908 907 913 +3 908 913 914 +3 909 908 914 +3 909 914 915 +3 910 909 915 +3 910 915 916 +3 911 910 916 +3 911 916 917 +3 912 845 852 +3 912 852 918 +3 913 912 918 +3 913 918 919 +3 914 913 919 +3 914 919 920 +3 915 914 920 +3 915 920 921 +3 916 915 921 +3 916 921 922 +3 917 916 922 +3 917 922 923 +3 918 852 781 +3 918 781 853 +3 919 918 853 +3 919 853 855 +3 920 919 855 +3 920 855 857 +3 921 920 857 +3 921 857 859 +3 922 921 859 +3 922 859 861 +3 923 922 861 +3 923 861 245 +3 924 925 926 +3 924 926 927 +3 928 924 927 +3 928 927 929 +3 930 928 929 +3 930 929 931 +3 932 930 931 +3 932 931 933 +3 934 932 933 +3 934 933 935 +3 936 934 935 +3 936 935 937 +3 927 926 938 +3 927 938 939 +3 929 927 939 +3 929 939 940 +3 931 929 940 +3 931 940 941 +3 933 931 941 +3 933 941 942 +3 935 933 942 +3 935 942 943 +3 937 935 943 +3 937 943 944 +3 939 938 945 +3 939 945 946 +3 940 939 946 +3 940 946 947 +3 941 940 947 +3 941 947 948 +3 942 941 948 +3 942 948 949 +3 943 942 949 +3 943 949 950 +3 944 943 950 +3 944 950 951 +3 946 945 952 +3 946 952 953 +3 947 946 953 +3 947 953 954 +3 948 947 954 +3 948 954 955 +3 949 948 955 +3 949 955 956 +3 950 949 956 +3 950 956 957 +3 951 950 957 +3 951 957 958 +3 953 952 959 +3 953 959 960 +3 954 953 960 +3 954 960 961 +3 955 954 961 +3 955 961 962 +3 956 955 962 +3 956 962 963 +3 957 956 963 +3 957 963 964 +3 958 957 964 +3 958 964 965 +3 960 959 966 +3 960 966 967 +3 961 960 967 +3 961 967 968 +3 962 961 968 +3 962 968 969 +3 963 962 969 +3 963 969 970 +3 964 963 970 +3 964 970 971 +3 965 964 971 +3 965 971 972 +3 967 966 973 +3 967 973 974 +3 968 967 974 +3 968 974 975 +3 969 968 975 +3 969 975 976 +3 970 969 976 +3 970 976 977 +3 971 970 977 +3 971 977 978 +3 972 971 978 +3 972 978 979 +3 974 973 980 +3 974 980 981 +3 975 974 981 +3 975 981 982 +3 976 975 982 +3 976 982 983 +3 977 976 983 +3 977 983 984 +3 978 977 984 +3 978 984 985 +3 979 978 985 +3 979 985 986 +3 981 980 987 +3 981 987 988 +3 982 981 988 +3 982 988 989 +3 983 982 989 +3 983 989 990 +3 984 983 990 +3 984 990 991 +3 985 984 991 +3 985 991 992 +3 986 985 992 +3 986 992 993 +3 988 987 994 +3 988 994 995 +3 989 988 995 +3 989 995 996 +3 990 989 996 +3 990 996 997 +3 991 990 997 +3 991 997 998 +3 992 991 998 +3 992 998 999 +3 993 992 999 +3 993 999 1000 +3 995 994 1001 +3 995 1001 1002 +3 996 995 1002 +3 996 1002 1003 +3 997 996 1003 +3 997 1003 1004 +3 998 997 1004 +3 998 1004 1005 +3 999 998 1005 +3 999 1005 1006 +3 1000 999 1006 +3 1000 1006 1007 +3 1002 1001 925 +3 1002 925 924 +3 1003 1002 924 +3 1003 924 928 +3 1004 1003 928 +3 1004 928 930 +3 1005 1004 930 +3 1005 930 932 +3 1006 1005 932 +3 1006 932 934 +3 1007 1006 934 +3 1007 934 936 +3 1008 936 937 +3 1008 937 1009 +3 1010 1008 1009 +3 1010 1009 1011 +3 1012 1010 1011 +3 1012 1011 1013 +3 1014 1012 1013 +3 1014 1013 1015 +3 1016 1014 1015 +3 1016 1015 1017 +3 1018 1016 1017 +3 1018 1017 1019 +3 1009 937 944 +3 1009 944 1020 +3 1011 1009 1020 +3 1011 1020 1021 +3 1013 1011 1021 +3 1013 1021 1022 +3 1015 1013 1022 +3 1015 1022 1023 +3 1017 1015 1023 +3 1017 1023 1024 +3 1019 1017 1024 +3 1019 1024 1025 +3 1020 944 951 +3 1020 951 1026 +3 1021 1020 1026 +3 1021 1026 1027 +3 1022 1021 1027 +3 1022 1027 1028 +3 1023 1022 1028 +3 1023 1028 1029 +3 1024 1023 1029 +3 1024 1029 1030 +3 1025 1024 1030 +3 1025 1030 1031 +3 1026 951 958 +3 1026 958 1032 +3 1027 1026 1032 +3 1027 1032 1033 +3 1028 1027 1033 +3 1028 1033 1034 +3 1029 1028 1034 +3 1029 1034 1035 +3 1030 1029 1035 +3 1030 1035 1036 +3 1031 1030 1036 +3 1031 1036 1037 +3 1032 958 965 +3 1032 965 1038 +3 1033 1032 1038 +3 1033 1038 1039 +3 1034 1033 1039 +3 1034 1039 1040 +3 1035 1034 1040 +3 1035 1040 1041 +3 1036 1035 1041 +3 1036 1041 1042 +3 1037 1036 1042 +3 1037 1042 1043 +3 1038 965 972 +3 1038 972 1044 +3 1039 1038 1044 +3 1039 1044 1045 +3 1040 1039 1045 +3 1040 1045 1046 +3 1041 1040 1046 +3 1041 1046 1047 +3 1042 1041 1047 +3 1042 1047 1048 +3 1043 1042 1048 +3 1043 1048 1049 +3 1044 972 979 +3 1044 979 1050 +3 1045 1044 1050 +3 1045 1050 1051 +3 1046 1045 1051 +3 1046 1051 1052 +3 1047 1046 1052 +3 1047 1052 1053 +3 1048 1047 1053 +3 1048 1053 1054 +3 1049 1048 1054 +3 1049 1054 1055 +3 1050 979 986 +3 1050 986 1056 +3 1051 1050 1056 +3 1051 1056 1057 +3 1052 1051 1057 +3 1052 1057 1058 +3 1053 1052 1058 +3 1053 1058 1059 +3 1054 1053 1059 +3 1054 1059 1060 +3 1055 1054 1060 +3 1055 1060 1061 +3 1056 986 993 +3 1056 993 1062 +3 1057 1056 1062 +3 1057 1062 1063 +3 1058 1057 1063 +3 1058 1063 1064 +3 1059 1058 1064 +3 1059 1064 1065 +3 1060 1059 1065 +3 1060 1065 1066 +3 1061 1060 1066 +3 1061 1066 1067 +3 1062 993 1000 +3 1062 1000 1068 +3 1063 1062 1068 +3 1063 1068 1069 +3 1064 1063 1069 +3 1064 1069 1070 +3 1065 1064 1070 +3 1065 1070 1071 +3 1066 1065 1071 +3 1066 1071 1072 +3 1067 1066 1072 +3 1067 1072 1073 +3 1068 1000 1007 +3 1068 1007 1074 +3 1069 1068 1074 +3 1069 1074 1075 +3 1070 1069 1075 +3 1070 1075 1076 +3 1071 1070 1076 +3 1071 1076 1077 +3 1072 1071 1077 +3 1072 1077 1078 +3 1073 1072 1078 +3 1073 1078 1079 +3 1074 1007 936 +3 1074 936 1008 +3 1075 1074 1008 +3 1075 1008 1010 +3 1076 1075 1010 +3 1076 1010 1012 +3 1077 1076 1012 +3 1077 1012 1014 +3 1078 1077 1014 +3 1078 1014 1016 +3 1079 1078 1016 +3 1079 1016 1018 +3 1080 1081 1082 +3 1083 1080 1082 +3 1083 1082 1084 +3 1085 1083 1084 +3 1085 1084 1086 +3 1087 1085 1086 +3 1087 1086 1088 +3 578 1087 1088 +3 578 1088 579 +3 1082 1081 1089 +3 1084 1082 1089 +3 1084 1089 1090 +3 1086 1084 1090 +3 1086 1090 1091 +3 1088 1086 1091 +3 1088 1091 1092 +3 579 1088 1092 +3 579 1092 581 +3 1089 1081 1093 +3 1090 1089 1093 +3 1090 1093 1094 +3 1091 1090 1094 +3 1091 1094 1095 +3 1092 1091 1095 +3 1092 1095 1096 +3 581 1092 1096 +3 581 1096 583 +3 1093 1081 1097 +3 1094 1093 1097 +3 1094 1097 1098 +3 1095 1094 1098 +3 1095 1098 1099 +3 1096 1095 1099 +3 1096 1099 1100 +3 583 1096 1100 +3 583 1100 585 +3 1097 1081 1101 +3 1098 1097 1101 +3 1098 1101 1102 +3 1099 1098 1102 +3 1099 1102 1103 +3 1100 1099 1103 +3 1100 1103 1104 +3 585 1100 1104 +3 585 1104 587 +3 1101 1081 1105 +3 1102 1101 1105 +3 1102 1105 1106 +3 1103 1102 1106 +3 1103 1106 1107 +3 1104 1103 1107 +3 1104 1107 1108 +3 587 1104 1108 +3 587 1108 589 +3 1105 1081 1109 +3 1106 1105 1109 +3 1106 1109 1110 +3 1107 1106 1110 +3 1107 1110 1111 +3 1108 1107 1111 +3 1108 1111 1112 +3 589 1108 1112 +3 589 1112 591 +3 1109 1081 1113 +3 1110 1109 1113 +3 1110 1113 1114 +3 1111 1110 1114 +3 1111 1114 1115 +3 1112 1111 1115 +3 1112 1115 1116 +3 591 1112 1116 +3 591 1116 593 +3 1113 1081 1117 +3 1114 1113 1117 +3 1114 1117 1118 +3 1115 1114 1118 +3 1115 1118 1119 +3 1116 1115 1119 +3 1116 1119 1120 +3 593 1116 1120 +3 593 1120 595 +3 1117 1081 1121 +3 1118 1117 1121 +3 1118 1121 1122 +3 1119 1118 1122 +3 1119 1122 1123 +3 1120 1119 1123 +3 1120 1123 1124 +3 595 1120 1124 +3 595 1124 597 +3 1121 1081 1125 +3 1122 1121 1125 +3 1122 1125 1126 +3 1123 1122 1126 +3 1123 1126 1127 +3 1124 1123 1127 +3 1124 1127 1128 +3 597 1124 1128 +3 597 1128 599 +3 1125 1081 1129 +3 1126 1125 1129 +3 1126 1129 1130 +3 1127 1126 1130 +3 1127 1130 1131 +3 1128 1127 1131 +3 1128 1131 1132 +3 599 1128 1132 +3 599 1132 601 +3 1129 1081 1133 +3 1130 1129 1133 +3 1130 1133 1134 +3 1131 1130 1134 +3 1131 1134 1135 +3 1132 1131 1135 +3 1132 1135 1136 +3 601 1132 1136 +3 601 1136 603 +3 1133 1081 1137 +3 1134 1133 1137 +3 1134 1137 1138 +3 1135 1134 1138 +3 1135 1138 1139 +3 1136 1135 1139 +3 1136 1139 1140 +3 603 1136 1140 +3 603 1140 605 +3 1137 1081 1141 +3 1138 1137 1141 +3 1138 1141 1142 +3 1139 1138 1142 +3 1139 1142 1143 +3 1140 1139 1143 +3 1140 1143 1144 +3 605 1140 1144 +3 605 1144 607 +3 1141 1081 1145 +3 1142 1141 1145 +3 1142 1145 1146 +3 1143 1142 1146 +3 1143 1146 1147 +3 1144 1143 1147 +3 1144 1147 1148 +3 607 1144 1148 +3 607 1148 609 +3 1145 1081 1149 +3 1146 1145 1149 +3 1146 1149 1150 +3 1147 1146 1150 +3 1147 1150 1151 +3 1148 1147 1151 +3 1148 1151 1152 +3 609 1148 1152 +3 609 1152 611 +3 1149 1081 1153 +3 1150 1149 1153 +3 1150 1153 1154 +3 1151 1150 1154 +3 1151 1154 1155 +3 1152 1151 1155 +3 1152 1155 1156 +3 611 1152 1156 +3 611 1156 613 +3 1153 1081 1157 +3 1154 1153 1157 +3 1154 1157 1158 +3 1155 1154 1158 +3 1155 1158 1159 +3 1156 1155 1159 +3 1156 1159 1160 +3 613 1156 1160 +3 613 1160 615 +3 1157 1081 1161 +3 1158 1157 1161 +3 1158 1161 1162 +3 1159 1158 1162 +3 1159 1162 1163 +3 1160 1159 1163 +3 1160 1163 1164 +3 615 1160 1164 +3 615 1164 617 +3 1161 1081 1165 +3 1162 1161 1165 +3 1162 1165 1166 +3 1163 1162 1166 +3 1163 1166 1167 +3 1164 1163 1167 +3 1164 1167 1168 +3 617 1164 1168 +3 617 1168 619 +3 1165 1081 1169 +3 1166 1165 1169 +3 1166 1169 1170 +3 1167 1166 1170 +3 1167 1170 1171 +3 1168 1167 1171 +3 1168 1171 1172 +3 619 1168 1172 +3 619 1172 621 +3 1169 1081 1173 +3 1170 1169 1173 +3 1170 1173 1174 +3 1171 1170 1174 +3 1171 1174 1175 +3 1172 1171 1175 +3 1172 1175 1176 +3 621 1172 1176 +3 621 1176 623 +3 1173 1081 1080 +3 1174 1173 1080 +3 1174 1080 1083 +3 1175 1174 1083 +3 1175 1083 1085 +3 1176 1175 1085 +3 1176 1085 1087 +3 623 1176 1087 +3 623 1087 578 diff --git a/help/builder_help.sce b/help/builder_help.sce new file mode 100644 index 0000000..4d4e031 --- /dev/null +++ b/help/builder_help.sce @@ -0,0 +1,21 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// Author: Shamika Mohanan +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in +// This file must be used under the terms of the BSD. +// This source file is licensed as described in the file LICENSE, which +// you should have received as part of this distribution. The terms +// are also available at +// https://opensource.org/licenses/BSD-3-Clause + +mode(-1) +lines(0) + +toolbox_title = "FOSSEE_Image_Processing_Toolbox" + +help_dir = get_absolute_file_path('builder_help.sce'); + +tbx_builder_help_lang("en_US", help_dir); + +clear toolbox_title; diff --git a/help/builder_help.sce~ b/help/builder_help.sce~ new file mode 100644 index 0000000..da2f4f7 --- /dev/null +++ b/help/builder_help.sce~ @@ -0,0 +1,21 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// Author: Harpreet Singh +// Organization: FOSSEE, IIT Bombay +// Email: harpreet.mertia@gmail.com +// This file must be used under the terms of the BSD. +// This source file is licensed as described in the file LICENSE, which +// you should have received as part of this distribution. The terms +// are also available at +// https://opensource.org/licenses/BSD-3-Clause + +mode(-1) +lines(0) + +toolbox_title = "FOSSEE_Optimization_Toolbox" + +help_dir = get_absolute_file_path('builder_help.sce'); + +tbx_builder_help_lang("en_US", help_dir); + +clear toolbox_title; diff --git a/help/en_US/bilateralFilter.xml b/help/en_US/bilateralFilter.xml new file mode 100644 index 0000000..7b95281 --- /dev/null +++ b/help/en_US/bilateralFilter.xml @@ -0,0 +1,77 @@ + + + + + + + + bilateralFilter + Applies the bilateral filter to an image + + + + + Calling Sequence + + image = imread('path of image') + out = bilateralFilter(image, d, sigmaColor, sigmaSpace) + + + + + + Parameters + + image : + source image + d : + Diameter of each pixel neighborhood that is used during filtering + sigmaColor : + Filter sigma in the color space + sigmaSpace : + Filter sigma in the coordinate space + + + + + Description + +bilateralFilter can reduce unwanted noise very well while keeping edges fairly sharp. +A larger value of the sigmaColor parameter means that farther colors within the pixel neighborhood will be mixed together. +A larger value of the sigmaSpace parameter means that farther pixels will influence each other as long as their colors are close enough. +It is recommended to use d=5 for real-time applications. +For simplicity, you can set the 2 sigma values to be the same. + + + + + + + Examples + + + + + Authors + + Priyanka Hiranandani + + + diff --git a/help/en_US/blend.xml b/help/en_US/blend.xml new file mode 100644 index 0000000..a9283c9 --- /dev/null +++ b/help/en_US/blend.xml @@ -0,0 +1,74 @@ + + + + + + + + blend + Blends two images according to corresponding weights given by the user + + + + + Calling Sequence + + out = blend(img1,img2,w1,w2) + + + + + + Parameters + + img1 : + first image + img2 : + second image + w1 : + a number between 1 and 100 denoting the proportion of the first image in the output + w2 : + a number between 1 and 100 denoting the proportion of the second image in the output + + + + + Description + +out = blend(img1,img2,w1,w2) returns a blended image which has size equal to that of first image. +Both the images are resized to same dimensions before blending the images. +Note that the weights are in percentage. + + + + + + + Examples + + + + + Authors + + M Avinash Reddy , Manoj Sree Harsha + + + diff --git a/help/en_US/build_help.sce b/help/en_US/build_help.sce new file mode 100644 index 0000000..81154f3 --- /dev/null +++ b/help/en_US/build_help.sce @@ -0,0 +1,17 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// Author: Shamika Mohanan +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in +// This file must be used under the terms of the BSD. +// This source file is licensed as described in the file LICENSE, which +// you should have received as part of this distribution. The terms +// are also available at +// https://opensource.org/licenses/BSD-3-Clause + +help_lang_dir = get_absolute_file_path('build_help.sce'); + +tbx_build_help(TOOLBOX_TITLE, help_lang_dir); + +clear help_lang_dir; + diff --git a/help/en_US/build_help.sce~ b/help/en_US/build_help.sce~ new file mode 100644 index 0000000..0205c56 --- /dev/null +++ b/help/en_US/build_help.sce~ @@ -0,0 +1,17 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// Author: Shamika Mohanan +// Organization: FOSSEE, IIT Bombay +// Email: harpreet.mertia@gmail.com +// This file must be used under the terms of the BSD. +// This source file is licensed as described in the file LICENSE, which +// you should have received as part of this distribution. The terms +// are also available at +// https://opensource.org/licenses/BSD-3-Clause + +help_lang_dir = get_absolute_file_path('build_help.sce'); + +tbx_build_help(TOOLBOX_TITLE, help_lang_dir); + +clear help_lang_dir; + diff --git a/help/en_US/dilate.xml b/help/en_US/dilate.xml new file mode 100644 index 0000000..b84a713 --- /dev/null +++ b/help/en_US/dilate.xml @@ -0,0 +1,73 @@ + + + + + + + + dilate + Dilates an image + + + + + Calling Sequence + + input_image=imread('path of the image') + out = dilate(input_image,actualkernel,anchor_x,anchor_y,iteration) + + + + + + Parameters + + input_image : + source image + actualkernel : + structuring element used for dilation + anchor_x : + x-coordinate of the anchor within the kernel (default is -1) + anchor_y : + y-coordinate of the anchor within the kernel (default is -1) + iteration : + number of times dilation is applied + + + + + Description + +The function dilates the source image using the specified structuring element(actualkernel) that determines the shape of a pixel neighborhood + + + + + + + Examples + + + + + Authors + + Sukul Bagai + + + diff --git a/help/en_US/gaussianblur.xml b/help/en_US/gaussianblur.xml new file mode 100644 index 0000000..810b47a --- /dev/null +++ b/help/en_US/gaussianblur.xml @@ -0,0 +1,72 @@ + + + + + + + + gaussianblur + Blurs an image using a Gaussian filter + + + + + Calling Sequence + + inputImage = imread('path of the image') + outputImg = gaussianblur(inputImage,ksize_height,ksize_width,sigmaX,sigmaY) + + + + + + Parameters + + inputImage : + source image + ksize_height : + Gaussian kernel height. It must be positive and odd. + ksize_width : + Gaussian kernel width. It must be positive and odd. + sigmaX : + Gaussian kernel standard deviation in X direction. + sigmaY : + Gaussian kernel standard deviation in Y direction. + + + + + Description + +The function convolves the source image with the specified Gaussian kernel. + + + + + + + Examples + + + + + Authors + + Sukul Bagai + + + diff --git a/help/en_US/getTextSize.xml b/help/en_US/getTextSize.xml new file mode 100644 index 0000000..9136b6f --- /dev/null +++ b/help/en_US/getTextSize.xml @@ -0,0 +1,70 @@ + + + + + + + + getTextSize + Calculates the width and height of a text string + + + + + Calling Sequence + + [textSize,baseLine]= getTextSize(inputtext,fontface,fontscale,thickness) + + + + + + Parameters + + inputtext : + Input text string + fontface : + Font type + fontscale : + Font scale factor that is multiplied by the font-specific base size + thickness : + Thickness of the lines used to draw a text + textSize : + Output parameter- The size of a box that contains the specified text + baseLine : + Output parameter- y-coordinate of the baseline relative to the bottom-most text point + + + + + Description + +The function getTextSize calculates and returns the size of a box that contains the specified text + + + + + Examples + + + + + Authors + + Sukul Bagai , Abhilasha Sancheti + + + diff --git a/help/en_US/getgaussiankernel.xml b/help/en_US/getgaussiankernel.xml new file mode 100644 index 0000000..7516701 --- /dev/null +++ b/help/en_US/getgaussiankernel.xml @@ -0,0 +1,66 @@ + + + + + + + + getgaussiankernel + Returns Gaussian filter coefficients + + + + + Calling Sequence + + output = getgaussiankernel(ksize, sigma, ktype) + + + + + + Parameters + + ksize : + Aperture size. It should be odd and positive. + sigma : + Gaussian standard deviation. + ktype : + Type of filter coefficients. It can be CV_32f or CV_64F. + + + + + Description + +The function computes and returns the ksize x 1 matrix of Gaussian filter coefficients. + + + + + + + Examples + + + + + Authors + + Shubheshka Jalan + + + diff --git a/help/en_US/imwarp.xml b/help/en_US/imwarp.xml new file mode 100644 index 0000000..7e27312 --- /dev/null +++ b/help/en_US/imwarp.xml @@ -0,0 +1,69 @@ + + + + + + + + imwarp + The function applies an affine transformation to the input image. + + + + + Calling Sequence + + img=imread('path of the image') + output=imwarp(img,transformation_matrix) + + + + + + Parameters + + img : + Input image + m : + It is the 2X3 transformation matrix. + + + + + Description + +The function warpAffine transforms the source image using the specified matrix: +dst(x,y) = src( ( m(1,1)*x + m(1,2)*y + m(1,3) ) , ( m(2,1)*x + m(2,2)*y + m(2,3) ) ) + + + + + + + Examples + + + + + Authors + + V Srinivas , M Avinash Reddy + + + diff --git a/help/en_US/knn.xml b/help/en_US/knn.xml new file mode 100644 index 0000000..dd78ea0 --- /dev/null +++ b/help/en_US/knn.xml @@ -0,0 +1,90 @@ + + + + + + + + knn + Finds the k nearest neighbours of the query point q, in the dataset f + + + + + Calling Sequence + + out = knn(q,f,k) + out = knn(q,f,k,algo_type) + + + + + + Parameters + + q : + a row vector containing the query point + f : + f is the set of data points and the number of columns in f should be same as that of q to match point dimensionality + k : + a positive integer specifying the number of nearest neighbours in f for the query point p. + algo_type : + a integer between 1 and 4 (both inclusive) specifying the algorithm to be used for the knn search. + + + + + Description + +out = knn(q,f,k) returns a 2xk matrix . +The first row of out contains the indices of the k nearest points in the dataset(f) from the query point. +The second row contains the corresponding distances(squared euclidean distance). +algo_type 1 corresponds to linear search algorithm. +algo_type 2 corresponds to search using a set of randomized kd-trees. +algo_type 3 corresponds to search using hierarchical k-means tree. +algo_type 4 corresponds to combined search using both kd-trees and k-means algorithm. + + + + + + + Examples + + + + + Examples + + + + + Authors + + M Avinash Reddy + + + diff --git a/help/en_US/laplacian.xml b/help/en_US/laplacian.xml new file mode 100644 index 0000000..9513790 --- /dev/null +++ b/help/en_US/laplacian.xml @@ -0,0 +1,72 @@ + + + + + + + + laplacian + The function calculates laplacian of an image + + + + + Calling Sequence + + inputImage = imread('path of the source image') + outputImg = laplacian(inputImage , depth , ksize , scale, delta) + + + + + + Parameters + + inputImage : + source image + depth : + Depth of the output image + ksize : + Aperture size + scale : + Optional scale factor for the computed Laplacian values + delta : + This value is added to each pixel in the output image + + + + + Description + +Laplacian Operator is also a derivative operator which is used to find edges in an image. + + + + + + + Examples + + + + + Authors + + Sukul Bagai + + + diff --git a/help/en_US/master_help.xml b/help/en_US/master_help.xml new file mode 100644 index 0000000..5dee8c4 --- /dev/null +++ b/help/en_US/master_help.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + +]> + + + FOSSEE Image Processing Toolbox + + + +FOSSEE Image Processing Toolbox +&a7f78b2eb485a5a8c71248f2430715dad; +&ada1ec654a828ed4894a81c995ee8e27e; +&a7f948ba2428b32007e70f3aff88c5022; +&a26c348a0f3bc159bf900e6878e610baa; +&ae2a9e826f5d3b6d79c8ddbf422e6b8b9; +&a5a76cf00cc0c2f8624a645bcbcb017f6; +&a7e600fa4f1ae065186acaa9d0f81a828; +&a14848588163ca28d6eefa1e05da08340; +&a8049d3224ff7938fa8e2cf820c533555; +&a681aa954a349ba4a40016efb61501d2d; +&a950d8997181c678cf4593b668031da1f; +&aaf55bbe801cf213d4848369d317fc5ff; +&a1a961eacab9bac7985e0b78ea52ad95a; +&aacd7631bce1466c14971db8312787324; +&a9dca3d3fc8f6dbfb0b9dc8177c20a507; + + diff --git a/help/en_US/medianblur.xml b/help/en_US/medianblur.xml new file mode 100644 index 0000000..c71e05f --- /dev/null +++ b/help/en_US/medianblur.xml @@ -0,0 +1,66 @@ + + + + + + + + medianblur + Blurs an image using the median filter. + + + + + Calling Sequence + + inputImage = imread('path of the image') + outputImg = medianblur(inputImage,ksize) + + + + + + Parameters + + inputImage : + source image + ksize : + aperture linear size; it must be odd and greater than 1 + + + + + Description + +The function smoothes an image using the median filter with the ksize x ksize aperture. + + + + + + + Examples + + + + + Authors + + Sukul Bagai + + + diff --git a/help/en_US/montage.xml b/help/en_US/montage.xml new file mode 100644 index 0000000..c0ae614 --- /dev/null +++ b/help/en_US/montage.xml @@ -0,0 +1,73 @@ + + + + + + + + montage + Creates a montage of same sized input images + + + + + Calling Sequence + + out = montage(1,1,img1) + out = montage(1,2,img1,img2) + out = montage(3,1,img1,img2,img3) + out = montage(2,2,img1,img2.img3,img4) + out = montage(1,5,img1,img2,img3,img4,img5) + out = montage(3,2,img1,img2,img3,img4,img5,img6) + + + + + + Parameters + + rows : + number of rows in montage + cols : + number of columns in montage + varargin : + variable number of input images + + + + + Description + +The function creates a montage with the list of images. Montage is created row-wise with images taken in order from the list. Note that the following condition should hold true:- no_of_rows*no_of_cols >= no_of_images > (no_of_rows-1)*(no_of_cols) + + + + + + + Examples + + + + + Authors + + Sukul Bagai , M Avinash Reddy + + + diff --git a/help/en_US/pana.xml b/help/en_US/pana.xml new file mode 100644 index 0000000..3f4a62d --- /dev/null +++ b/help/en_US/pana.xml @@ -0,0 +1,107 @@ + + + + + + + + pana + Creates the output panorama image using two or more images + + + + + Calling Sequence + + stacksize('max') + img1=imread('path of the image file') + img2=imread('path of the image file') + out = pana(img1,img2) + img3=imread('path of the image file') + out = pana(img1,img2,img3) + img4=imread('path of the image file') + out = pana(img1,img2,img3,img4) + img5=imread('path of the image file') + out = pana(img1,img2,img3,img4,img5) + img6=imread('path of the image file') + out = pana(img1,img2,img3,img4,img5,img6) + + + + + + Parameters + + img1 : + an image + img2 : + an image + img3 : + an image + img4 : + an image + img5 : + an image + img6 : + an image + + + + + Description + +The images pass through a stiching pipeline before the final panorama is formed. +Features are extracted from each image and matching is done on two consecutive images to ensure the continuity in images. +After this camera parameters are estimated which is required to do particular type of warping. +After warping is done exposure is compensated in all images so as to get a uniform exposure throughout the panaroma. +Seam estimation is done next to get the exact portions of images to be blended. +Finally, the images are blended to form the panorama. + + + + + + + Examples + + + + + Examples + + + + + Authors + + M Avinash Reddy , Manoj Sree Harsha , Ebey Abraham + + + diff --git a/help/en_US/pclknn.xml b/help/en_US/pclknn.xml new file mode 100644 index 0000000..4b06a7b --- /dev/null +++ b/help/en_US/pclknn.xml @@ -0,0 +1,73 @@ + + + + + + + + pclknn + Finds the k nearest neighbours of the query point q, in the point cloud. + + + + + Calling Sequence + + pcloud=pcread('path of point cloud file') + out = pclknn(pcloud,q,k) + + + + + + + Parameters + + pcloud : + a point cloud structure read using pcread function + q : + a three dimensional query point + k : + a positive integer specifying the number of nearest neighbours in pcloud for the query point p. + + + + + Description + +out = knn(q,f,k) returns a 2xk matrix . +The first row of out contains the indices of the k nearest points in the dataset(f) from the query point. +The second row contains the corresponding distances(squared euclidean distance). + + + + + + + Examples + + + + + Authors + + M Avinash Reddy + + + diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS new file mode 100644 index 0000000..97cfa51 Binary files /dev/null and b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS differ diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB new file mode 100644 index 0000000..c4eeedb Binary files /dev/null and b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB differ diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS b/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS new file mode 100644 index 0000000..7c10df4 --- /dev/null +++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS @@ -0,0 +1 @@ +„ß,× ’c®/Þ‰ðË{'@ €2;ÚÅùo,&ÐÎðÊ—q¹z Â׫P —æ:Va¾`l³P¬4™‹žºý"”Ô \ No newline at end of file diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS b/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS new file mode 100644 index 0000000..75c73a8 Binary files /dev/null and b/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS differ diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA b/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA new file mode 100644 index 0000000..c35ed56 --- /dev/null +++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA @@ -0,0 +1,2 @@ +JavaSearch 1.0 +TMAP bs=2048 rt=1 fl=-1 id1=452 id2=1 diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP b/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP new file mode 100644 index 0000000..53ffe4f Binary files /dev/null and b/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP differ diff --git a/help/en_US/scilab_en_US_help/ScilabCaution.png b/help/en_US/scilab_en_US_help/ScilabCaution.png new file mode 100644 index 0000000..231159a Binary files /dev/null and b/help/en_US/scilab_en_US_help/ScilabCaution.png differ diff --git a/help/en_US/scilab_en_US_help/ScilabEdit.png b/help/en_US/scilab_en_US_help/ScilabEdit.png new file mode 100644 index 0000000..ff0cca7 Binary files /dev/null and b/help/en_US/scilab_en_US_help/ScilabEdit.png differ diff --git a/help/en_US/scilab_en_US_help/ScilabExecute.png b/help/en_US/scilab_en_US_help/ScilabExecute.png new file mode 100644 index 0000000..4acd4b9 Binary files /dev/null and b/help/en_US/scilab_en_US_help/ScilabExecute.png differ diff --git a/help/en_US/scilab_en_US_help/ScilabImportant.png b/help/en_US/scilab_en_US_help/ScilabImportant.png new file mode 100644 index 0000000..73931b2 Binary files /dev/null and b/help/en_US/scilab_en_US_help/ScilabImportant.png differ diff --git a/help/en_US/scilab_en_US_help/ScilabNote.png b/help/en_US/scilab_en_US_help/ScilabNote.png new file mode 100644 index 0000000..6607ece Binary files /dev/null and b/help/en_US/scilab_en_US_help/ScilabNote.png differ diff --git a/help/en_US/scilab_en_US_help/ScilabTip.png b/help/en_US/scilab_en_US_help/ScilabTip.png new file mode 100644 index 0000000..6607ece Binary files /dev/null and b/help/en_US/scilab_en_US_help/ScilabTip.png differ diff --git a/help/en_US/scilab_en_US_help/ScilabWarning.png b/help/en_US/scilab_en_US_help/ScilabWarning.png new file mode 100644 index 0000000..231159a Binary files /dev/null and b/help/en_US/scilab_en_US_help/ScilabWarning.png differ diff --git a/help/en_US/scilab_en_US_help/bilateralFilter.html b/help/en_US/scilab_en_US_help/bilateralFilter.html new file mode 100644 index 0000000..f25b4d8 --- /dev/null +++ b/help/en_US/scilab_en_US_help/bilateralFilter.html @@ -0,0 +1,92 @@ + + + bilateralFilter + + + +
+ + + + +
+ << FOSSEE Image Processing Toolbox + + + FOSSEE Image Processing Toolbox + + + blend >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > bilateralFilter + +

+

bilateralFilter

+

Applies the bilateral filter to an image

+ + +

Calling Sequence

+
image = imread('path of image')
+out = bilateralFilter(image, d, sigmaColor, sigmaSpace)
+ +

Parameters

+
image : +

source image

+
d : +

Diameter of each pixel neighborhood that is used during filtering

+
sigmaColor : +

Filter sigma in the color space

+
sigmaSpace : +

Filter sigma in the coordinate space

+ +

Description

+

bilateralFilter can reduce unwanted noise very well while keeping edges fairly sharp. +A larger value of the sigmaColor parameter means that farther colors within the pixel neighborhood will be mixed together. +A larger value of the sigmaSpace parameter means that farther pixels will influence each other as long as their colors are close enough. +It is recommended to use d=5 for real-time applications. +For simplicity, you can set the 2 sigma values to be the same.

+

+ +

Examples

+
img=imread('images/lena.jpeg');
+d=5;
+sigmaColor=150;
+sigmaSpace=150;
+out=bilateralFilter(image, d, sigmaColor, sigmaSpace);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << FOSSEE Image Processing Toolbox + + + FOSSEE Image Processing Toolbox + + + blend >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/blend.html b/help/en_US/scilab_en_US_help/blend.html new file mode 100644 index 0000000..ba6127a --- /dev/null +++ b/help/en_US/scilab_en_US_help/blend.html @@ -0,0 +1,89 @@ + + + blend + + + +
+ + + + +
+ << bilateralFilter + + + FOSSEE Image Processing Toolbox + + + dilate >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > blend + +

+

blend

+

Blends two images according to corresponding weights given by the user

+ + +

Calling Sequence

+
out = blend(img1,img2,w1,w2)
+ +

Parameters

+
img1 : +

first image

+
img2 : +

second image

+
w1 : +

a number between 1 and 100 denoting the proportion of the first image in the output

+
w2 : +

a number between 1 and 100 denoting the proportion of the second image in the output

+ +

Description

+

out = blend(img1,img2,w1,w2) returns a blended image which has size equal to that of first image. +Both the images are resized to same dimensions before blending the images. +Note that the weights are in percentage.

+

+ +

Examples

+
w1=40;
+w2=60;
+img1=imread('images/lena.jpg');
+img2=imread('images/monkey.jpg');
+out=blend(img1,img2,w1,w2);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << bilateralFilter + + + FOSSEE Image Processing Toolbox + + + dilate >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/c_code.css b/help/en_US/scilab_en_US_help/c_code.css new file mode 100644 index 0000000..948d2ee --- /dev/null +++ b/help/en_US/scilab_en_US_help/c_code.css @@ -0,0 +1,54 @@ +.ccomment { + font-style: italic; + color: #b22222 +} + +.cdefault { + font-style: normal; + color: #000000 +} + +.copenclose { + font-style: normal; + color: #000000 +} + +.coperator { + font-style: normal; + color: #000000 +} + +.cstring { + font-style: normal; + color: #a6557a +} + +.ctype { + font-style: normal; + color: #55a655 +} + +.cpreprocessor { + font-style: normal; + color: #9965a6 +} + +.cid { + font-style: normal; + color: #000000 +} + +.ckeyword { + font-style: normal; + color: #ad3ff2 +} + +.cmodifier { + font-style: normal; + color: #ad3ff2 +} + +.cnumber { + font-style: normal; + color: #008b8b +} diff --git a/help/en_US/scilab_en_US_help/dilate.html b/help/en_US/scilab_en_US_help/dilate.html new file mode 100644 index 0000000..5fff551 --- /dev/null +++ b/help/en_US/scilab_en_US_help/dilate.html @@ -0,0 +1,88 @@ + + + dilate + + + +
+ + + + +
+ << blend + + + FOSSEE Image Processing Toolbox + + + gaussianblur >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > dilate + +

+

dilate

+

Dilates an image

+ + +

Calling Sequence

+
input_image=imread('path of the image')
+out = dilate(input_image,actualkernel,anchor_x,anchor_y,iteration)
+ +

Parameters

+
input_image : +

source image

+
actualkernel : +

structuring element used for dilation

+
anchor_x : +

x-coordinate of the anchor within the kernel (default is -1)

+
anchor_y : +

y-coordinate of the anchor within the kernel (default is -1)

+
iteration : +

number of times dilation is applied

+ +

Description

+

The function dilates the source image using the specified structuring element(actualkernel) that determines the shape of a pixel neighborhood

+

+ +

Examples

+
img = imread('images/lena.jpg');
+actualkernel=[1 1 1;1 1 1;1 1 1];
+out = dilate(img,actualkernel,-1,-1,1);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << blend + + + FOSSEE Image Processing Toolbox + + + gaussianblur >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/gaussianblur.html b/help/en_US/scilab_en_US_help/gaussianblur.html new file mode 100644 index 0000000..b4e89cf --- /dev/null +++ b/help/en_US/scilab_en_US_help/gaussianblur.html @@ -0,0 +1,87 @@ + + + gaussianblur + + + +
+ + + + +
+ << dilate + + + FOSSEE Image Processing Toolbox + + + getTextSize >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > gaussianblur + +

+

gaussianblur

+

Blurs an image using a Gaussian filter

+ + +

Calling Sequence

+
inputImage = imread('path of the image')
+outputImg = gaussianblur(inputImage,ksize_height,ksize_width,sigmaX,sigmaY)
+ +

Parameters

+
inputImage : +

source image

+
ksize_height : +

Gaussian kernel height. It must be positive and odd.

+
ksize_width : +

Gaussian kernel width. It must be positive and odd.

+
sigmaX : +

Gaussian kernel standard deviation in X direction.

+
sigmaY : +

Gaussian kernel standard deviation in Y direction.

+ +

Description

+

The function convolves the source image with the specified Gaussian kernel.

+

+ +

Examples

+
inputImage = imread('images/lena.jpg');
+outputImg = gaussianblur(inputaImage,5,5,1,1);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << dilate + + + FOSSEE Image Processing Toolbox + + + getTextSize >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/getTextSize.html b/help/en_US/scilab_en_US_help/getTextSize.html new file mode 100644 index 0000000..859ff5b --- /dev/null +++ b/help/en_US/scilab_en_US_help/getTextSize.html @@ -0,0 +1,86 @@ + + + getTextSize + + + +
+ + + + +
+ << gaussianblur + + + FOSSEE Image Processing Toolbox + + + getgaussiankernel >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > getTextSize + +

+

getTextSize

+

Calculates the width and height of a text string

+ + +

Calling Sequence

+
[textSize,baseLine]= getTextSize(inputtext,fontface,fontscale,thickness)
+ +

Parameters

+
inputtext : +

Input text string

+
fontface : +

Font type

+
fontscale : +

Font scale factor that is multiplied by the font-specific base size

+
thickness : +

Thickness of the lines used to draw a text

+
textSize : +

Output parameter- The size of a box that contains the specified text

+
baseLine : +

Output parameter- y-coordinate of the baseline relative to the bottom-most text point

+ +

Description

+

The function getTextSize calculates and returns the size of a box that contains the specified text

+ +

Examples

+
[textSize,baseLine]= getTextSize('helloall','FONT_HERSHEY_PLAIN',1,1);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << gaussianblur + + + FOSSEE Image Processing Toolbox + + + getgaussiankernel >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/getgaussiankernel.html b/help/en_US/scilab_en_US_help/getgaussiankernel.html new file mode 100644 index 0000000..64d51a0 --- /dev/null +++ b/help/en_US/scilab_en_US_help/getgaussiankernel.html @@ -0,0 +1,81 @@ + + + getgaussiankernel + + + +
+ + + + +
+ << getTextSize + + + FOSSEE Image Processing Toolbox + + + imwarp >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > getgaussiankernel + +

+

getgaussiankernel

+

Returns Gaussian filter coefficients

+ + +

Calling Sequence

+
output = getgaussiankernel(ksize, sigma, ktype)
+ +

Parameters

+
ksize : +

Aperture size. It should be odd and positive.

+
sigma : +

Gaussian standard deviation.

+
ktype : +

Type of filter coefficients. It can be CV_32f or CV_64F.

+ +

Description

+

The function computes and returns the ksize x 1 matrix of Gaussian filter coefficients.

+

+ +

Examples

+
output = getgaussiankernel(3,1,'CV_32F');
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << getTextSize + + + FOSSEE Image Processing Toolbox + + + imwarp >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/imwarp.html b/help/en_US/scilab_en_US_help/imwarp.html new file mode 100644 index 0000000..2ae7fed --- /dev/null +++ b/help/en_US/scilab_en_US_help/imwarp.html @@ -0,0 +1,84 @@ + + + imwarp + + + +
+ + + + +
+ << getgaussiankernel + + + FOSSEE Image Processing Toolbox + + + knn >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > imwarp + +

+

imwarp

+

The function applies an affine transformation to the input image.

+ + +

Calling Sequence

+
img=imread('path of the image')
+output=imwarp(img,transformation_matrix)
+ +

Parameters

+
img : +

Input image

+
m : +

It is the 2X3 transformation matrix.

+ +

Description

+

The function warpAffine transforms the source image using the specified matrix: +dst(x,y) = src( ( m(1,1)*x + m(1,2)*y + m(1,3) ) , ( m(2,1)*x + m(2,2)*y + m(2,3) ) )

+

+ +

Examples

+
stacksize('max');
+img=imread('images/lena.jpg');
+m=[1 2 0;2 1 0];
+out=imwarp(img,m);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << getgaussiankernel + + + FOSSEE Image Processing Toolbox + + + knn >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/index.html b/help/en_US/scilab_en_US_help/index.html new file mode 100644 index 0000000..8d28727 --- /dev/null +++ b/help/en_US/scilab_en_US_help/index.html @@ -0,0 +1,139 @@ + + + + + + +
+ + + + +
+ + + + + +
+
+
+ + + + +

+

FOSSEE Image Processing Toolbox

+ +
+ +
+ + + + + + +
Report an issue
+ + + + + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/jhelpidx.xml b/help/en_US/scilab_en_US_help/jhelpidx.xml new file mode 100644 index 0000000..aa5a66e --- /dev/null +++ b/help/en_US/scilab_en_US_help/jhelpidx.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/help/en_US/scilab_en_US_help/jhelpmap.jhm b/help/en_US/scilab_en_US_help/jhelpmap.jhm new file mode 100644 index 0000000..2c8d6f4 --- /dev/null +++ b/help/en_US/scilab_en_US_help/jhelpmap.jhm @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/help/en_US/scilab_en_US_help/jhelpset.hs b/help/en_US/scilab_en_US_help/jhelpset.hs new file mode 100644 index 0000000..7c93217 --- /dev/null +++ b/help/en_US/scilab_en_US_help/jhelpset.hs @@ -0,0 +1,28 @@ + + + +FOSSEE Image Processing Toolbox + +top + + + +TOC + +javax.help.TOCView +jhelptoc.xml + + +Index + +javax.help.IndexView +jhelpidx.xml + + +Search + +javax.help.SearchView +JavaHelpSearch + + \ No newline at end of file diff --git a/help/en_US/scilab_en_US_help/jhelptoc.xml b/help/en_US/scilab_en_US_help/jhelptoc.xml new file mode 100644 index 0000000..cea25f3 --- /dev/null +++ b/help/en_US/scilab_en_US_help/jhelptoc.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/help/en_US/scilab_en_US_help/knn.html b/help/en_US/scilab_en_US_help/knn.html new file mode 100644 index 0000000..7592e81 --- /dev/null +++ b/help/en_US/scilab_en_US_help/knn.html @@ -0,0 +1,100 @@ + + + knn + + + +
+ + + + +
+ << imwarp + + + FOSSEE Image Processing Toolbox + + + laplacian >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > knn + +

+

knn

+

Finds the k nearest neighbours of the query point q, in the dataset f

+ + +

Calling Sequence

+
out = knn(q,f,k)
+out = knn(q,f,k,algo_type)
+ +

Parameters

+
q : +

a row vector containing the query point

+
f : +

f is the set of data points and the number of columns in f should be same as that of q to match point dimensionality

+
k : +

a positive integer specifying the number of nearest neighbours in f for the query point p.

+
algo_type : +

a integer between 1 and 4 (both inclusive) specifying the algorithm to be used for the knn search.

+ +

Description

+

out = knn(q,f,k) returns a 2xk matrix . +The first row of out contains the indices of the k nearest points in the dataset(f) from the query point. +The second row contains the corresponding distances(squared euclidean distance). +algo_type 1 corresponds to linear search algorithm. +algo_type 2 corresponds to search using a set of randomized kd-trees. +algo_type 3 corresponds to search using hierarchical k-means tree. +algo_type 4 corresponds to combined search using both kd-trees and k-means algorithm.

+

+ +

Examples

+
q=[1];
+f=[1;2;10;-1];
+k=3;
+out=knn(q,f,k);
+ +

Examples

+
q=[1,1];
+f=[1,3;2,0;10,10;-1,1];
+k=3;
+algo_type=2;
+out=knn(q,f,k,algo_type);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << imwarp + + + FOSSEE Image Processing Toolbox + + + laplacian >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/laplacian.html b/help/en_US/scilab_en_US_help/laplacian.html new file mode 100644 index 0000000..961f625 --- /dev/null +++ b/help/en_US/scilab_en_US_help/laplacian.html @@ -0,0 +1,87 @@ + + + laplacian + + + +
+ + + + +
+ << knn + + + FOSSEE Image Processing Toolbox + + + medianblur >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > laplacian + +

+

laplacian

+

The function calculates laplacian of an image

+ + +

Calling Sequence

+
inputImage = imread('path of the source image')
+outputImg = laplacian(inputImage , depth , ksize , scale, delta)
+ +

Parameters

+
inputImage : +

source image

+
depth : +

Depth of the output image

+
ksize : +

Aperture size

+
scale : +

Optional scale factor for the computed Laplacian values

+
delta : +

This value is added to each pixel in the output image

+ +

Description

+

Laplacian Operator is also a derivative operator which is used to find edges in an image.

+

+ +

Examples

+
img=imread('images/lena.jpg');
+out=laplacian(img,'CV_8U',3,1,0);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << knn + + + FOSSEE Image Processing Toolbox + + + medianblur >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/medianblur.html b/help/en_US/scilab_en_US_help/medianblur.html new file mode 100644 index 0000000..222a083 --- /dev/null +++ b/help/en_US/scilab_en_US_help/medianblur.html @@ -0,0 +1,81 @@ + + + medianblur + + + +
+ + + + +
+ << laplacian + + + FOSSEE Image Processing Toolbox + + + montage >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > medianblur + +

+

medianblur

+

Blurs an image using the median filter.

+ + +

Calling Sequence

+
inputImage = imread('path of the image')
+outputImg = medianblur(inputImage,ksize)
+ +

Parameters

+
inputImage : +

source image

+
ksize : +

aperture linear size; it must be odd and greater than 1

+ +

Description

+

The function smoothes an image using the median filter with the ksize x ksize aperture.

+

+ +

Examples

+
inputImage = imread('images/lena.jpg');
+ouputImg = medianblur(inputImage,3);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << laplacian + + + FOSSEE Image Processing Toolbox + + + montage >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/montage.html b/help/en_US/scilab_en_US_help/montage.html new file mode 100644 index 0000000..4f0c158 --- /dev/null +++ b/help/en_US/scilab_en_US_help/montage.html @@ -0,0 +1,88 @@ + + + montage + + + +
+ + + + +
+ << medianblur + + + FOSSEE Image Processing Toolbox + + + pana >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > montage + +

+

montage

+

Creates a montage of same sized input images

+ + +

Calling Sequence

+
out = montage(1,1,img1)
+out = montage(1,2,img1,img2)
+out = montage(3,1,img1,img2,img3)
+out = montage(2,2,img1,img2.img3,img4)
+out = montage(1,5,img1,img2,img3,img4,img5)
+out = montage(3,2,img1,img2,img3,img4,img5,img6)
+ +

Parameters

+
rows : +

number of rows in montage

+
cols : +

number of columns in montage

+
varargin : +

variable number of input images

+ +

Description

+

The function creates a montage with the list of images. Montage is created row-wise with images taken in order from the list. Note that the following condition should hold true:- no_of_rows*no_of_cols >= no_of_images > (no_of_rows-1)*(no_of_cols)

+

+ +

Examples

+
img1=imread('images/lena.jpg');
+img2=imread('images/monkey.jpeg');
+out=montage(1,2,img1,img2);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << medianblur + + + FOSSEE Image Processing Toolbox + + + pana >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/pana.html b/help/en_US/scilab_en_US_help/pana.html new file mode 100644 index 0000000..584d4d2 --- /dev/null +++ b/help/en_US/scilab_en_US_help/pana.html @@ -0,0 +1,117 @@ + + + pana + + + +
+ + + + +
+ << montage + + + FOSSEE Image Processing Toolbox + + + pclknn >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > pana + +

+

pana

+

Creates the output panorama image using two or more images

+ + +

Calling Sequence

+
stacksize('max')
+img1=imread('path of the image file')
+img2=imread('path of the image file')
+out = pana(img1,img2)
+img3=imread('path of the image file')
+out = pana(img1,img2,img3)
+img4=imread('path of the image file')
+out = pana(img1,img2,img3,img4)
+img5=imread('path of the image file')
+out = pana(img1,img2,img3,img4,img5)
+img6=imread('path of the image file')
+out = pana(img1,img2,img3,img4,img5,img6)
+ +

Parameters

+
img1 : +

an image

+
img2 : +

an image

+
img3 : +

an image

+
img4 : +

an image

+
img5 : +

an image

+
img6 : +

an image

+ +

Description

+

The images pass through a stiching pipeline before the final panorama is formed. +Features are extracted from each image and matching is done on two consecutive images to ensure the continuity in images. +After this camera parameters are estimated which is required to do particular type of warping. +After warping is done exposure is compensated in all images so as to get a uniform exposure throughout the panaroma. +Seam estimation is done next to get the exact portions of images to be blended. +Finally, the images are blended to form the panorama.

+

+ +

Examples

+
stacksize('max');
+img1=imread('campus_017.jpg');
+img2=imread('campus_016.jpg');
+img3=imread('campus_015.jpg');
+img4=imread('campus_014.jpg');
+img5=imread('campus_013.jpg');
+img6=imread('campus_012.jpg');
+out=pana(img1,img2,img3,img4,img5,img6);
+ +

Examples

+
stacksize('max');
+a=imread('s1.jpg');
+b=imread('s2.jpg');
+c=imread('s3.jpg');
+y=pana(a,b,c);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << montage + + + FOSSEE Image Processing Toolbox + + + pclknn >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/pclknn.html b/help/en_US/scilab_en_US_help/pclknn.html new file mode 100644 index 0000000..2c53205 --- /dev/null +++ b/help/en_US/scilab_en_US_help/pclknn.html @@ -0,0 +1,87 @@ + + + pclknn + + + +
+ + + + +
+ << pana + + + FOSSEE Image Processing Toolbox + + + seamfind >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > pclknn + +

+

pclknn

+

Finds the k nearest neighbours of the query point q, in the point cloud.

+ + +

Calling Sequence

+
pcloud=pcread('path of point cloud file')
+out = pclknn(pcloud,q,k)
+ +

Parameters

+
pcloud : +

a point cloud structure read using pcread function

+
q : +

a three dimensional query point

+
k : +

a positive integer specifying the number of nearest neighbours in pcloud for the query point p.

+ +

Description

+

out = knn(q,f,k) returns a 2xk matrix . +The first row of out contains the indices of the k nearest points in the dataset(f) from the query point. +The second row contains the corresponding distances(squared euclidean distance).

+

+ +

Examples

+
q=[0 0 0];
+data=pcread('data/cube.ply')
+k=3;
+out=pclknn(data,q,k);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << pana + + + FOSSEE Image Processing Toolbox + + + seamfind >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/scilab_code.css b/help/en_US/scilab_en_US_help/scilab_code.css new file mode 100644 index 0000000..658f42e --- /dev/null +++ b/help/en_US/scilab_en_US_help/scilab_code.css @@ -0,0 +1,96 @@ +.scilabcomment { + font-style: italic; + color: #01a801 +} + +.scilabdefault { + font-style: normal; + color: #000000 +} + +.scilabspecial { + font-style: normal; + color: #ffaa00 +} + +.scilabconstants { + font-style: normal; + color: #da70d6 +} + +.scilaboperator { + font-style: normal; + color: #5c5c5c +} + +.scilabnumber { + font-style: normal; + color: #bc8f8f +} + +.scilabfkeyword { + font-style: normal; + color: #b01813 +} + +.scilabskeyword { + font-style: normal; + color: #a020f0 +} + +.scilabckeyword { + font-style: normal; + color: #5f9ea0 +} + +.scilabcommand { + font-style: normal; + color: #32b9b9 +} + +.scilabmacro { + font-style: normal; + color: #ae5cb0 +} + +a.scilabcommand { + font-style: normal; + text-decoration: underline; + color: #32b9b9 +} + +a.scilabmacro { + font-style: normal; + text-decoration: underline; + color: #ae5cb0 +} + +.scilabstring { + font-style: normal; + color: #bc8f8f +} + +.scilabid { + font-style: normal; + color: #000000 +} + +.scilabinputoutputargs { + font-weight: bold; + color: #834310 +} + +.scilabfunctionid { + font-weight: bold; + color: #000000 +} + +.scilabfield { + font-style: normal; + color: #aaaaaa +} + +.scilabopenclose { + font-style: normal; + color: #4a55db +} diff --git a/help/en_US/scilab_en_US_help/seamfind.html b/help/en_US/scilab_en_US_help/seamfind.html new file mode 100644 index 0000000..01414ac --- /dev/null +++ b/help/en_US/scilab_en_US_help/seamfind.html @@ -0,0 +1,103 @@ + + + seamfind + + + +
+ + + + +
+ << pclknn + + + FOSSEE Image Processing Toolbox + + + warp >> + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > seamfind + +

+

seamfind

+

Estimates the seams in input images (which are going to be stitched to form a panaroma)

+ + +

Calling Sequence

+
stacksize('max')
+img1=imread('path of the image file')
+img2=imread('path of the image file')
+out = seamfind(i,img1,img2)
+img3=imread('path of the image file')
+out = seamfind(i,img1,img2,img3)
+img4=imread('path of the image file')
+out = seamfind(i,img1,img2,img3,img4)
+img5=imread('path of the image file')
+out = seamfind(i,img1,img2,img3,img4,img5)
+img6=imread('path of the image file')
+out = seamfind(i,img1,img2,img3,img4,img5,img6)
+ +

Parameters

+
index : +

index of the estimated image required by the user. It should be between 1 and number of input images.

+
img1 : +

an image

+
img2 : +

an image

+
img3 : +

an image

+
img4 : +

an image

+
img5 : +

an image

+
img6 : +

an image

+ +

Description

+

This function estimates the seams in images which are going to be blended to form a panaroma image. The output of the function is the binary and of the updated mask and the 'index'th image.

+

+ +

Examples

+
stacksize('max');
+img1=imread('images/campus_017.jpg');
+img2=imread('images/campus_016.jpg');
+out=seamfind(1,img1,img2);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << pclknn + + + FOSSEE Image Processing Toolbox + + + warp >> + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/section_363e00d7df9144542914e8298d527a54.html b/help/en_US/scilab_en_US_help/section_363e00d7df9144542914e8298d527a54.html new file mode 100644 index 0000000..2ab573f --- /dev/null +++ b/help/en_US/scilab_en_US_help/section_363e00d7df9144542914e8298d527a54.html @@ -0,0 +1,139 @@ + + + + + + +
+ + + + +
+ + + FOSSEE Image Processing Toolbox + + + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox + +

+

FOSSEE Image Processing Toolbox

+ +
+ +
+ + + + + + +
Report an issue
+ + + FOSSEE Image Processing Toolbox + + + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/style.css b/help/en_US/scilab_en_US_help/style.css new file mode 100644 index 0000000..0fe8923 --- /dev/null +++ b/help/en_US/scilab_en_US_help/style.css @@ -0,0 +1,350 @@ +body { + color:#000000; + background-color:#ffffff; + font-family:sans-serif; + font-size:100%; + margin:5px; + padding:0; + background : url("/img/body.png"); + background-repeat : repeat-x; +} + +.para { + padding-left: 10px; +} + +.refname { + color: #ff6c0a; +} +.refpurpose { + font-size: 110%; +} + +.synopsis { + border: 1px solid black; + width:80%; + padding: 0.5em; +} + +.editbar { + text-align: right; +} + +.term { + color:#800000; + font-size:100%; +} + +h3 { + color: #000063; + font-weight: bold; + font-size:130%; + margin-bottom: 10px; +} + +.programlisting { + font-family: monospace; + font-size: 100%; + background-color:#EEEEFF; + border-color:#CCCCCC; + border-style:solid; + border-width:2px medium; + width:80%; + color:#333333; + line-height:120%; + padding:10px; +} + +.literal { + font-family: monospace; + font-size: 100%; +} + +.option { + font-family: monospace; + font-style: italic; + font-size: 100%; +} + +.command { + font-family: monospace; + font-size: 100%; + color: #32b9b9; +} + +.function { + font-family: monospace; + font-size: 100%; + color: #32b9b9; +} + +.varname { + font-family: monospace; + font-weight: bold; + font-size: 100%; +} + +.constant { + font-family: monospace; + font-size: 100%; + color: #da70d6; +} + +a { + color: blue; + text-decoration:none; +} + +a:hover { + text-decoration:underline; +} + +.itemizedlist { + list-style-type: disk; +} + +.inline-list li { + display: inline; + list-style-type: disk; +} + +.vert-list { + list-style-type: disk; +} + +pre { + margin-bottom: 0px; + margin-top: 0px; +} + +.leftpart { + position:absolute; + float:left; + width: 186px; + padding: 5px; + font-size: smaller; +} + +.content { + margin-top: 100px; + margin-left: 196px +} + +.container { + margin: 0 auto; + width:1024px; +} + +ul.toc li.list-active { + list-style-type:disc; + font-weight:bold; +} + +ul.toc li.parent { + font-size: 115%; + padding: 5px 0px 5px 11px; + border-bottom: 1px solid #cccccc; + margin-bottom: 5px; +} + +ul.toc li.root { + font-size: 135%; + padding: 5px 0px 5px 11px; + border-bottom: 1px solid #cccccc; + margin-bottom: 5px; +} + +ul.toc li { + font-size: 85%; + margin: 1px 0 1px 1px; + padding: 1px 0 1px 11px; + background-repeat: no-repeat; + background-position: center left; + list-style-type: circle; +} + +.next { + float:right; + text-align: right; +} + +.center { + text-align: center; +} + +.screen { + font-family: monospace; + font-size: 100%; + background-color:#FFFFFF; + border-color:#CCCCCC; + border-style:solid; + border-width:2px medium; + width:80%; + color:#333333; + line-height:120%; + padding:10px; +} + +/* Top and bottom navigation controls on manual pages --------------------- */ +div.manualnavbar { + background-color: #E0E0E0; + color: inherit; + padding: 4px; + margin-bottom: 10px; +} +div.manualnavbar .prev { + padding-right: 4px; +} +div.manualnavbar .next { + text-align: right; + padding-left: 4px; +} + +div.manualnavbar .top { + text-align: center; + display: block; +} + +div.manualnavbar hr { + color: #cccccc; + background-color: #cccccc; +} + +/* Footer navigation area ------------------------------------------------- */ + +#pagefooter { + position: relative; + font-size: 75%; + color: inherit; + background-color: #e5e5e5; + width: 100%; +} + +#pagefooterleft { + top: 0px; + left: 0px; + padding: 6px; + margin-right: 30%; +} + +#pagefooterright { + text-align: right; + margin-left: 50%; + padding: 6px; +} +#footnav { + color: inherit; + background-color: #9999cc; + border-width: 1px 0px; + border-color: #333366; + border-style: solid; + text-align: right; + padding-right: 6px; +} + + + + + #global{ +/* width: 90%; */ + max-width: 90em; +/* min-width: 850px; */ + margin-left: auto; + margin-right: auto; + } + + #myHeader{ + background-color:#000000; + color:white; + margin-bottom : 10px; + position : relative; + text-align: center; +/* width : 1024px;*/ + height : 100px; + padding-left : 20px; + background : url("http://atoms.scilab.org/images/homepage/cadre_head.png"); + background-repeat : no-repeat; + background-position : 0px 0px; + + } + + #myFooter{ + background-color:#E5E5E5; + font-color:black; +/* width: 90%;*/ + max-width: 90em; +/* min-width: 850px; + margin-left: 5%; + margin-right: 5%;*/ + margin-top:10px; + padding:10px; + } + + #mainArea{ + width: 100%; + overflow: hidden; + } + + #myLeftArea{ + color:white; + float: left; + width: 180px; + padding:5px; + } + + #myMiddleArea{ + color:black; + margin-left: 200px; + padding: 10px 20px; + } + + #myRightArea{ + color:white; + float: right; + width: 200px; + padding: 12px 20px; + } + + +div#cadre_head +{ + position : relative; + text-align: center; +/* width : 1024px;*/ + height : 100px; + padding-left : 20px; + background : url("/img/cadre_head.png"); + background-repeat : no-repeat; + background-position : 0px 0px; +} + + +div#slogan{ + position: absolute; + top : 50px; + left:251px; + color:#0000AA; + font: 120%, Georgia,Serif; +} +div#cadre_help +{ + position: absolute; + top:45px; + right:0px; + font-size:0.8em; + color:#0000AA; +} + +table.revhistory +{ + width:80%; + border-color:#CCCCCC; + border-style:solid; + border-width:2px medium; + margin-bottom: 10px; +} + +table.revhistory tr.title td +{ + background-color: #9999CC; +} \ No newline at end of file diff --git a/help/en_US/scilab_en_US_help/warp.html b/help/en_US/scilab_en_US_help/warp.html new file mode 100644 index 0000000..bf21e30 --- /dev/null +++ b/help/en_US/scilab_en_US_help/warp.html @@ -0,0 +1,84 @@ + + + warp + + + +
+ + + + +
+ << seamfind + + + FOSSEE Image Processing Toolbox + + + +
+
+
+ + + + FOSSEE Image Processing Toolbox >> FOSSEE Image Processing Toolbox > warp + +

+

warp

+

This function maps an image onto a unit sphere located at the origin (center of the image).

+ + +

Calling Sequence

+
stacksize('max')
+img1=imread('path of the image file')
+img2=imread('path of the image file')
+[out1,out2] = warp(img1,img2)
+ +

Parameters

+
img1 : +

an image

+
img2 : +

an image

+ +

Description

+

The function takes two input images which are part of a panoromic image and outputs the respective masks to be applied on the input images to get a spherical oriented image. +This is useful in creating a 360 panaroma image.

+

+ +

Examples

+
stacksize('max');
+img1=imread('images/campus_017.jpg');
+img2=imread('images/campus_016.jpg');
+[out1,out2]=warp(img1,img2);
+ +

Authors

+
+
+ +
+ + + + + + +
Report an issue
+ << seamfind + + + FOSSEE Image Processing Toolbox + + + +
+
+
+ + diff --git a/help/en_US/scilab_en_US_help/xml_code.css b/help/en_US/scilab_en_US_help/xml_code.css new file mode 100644 index 0000000..9e4c27f --- /dev/null +++ b/help/en_US/scilab_en_US_help/xml_code.css @@ -0,0 +1,94 @@ +.xmlcomment { + font-style: italic; + color: #01a801 +} + +.xmldefault { + font-style: normal; + color: #000000 +} + +.xmlentity { + font-style: normal; + color: #ffaa00 +} + +.xmlopeninstr { + font-style: normal; + color: #000000 +} + +.xmlcloseinstr { + font-style: normal; + color: #000000 +} + +.xmlinstrname { + font-style: normal; + color: #9965a6 +} + +.xmllowtag { + font-style: normal; + color: #000000 +} + +.xmltagname { + font-style: normal; + color: #0303ff +} + +.xmllowclose { + font-style: normal; + color: #000000 +} + +.xmlopencomment { + font-style: italic; + color: #01a801 +} + +.xmlcommentend { + font-style: italic; + color: #01a801 +} + +.xmlcomment { + font-style: italic; + color: #01a801 +} + +.xmlopencdata { + font-style: normal; + color: #c45555 +} + +.xmlcdataend { + font-style: normal; + color: #c45555 +} + +.xmlcdata { + font-style: normal; + color: #000000 +} + +.xmlattributename { + font-style: normal; + color: #9965a6 +} + +.xmlequal { + font-style: normal; + color: #000000 +} + +.xmlattributevalue { + font-style: normal; + color: #973964 +} + +.xmlautoclose { + font-style: normal; + color: #000000 +} diff --git a/help/en_US/seamfind.xml b/help/en_US/seamfind.xml new file mode 100644 index 0000000..f85801f --- /dev/null +++ b/help/en_US/seamfind.xml @@ -0,0 +1,88 @@ + + + + + + + + seamfind + Estimates the seams in input images (which are going to be stitched to form a panaroma) + + + + + Calling Sequence + + stacksize('max') + img1=imread('path of the image file') + img2=imread('path of the image file') + out = seamfind(i,img1,img2) + img3=imread('path of the image file') + out = seamfind(i,img1,img2,img3) + img4=imread('path of the image file') + out = seamfind(i,img1,img2,img3,img4) + img5=imread('path of the image file') + out = seamfind(i,img1,img2,img3,img4,img5) + img6=imread('path of the image file') + out = seamfind(i,img1,img2,img3,img4,img5,img6) + + + + + + Parameters + + index : + index of the estimated image required by the user. It should be between 1 and number of input images. + img1 : + an image + img2 : + an image + img3 : + an image + img4 : + an image + img5 : + an image + img6 : + an image + + + + + Description + +This function estimates the seams in images which are going to be blended to form a panaroma image. The output of the function is the binary and of the updated mask and the 'index'th image. + + + + + + + Examples + + + + + Authors + + M Avinash Reddy + + + diff --git a/help/en_US/warp.xml b/help/en_US/warp.xml new file mode 100644 index 0000000..1e4a518 --- /dev/null +++ b/help/en_US/warp.xml @@ -0,0 +1,71 @@ + + + + + + + + warp + This function maps an image onto a unit sphere located at the origin (center of the image). + + + + + Calling Sequence + + stacksize('max') + img1=imread('path of the image file') + img2=imread('path of the image file') + [out1,out2] = warp(img1,img2) + + + + + + Parameters + + img1 : + an image + img2 : + an image + + + + + Description + +The function takes two input images which are part of a panoromic image and outputs the respective masks to be applied on the input images to get a spherical oriented image. +This is useful in creating a 360 panaroma image. + + + + + + + Examples + + + + + Authors + + M Avinash Reddy + + + diff --git a/images/1.jpeg b/images/1.jpeg new file mode 100644 index 0000000..0650e17 Binary files /dev/null and b/images/1.jpeg differ diff --git a/images/1.png b/images/1.png new file mode 100644 index 0000000..a1d4b3c Binary files /dev/null and b/images/1.png differ diff --git a/images/2.jpeg b/images/2.jpeg new file mode 100644 index 0000000..d5a6888 Binary files /dev/null and b/images/2.jpeg differ diff --git a/images/campus_012.jpg b/images/campus_012.jpg new file mode 100644 index 0000000..909109b Binary files /dev/null and b/images/campus_012.jpg differ diff --git a/images/campus_013.jpg b/images/campus_013.jpg new file mode 100644 index 0000000..5568c6a Binary files /dev/null and b/images/campus_013.jpg differ diff --git a/images/campus_014.jpg b/images/campus_014.jpg new file mode 100644 index 0000000..8a17067 Binary files /dev/null and b/images/campus_014.jpg differ diff --git a/images/campus_015.jpg b/images/campus_015.jpg new file mode 100644 index 0000000..d04e729 Binary files /dev/null and b/images/campus_015.jpg differ diff --git a/images/campus_016.jpg b/images/campus_016.jpg new file mode 100644 index 0000000..91cc629 Binary files /dev/null and b/images/campus_016.jpg differ diff --git a/images/campus_017.jpg b/images/campus_017.jpg new file mode 100644 index 0000000..3a5ae8d Binary files /dev/null and b/images/campus_017.jpg differ diff --git a/images/lena.jpeg b/images/lena.jpeg new file mode 100644 index 0000000..21d5012 Binary files /dev/null and b/images/lena.jpeg differ diff --git a/images/lena.jpg b/images/lena.jpg new file mode 100644 index 0000000..21d5012 Binary files /dev/null and b/images/lena.jpg differ diff --git a/images/monkey.jpeg b/images/monkey.jpeg new file mode 100644 index 0000000..c8f6cf7 Binary files /dev/null and b/images/monkey.jpeg differ diff --git a/images/mountain1.JPG b/images/mountain1.JPG new file mode 100644 index 0000000..5ed9f8e Binary files /dev/null and b/images/mountain1.JPG differ diff --git a/images/mountain2.JPG b/images/mountain2.JPG new file mode 100644 index 0000000..602e582 Binary files /dev/null and b/images/mountain2.JPG differ diff --git a/images/mountain3.JPG b/images/mountain3.JPG new file mode 100644 index 0000000..5f46070 Binary files /dev/null and b/images/mountain3.JPG differ diff --git a/images/taj1.jpeg b/images/taj1.jpeg new file mode 100644 index 0000000..79a08ef Binary files /dev/null and b/images/taj1.jpeg differ diff --git a/images/taj2.jpeg b/images/taj2.jpeg new file mode 100644 index 0000000..72e0524 Binary files /dev/null and b/images/taj2.jpeg differ diff --git a/images/thresh.jpg b/images/thresh.jpg new file mode 100644 index 0000000..11b2c6c Binary files /dev/null and b/images/thresh.jpg differ diff --git a/macros/bilateralFilter.bin b/macros/bilateralFilter.bin new file mode 100644 index 0000000..3c2e1e3 Binary files /dev/null and b/macros/bilateralFilter.bin differ diff --git a/macros/bilateralFilter.sci b/macros/bilateralFilter.sci new file mode 100644 index 0000000..2c5a7b3 --- /dev/null +++ b/macros/bilateralFilter.sci @@ -0,0 +1,51 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: Priyanka Hiranandani +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function new_image = bilateralFilter(image, d, sigmaColor, sigmaSpace) + //Applies the bilateral filter to an image + // + //Calling Sequence + //image = imread('path of image') + //out = bilateralFilter(image, d, sigmaColor, sigmaSpace) + // + //Parameters + //image : source image + //d : Diameter of each pixel neighborhood that is used during filtering + //sigmaColor : Filter sigma in the color space + //sigmaSpace : Filter sigma in the coordinate space + // + //Description + //bilateralFilter can reduce unwanted noise very well while keeping edges fairly sharp. + //A larger value of the sigmaColor parameter means that farther colors within the pixel neighborhood will be mixed together. + //A larger value of the sigmaSpace parameter means that farther pixels will influence each other as long as their colors are close enough. + //It is recommended to use d=5 for real-time applications. + //For simplicity, you can set the 2 sigma values to be the same. + // + //Examples + //img=imread('images/lena.jpeg'); + //d=5; + //sigmaColor=150; + //sigmaSpace=150; + //out=bilateralFilter(image, d, sigmaColor, sigmaSpace); + //Authors + // Priyanka Hiranandani + + image_list = mattolist(image) + + out = raw_bilateralfilter(image_list, d, sigmaColor, sigmaSpace) + + sz = size(out) + + for i = 1: sz + new_image(:, :, i) = out(i) + end + new_image=double(new_image) +endfunction diff --git a/macros/blend.bin b/macros/blend.bin new file mode 100644 index 0000000..2f03b68 Binary files /dev/null and b/macros/blend.bin differ diff --git a/macros/blend.sci b/macros/blend.sci new file mode 100644 index 0000000..e9f6892 --- /dev/null +++ b/macros/blend.sci @@ -0,0 +1,46 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: M Avinash Reddy & Manoj Sree Harsha +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [out]=blend(img1,img2,w1,w2) + //Blends two images according to corresponding weights given by the user + // + //Calling Sequence + //out = blend(img1,img2,w1,w2) + // + //Parameters + //img1 : first image + //img2 : second image + //w1 : a number between 1 and 100 denoting the proportion of the first image in the output + //w2 : a number between 1 and 100 denoting the proportion of the second image in the output + // + //Description + //out = blend(img1,img2,w1,w2) returns a blended image which has size equal to that of first image. + //Both the images are resized to same dimensions before blending the images. + //Note that the weights are in percentage. + // + //Examples + //w1=40; + //w2=60; + //img1=imread('images/lena.jpg'); + //img2=imread('images/monkey.jpg'); + //out=blend(img1,img2,w1,w2); + //Authors + // M Avinash Reddy , Manoj Sree Harsha + + i1=mattolist(img1) + i2=mattolist(img2) + res=raw_Blend(i1,i2,w1,w2) + channel=size(res) + for i = 1: channel + out(:,:,i) = (res(i)) + end + out=double(out) +endfunction diff --git a/macros/dilate.bin b/macros/dilate.bin new file mode 100644 index 0000000..bda27f6 Binary files /dev/null and b/macros/dilate.bin differ diff --git a/macros/dilate.sci b/macros/dilate.sci new file mode 100644 index 0000000..cc8d87e --- /dev/null +++ b/macros/dilate.sci @@ -0,0 +1,42 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: Sukul Bagai +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [out]=dilate(input_image,actualkernel,anchor_x,anchor_y,iteration) + //Dilates an image + // + //Calling Sequence + //input_image=imread('path of the image') + //out = dilate(input_image,actualkernel,anchor_x,anchor_y,iteration) + // + //Parameters + //input_image : source image + //actualkernel : structuring element used for dilation + //anchor_x : x-coordinate of the anchor within the kernel (default is -1) + //anchor_y : y-coordinate of the anchor within the kernel (default is -1) + //iteration : number of times dilation is applied + // + //Description + //The function dilates the source image using the specified structuring element(actualkernel) that determines the shape of a pixel neighborhood + // + //Examples + //img = imread('images/lena.jpg'); + //actualkernel=[1 1 1;1 1 1;1 1 1]; + //out = dilate(img,actualkernel,-1,-1,1); + //Authors + // Sukul Bagai + + input_image1=mattolist(input_image); + a=raw_dilate(input_image1,actualkernel,anchor_x,anchor_y,iteration); + dimension=size(a) + for i = 1:dimension + out(:,:,i)=a(i); + end +endfunction; diff --git a/macros/gaussianblur.bin b/macros/gaussianblur.bin new file mode 100644 index 0000000..44e5f62 Binary files /dev/null and b/macros/gaussianblur.bin differ diff --git a/macros/gaussianblur.sci b/macros/gaussianblur.sci new file mode 100644 index 0000000..5fd6204 --- /dev/null +++ b/macros/gaussianblur.sci @@ -0,0 +1,39 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: Sukul Bagai +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [outputImg]= gaussianblur(inputImage,ksize_height,ksize_width,sigmaX,sigmaY) + //Blurs an image using a Gaussian filter + // + //Calling Sequence + //inputImage = imread('path of the image') + //outputImg = gaussianblur(inputImage,ksize_height,ksize_width,sigmaX,sigmaY) + // + //Parameters + //inputImage : source image + //ksize_height : Gaussian kernel height. It must be positive and odd. + //ksize_width : Gaussian kernel width. It must be positive and odd. + //sigmaX : Gaussian kernel standard deviation in X direction. + //sigmaY : Gaussian kernel standard deviation in Y direction. + // + //Description + //The function convolves the source image with the specified Gaussian kernel. + // + //Examples + //inputImage = imread('images/lena.jpg'); + //outputImg = gaussianblur(inputaImage,5,5,1,1); + //Authors + // Sukul Bagai + inputList=mattolist(inputImage); + outputList=raw_gaussianblur(inputList,ksize_height,ksize_width,sigmaX,sigmaY); + for i=1:size(outputList) + outputImg(:,:,i)=outputList(i) + end +endfunction diff --git a/macros/getTextSize.bin b/macros/getTextSize.bin new file mode 100644 index 0000000..6f1b776 Binary files /dev/null and b/macros/getTextSize.bin differ diff --git a/macros/getTextSize.sci b/macros/getTextSize.sci new file mode 100644 index 0000000..3d4355e --- /dev/null +++ b/macros/getTextSize.sci @@ -0,0 +1,33 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: Sukul Bagai , Abhilasha Sancheti +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [textSize,baseLine]= getTextSize(inputtext,fontface,fontscale,thickness) + //Calculates the width and height of a text string + // + //Calling Sequence + //[textSize,baseLine]= getTextSize(inputtext,fontface,fontscale,thickness) + // + //Parameters + //inputtext : Input text string + //fontface : Font type + //fontscale : Font scale factor that is multiplied by the font-specific base size + //thickness : Thickness of the lines used to draw a text + //textSize : Output parameter- The size of a box that contains the specified text + //baseLine : Output parameter- y-coordinate of the baseline relative to the bottom-most text point + // + //Description + //The function getTextSize calculates and returns the size of a box that contains the specified text + //Examples + //[textSize,baseLine]= getTextSize('helloall','FONT_HERSHEY_PLAIN',1,1); + //Authors + // Sukul Bagai , Abhilasha Sancheti + [textSize,baseLine]=raw_getTextSize(inputtext,fontface,fontscale,thickness) +endfunction diff --git a/macros/getgaussiankernel.bin b/macros/getgaussiankernel.bin new file mode 100644 index 0000000..87c7a7a Binary files /dev/null and b/macros/getgaussiankernel.bin differ diff --git a/macros/getgaussiankernel.sci b/macros/getgaussiankernel.sci new file mode 100644 index 0000000..466a5ee --- /dev/null +++ b/macros/getgaussiankernel.sci @@ -0,0 +1,33 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: Shubheksha Jalan +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function output = getgaussiankernel(ksize, sigma, ktype) + //Returns Gaussian filter coefficients + // + //Calling Sequence + //output = getgaussiankernel(ksize, sigma, ktype) + // + //Parameters + //ksize : Aperture size. It should be odd and positive. + //sigma : Gaussian standard deviation. + //ktype : Type of filter coefficients. It can be CV_32f or CV_64F. + // + //Description + //The function computes and returns the ksize x 1 matrix of Gaussian filter coefficients. + // + //Examples + //output = getgaussiankernel(3,1,'CV_32F'); + //Authors + // Shubheshka Jalan + + output = raw_getgaussiankernel(ksize, sigma, ktype) + +endfunction diff --git a/macros/imwarp.bin b/macros/imwarp.bin new file mode 100644 index 0000000..523a532 Binary files /dev/null and b/macros/imwarp.bin differ diff --git a/macros/imwarp.sci b/macros/imwarp.sci new file mode 100644 index 0000000..98b0f2f --- /dev/null +++ b/macros/imwarp.sci @@ -0,0 +1,42 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: V Srinivas & M Avinash Reddy +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [output] = imwarp(img,m) + //The function applies an affine transformation to the input image. + // + //Calling Sequence + //img=imread('path of the image') + //output=imwarp(img,transformation_matrix) + // + //Parameters + //img : Input image + //m : It is the 2X3 transformation matrix. + // + //Description + //The function warpAffine transforms the source image using the specified matrix: + // dst(x,y) = src( ( m(1,1)*x + m(1,2)*y + m(1,3) ) , ( m(2,1)*x + m(2,2)*y + m(2,3) ) ) + // + //Examples + //stacksize('max'); + //img=imread('images/lena.jpg'); + //m=[1 2 0;2 1 0]; + //out=imwarp(img,m); + //Authors + // V Srinivas , M Avinash Reddy + + image = mattolist(img); + a = raw_imwarp(image,m) + channels = size(a) + for i=1:channels + output(:,:,i) = a(i); + end + output=double(output) +endfunction diff --git a/macros/knn.bin b/macros/knn.bin new file mode 100644 index 0000000..ee31457 Binary files /dev/null and b/macros/knn.bin differ diff --git a/macros/knn.sci b/macros/knn.sci new file mode 100644 index 0000000..5b4da54 --- /dev/null +++ b/macros/knn.sci @@ -0,0 +1,67 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: M Avinash Reddy +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [out]=knn(q,f,k,varargin) + //Finds the k nearest neighbours of the query point q, in the dataset f + // + //Calling Sequence + //out = knn(q,f,k) + //out = knn(q,f,k,algo_type) + // + //Parameters + //q : a row vector containing the query point + //f : f is the set of data points and the number of columns in f should be same as that of q to match point dimensionality + //k : a positive integer specifying the number of nearest neighbours in f for the query point p. + //algo_type : a integer between 1 and 4 (both inclusive) specifying the algorithm to be used for the knn search. + // + //Description + //out = knn(q,f,k) returns a 2xk matrix . + //The first row of out contains the indices of the k nearest points in the dataset(f) from the query point. + //The second row contains the corresponding distances(squared euclidean distance). + //algo_type 1 corresponds to linear search algorithm. + //algo_type 2 corresponds to search using a set of randomized kd-trees. + //algo_type 3 corresponds to search using hierarchical k-means tree. + //algo_type 4 corresponds to combined search using both kd-trees and k-means algorithm. + // + //Examples + //q=[1]; + //f=[1;2;10;-1]; + //k=3; + //out=knn(q,f,k); + // + //Examples + //q=[1,1]; + //f=[1,3;2,0;10,10;-1,1]; + //k=3; + //algo_type=2; + //out=knn(q,f,k,algo_type); + //Authors + // M Avinash Reddy + + [lhs rhs]=argn(0) + + if lhs>1 + error(msprintf(" Too many output arguments")) + elseif rhs>4 + error(msprintf(" Too many input arguments,maximum number of arguments is 4")) + elseif rhs<3 + error(msprintf("the function needs atleast 3 arguments")) + end + + f1=mattolist(f) + + if rhs==3 + out=raw_knn(q,f1,k) + elseif rhs==4 + out=raw_knn(q,f1,k,varargin(1)) + end + +endfunction diff --git a/macros/laplacian.bin b/macros/laplacian.bin new file mode 100644 index 0000000..abe8008 Binary files /dev/null and b/macros/laplacian.bin differ diff --git a/macros/laplacian.sci b/macros/laplacian.sci new file mode 100644 index 0000000..bc8636f --- /dev/null +++ b/macros/laplacian.sci @@ -0,0 +1,41 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: Sukul Bagai +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function outputImg = laplacian(inputImage , depth , ksize , scale, delta) + //The function calculates laplacian of an image + // + //Calling Sequence + //inputImage = imread('path of the source image') + //outputImg = laplacian(inputImage , depth , ksize , scale, delta) + // + //Parameters + //inputImage : source image + //depth : Depth of the output image + //ksize : Aperture size + //scale : Optional scale factor for the computed Laplacian values + //delta : This value is added to each pixel in the output image + // + //Description + //Laplacian Operator is also a derivative operator which is used to find edges in an image. + // + //Examples + //img=imread('images/lena.jpg'); + //out=laplacian(img,'CV_8U',3,1,0); + //Authors + // Sukul Bagai + + inputList=mattolist(inputImage) + outputList=raw_laplacian(inputList , depth , ksize , scale, delta) + for i=1:size(outputList) + outputImg(:,:,i)=outputList(i) + end + outputImg=double(outputImg) +endfunction diff --git a/macros/medianblur.bin b/macros/medianblur.bin new file mode 100644 index 0000000..93a411f Binary files /dev/null and b/macros/medianblur.bin differ diff --git a/macros/medianblur.sci b/macros/medianblur.sci new file mode 100644 index 0000000..d4bf906 --- /dev/null +++ b/macros/medianblur.sci @@ -0,0 +1,37 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: Sukul Bagai +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function outputImg= medianblur(inputImage,ksize) + //Blurs an image using the median filter. + // + //Calling Sequence + //inputImage = imread('path of the image') + //outputImg = medianblur(inputImage,ksize) + // + //Parameters + //inputImage : source image + //ksize : aperture linear size; it must be odd and greater than 1 + // + //Description + //The function smoothes an image using the median filter with the ksize x ksize aperture. + // + //Examples + //inputImage = imread('images/lena.jpg'); + //ouputImg = medianblur(inputImage,3); + //Authors + // Sukul Bagai + + inputList=mattolist(inputImage); + outputList=raw_medianblur(inputList,ksize) + for i=1:size(outputList) + outputImg(:,:,i)=outputList(i) + end +endfunction diff --git a/macros/montage.bin b/macros/montage.bin new file mode 100644 index 0000000..ab3883c Binary files /dev/null and b/macros/montage.bin differ diff --git a/macros/montage.sci b/macros/montage.sci new file mode 100644 index 0000000..26fd974 --- /dev/null +++ b/macros/montage.sci @@ -0,0 +1,62 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: Sukul Bagai , M Avinash Reddy +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [out]=montage(rows,cols,varargin) + //Creates a montage of same sized input images + // + //Calling Sequence + //out = montage(1,1,img1) + //out = montage(1,2,img1,img2) + //out = montage(3,1,img1,img2,img3) + //out = montage(2,2,img1,img2.img3,img4) + //out = montage(1,5,img1,img2,img3,img4,img5) + //out = montage(3,2,img1,img2,img3,img4,img5,img6) + // + //Parameters + //rows : number of rows in montage + //cols : number of columns in montage + //varargin : variable number of input images + // + //Description + //The function creates a montage with the list of images. Montage is created row-wise with images taken in order from the list. Note that the following condition should hold true:- no_of_rows*no_of_cols >= no_of_images > (no_of_rows-1)*(no_of_cols) + // + //Examples + //img1=imread('images/lena.jpg'); + //img2=imread('images/monkey.jpeg'); + //out=montage(1,2,img1,img2); + //Authors + // Sukul Bagai , M Avinash Reddy + + [lhs rhs]=argn(0) + + for i=1:rhs-2 + varargin(i)=mattolist(varargin(i)) + end + + if rhs==3 + a=raw_montage(rows,cols,varargin(1)); + elseif rhs==4 + a=raw_montage(rows,cols,varargin(1),varargin(2)); + elseif rhs==5 + a=raw_montage(rows,cols,varargin(1),varargin(2),varargin(3)); + elseif rhs==6 + a=raw_montage(rows,cols,varargin(1),varargin(2),varargin(3),varargin(4)); + elseif rhs==7 + a=raw_montage(rows,cols,varargin(1),varargin(2),varargin(3),varargin(4),varargin(5)); + elseif rhs==8 + a=raw_montage(rows,cols,varargin(1),varargin(2),varargin(3),varargin(4),varargin(5),varargin(6)); + end + dimension=size(a) + for i = 1: dimension + out(:,:,i)=(a(i)); + end + out=double(out) +endfunction; diff --git a/macros/pclknn.bin b/macros/pclknn.bin new file mode 100644 index 0000000..3c1f6f5 Binary files /dev/null and b/macros/pclknn.bin differ diff --git a/macros/pclknn.sci b/macros/pclknn.sci new file mode 100644 index 0000000..0792288 --- /dev/null +++ b/macros/pclknn.sci @@ -0,0 +1,44 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: M Avinash Reddy +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [out] = pclknn(pcloud,q,k) + //Finds the k nearest neighbours of the query point q, in the point cloud. + // + //Calling Sequence + //pcloud=pcread('path of point cloud file') + //out = pclknn(pcloud,q,k) + // + // + //Parameters + //pcloud : a point cloud structure read using pcread function + //q : a three dimensional query point + //k : a positive integer specifying the number of nearest neighbours in pcloud for the query point p. + // + //Description + //out = knn(q,f,k) returns a 2xk matrix . + //The first row of out contains the indices of the k nearest points in the dataset(f) from the query point. + //The second row contains the corresponding distances(squared euclidean distance). + // + //Examples + //q=[0 0 0]; + //data=pcread('data/cube.ply') + //k=3; + //out=pclknn(data,q,k); + //Authors + // M Avinash Reddy + + if size(q)~=3 + error(msprintf("Size of the query point must be three")) + end + data=pcloud.Location + out = knn(q,data,k) + +endfunction diff --git a/macros/seamfind.bin b/macros/seamfind.bin new file mode 100644 index 0000000..cd60030 Binary files /dev/null and b/macros/seamfind.bin differ diff --git a/macros/seamfind.sci b/macros/seamfind.sci new file mode 100644 index 0000000..bc784e8 --- /dev/null +++ b/macros/seamfind.sci @@ -0,0 +1,79 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: M Avinash Reddy +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [out] = seamfind(index,varargin) + //Estimates the seams in input images (which are going to be stitched to form a panaroma) + // + //Calling Sequence + //stacksize('max') + //img1=imread('path of the image file') + //img2=imread('path of the image file') + //out = seamfind(i,img1,img2) + //img3=imread('path of the image file') + //out = seamfind(i,img1,img2,img3) + //img4=imread('path of the image file') + //out = seamfind(i,img1,img2,img3,img4) + //img5=imread('path of the image file') + //out = seamfind(i,img1,img2,img3,img4,img5) + //img6=imread('path of the image file') + //out = seamfind(i,img1,img2,img3,img4,img5,img6) + // + //Parameters + //index : index of the estimated image required by the user. It should be between 1 and number of input images. + //img1 : an image + //img2 : an image + //img3 : an image + //img4 : an image + //img5 : an image + //img6 : an image + // + //Description + //This function estimates the seams in images which are going to be blended to form a panaroma image. The output of the function is the binary and of the updated mask and the 'index'th image. + // + //Examples + //stacksize('max'); + //img1=imread('images/campus_017.jpg'); + //img2=imread('images/campus_016.jpg'); + //out=seamfind(1,img1,img2); + //Authors + // M Avinash Reddy + + [lhs rhs]=argn(0) + if lhs>1 + error(msprintf(" Too many output arguments")) + end + if rhs>7 + error(msprintf(" Too many input arguments,maximum number of arguments is 7")) + end + if rhs<3 + error(msprintf("the function needs atleast 3 arguments")) + end + for i=1:rhs-1 + varargin(i)=mattolist(varargin(i)) + end + if rhs==3 + res=raw_seamfind(index,varargin(1),varargin(2)) + elseif rhs==4 + res=raw_seamfind(index,varargin(1),varargin(2),varargin(3)) + elseif rhs==5 + res=raw_seamfind(index,varargin(1),varargin(2),varargin(3),varargin(4)) + elseif rhs==6 + res=raw_seamfind(index,varargin(1),varargin(2),varargin(3),varargin(4),varargin(5)) + elseif rhs==7 + res=raw_seamfind(index,varargin(1),varargin(2),varargin(3),varargin(4),varargin(5),varargin(6)) + end + + channel=size(res) + for i = 1: channel + out(:,:,i) = (res(i)) + end + out=double(out) +endfunction diff --git a/macros/warp.bin b/macros/warp.bin new file mode 100644 index 0000000..0d3a085 Binary files /dev/null and b/macros/warp.bin differ diff --git a/macros/warp.sci b/macros/warp.sci new file mode 100644 index 0000000..6585c80 --- /dev/null +++ b/macros/warp.sci @@ -0,0 +1,49 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Author: M Avinash Reddy +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [out1,out2] = warp(img1,img2) + //This function maps an image onto a unit sphere located at the origin (center of the image). + // + //Calling Sequence + //stacksize('max') + //img1=imread('path of the image file') + //img2=imread('path of the image file') + //[out1,out2] = warp(img1,img2) + // + //Parameters + //img1 : an image + //img2 : an image + // + //Description + //The function takes two input images which are part of a panoromic image and outputs the respective masks to be applied on the input images to get a spherical oriented image. + //This is useful in creating a 360 panaroma image. + // + //Examples + //stacksize('max'); + //img1=imread('images/campus_017.jpg'); + //img2=imread('images/campus_016.jpg'); + //[out1,out2]=warp(img1,img2); + //Authors + // M Avinash Reddy + i1 = mattolist(img1) + i2 = mattolist(img2) + [res1,res2] = raw_warp(i1,i2) + channel = size(res1) + for i = 1: channel + out1(:,:,i) = (res1(i)) + end + channel = size(res2) + for i = 1:channel + out2(:,:,i) = (res2(i)) + end + out1 = double(out1) + out2 = double(out2) +endfunction diff --git a/sci_gateway/cpp/opencv_Blend.cpp b/sci_gateway/cpp/opencv_Blend.cpp new file mode 100644 index 0000000..bc4447a --- /dev/null +++ b/sci_gateway/cpp/opencv_Blend.cpp @@ -0,0 +1,128 @@ +//Author-M Avinash Reddy + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include "opencv2/stitching/detail/blenders.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include "sciprint.h" + #include "../common.h" + +int opencv_Blend(char *fname,unsigned long fname_len){ + SciErr sciErr; + int intErr=0; + int *piaddrvar1=NULL; + int *piaddrvar2=NULL; + int *piaddrvar3=NULL; + int *piaddrvar4=NULL; + double w1=0,w2=0; + CheckInputArgument(pvApiCtx, 4, 4); // Checking the number of input and output arguments + CheckOutputArgument(pvApiCtx, 1, 1); + + try{ + Mat image1,image2,image1s,image2s,I; + retrieveImage(image1, 1); + retrieveImage(image2, 2); + + sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piaddrvar3); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + if ( !isDoubleType(pvApiCtx, piaddrvar3)) + { + Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 3); + return 0; + } + + intErr = getScalarDouble(pvApiCtx, piaddrvar3,&w1); + if (intErr) + { + + return intErr; + } + + sciErr = getVarAddressFromPosition(pvApiCtx, 4, &piaddrvar4); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + if ( !isDoubleType(pvApiCtx, piaddrvar4)) + { + Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 3); + return 0; + } + + intErr = getScalarDouble(pvApiCtx, piaddrvar4,&w2); + if (intErr) + { + + return intErr; + } + if(w1<0 || w1>100){ + Scierror(999, _("%s:Invalid input argument #%d: Weight should be between 0 and 100\n"), fname,3); + return 0; + } + if(w2<0 || w2>100){ + Scierror(999, _("%s:Invalid input argument #%d: Weight should be between 0 and 100\n"), fname,4); + return 0; + } + + resize(image2,image2,image1.size()); + + + image1.convertTo(image1s, CV_16S); + image2.convertTo(image2s, CV_16S); + + Mat mask1(image1s.size(), CV_8U); + mask1(Rect(0, 0, (mask1.cols*w1)/100, mask1.rows)).setTo(255); + mask1(Rect((mask1.cols*w1)/100, 0, (mask1.cols*(100-w1))/100, mask1.rows)).setTo(0); + + Mat mask2(image2s.size(), CV_8U); + mask2(Rect(0, 0, (mask2.cols*(100-w2))/100, mask2.rows)).setTo(0); + mask2(Rect((mask2.cols*(100-w2))/100, 0, (mask2.cols*w2)/100, mask2.rows)).setTo(255); + + cv::detail::FeatherBlender blender; + blender.prepare(Rect(0, 0, max(image1s.cols, image2s.cols), max(image1s.rows, image2s.rows))); + blender.feed(image1s, mask1, Point(0,0)); + blender.feed(image2s, mask2, Point(0,0)); + + Mat result_s, result_mask; + blender.blend(result_s, result_mask); + + Mat result; + result_s.convertTo(result, CV_8U); + + + string tempstring = type2str(result.type()); + char *checker; + checker = (char *)malloc(tempstring.size() + 1); + memcpy(checker, tempstring.c_str(), tempstring.size() + 1); + returnImage(checker,result,1); + free(checker); + } + + catch(cv::Exception& e){ + const char* err=e.what(); + Scierror(999,("%s",err)); + } + + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + //Returning the Output Variables as arguments to the Scilab environment + ReturnArguments(pvApiCtx); + return 0; +} + +} \ No newline at end of file diff --git a/sci_gateway/cpp/opencv_bilateralfilter.cpp b/sci_gateway/cpp/opencv_bilateralfilter.cpp new file mode 100644 index 0000000..f30d508 --- /dev/null +++ b/sci_gateway/cpp/opencv_bilateralfilter.cpp @@ -0,0 +1,119 @@ +/* ==================================================================== */ +/* Author :Priyanka Hiranandani NIT Surat */ +/* ==================================================================== */ +/* Syntax : return_image=bilateralFilter(InputArray src, int d, double sigmaColor, double sigmaSpace ) */ +/* ==================================================================== */ +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include +#include +using namespace cv; +using namespace std; + extern "C" + { + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include + #include "../common.h" + int opencv_bilateralfilter(char *fname, unsigned long fname_len) + { + // Error management variable + SciErr sciErr; + //variable info + int iRows = 0; + int iCols = 0; + int piRows = 0; + int piCols = 0; + int* piAddr = NULL; + int* piAddr2 = NULL; + int* piAddr3 = NULL; + int* piAddr4 = NULL; + int* piAddr5 = NULL; + int* piAddr6 = NULL; + int* piAddrNew = NULL; + int* piLen = NULL; + double* pstData = NULL; + int* pstData2 = NULL; + double *rrows; + double *rcols; + unsigned char *pstDataR = NULL; + unsigned char *pstDataG = NULL; + unsigned char *pstDataB = NULL; + int noofitem; + double d; + double sigmaColor; + double sigmaSpace; + int error; + // checking input argument + CheckInputArgument(pvApiCtx,4,4); + //checking output argument + CheckOutputArgument(pvApiCtx, 1, 1); + //for first argument + // get Address of first input + try{ + Mat img; + retrieveImage(img,1); + img.convertTo(img,CV_8U); + //second argument + sciErr = getVarAddressFromPosition(pvApiCtx,2,&piAddr2); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + //this function will fetch value of second argument + error=getScalarDouble(pvApiCtx,piAddr2,&d) ; + if(error!=0) + { + sciprint("error in retrieving second argument"); + } + //third argument + sciErr = getVarAddressFromPosition(pvApiCtx,3,&piAddr3); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + //this function will fetch value of third argument + error=getScalarDouble(pvApiCtx,piAddr3,&sigmaColor) ; + if(error!=0) + { + sciprint("error in retrieving second argument"); + } + + //fourth argument + sciErr = getVarAddressFromPosition(pvApiCtx,4,&piAddr4); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } +//this function will fetch value of fourth argument + error=getScalarDouble(pvApiCtx,piAddr4,&sigmaSpace) ; + if(error!=0) + { + sciprint("error in retrieving second argument"); + } + Mat dst; + //calling open cv bilateral filter function + bilateralFilter(img,dst,d,sigmaColor,sigmaSpace,BORDER_DEFAULT ); + string tempstring = type2str(dst.type()); + char* checker = (char *)malloc(tempstring.size() + 1); + memcpy(checker, tempstring.c_str(), tempstring.size() + 1); + returnImage(checker,dst,1); + } + catch(cv::Exception& e){ + const char* err=e.what(); + sciprint("%s",err); + } + //returning output variable + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + ReturnArguments(pvApiCtx); + return 0; + +} +} diff --git a/sci_gateway/cpp/opencv_dilate.cpp b/sci_gateway/cpp/opencv_dilate.cpp new file mode 100644 index 0000000..9339190 --- /dev/null +++ b/sci_gateway/cpp/opencv_dilate.cpp @@ -0,0 +1,130 @@ +/*************************************************** +Author : Sukul Bagai +***************************************************/ + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include +#include +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include + #include "../common.h" + + int opencv_dilate(char *fname, unsigned long fname_len) + { + + SciErr sciErr; + int intErr = 0; + int iRows=0,iCols=0; + int *piLen = NULL; + int *piAddr2 = NULL; + int *piAddr3 = NULL; + int *piAddr4 = NULL; + int *piAddr5 = NULL; + char **type = NULL; + int i,j,k; + double anchorX,anchorY,iterations; + double *kernel = NULL; + + //checking input argument + try{ + CheckInputArgument(pvApiCtx, 5, 5); + CheckOutputArgument(pvApiCtx, 1, 1) ; + + Mat image; + retrieveImage(image,1); + + //for kernel + sciErr = getVarAddressFromPosition(pvApiCtx,2,&piAddr2); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + sciErr = getMatrixOfDouble(pvApiCtx, piAddr2, &iRows, &iCols, &kernel); + if(sciErr.iErr) + { + printError(&sciErr,0); + return 0; + } + + double actualkernel[iRows][iCols]; + for(i=0;i(i,j)=(char)actualkernel[i][j]; + + + //for value of anchorX + sciErr = getVarAddressFromPosition(pvApiCtx,3,&piAddr3); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr3 ,&anchorX); + if(intErr) + return intErr; + + //for value of anchorY + sciErr = getVarAddressFromPosition(pvApiCtx,4,&piAddr4); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr4 ,&anchorY); + if(intErr) + return intErr; + + //for value of iterations + sciErr = getVarAddressFromPosition(pvApiCtx,5,&piAddr5); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr5 ,&iterations); + if(intErr) + return intErr; + + Mat new_image(image.rows,image.cols,image.type()); + Point pt(anchorX,anchorY); + + dilate(image,new_image,kernelMatrix,pt,iterations); + + + string tempstring = type2str(new_image.type()); + char *checker; + checker = (char *)malloc(tempstring.size() + 1); + memcpy(checker, tempstring.c_str(), tempstring.size() + 1); + returnImage(checker,new_image,1); + free(checker); + } + catch(cv::Exception& e){ + const char* err=e.what(); + Scierror(999,("%s",err)); + } + //Assigning the list as the Output Variable + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + //Returning the Output Variables as arguments to the Scilab environment + ReturnArguments(pvApiCtx); + return 0; + + } +/* ==================================================================== */ +} diff --git a/sci_gateway/cpp/opencv_gaussianblur.cpp b/sci_gateway/cpp/opencv_gaussianblur.cpp new file mode 100644 index 0000000..f81885e --- /dev/null +++ b/sci_gateway/cpp/opencv_gaussianblur.cpp @@ -0,0 +1,132 @@ +/*************************************************** +Author : Sukul Bagai +**************************************************** +Usage : return_image = gaussianblur(input_image,ksize_height,ksize_width,sigmaX,sigmaY); +***************************************************/ + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include + #include "../common.h" + + int opencv_gaussianblur(char *fname, unsigned long fname_len) + { + + SciErr sciErr; + int intErr = 0; + int iRows=0,iCols=0; + int *piAddr2 = NULL; + int *piAddr3 = NULL; + int *piAddr4 = NULL; + int *piAddr5 = NULL; + int i,j,k; + double ksize_width,ksize_height,sigmaX,sigmaY; + + //checking input argument + CheckInputArgument(pvApiCtx, 5, 5); + CheckOutputArgument(pvApiCtx, 1, 1) ; + + Mat image; + retrieveImage(image,1); + + //for value of ksize_height + sciErr = getVarAddressFromPosition(pvApiCtx,2,&piAddr2); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr2, &ksize_height); + if(intErr) + return intErr; + + //for value of ksize_width + sciErr = getVarAddressFromPosition(pvApiCtx,3,&piAddr3); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr3, &ksize_width); + if(intErr) + return intErr; + + //for value of sigmaX + sciErr = getVarAddressFromPosition(pvApiCtx,4,&piAddr4); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr4, &sigmaX); + if(intErr) + return intErr; + + //for value of sigmaY + sciErr = getVarAddressFromPosition(pvApiCtx,5,&piAddr5); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr5, &sigmaY); + if(intErr) + return intErr; + + //applying checks to input parameters, and assigning default values in case of error + Mat new_image(image.rows,image.cols,CV_8UC3); + if(ksize_height<0) + { + sciprint("Positive Value Required for Height. 1 value was used instead"); + ksize_height=1; + } + if(ksize_width<0) + { + sciprint("Positive Value Required for Width. 1 value was used instead"); + ksize_width=1; + } + if((int)ksize_height%2==0) + { + ksize_height+=1; + sciprint("Odd Value Required for Height. %f value was used instead",&ksize_height); + } + if((int)ksize_width%2==0) + { + ksize_width+=1; + sciprint("Odd Value Required for Width. %f value was used instead",&ksize_width); + } + + //temporary size variable, to use in function + Size sz(ksize_height,ksize_width); + + //void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT ) + GaussianBlur(image,new_image,sz,sigmaX,sigmaY); + + //returning image + string tempstring = type2str(new_image.type()); + char *checker; + checker = (char *)malloc(tempstring.size() + 1); + memcpy(checker, tempstring.c_str(), tempstring.size() + 1); + returnImage(checker,new_image,1); + free(checker); + + //Assigning the list as the Output Variable + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + //Returning the Output Variables as arguments to the Scilab environment + ReturnArguments(pvApiCtx); + return 0; + + } +/* ==================================================================== */ +} diff --git a/sci_gateway/cpp/opencv_getTextSize.cpp b/sci_gateway/cpp/opencv_getTextSize.cpp new file mode 100644 index 0000000..8c53553 --- /dev/null +++ b/sci_gateway/cpp/opencv_getTextSize.cpp @@ -0,0 +1,197 @@ +/*************************************************** +Author : Sukul Bagai , Abhilasha Sancheti +**************************************************** +Usage : [size,baseline] = getTextSize("","",fontscale,thickness); +***************************************************/ + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include + #include "../common.h" + + int opencv_getTextSize(char *fname, unsigned long fname_len) + { + + SciErr sciErr; + int intErr = 0; + int iRows=0,iCols=0; + int *piAddr = NULL; + int *piAddr2 = NULL; + int *piAddr3 = NULL; + int *piAddr4 = NULL; + int *piLen = NULL; + int *piLen2 = NULL; + char **pstData = NULL; + char **pstData2 = NULL; + double font_scale = 0,thickness = 0; + int i; + + //checking input argument + CheckInputArgument(pvApiCtx, 4, 4); + CheckOutputArgument(pvApiCtx, 2, 2) ; + + //for string + try{ + sciErr = getVarAddressFromPosition(pvApiCtx,1,&piAddr); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + //Now, we will retrieve the string from the input parameter. For this, we will require 3 calls + //first call to retrieve dimensions + sciErr = getMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, NULL, NULL); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + piLen = (int*)malloc(sizeof(int) * iRows * iCols); + //second call to retrieve length of each string + sciErr = getMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, piLen, NULL); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + pstData = (char**)malloc(sizeof(char*) * iRows * iCols); + for(i = 0 ; i < iRows * iCols ; i++) + { + pstData[i] = (char*)malloc(sizeof(char) * (piLen[i] + 1));//+ 1 for null termination + } + //third call to retrieve data + sciErr = getMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, piLen, pstData); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + //for fontface + sciErr = getVarAddressFromPosition(pvApiCtx,2,&piAddr2); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + //Now, we will retrieve the string from the input parameter. For this, we will require 3 calls + //first call to retrieve dimensions + sciErr = getMatrixOfString(pvApiCtx, piAddr2, &iRows, &iCols, NULL, NULL); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + piLen2 = (int*)malloc(sizeof(int) * iRows * iCols); + //second call to retrieve length of each string + sciErr = getMatrixOfString(pvApiCtx, piAddr2, &iRows, &iCols, piLen2, NULL); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + pstData2 = (char**)malloc(sizeof(char*) * iRows * iCols); + for(i = 0 ; i < iRows * iCols ; i++) + { + pstData2[i] = (char*)malloc(sizeof(char) * (piLen2[i] + 1));//+ 1 for null termination + } + //third call to retrieve data + sciErr = getMatrixOfString(pvApiCtx, piAddr2, &iRows, &iCols, piLen2, pstData2); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + //for value of font scale + sciErr = getVarAddressFromPosition(pvApiCtx,3,&piAddr3); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr3, &font_scale); + if(intErr) + return intErr; + + //for value of thickness + sciErr = getVarAddressFromPosition(pvApiCtx,4,&piAddr4); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr4, &thickness); + if(intErr) + return intErr; + + int fontFace; + + if(strcmp(pstData2[0],"FONT_HERSHEY_SIMPLEX")==0) + fontFace = FONT_HERSHEY_SIMPLEX; + else if (strcmp(pstData2[0],"FONT_HERSHEY_PLAIN")==0) + fontFace= FONT_HERSHEY_PLAIN; + else if (strcmp(pstData2[0],"FONT_HERSHEY_DUPLEX")==0) + fontFace= FONT_HERSHEY_DUPLEX; + else if (strcmp(pstData2[0],"FONT_HERSHEY_COMPLEX")==0) + fontFace= FONT_HERSHEY_COMPLEX; + else if (strcmp(pstData2[0],"FONT_HERSHEY_TRIPLEX")==0) + fontFace = FONT_HERSHEY_TRIPLEX; + else if (strcmp(pstData2[0],"FONT_HERSHEY_COMPLEX_SMALL")==0) + fontFace = FONT_HERSHEY_COMPLEX_SMALL; + else if (strcmp(pstData2[0],"FONT_HERSHEY_SCRIPT_SIMPLEX")==0) + fontFace = FONT_HERSHEY_SCRIPT_SIMPLEX; + else if (strcmp(pstData2[0],"FONT_HERSHEY_SCRIPT_COMPLEX")==0) + fontFace = FONT_HERSHEY_SCRIPT_COMPLEX; + else { + Scierror(999,("Invalid font type\n")); + return 0; + } + int baseline; + Size sz = getTextSize(pstData[0],fontFace,font_scale,thickness,&baseline); + double tempsize[2]; + tempsize[0]=sz.width; + tempsize[1]=sz.height; + double returnbaseline = (double)baseline; + + sciErr = createMatrixOfDouble(pvApiCtx,nbInputArgument(pvApiCtx)+1,1,2,tempsize); + if(sciErr.iErr) + { + printError(&sciErr,0); + return 0; + } + sciErr = createMatrixOfDouble(pvApiCtx,nbInputArgument(pvApiCtx)+2,1,1,&returnbaseline); + if(sciErr.iErr) + { + printError(&sciErr,0); + return 0; + } + + } + catch(cv::Exception& e){ + const char* err=e.what(); + sciprint("%s",err); + } + //Assigning the list as the Output Variable + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + AssignOutputVariable(pvApiCtx, 2) = nbInputArgument(pvApiCtx) + 2; + //Returning the Output Variables as arguments to the Scilab environment + ReturnArguments(pvApiCtx); + return 0; + + } +/* ==================================================================== */ +} diff --git a/sci_gateway/cpp/opencv_getgaussiankernel.cpp b/sci_gateway/cpp/opencv_getgaussiankernel.cpp new file mode 100644 index 0000000..cdc5cac --- /dev/null +++ b/sci_gateway/cpp/opencv_getgaussiankernel.cpp @@ -0,0 +1,151 @@ +/******************************************************** + Author: Shubheksha Jalan +********************************************************* +Mat getGaussianKernel(int ksize, double sigma, int ktype=CV_64F ) +********************************************************/ + + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include + #include "../common.h" + + int opencv_getgaussiankernel(char *fname, unsigned long fname_len) + { + + SciErr sciErr; + int intErr=0; + int iRows=0,iCols=0; + int *piLen = NULL; + int *piAddr = NULL; + int *piAddrNew = NULL; + int *piAddr2 = NULL; + int *piAddr3 = NULL; + double ksize, sigma; + char **kType = NULL; + int i, j, k; + + //checking input argument + CheckInputArgument(pvApiCtx, 3, 3); + CheckOutputArgument(pvApiCtx, 1, 1) ; + + + + //for value of ksize + try{ + sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr, &ksize); + if(intErr){ + return intErr; + } + if(ksize < 0 || (int)ksize % 2 == 0) + { + Scierror(999, _("%s: Wrong type for input argument #%d:ksize should be positive and odd.\n"), fname, 1); + return 0; + } + + + //for first value of size + sciErr = getVarAddressFromPosition(pvApiCtx,2,&piAddr2); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr2, &sigma); + if(intErr) + { + return intErr; + } + if(sigma<=0){ + sigma=0.3*((ksize-1)*0.5 - 1) + 0.8; + } + + sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddr3); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + //Now, we will retrieve the string from the input parameter. For this, we will require 3 calls + //first call to retrieve dimensions + sciErr = getMatrixOfString(pvApiCtx, piAddr3, &iRows, &iCols, NULL, NULL); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + piLen = (int*)malloc(sizeof(int) * iRows * iCols); + //second call to retrieve length of each string + sciErr = getMatrixOfString(pvApiCtx, piAddr3, &iRows, &iCols, piLen, NULL); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + kType = (char**)malloc(sizeof(char*) * iRows * iCols); + for(i = 0 ; i < iRows * iCols ; i++) + kType[i] = (char*)malloc(sizeof(char) * (piLen[i] + 1));//+ 1 for null termination + + //third call to retrieve data + sciErr = getMatrixOfString(pvApiCtx, piAddr3, &iRows, &iCols, piLen, kType); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + + Mat temp; + + if(strcmp(kType[0], "CV_32F") == 0) + temp = getGaussianKernel(ksize, sigma, CV_32F); + else if(strcmp(kType[0], "CV_64F") == 0) + temp = getGaussianKernel(ksize, sigma, CV_64F); + else{ + Scierror(999, _("%s: Wrong type for input argument #%d:CV_32F or CV_64F expected.\n"), fname, 3); + return 0; + } + double *m = (double *)malloc(temp.rows*temp.cols*sizeof(double)); + for(i=0;i(i, j); + *(m + i*temp.cols + j) = intensity; + } + } + + sciErr = createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, temp.rows, temp.cols, m); + } + catch(cv::Exception& e){ + const char* err=e.what(); + Scierror(999,("%s",err)); + } + //Assigning the list as the Output Variable + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + //Returning the Output Variables as arguments to the Scilab environment + ReturnArguments(pvApiCtx); + return 0; + + } +/* ==================================================================== */ +} diff --git a/sci_gateway/cpp/opencv_imwarp.cpp b/sci_gateway/cpp/opencv_imwarp.cpp new file mode 100644 index 0000000..1c1a183 --- /dev/null +++ b/sci_gateway/cpp/opencv_imwarp.cpp @@ -0,0 +1,114 @@ +/******************************************************** + Authors: V Srinivas , M Avinash Reddy +********************************************************* + imwarp(image,matrix(2*3))=output. +********************************************************/ + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include + +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include + #include "../common.h" + + int opencv_imwarp(char *fname, unsigned long fname_len) + { + SciErr sciErr; + int intErr=0; + int iRows=0,iCols=0; + int *piAddr1 = NULL; + //int *piAddr2 = NULL; + double *tform; + int maxx,maxy,minx,miny; + + //checking input argument + CheckInputArgument(pvApiCtx, 2, 2);//two arguments 1 takes the image and the other takes the transformation matrix + CheckOutputArgument(pvApiCtx, 1, 1); + + try{ + //retieve Image + Mat image; + retrieveImage(image,1); + //retreive the transformation matrix + sciErr = getVarAddressFromPosition(pvApiCtx,2,&piAddr1); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return -1; + } + sciErr = getMatrixOfDouble(pvApiCtx, piAddr1, &iRows, &iCols,&tform); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return -1; + } + if(iRows!=2 || iCols!=3)//checking if the transformation matrix is of the desired size + { + sciprint("Please enter a valid transformation matrix"); + return -1; + } + Mat dst; + //This and the next few lines are dedicated to finding the size of the frame in which the whole transformed image can be viewed. + double x [4]={0,0,image.cols-1,image.cols-1}; + double y [4]={0,image.rows-1,0,image.rows-1}; + int modx[4]; + int mody[4]; + for(int i=0;i<4;i++)// the modifications performed by the matrix is performed on the edges of the image to find the optimum size. This works as the transformation is linear so the edges always are on the extreme points. + { + modx[i]=(int)(tform[0] * x[i] + tform[2] * y[i] + tform[4]); + mody[i]=(int)(tform[1] * x[i] + tform[3] * y[i] + tform[5]); + //cout<<*(modx+i)<<" "<<*(mody+i)<(2,3)<maxx) + {maxx=modx[i];} + if(mody[i]maxy) + {maxy=mody[i];} + } + warpAffine(image,dst,trans,Size(maxx-minx,maxy-miny)); + string tempstring = type2str(dst.type()); + char *checker; + checker = (char *)malloc(tempstring.size() + 1); + memcpy(checker, tempstring.c_str(), tempstring.size() + 1); + returnImage(checker,dst,1); + free(checker); + } + + + catch(cv::Exception& e){ + const char* err=e.what(); + Scierror(999,("%s",err)); + } + + + + + //Assigning the list as the Output Variable + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + //Returning the Output Variables as arguments to the Scilab environment + ReturnArguments(pvApiCtx); + return 0; + + + + } + +} diff --git a/sci_gateway/cpp/opencv_knn.cpp b/sci_gateway/cpp/opencv_knn.cpp new file mode 100644 index 0000000..8949aa9 --- /dev/null +++ b/sci_gateway/cpp/opencv_knn.cpp @@ -0,0 +1,225 @@ +//Author- M Avinash Reddy + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include "opencv2/flann/flann.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include "sciprint.h" + #include "../common.h" + +int opencv_knn(char *fname, unsigned long fname_len){ + + + SciErr sciErr; + int intErr=0; + int *piaddrvar1=NULL; + int *piaddrvar2=NULL; + int *piaddrvar3=NULL; + int *piaddrvar4=NULL; + + double *qpoint=NULL; // contains the query point + double k=0,algo=0; // k nearest neighbours + int r1=0,c1=0; + int i,j,l,count,n; + double *result=NULL; // output matrix containing the indices(of nearest neighbours) and the corresponding distances + + CheckInputArgument(pvApiCtx, 3, 4); // Checking the number of input and output arguments + CheckOutputArgument(pvApiCtx, 1, 1); + /* get Address of inputs */ + n=*getNbInputArgument(pvApiCtx); + sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piaddrvar1); + + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + /* Check that the first input argument is a real matrix (and not complex) */ + if ( !isDoubleType(pvApiCtx, piaddrvar1) || isVarComplex(pvApiCtx, piaddrvar1) ) + { + Scierror(999, _("%s: Wrong type for input argument #%d: A real vector expected.\n"), fname, 1); + return 0; + } + + sciErr = getMatrixOfDouble(pvApiCtx, piaddrvar1, &r1, &c1, &qpoint); + + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + + try{ + Mat image,I; + + Mat image1; + retrieveImage(image, 2); // the input image or hypermatrix by the user is loaded into image(Mat container) + + + if(c1!=image.cols){ + Scierror(999, _("%s: Invalid input argument #%d: The dimensions of query point should be same as that of the data points\n"), fname,1); + return 0; + } + Mat final_gray; + if(image.channels()>1){ + + image.convertTo(I,CV_32F); //cvtColor works only for particular depths + //sciprint("%d\n",I.type()); + + cvtColor(I,final_gray,COLOR_BGR2GRAY); + //sciprint("%d\n",final_gray.type()); + final_gray.convertTo(image1,CV_64F); + + + } + else{ + + image.convertTo(image1,CV_64F); + + } + + Mat qpoi=Mat(1,image1.cols,CV_64F); + for(i=0;i(0,i)=qpoint[i]; //converting query point into a Mat container + } + + + + + + sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piaddrvar3); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + if ( !isDoubleType(pvApiCtx, piaddrvar3)) + { + Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 3); + return 0; + } + + intErr = getScalarDouble(pvApiCtx, piaddrvar3,&k); + if (intErr) + { + + return intErr; + } + + if(n==4){ + + sciErr = getVarAddressFromPosition(pvApiCtx, 4, &piaddrvar4); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + if ( !isDoubleType(pvApiCtx, piaddrvar4)) + { + Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 3); + return 0; + } + + intErr = getScalarDouble(pvApiCtx, piaddrvar4,&algo); + if (intErr) + { + + return intErr; + } + + } + else{ + algo=1; + } + + if(r1!=1){ + Scierror(999, _("%s: Wrong type for input argument #%d: A vector is expected\n"), fname,1); + return 0; + } + if(algo<1 || algo>4){ + Scierror(999, _("%s: Invalid input argument #%d: A number between 1 and 4 is expected.(set 1 for default linearsearch)\n"), fname,4); + return 0; + } + + if(k>image1.rows){ + Scierror(999, _("%s: Invalid input argument #%d: K shouldn't exceed the number of rows in the matrix\n"), fname,3); + return 0; + } + if(k<0){ + Scierror(999, _("%s: Invalid input argument #%d: K cannot be negative\n"), fname,3); + return 0; + } + + //Creating a new object of class GenericIndex + //the index will perform a linear,brute-force search + //the distance type used is euclidian distance(L2) + Mat indices=Mat(1,k,CV_32S); //contains the indices of the k nearest neighbours + Mat dists=Mat(1,k,CV_64F); + + if(algo==1){ + cv::flann::GenericIndex< cvflann::L2 > index(image1,cvflann::LinearIndexParams(),cvflann::L2()); + index.knnSearch(qpoi, indices, dists, k,cvflann::SearchParams()); //OpenCV function is called + } + + else if(algo==2){ + cv::flann::GenericIndex< cvflann::L2 > index(image1,cvflann::KDTreeIndexParams(),cvflann::L2()); + index.knnSearch(qpoi, indices, dists, k,cvflann::SearchParams()); //OpenCV function is called + } + + else if(algo==3){ + cv::flann::GenericIndex< cvflann::L2 > index(image1,cvflann::KMeansIndexParams(),cvflann::L2()); + index.knnSearch(qpoi, indices, dists, k,cvflann::SearchParams()); //OpenCV function is called + } + + else{ + cv::flann::GenericIndex< cvflann::L2 > index(image1,cvflann::CompositeIndexParams(),cvflann::L2()); + index.knnSearch(qpoi, indices, dists, k,cvflann::SearchParams()); //OpenCV function is called + } + + result=(double*)malloc(sizeof(double)*2*k); + count=0; + + for (i=0;i<2*k;i++){ + if(i%2==0){ + result[i]=(double)indices.at(0,count); + } + else{ + result[i]=dists.at(0,count); + count=count+1; + } + } + + + + } + catch(cv::Exception& e){ + const char* err=e.what(); + sciprint("%s",err); + } + + sciErr = createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1,2,k,result); //creating the output matrix + if (sciErr.iErr){ + printError(&sciErr, 0); + return sciErr.iErr; + } + + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + ReturnArguments(pvApiCtx); + return 0; + +} + + +} diff --git a/sci_gateway/cpp/opencv_laplacian.cpp b/sci_gateway/cpp/opencv_laplacian.cpp new file mode 100644 index 0000000..d76a5ec --- /dev/null +++ b/sci_gateway/cpp/opencv_laplacian.cpp @@ -0,0 +1,157 @@ +/******************************************************** + Author: Sukul Bagai +********************************************************* + return_image = laplacian(input_image , depth , ksize , scale, delta); +********************************************************/ + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include + #include "../common.h" + + int opencv_laplacian(char *fname, unsigned long fname_len) + { + + SciErr sciErr; + int intErr=0; + int iRows=0,iCols=0; + int *piLen = NULL; + int *piAddr = NULL; + int *piAddrNew = NULL; + int *piAddr2 = NULL; + int *piAddr3 = NULL; + int *piAddr4 = NULL; + int *piAddr5 = NULL; + int *piAddr6 = NULL; + int *piAddr7 = NULL; + char **ddepth = NULL; + int i,j,k; + double ksize,scale,delta; + + + //checking input argument + CheckInputArgument(pvApiCtx, 5, 5); + CheckOutputArgument(pvApiCtx, 1, 1) ; + + Mat image; + retrieveImage(image,1); + image.convertTo(image,CV_8U); + + sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddr2); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + //Now, we will retrieve the string from the input parameter. For this, we will require 3 calls + //first call to retrieve dimensions + sciErr = getMatrixOfString(pvApiCtx, piAddr2, &iRows, &iCols, NULL, NULL); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + piLen = (int*)malloc(sizeof(int) * iRows * iCols); + //second call to retrieve length of each string + sciErr = getMatrixOfString(pvApiCtx, piAddr2, &iRows, &iCols, piLen, NULL); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + ddepth = (char**)malloc(sizeof(char*) * iRows * iCols); + for(i = 0 ; i < iRows * iCols ; i++) + ddepth[i] = (char*)malloc(sizeof(char) * (piLen[i] + 1));//+ 1 for null termination + //third call to retrieve data + sciErr = getMatrixOfString(pvApiCtx, piAddr2, &iRows, &iCols, piLen, ddepth); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + //for value of ksize + sciErr = getVarAddressFromPosition(pvApiCtx,3,&piAddr3); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr3 ,&ksize); + if(intErr) + return intErr; + + //for value of scale + sciErr = getVarAddressFromPosition(pvApiCtx,4,&piAddr4); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr4,&scale); + if(intErr) + return intErr; + + //for value of delta + sciErr = getVarAddressFromPosition(pvApiCtx,5,&piAddr5); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr5 ,&delta); + if(intErr) + return intErr; + + + Mat new_image(image.rows,image.cols,CV_8UC3); + if((int)ksize!=1 && (int)ksize!=3 && (int)ksize!=5 && (int)ksize!=7) + { + sciprint("Value of 1,3,5,7 Required for ksize. Default value of 3 was used instead"); + ksize=3; + } + + if(strcmp(ddepth[0],"CV_8U")==0) + Laplacian(image,new_image,CV_8U,ksize,scale,delta); + else if(strcmp(ddepth[0],"CV_16U")==0) + Laplacian(image,new_image,CV_16U,ksize,scale,delta); + else if(strcmp(ddepth[0],"CV_16S")==0) + Laplacian(image,new_image,CV_16S,ksize,scale,delta); + else if(strcmp(ddepth[0],"CV_32F")==0) + Laplacian(image,new_image,CV_32F,ksize,scale,delta); + else if(strcmp(ddepth[0],"CV_64F")==0) + Laplacian(image,new_image,CV_64F,ksize,scale,delta); + else + { + Laplacian(image,new_image,CV_8U,ksize,scale,delta); + sciprint("Wrong depth given,using CV_8U instead"); + } + + string tempstring = type2str(new_image.type()); + char *checker; + checker = (char *)malloc(tempstring.size() + 1); + memcpy(checker, tempstring.c_str(), tempstring.size() + 1); + returnImage(checker,new_image,1); + free(checker); + + //Assigning the list as the Output Variable + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + //Returning the Output Variables as arguments to the Scilab environment + ReturnArguments(pvApiCtx); + return 0; + + } +/* ==================================================================== */ +} diff --git a/sci_gateway/cpp/opencv_medianblur.cpp b/sci_gateway/cpp/opencv_medianblur.cpp new file mode 100644 index 0000000..6e26ff2 --- /dev/null +++ b/sci_gateway/cpp/opencv_medianblur.cpp @@ -0,0 +1,88 @@ +/******************************************************** + Author: Sukul Bagai +********************************************************/ + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include + #include "../common.h" + + int opencv_medianblur(char *fname, unsigned long fname_len) + { + + SciErr sciErr; + int intErr = 0; + int iRows=0,iCols=0; + int *piAddr = NULL; + int *piAddrNew = NULL; + int *piAddr2 = NULL; + int *piAddr3 = NULL; + int *piAddr4 = NULL; + int *piAddr5 = NULL; + int i,j,k; + double ksize; + + //checking input argument + CheckInputArgument(pvApiCtx, 2, 2); + CheckOutputArgument(pvApiCtx, 1, 1) ; + + try{ + Mat image,new_image; + retrieveImage(image, 1); + image.convertTo(image,CV_8U); + //for value of ksize + sciErr = getVarAddressFromPosition(pvApiCtx,2,&piAddr2); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + intErr = getScalarDouble(pvApiCtx, piAddr2, &ksize); + if(intErr) + { + return intErr; + } + + new_image=image.clone(); + + //checking input parameters + if((int)ksize != 1 && (int)ksize != 3 && (int)ksize != 5 && (int)ksize != 7) + { + sciprint("Value of 1,3,5,7 Required for ksize. Default value of 3 was used instead"); + ksize = 3; + } + + medianBlur(image,new_image,ksize); + + + string tempstring = type2str(new_image.type()); + char *checker; + checker = (char *)malloc(tempstring.size() + 1); + memcpy(checker, tempstring.c_str(), tempstring.size() + 1); + returnImage(checker,new_image,1); + free(checker); + } + catch(cv::Exception& e){ + const char* err=e.what(); + Scierror(999,("%s",err)); + } + //Assigning the list as the Output Variable + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + //Returning the Output Variables as arguments to the Scilab environment + ReturnArguments(pvApiCtx); + return 0; + + } +/* ==================================================================== */ +} diff --git a/sci_gateway/cpp/opencv_montage.cpp b/sci_gateway/cpp/opencv_montage.cpp new file mode 100644 index 0000000..2725ba8 --- /dev/null +++ b/sci_gateway/cpp/opencv_montage.cpp @@ -0,0 +1,161 @@ +/*************************************************** +Author : Sukul Bagai & M Avinash Reddy +Creates a montage with 1-6 input images +***************************************************/ + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include "sciprint.h" + #include "../common.h" + +int opencv_montage(char *fname, unsigned long fname_len) +{ + SciErr sciErr; + int iLen = 0; + //variable info + int iRows = 0; + int iCols = 0; + int *piAddr = NULL; + int *piAddr2 = NULL; + int *piAddr3 = NULL; + int *piAddrChild = NULL; + int *piAddrNew = NULL; + int piRows = 0; + int piCols = 0; + int *piLen = NULL; + char **pstData = NULL; + int **pstData1 = NULL; + int i,j,k=0,iItem=0,height,width,intErr=0,l,num; + double new_rows,new_cols; + unsigned char *pstDataR = NULL; + unsigned char *pstDataG = NULL; + unsigned char *pstDataB = NULL; + + CheckInputArgument(pvApiCtx, 3, 8); + CheckOutputArgument(pvApiCtx, 1, 1) ; + + + try{ + + num=*getNbInputArgument(pvApiCtx); + num=num-2; + iItem=num; + vector image; + for(l=0;l= iItem) || ((new_rows*new_cols) < iItem) ) + { + Scierror(999,("Given Row and Column Dimensions do not match with number of images in list. Montage cannot be created. Please check arguments\n")); + return 0; + } + height=new_rows*image[0].rows; + width=new_cols*image[0].cols; + + Mat new_image(height,width,CV_8UC3); + + k=0; + + for(int x=0;x(image[k].rows*x+i,image[k].cols*y+j)[2]=image[k].at(i,j)[2]; + new_image.at(image[k].rows*x+i,image[k].cols*y+j)[1]=image[k].at(i,j)[1]; + new_image.at(image[k].rows*x+i,image[k].cols*y+j)[0]=image[k].at(i,j)[0]; + } + } + } + k++; + } + } + + + string tempstring = type2str(new_image.type()); + char *checker; + checker = (char *)malloc(tempstring.size() + 1); + memcpy(checker, tempstring.c_str(), tempstring.size() + 1); + returnImage(checker,new_image,1); + free(checker); + } + + catch(cv::Exception& e){ + const char* err=e.what(); + Scierror(999,("%s",err)); + } + //Assigning the list as the Output Variable + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; + //Returning the Output Variables as arguments to the Scilab environment + ReturnArguments(pvApiCtx); + + return 0; +} +/* ==================================================================== */ +} diff --git a/sci_gateway/cpp/opencv_seamfind.cpp b/sci_gateway/cpp/opencv_seamfind.cpp new file mode 100644 index 0000000..8a549b3 --- /dev/null +++ b/sci_gateway/cpp/opencv_seamfind.cpp @@ -0,0 +1,266 @@ +//Author- M Avinash Reddy + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include "opencv2/stitching/detail/blenders.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +using namespace cv; +using namespace cv::detail; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include "sciprint.h" + #include "../common.h" + +int opencv_seamfind(char *fname,unsigned long fname_len){ + + SciErr sciErr; + CheckInputArgument(pvApiCtx, 3, 7); + CheckOutputArgument(pvApiCtx, 1, 1); + int *piaddrvar=NULL; + double choice=0; + int num,i,j,intErr; + double scale = 1; + bool do_wave_correct = true; + int expos_comp_type = ExposureCompensator::GAIN_BLOCKS; + string seam_find_type = "gc_color"; + float blend_strength = 5; + float match_conf = 0.3f; + float conf_thresh = 1.f; + WaveCorrectKind wave_correct_type = WAVE_CORRECT_HORIZ; + + + + num=*getNbInputArgument(pvApiCtx); + num=num-1; + sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piaddrvar); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + if ( !isDoubleType(pvApiCtx, piaddrvar)) + { + Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 1); + return 0; + } + + intErr = getScalarDouble(pvApiCtx, piaddrvar,&choice); + if (intErr) + { + + return intErr; + } + if(choice<1 || choice>num){ + Scierror(999, _("%s:Invalid input argument #%d: Choice has to be between 1 and %d\n"), fname,1,num); + return 0; + } + try{ + vector full_img_sizes(num); + vector images(num); + vector imagescopy(num); + + Ptr finder; + finder = makePtr(); + + vector features(num); + Mat image1,img; + for(i=0;icollectGarbage(); + image1.release(); + img.release(); + + + vector pairwise_matches; + BestOf2NearestMatcher matcher(false, match_conf); + matcher(features, pairwise_matches); + matcher.collectGarbage(); + + + vector indices = leaveBiggestComponent(features, pairwise_matches, conf_thresh); + //cout< img_subset; + //vector img_names_subset; + vector full_img_sizes_subset; + for (i = 0; i < indices.size(); ++i) + { + //img_names_subset.push_back(img_names[indices[i]]); + img_subset.push_back(images[indices[i]]); + full_img_sizes_subset.push_back(full_img_sizes[indices[i]]); + } + + images = img_subset; + full_img_sizes = full_img_sizes_subset; + + + HomographyBasedEstimator estimator; + vector cameras; + + if (!estimator(features, pairwise_matches, cameras)){ + sciprint("Homography estimation failed.\n"); + return 0; + } + for (i = 0; i < cameras.size(); ++i) + { + Mat R; + cameras[i].R.convertTo(R, CV_32F); + cameras[i].R = R; + //cout << "Initial intrinsic #" << indices[i]+1 << ":\n" < adjuster; + adjuster = makePtr(); + + adjuster->setConfThresh(conf_thresh); + if (!(*adjuster)(features, pairwise_matches, cameras)) { + sciprint("Camera parameters adjusting failed.\n"); + return 0; + } + + + vector focals; + for ( i = 0; i < cameras.size(); ++i) + { + //cout << "Camera #" << indices[i]+1 << ":\n" << cameras[i].K()<< endl; + focals.push_back(cameras[i].focal); + + } + sort(focals.begin(), focals.end()); + float warped_image_scale; + if (focals.size() % 2 == 1){ + warped_image_scale = static_cast(focals[focals.size() /2]); + } + else{ + warped_image_scale = static_cast(focals[focals.size() /2 - 1] + focals[focals.size() / 2]) * 0.5f; + } + + + if (do_wave_correct) + { + vector rmats; + for (size_t i = 0; i < cameras.size(); ++i) + rmats.push_back(cameras[i].R.clone()); + waveCorrect(rmats, wave_correct_type); + for (size_t i = 0; i < cameras.size(); ++i) + cameras[i].R = rmats[i]; + } + + vector corners(num); + vector masks_warped(num); + vector images_warped(num); + vector sizes(num); + vector masks(num); + + for ( i = 0; i < num; ++i) + { + masks[i].create(images[i].size(), CV_8U); + masks[i].setTo(Scalar::all(255)); + } + + Ptr warper_creator; + warper_creator = makePtr(); + if (!warper_creator){ sciprint("Can't create the following warper"); return 0; } + + Ptr warper = warper_creator->create(static_cast(warped_image_scale * scale)); + for (i = 0; i < num; ++i) + { + Mat_ K; + cameras[i].K().convertTo(K, CV_32F); + float swa = (float)scale; + K(0,0) *= swa; K(0,2) *= swa; + K(1,1) *= swa; K(1,2) *= swa; + corners[i] = warper->warp(images[i], K, cameras[i].R, INTER_LINEAR, BORDER_REFLECT, images_warped[i]); + sizes[i] = images_warped[i].size(); + warper->warp(masks[i], K, cameras[i].R, INTER_NEAREST, BORDER_CONSTANT, masks_warped[i]); + } + + vector images_warped_f(num); + for (i = 0; i < num; ++i) + images_warped[i].convertTo(images_warped_f[i], CV_32F); + + + Ptr compensator = ExposureCompensator::createDefault(expos_comp_type); + compensator->feed(corners, images_warped, masks_warped); + //cout< seam_finder; + seam_finder = makePtr(GraphCutSeamFinderBase::COST_COLOR); + + seam_finder->find(images_warped_f, corners, masks_warped); + + Mat result=masks_warped[choice-1].getMat('ACCESS_RW'); + + + for(i=0;i(i,j)==0){ + + images[choice-1].at(i,j)[0]=0; + images[choice-1].at(i,j)[1]=0; + images[choice-1].at(i,j)[2]=0; + + + } + + + + + + } + } + + + string tempstring = type2str(images[choice-1].type()); + char *checker; + checker = (char *)malloc(tempstring.size() + 1); + memcpy(checker, tempstring.c_str(), tempstring.size() + 1); + returnImage(checker,images[choice-1],1); + free(checker); + } + + catch(cv::Exception& e){ + const char* err=e.what(); + sciprint("%s",err); + } + + AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;; + //Returning the Output Variables as arguments to the Scilab environment + ReturnArguments(pvApiCtx); + return 0; + + } +} diff --git a/sci_gateway/cpp/opencv_warp.cpp b/sci_gateway/cpp/opencv_warp.cpp new file mode 100644 index 0000000..d6bfe30 --- /dev/null +++ b/sci_gateway/cpp/opencv_warp.cpp @@ -0,0 +1,195 @@ +//Author-Avinash Reddy + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include "opencv2/stitching/detail/blenders.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace cv; +using namespace cv::detail; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include "sciprint.h" + #include "../common.h" + + int opencv_warp(char *fname,unsigned long fname_len) + { + SciErr sciErr; + int intErr = 0; + int *piAddr = NULL; + int *piAddVar1 = NULL; + int *piAddVar2 = NULL; + int *piAddVar3 = NULL; + int iLen = 0; + //variable info + int iRows = 0; + int iCols = 0; + int piRows = 0; + int piCols = 0; + int *piLen = NULL; + char **pstData = NULL; + int **pstData1 = NULL; + + int num_images = 2; + + //Check input and output arguments + CheckInputArgument(pvApiCtx,num_images,num_images); + CheckOutputArgument(pvApiCtx,num_images,num_images); + + try + { + vector images(num_images); + for(int i=0;i finder; + finder = makePtr(); + vector features(num_images); + for(int i = 0; i < num_images; i++) + { + images[i].convertTo(images[i],CV_8UC3); + resize(images[i],images[i],Size(),fx,fy); + (*finder)(images[i],features[i]); + features[i].img_idx = i; + } + finder->collectGarbage(); + + //Pair_wise matching + float match_conf = 0.3f; + vector pairwise_matches; + BestOf2NearestMatcher matcher(false,match_conf); + matcher(features,pairwise_matches); + matcher.collectGarbage(); + + //Estimate camera parameters + HomographyBasedEstimator estimator; + vector cameras; + if(!estimator(features,pairwise_matches,cameras)) + { + sciprint("Estimator Failed"); + return -1; + } + + size_t cameras_size = cameras.size(); + + for(size_t i=0;i adjuster; + adjuster = makePtr(); + adjuster->setConfThresh(conf_thresh); + if (!(*adjuster)(features, pairwise_matches, cameras)) + { + sciprint("Adjuster Failed"); + return -1; + } + + //Median focal + vector focals; + for(size_t i=0;i rmats; + WaveCorrectKind wave_correct_type = WAVE_CORRECT_HORIZ; + for (size_t i = 0; i < cameras.size(); ++i) + { + rmats.push_back(cameras[i].R.clone()); + } + + waveCorrect(rmats, wave_correct_type); + for (size_t i = 0; i < cameras.size(); ++i) + { + cameras[i].R = rmats[i]; + } + + //Warping + vector masks(num_images); + vector corners(num_images); + vector sizes(num_images); + vector masks_warped(num_images); + vector images_warped(num_images); + for(int i=0;i warper_creator; + warper_creator = makePtr(); + Ptr warper = warper_creator->create((float)(median_focal)); + for(int i=0;i K; + cameras[i].K().convertTo(K, CV_32F); + corners[i] = warper->warp(images[i], K, cameras[i].R, INTER_LINEAR, BORDER_REFLECT, images_warped[i]); + sizes[i] = images_warped[i].size(); + warper->warp(masks[i], K, cameras[i].R, INTER_NEAREST, BORDER_CONSTANT, masks_warped[i]); + } + + vector images_warped_f(num_images); + for (int i=0;i