Pracuję nad programem, który prześledzi kropki w centrum binarnych bloków przypominających zakrzywione elementy konfetti. Później dopasuję te punkty za pomocą splajnu sześciennego śledzącego krzywą.Jak wypróbować linię na kropelce pod kątem prostopadłym? (w Pythonie/OpenCV, chyba że sugerujesz przejście na coś innego)
W ramach programu, muszę:
- utworzyć 2D wektor próbkowania skośną linię na obrazie binarnym,
- obliczyć kąt używać przy każdym położeniu wzdłuż confetti plama.
Oto niektóre przykłady obrazów i szkice co punkty prześledzić może wyglądać następująco:
Znalezienie centrum pionowego odcinka czarna konfetti jest prosta. Pod warunkiem, że znajdujesz się w czarnym pikselu, znajdź lewą i prawą białą krawędź, środek to połowa odległości między nimi. Jest to łatwe, ponieważ wektor 2D użyty do wykonania powyższych obliczeń jest tylko rzędem obrazu.
Ale kawałki konfetti nie zawsze kolejce prosto i pionowo! Czasami są zakrzywione lub wyrównane poziomo. Tu potrzebny jest wektor 2D, który przecina przekrój przez konfetti pod kątem. Jaki jest najskuteczniejszy sposób pobrania tego zakrzywionego wektora z obrazu? Praktycznie, w bibliotece przetwarzania obrazów, takiej jak Python PIL lub OpenCV, istnieją operacje, które mogą uzyskać wektory linii pod kątami przez obraz? Jeśli ją stworzyłem, jak mogę się upewnić, że jest skuteczny?
Jaki jest najbardziej efektywny sposób obliczenia kąta wektora? Jednym ze sposobów uzyskania odpowiedniego kąta jest znalezienie kąta, który spowoduje minimalną szerokość czarnego segmentu w zwróconym wektorze 2D. Nie muszę tego robić w sposób wyczerpujący, tylko przechodzić przez 360 stopni z krokiem co 30 stopni Innym sposobem uzyskania odpowiedniego kąta może być znalezienie stycznej krzywej kształtu konfetti i użycie linii prostopadłej do tej - ale to może być bardziej skomplikowany.
Wszelkie przemyślenia na temat lepszego rozwiązania problemu będą bardzo pomocne. Dowolne konkretne sugestie dotyczące sposobu pobrania linii 2d na obrazie i skuteczny sposób uzyskania prostopadłego kąta również byłyby świetne.
Konturowe przerzedzenie może być przydatne - zajrzę do tego. Myślę, że szkieletyzacja będzie zbyt kosztowna pod względem obliczeniowym, ponieważ w końcu zrobię to na wideo, jeśli nie w czasie rzeczywistym. Jest to jednak ładna biblioteka przetwarzania obrazów Python! – user391339