Zrozumienie zdegenerowanych przypadków homografii jest kluczem. Nie można uzyskać dobrej homografii, jeśli punkty są współliniowe lub bliskie współliniowości, na przykład. Również ogromne szare kwadraty mogą wskazywać na ekstremalne skalowanie. Oba przypadki mogą wynikać z faktu, że w ostatecznej kalkulacji homografii występuje bardzo niewiele wartości lub mapowanie jest nieprawidłowe.
Aby upewnić się, że tak się nie stanie:
1. Upewnij się, że punkty są dobrze rozłożone na obu obrazach.
2. Upewnij się, że istnieje co najmniej 10-30 odpowiedników (4 wystarcza, jeśli hałas jest mały).
3. Upewnij się, że punkty są poprawnie dopasowane, a transformacja jest homografią.
Aby znaleźć złe homografie, zastosuj znalezione H do oryginalnych punktów i zobacz separację od spodziewanych punktów, czyli |x2-H*x1| < Tdist
, gdzie Tdist
jest progiem błędu odległości. Jeśli jest tylko kilka punktów, które spełniają ten próg, twoja homografia może być zła i prawdopodobnie naruszyłeś jeden z wyżej wymienionych wymagań.
+1 dla SVD ..... – Throwback1986
Czy ktoś mógłby wyjaśnić 2.stanie dalej? Jak mogę obliczyć SVD i sprawdzić, czy stosunek pierwszej do ostatniej wartości jednostkowej jest w zgodzie z OpenCV? – Tony
http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#SVD przekazać NO_UV, ponieważ jesteś zainteresowany tylko wartościami osobliwymi. Następnie współczynnik obliczeniowy (liczba warunków) od pierwszej do ostatniej wartości osobliwej. Zobacz też objaśnienie numeru warunku: http://books.google.com/books?id=1aAOdzK3FegC&pg=PA69&lpg=PA69&dq=numeryczne+warunki+bezpieczeństwa+numer&source=bl&ots=3iSoC8Hoqi&sig=Aq1Yc2MHTpXPI4t8wIhU7h388jg&hl=en&sa=X&ei=hUmKUaqeMemx0QXr -ICAAg & ved = 0CDMQ6AEwAA # v = onepage & q = numeryczne% 20recepty% 20warunki% 20numer & f = false –