diff --git a/data/spindle_multi_black/0001.png b/data/spindle_multi_black/0001.png index 2bde06e..ebc8659 100644 Binary files a/data/spindle_multi_black/0001.png and b/data/spindle_multi_black/0001.png differ diff --git a/data/spindle_multi_black/0002.png b/data/spindle_multi_black/0002.png index bf63dd9..20acfc0 100644 Binary files a/data/spindle_multi_black/0002.png and b/data/spindle_multi_black/0002.png differ diff --git a/data/spindle_multi_black/0003.png b/data/spindle_multi_black/0003.png index 6d823cf..7991940 100644 Binary files a/data/spindle_multi_black/0003.png and b/data/spindle_multi_black/0003.png differ diff --git a/data/spindle_multi_black/0004.png b/data/spindle_multi_black/0004.png index 02a5b2c..3253184 100644 Binary files a/data/spindle_multi_black/0004.png and b/data/spindle_multi_black/0004.png differ diff --git a/data/spindle_multi_black/0005.png b/data/spindle_multi_black/0005.png index 8eca9b8..f2787ae 100644 Binary files a/data/spindle_multi_black/0005.png and b/data/spindle_multi_black/0005.png differ diff --git a/data/spindle_multi_black/0006.png b/data/spindle_multi_black/0006.png index 5385253..c72d2c1 100644 Binary files a/data/spindle_multi_black/0006.png and b/data/spindle_multi_black/0006.png differ diff --git a/data/spindle_multi_black/0007.png b/data/spindle_multi_black/0007.png index 542ba49..3d081ba 100644 Binary files a/data/spindle_multi_black/0007.png and b/data/spindle_multi_black/0007.png differ diff --git a/data/spindle_multi_black/0008.png b/data/spindle_multi_black/0008.png index 696dfff..6923eb5 100644 Binary files a/data/spindle_multi_black/0008.png and b/data/spindle_multi_black/0008.png differ diff --git a/data/spindle_multi_black/0009.png b/data/spindle_multi_black/0009.png index 1d84e2c..bd3246e 100644 Binary files a/data/spindle_multi_black/0009.png and b/data/spindle_multi_black/0009.png differ diff --git a/data/spindle_multi_black/0010.png b/data/spindle_multi_black/0010.png index abeaf87..7af0c44 100644 Binary files a/data/spindle_multi_black/0010.png and b/data/spindle_multi_black/0010.png differ diff --git a/data/spindle_multi_black/0011.png b/data/spindle_multi_black/0011.png index bdd09c1..c9c986e 100644 Binary files a/data/spindle_multi_black/0011.png and b/data/spindle_multi_black/0011.png differ diff --git a/data/spindle_multi_black/0012.png b/data/spindle_multi_black/0012.png index 6126ca0..c010e43 100644 Binary files a/data/spindle_multi_black/0012.png and b/data/spindle_multi_black/0012.png differ diff --git a/data/spindle_multi_black/0013.png b/data/spindle_multi_black/0013.png index 9e214ee..d05e04c 100644 Binary files a/data/spindle_multi_black/0013.png and b/data/spindle_multi_black/0013.png differ diff --git a/data/spindle_multi_black/0014.png b/data/spindle_multi_black/0014.png index 2c65b1c..c24f977 100644 Binary files a/data/spindle_multi_black/0014.png and b/data/spindle_multi_black/0014.png differ diff --git a/data/spindle_multi_black/0015.png b/data/spindle_multi_black/0015.png index e2c58f4..682d3fa 100644 Binary files a/data/spindle_multi_black/0015.png and b/data/spindle_multi_black/0015.png differ diff --git a/data/spindle_multi_black/0016.png b/data/spindle_multi_black/0016.png index 1ef1bb7..d89d66f 100644 Binary files a/data/spindle_multi_black/0016.png and b/data/spindle_multi_black/0016.png differ diff --git a/data/spindle_multi_black/0017.png b/data/spindle_multi_black/0017.png index e425793..e1308ee 100644 Binary files a/data/spindle_multi_black/0017.png and b/data/spindle_multi_black/0017.png differ diff --git a/data/spindle_multi_black/0018.png b/data/spindle_multi_black/0018.png index e4390cd..cead185 100644 Binary files a/data/spindle_multi_black/0018.png and b/data/spindle_multi_black/0018.png differ diff --git a/data/spindle_multi_black/0019.png b/data/spindle_multi_black/0019.png index 8d43d36..d0ae64c 100644 Binary files a/data/spindle_multi_black/0019.png and b/data/spindle_multi_black/0019.png differ diff --git a/data/spindle_multi_black/0020.png b/data/spindle_multi_black/0020.png index 370aac9..839ae8b 100644 Binary files a/data/spindle_multi_black/0020.png and b/data/spindle_multi_black/0020.png differ diff --git a/data/spindle_multi_black/0021.png b/data/spindle_multi_black/0021.png index 1816e1b..c2f1b59 100644 Binary files a/data/spindle_multi_black/0021.png and b/data/spindle_multi_black/0021.png differ diff --git a/data/spindle_multi_black/0022.png b/data/spindle_multi_black/0022.png index f6ac479..dbe30c0 100644 Binary files a/data/spindle_multi_black/0022.png and b/data/spindle_multi_black/0022.png differ diff --git a/data/spindle_multi_black/0023.png b/data/spindle_multi_black/0023.png index a424544..65baed3 100644 Binary files a/data/spindle_multi_black/0023.png and b/data/spindle_multi_black/0023.png differ diff --git a/data/spindle_multi_black/0024.png b/data/spindle_multi_black/0024.png index 47f4893..4dfabec 100644 Binary files a/data/spindle_multi_black/0024.png and b/data/spindle_multi_black/0024.png differ diff --git a/data/spindle_multi_black/0025.png b/data/spindle_multi_black/0025.png index 68b3233..3192ecd 100644 Binary files a/data/spindle_multi_black/0025.png and b/data/spindle_multi_black/0025.png differ diff --git a/data/spindle_multi_black/0026.png b/data/spindle_multi_black/0026.png index ca00ee9..44fe850 100644 Binary files a/data/spindle_multi_black/0026.png and b/data/spindle_multi_black/0026.png differ diff --git a/data/spindle_multi_black/0027.png b/data/spindle_multi_black/0027.png index 0db4c96..e8f44e8 100644 Binary files a/data/spindle_multi_black/0027.png and b/data/spindle_multi_black/0027.png differ diff --git a/data/spindle_multi_black/0028.png b/data/spindle_multi_black/0028.png index 8ba9082..e7a59b5 100644 Binary files a/data/spindle_multi_black/0028.png and b/data/spindle_multi_black/0028.png differ diff --git a/data/spindle_multi_black/0029.png b/data/spindle_multi_black/0029.png index be127b9..06f4881 100644 Binary files a/data/spindle_multi_black/0029.png and b/data/spindle_multi_black/0029.png differ diff --git a/data/spindle_multi_black/0030.png b/data/spindle_multi_black/0030.png index 36eb03a..4b14e04 100644 Binary files a/data/spindle_multi_black/0030.png and b/data/spindle_multi_black/0030.png differ diff --git a/data/spindle_multi_black/0031.png b/data/spindle_multi_black/0031.png index 153acd4..3423b13 100644 Binary files a/data/spindle_multi_black/0031.png and b/data/spindle_multi_black/0031.png differ diff --git a/data/spindle_multi_black/0032.png b/data/spindle_multi_black/0032.png index 1c5e677..2f02a05 100644 Binary files a/data/spindle_multi_black/0032.png and b/data/spindle_multi_black/0032.png differ diff --git a/data/spindle_multi_black/0033.png b/data/spindle_multi_black/0033.png index f01574d..0c6a6a3 100644 Binary files a/data/spindle_multi_black/0033.png and b/data/spindle_multi_black/0033.png differ diff --git a/data/spindle_multi_black/0034.png b/data/spindle_multi_black/0034.png index 62d5334..1c67418 100644 Binary files a/data/spindle_multi_black/0034.png and b/data/spindle_multi_black/0034.png differ diff --git a/data/spindle_multi_black/0035.png b/data/spindle_multi_black/0035.png index eb5d1c2..b263dbc 100644 Binary files a/data/spindle_multi_black/0035.png and b/data/spindle_multi_black/0035.png differ diff --git a/data/spindle_multi_black/0036.png b/data/spindle_multi_black/0036.png index 67690eb..73fa899 100644 Binary files a/data/spindle_multi_black/0036.png and b/data/spindle_multi_black/0036.png differ diff --git a/data/spindle_multi_black/0037.png b/data/spindle_multi_black/0037.png index e6f93d1..52e7358 100644 Binary files a/data/spindle_multi_black/0037.png and b/data/spindle_multi_black/0037.png differ diff --git a/data/spindle_multi_black/0038.png b/data/spindle_multi_black/0038.png index b2e7a4a..2a9a5ad 100644 Binary files a/data/spindle_multi_black/0038.png and b/data/spindle_multi_black/0038.png differ diff --git a/data/spindle_multi_black/0039.png b/data/spindle_multi_black/0039.png index 9148773..66cd12b 100644 Binary files a/data/spindle_multi_black/0039.png and b/data/spindle_multi_black/0039.png differ diff --git a/data/spindle_multi_black/0040.png b/data/spindle_multi_black/0040.png index c069ce9..b4c8962 100644 Binary files a/data/spindle_multi_black/0040.png and b/data/spindle_multi_black/0040.png differ diff --git a/data/spindle_multi_black/0041.png b/data/spindle_multi_black/0041.png index fdd129b..9294f79 100644 Binary files a/data/spindle_multi_black/0041.png and b/data/spindle_multi_black/0041.png differ diff --git a/data/spindle_multi_black/0042.png b/data/spindle_multi_black/0042.png index 326ae12..509bc53 100644 Binary files a/data/spindle_multi_black/0042.png and b/data/spindle_multi_black/0042.png differ diff --git a/data/spindle_multi_black/0043.png b/data/spindle_multi_black/0043.png index e898bc3..019f6cb 100644 Binary files a/data/spindle_multi_black/0043.png and b/data/spindle_multi_black/0043.png differ diff --git a/data/spindle_multi_black/0044.png b/data/spindle_multi_black/0044.png index d2fd097..3f556d9 100644 Binary files a/data/spindle_multi_black/0044.png and b/data/spindle_multi_black/0044.png differ diff --git a/data/spindle_multi_black/0045.png b/data/spindle_multi_black/0045.png index 2420eb8..82fc136 100644 Binary files a/data/spindle_multi_black/0045.png and b/data/spindle_multi_black/0045.png differ diff --git a/data/spindle_multi_black/0046.png b/data/spindle_multi_black/0046.png index 4031c14..6e9c34b 100644 Binary files a/data/spindle_multi_black/0046.png and b/data/spindle_multi_black/0046.png differ diff --git a/data/spindle_multi_black/0047.png b/data/spindle_multi_black/0047.png index 3214de3..aad9876 100644 Binary files a/data/spindle_multi_black/0047.png and b/data/spindle_multi_black/0047.png differ diff --git a/data/spindle_multi_black/0048.png b/data/spindle_multi_black/0048.png index fa7d51f..d89b901 100644 Binary files a/data/spindle_multi_black/0048.png and b/data/spindle_multi_black/0048.png differ diff --git a/data/spindle_multi_black/0049.png b/data/spindle_multi_black/0049.png index 33a4160..134f6e8 100644 Binary files a/data/spindle_multi_black/0049.png and b/data/spindle_multi_black/0049.png differ diff --git a/data/spindle_multi_black/0050.png b/data/spindle_multi_black/0050.png index 130fb04..7e237a2 100644 Binary files a/data/spindle_multi_black/0050.png and b/data/spindle_multi_black/0050.png differ diff --git a/data/spindle_multi_black/0051.png b/data/spindle_multi_black/0051.png index ab2935d..f8d69dd 100644 Binary files a/data/spindle_multi_black/0051.png and b/data/spindle_multi_black/0051.png differ diff --git a/data/spindle_multi_black/0052.png b/data/spindle_multi_black/0052.png index 0a6ed66..baa5873 100644 Binary files a/data/spindle_multi_black/0052.png and b/data/spindle_multi_black/0052.png differ diff --git a/data/spindle_multi_black/0053.png b/data/spindle_multi_black/0053.png index f33a7c7..dc976d9 100644 Binary files a/data/spindle_multi_black/0053.png and b/data/spindle_multi_black/0053.png differ diff --git a/data/spindle_multi_black/0054.png b/data/spindle_multi_black/0054.png index cad3cad..77d9e42 100644 Binary files a/data/spindle_multi_black/0054.png and b/data/spindle_multi_black/0054.png differ diff --git a/data/spindle_multi_black/0055.png b/data/spindle_multi_black/0055.png index c51fefc..32475bb 100644 Binary files a/data/spindle_multi_black/0055.png and b/data/spindle_multi_black/0055.png differ diff --git a/data/spindle_multi_black/0056.png b/data/spindle_multi_black/0056.png index 2133a9c..f3396dd 100644 Binary files a/data/spindle_multi_black/0056.png and b/data/spindle_multi_black/0056.png differ diff --git a/data/spindle_multi_black/0057.png b/data/spindle_multi_black/0057.png index 8e18786..727f20a 100644 Binary files a/data/spindle_multi_black/0057.png and b/data/spindle_multi_black/0057.png differ diff --git a/data/spindle_multi_black/0058.png b/data/spindle_multi_black/0058.png index d0da91d..0eb2406 100644 Binary files a/data/spindle_multi_black/0058.png and b/data/spindle_multi_black/0058.png differ diff --git a/data/spindle_multi_black/0059.png b/data/spindle_multi_black/0059.png index feb9832..267f4cc 100644 Binary files a/data/spindle_multi_black/0059.png and b/data/spindle_multi_black/0059.png differ diff --git a/data/spindle_multi_black/0060.png b/data/spindle_multi_black/0060.png index e852111..88e382d 100644 Binary files a/data/spindle_multi_black/0060.png and b/data/spindle_multi_black/0060.png differ diff --git a/data/spindle_multi_black/0061.png b/data/spindle_multi_black/0061.png index 0abc0ae..2ccb717 100644 Binary files a/data/spindle_multi_black/0061.png and b/data/spindle_multi_black/0061.png differ diff --git a/data/spindle_multi_black/0062.png b/data/spindle_multi_black/0062.png index 72d0deb..1c9a378 100644 Binary files a/data/spindle_multi_black/0062.png and b/data/spindle_multi_black/0062.png differ diff --git a/data/spindle_multi_black/0063.png b/data/spindle_multi_black/0063.png index fb75d77..7d3eab2 100644 Binary files a/data/spindle_multi_black/0063.png and b/data/spindle_multi_black/0063.png differ diff --git a/data/spindle_multi_black/0064.png b/data/spindle_multi_black/0064.png index b26cd94..eb757d7 100644 Binary files a/data/spindle_multi_black/0064.png and b/data/spindle_multi_black/0064.png differ diff --git a/data/spindle_multi_black/0065.png b/data/spindle_multi_black/0065.png index 810fc44..5c36f25 100644 Binary files a/data/spindle_multi_black/0065.png and b/data/spindle_multi_black/0065.png differ diff --git a/data/spindle_multi_black/0066.png b/data/spindle_multi_black/0066.png index 6de24e3..6080e39 100644 Binary files a/data/spindle_multi_black/0066.png and b/data/spindle_multi_black/0066.png differ diff --git a/data/spindle_multi_black/0067.png b/data/spindle_multi_black/0067.png index 4e7e899..5363a57 100644 Binary files a/data/spindle_multi_black/0067.png and b/data/spindle_multi_black/0067.png differ diff --git a/data/spindle_multi_black/0068.png b/data/spindle_multi_black/0068.png index 1cada39..5084da1 100644 Binary files a/data/spindle_multi_black/0068.png and b/data/spindle_multi_black/0068.png differ diff --git a/data/spindle_multi_black/0069.png b/data/spindle_multi_black/0069.png index 2814e57..ac1fd84 100644 Binary files a/data/spindle_multi_black/0069.png and b/data/spindle_multi_black/0069.png differ diff --git a/data/spindle_multi_black/0070.png b/data/spindle_multi_black/0070.png index 5b85c91..1f9b27e 100644 Binary files a/data/spindle_multi_black/0070.png and b/data/spindle_multi_black/0070.png differ diff --git a/data/spindle_multi_black/0071.png b/data/spindle_multi_black/0071.png index d0ff36b..e6ac415 100644 Binary files a/data/spindle_multi_black/0071.png and b/data/spindle_multi_black/0071.png differ diff --git a/data/spindle_multi_black/0072.png b/data/spindle_multi_black/0072.png index e535955..b7ca79c 100644 Binary files a/data/spindle_multi_black/0072.png and b/data/spindle_multi_black/0072.png differ diff --git a/data/spindle_multi_black/0073.png b/data/spindle_multi_black/0073.png index 691f38a..377e848 100644 Binary files a/data/spindle_multi_black/0073.png and b/data/spindle_multi_black/0073.png differ diff --git a/data/spindle_multi_black/0074.png b/data/spindle_multi_black/0074.png index d882e88..76b8e2f 100644 Binary files a/data/spindle_multi_black/0074.png and b/data/spindle_multi_black/0074.png differ diff --git a/data/spindle_multi_black/0075.png b/data/spindle_multi_black/0075.png index cb3946f..b9c124c 100644 Binary files a/data/spindle_multi_black/0075.png and b/data/spindle_multi_black/0075.png differ diff --git a/data/spindle_multi_black/0076.png b/data/spindle_multi_black/0076.png index 0219fd8..dc58b60 100644 Binary files a/data/spindle_multi_black/0076.png and b/data/spindle_multi_black/0076.png differ diff --git a/data/spindle_multi_black/0077.png b/data/spindle_multi_black/0077.png index 0c415b1..0fe3893 100644 Binary files a/data/spindle_multi_black/0077.png and b/data/spindle_multi_black/0077.png differ diff --git a/data/spindle_multi_black/0078.png b/data/spindle_multi_black/0078.png index aa30f21..a0e2ef0 100644 Binary files a/data/spindle_multi_black/0078.png and b/data/spindle_multi_black/0078.png differ diff --git a/data/spindle_multi_black/0079.png b/data/spindle_multi_black/0079.png index 8a1ebf0..c1526d6 100644 Binary files a/data/spindle_multi_black/0079.png and b/data/spindle_multi_black/0079.png differ diff --git a/data/spindle_multi_black/0080.png b/data/spindle_multi_black/0080.png index c717452..99ac6e2 100644 Binary files a/data/spindle_multi_black/0080.png and b/data/spindle_multi_black/0080.png differ diff --git a/data/spindle_multi_black/0081.png b/data/spindle_multi_black/0081.png index 5e4c496..0db010d 100644 Binary files a/data/spindle_multi_black/0081.png and b/data/spindle_multi_black/0081.png differ diff --git a/data/spindle_multi_black/0082.png b/data/spindle_multi_black/0082.png index 554dc1c..eb4f41f 100644 Binary files a/data/spindle_multi_black/0082.png and b/data/spindle_multi_black/0082.png differ diff --git a/data/spindle_multi_black/0083.png b/data/spindle_multi_black/0083.png index 9be512f..534c6a0 100644 Binary files a/data/spindle_multi_black/0083.png and b/data/spindle_multi_black/0083.png differ diff --git a/data/spindle_multi_black/0084.png b/data/spindle_multi_black/0084.png index bd8f86b..476d232 100644 Binary files a/data/spindle_multi_black/0084.png and b/data/spindle_multi_black/0084.png differ diff --git a/data/spindle_multi_black/0085.png b/data/spindle_multi_black/0085.png index 53298a0..1c5ff84 100644 Binary files a/data/spindle_multi_black/0085.png and b/data/spindle_multi_black/0085.png differ diff --git a/data/spindle_multi_black/0086.png b/data/spindle_multi_black/0086.png index edb2f69..1005ed0 100644 Binary files a/data/spindle_multi_black/0086.png and b/data/spindle_multi_black/0086.png differ diff --git a/data/spindle_multi_black/0087.png b/data/spindle_multi_black/0087.png index 4cd8118..5772b0d 100644 Binary files a/data/spindle_multi_black/0087.png and b/data/spindle_multi_black/0087.png differ diff --git a/data/spindle_multi_black/0088.png b/data/spindle_multi_black/0088.png index af73f73..53bce06 100644 Binary files a/data/spindle_multi_black/0088.png and b/data/spindle_multi_black/0088.png differ diff --git a/data/spindle_multi_black/0089.png b/data/spindle_multi_black/0089.png index 92d3fb9..e27133d 100644 Binary files a/data/spindle_multi_black/0089.png and b/data/spindle_multi_black/0089.png differ diff --git a/data/spindle_multi_black/0090.png b/data/spindle_multi_black/0090.png index c0d911a..94c9d42 100644 Binary files a/data/spindle_multi_black/0090.png and b/data/spindle_multi_black/0090.png differ diff --git a/data/spindle_multi_black/0091.png b/data/spindle_multi_black/0091.png index 4a0f4e8..4eb5aaf 100644 Binary files a/data/spindle_multi_black/0091.png and b/data/spindle_multi_black/0091.png differ diff --git a/data/spindle_multi_black/0092.png b/data/spindle_multi_black/0092.png index 8ba7d7c..247e9ce 100644 Binary files a/data/spindle_multi_black/0092.png and b/data/spindle_multi_black/0092.png differ diff --git a/data/spindle_multi_black/0093.png b/data/spindle_multi_black/0093.png index 0361e6c..c7c0ed9 100644 Binary files a/data/spindle_multi_black/0093.png and b/data/spindle_multi_black/0093.png differ diff --git a/data/spindle_multi_black/0094.png b/data/spindle_multi_black/0094.png index e472991..f1ee6d4 100644 Binary files a/data/spindle_multi_black/0094.png and b/data/spindle_multi_black/0094.png differ diff --git a/data/spindle_multi_black/0095.png b/data/spindle_multi_black/0095.png index 404f6d7..2401b0a 100644 Binary files a/data/spindle_multi_black/0095.png and b/data/spindle_multi_black/0095.png differ diff --git a/data/spindle_multi_black/0096.png b/data/spindle_multi_black/0096.png index 48dbdf4..bdc95e4 100644 Binary files a/data/spindle_multi_black/0096.png and b/data/spindle_multi_black/0096.png differ diff --git a/data/spindle_multi_black/0097.png b/data/spindle_multi_black/0097.png index 88f1e9c..c663cf8 100644 Binary files a/data/spindle_multi_black/0097.png and b/data/spindle_multi_black/0097.png differ diff --git a/data/spindle_multi_black/0098.png b/data/spindle_multi_black/0098.png index c12e757..5fbecb2 100644 Binary files a/data/spindle_multi_black/0098.png and b/data/spindle_multi_black/0098.png differ diff --git a/data/spindle_multi_black/0099.png b/data/spindle_multi_black/0099.png index c9d18b9..03de9be 100644 Binary files a/data/spindle_multi_black/0099.png and b/data/spindle_multi_black/0099.png differ diff --git a/data/spindle_multi_black/0100.png b/data/spindle_multi_black/0100.png index b8d7670..6a44de4 100644 Binary files a/data/spindle_multi_black/0100.png and b/data/spindle_multi_black/0100.png differ diff --git a/data/spindle_multi_black/0101.png b/data/spindle_multi_black/0101.png index 0b12c61..2817b1f 100644 Binary files a/data/spindle_multi_black/0101.png and b/data/spindle_multi_black/0101.png differ diff --git a/data/spindle_multi_black/0102.png b/data/spindle_multi_black/0102.png index 2a8bff1..7ca51df 100644 Binary files a/data/spindle_multi_black/0102.png and b/data/spindle_multi_black/0102.png differ diff --git a/data/spindle_multi_black/0103.png b/data/spindle_multi_black/0103.png index 34a38f2..d59d285 100644 Binary files a/data/spindle_multi_black/0103.png and b/data/spindle_multi_black/0103.png differ diff --git a/data/spindle_multi_black/0104.png b/data/spindle_multi_black/0104.png index 973e6cc..f0b0adc 100644 Binary files a/data/spindle_multi_black/0104.png and b/data/spindle_multi_black/0104.png differ diff --git a/data/spindle_multi_black/0105.png b/data/spindle_multi_black/0105.png index cd832dc..ba344ce 100644 Binary files a/data/spindle_multi_black/0105.png and b/data/spindle_multi_black/0105.png differ diff --git a/data/spindle_multi_black/0106.png b/data/spindle_multi_black/0106.png index 913e932..4f2c52b 100644 Binary files a/data/spindle_multi_black/0106.png and b/data/spindle_multi_black/0106.png differ diff --git a/data/spindle_multi_black/0107.png b/data/spindle_multi_black/0107.png index 5b79c40..40f5cf1 100644 Binary files a/data/spindle_multi_black/0107.png and b/data/spindle_multi_black/0107.png differ diff --git a/data/spindle_multi_black/0108.png b/data/spindle_multi_black/0108.png index a05153c..5ccf23d 100644 Binary files a/data/spindle_multi_black/0108.png and b/data/spindle_multi_black/0108.png differ diff --git a/data/spindle_multi_black/0109.png b/data/spindle_multi_black/0109.png index fd6b945..0ab8ec8 100644 Binary files a/data/spindle_multi_black/0109.png and b/data/spindle_multi_black/0109.png differ diff --git a/data/spindle_multi_black/0110.png b/data/spindle_multi_black/0110.png index b28518d..e8f9369 100644 Binary files a/data/spindle_multi_black/0110.png and b/data/spindle_multi_black/0110.png differ diff --git a/data/spindle_multi_black/0111.png b/data/spindle_multi_black/0111.png index 7581d46..e076947 100644 Binary files a/data/spindle_multi_black/0111.png and b/data/spindle_multi_black/0111.png differ diff --git a/data/spindle_multi_black/0112.png b/data/spindle_multi_black/0112.png index a524b51..fe22604 100644 Binary files a/data/spindle_multi_black/0112.png and b/data/spindle_multi_black/0112.png differ diff --git a/data/spindle_multi_black/0113.png b/data/spindle_multi_black/0113.png index 3922264..4c6d4fa 100644 Binary files a/data/spindle_multi_black/0113.png and b/data/spindle_multi_black/0113.png differ diff --git a/data/spindle_multi_black/0114.png b/data/spindle_multi_black/0114.png index 64e4060..3b2f243 100644 Binary files a/data/spindle_multi_black/0114.png and b/data/spindle_multi_black/0114.png differ diff --git a/data/spindle_multi_black/0115.png b/data/spindle_multi_black/0115.png index b489bc2..2b59fc0 100644 Binary files a/data/spindle_multi_black/0115.png and b/data/spindle_multi_black/0115.png differ diff --git a/data/spindle_multi_black/0116.png b/data/spindle_multi_black/0116.png index 74bcf2a..3fb4cf0 100644 Binary files a/data/spindle_multi_black/0116.png and b/data/spindle_multi_black/0116.png differ diff --git a/data/spindle_multi_black/0117.png b/data/spindle_multi_black/0117.png index b5b7ad8..a259816 100644 Binary files a/data/spindle_multi_black/0117.png and b/data/spindle_multi_black/0117.png differ diff --git a/data/spindle_multi_black/0118.png b/data/spindle_multi_black/0118.png index 57f4005..77d57b3 100644 Binary files a/data/spindle_multi_black/0118.png and b/data/spindle_multi_black/0118.png differ diff --git a/data/spindle_multi_black/0119.png b/data/spindle_multi_black/0119.png index f14b63d..704af1c 100644 Binary files a/data/spindle_multi_black/0119.png and b/data/spindle_multi_black/0119.png differ diff --git a/data/spindle_multi_black/0120.png b/data/spindle_multi_black/0120.png index d5eca01..a0918fb 100644 Binary files a/data/spindle_multi_black/0120.png and b/data/spindle_multi_black/0120.png differ diff --git a/ocv_corner_tracker.py b/ocv_corner_tracker.py index 11fbb03..05ba8bb 100644 --- a/ocv_corner_tracker.py +++ b/ocv_corner_tracker.py @@ -84,6 +84,8 @@ class Corner: return matcher_bbox_local, matcher_res def path_add(self, point): + if len(self.path) > 200: + return if self.line_from is not None: self._path.append({'from': self.line_from, 'to': point}) self.line_from = point @@ -127,18 +129,27 @@ class CornerTracker: tracker_rect = to_rect(self.tracking_bb) cv2.rectangle(image_anno, tracker_rect[0], tracker_rect[1], self.color, 1) - def init_reference_frame(self, image: np.array, select_window: np.array): + def init_reference_frame(self, image: np.array): print(f"Select tracking object") - self.tracking_ref_bb = cv2.selectROI("Tracker Reference", select_window, False) - self.tracking_ref_img = image_crop(image.copy(), self.tracking_ref_bb) - self.tracking_ref_gray_img = cv2.cvtColor(self.tracking_ref_img, cv2.COLOR_BGR2GRAY) + bb = cv2.selectROI("Tracker Reference", image, False) + cv2.destroyWindow("Tracker Reference") + if bbox_center(bb) == (0, 0): + return False + self.tracking_ref_bb = bb + self.tracking_ref_img = image_crop(image, self.tracking_ref_bb) + self.tracking_ref_gray_img = cv2.cvtColor(self.tracking_ref_img, cv2.COLOR_BGR2GRAY) self.corner_matcher_list = [] + corner_list = [] count = 1 while True: print(f"Add Corner {count}") - self.matching_tpl_bb = cv2.selectROI("Matcher Reference", self.tracking_ref_img, fromCenter=True, showCrosshair=True) + bb = cv2.selectROI("Matcher Reference", self.tracking_ref_img, fromCenter=True, showCrosshair=True) + if bbox_center(bb) == (0, 0): + break + + self.matching_tpl_bb = bb self.matching_tpl_img = image_crop(self.tracking_ref_gray_img.copy(), self.matching_tpl_bb) self.corner_matcher_list.append(Corner(self.matching_tpl_img, self.matching_tpl_bb, name=f"Corner-{count}")) corner_list.append(bbox_center(bbox_add_position(self.matching_tpl_bb, self.tracking_ref_bb))) @@ -146,11 +157,9 @@ class CornerTracker: print(f"Corner {count} added") print(f"Press any key to add another corner or ESC to continue") - k = cv2.waitKey(-1) & 0xff - if k == 27: - break count += 1 + cv2.destroyWindow("Matcher Reference") print(f"Added {count} corners") # Initialize tracker with first frame and bounding box @@ -160,6 +169,8 @@ class CornerTracker: # Refine initial corners and store them as reference self.corner_ref = self._corner_refine(cv2.cvtColor(image, cv2.COLOR_BGR2GRAY), corners=corner_list) + return len(corner_list) > 0 + def process(self, image: np.array, image_anno: np.array): if self.tracker is None: raise Exception(f"{self.name}: Call init_reference_frame() first") @@ -260,19 +271,18 @@ if __name__ == '__main__': if video.isOpened(): # Read first frame. ok, image = video.read() - select_window = image.copy() if ok: for tracker_count in range(0, 6): + select_window = image.copy() print(f"Add tracker #{tracker_count}") ct = CornerTracker(colors[tracker_count], name=f"Tracker-{tracker_count}") - ct.init_reference_frame(image, select_window) - tracker_list.append(ct) - print(f"Press any key to add another tracker or ESC to continue") - k = cv2.waitKey(-1) & 0xff - if k == 27: + ok = ct.init_reference_frame(select_window) + if ok: + tracker_list.append(ct) + print(f"Number of active tracker: {len(tracker_list)}") + else: break - print(f"Number of active tracker: {len(tracker_list)}") else: print('Cannot read video file') @@ -285,8 +295,8 @@ if __name__ == '__main__': i = 0 for ct in tracker_list: mean_distance = ct.process(image, image_anno) - cv2.putText(image_anno, f"Distance [{i}] : {mean_distance}", (50, 20 + 20 * i), - cv2.FONT_HERSHEY_SIMPLEX, 0.6, ct.color, 1) + cv2.putText(image_anno, f"Distance [{i}] : ({mean_distance[0]:+05.2f}, {mean_distance[1]:+05.2f})", (20, 25 + 25 * i), + cv2.FONT_HERSHEY_SIMPLEX, 0.5, ct.color, 1) i += 1 cv2.imshow(f"Image Anno", image_anno) else: