Skip navigation

Pontpár-alapú regisztráció OpenCV-ben

OpenCV pontkijelölés

Korábban már foglalkoztunk az egéresemény kezelésével a Python-OpenCV programjainkban (Numpy képreprezentáció). A 05_01_ocv_mouse_click.py példaprogramunk ezt kiegészíti a pontok tömbben való feljegyzésével és a egy jelölő képmátrixba rajzolásával.

  • Pontot kijelölni a bal egérgomb lenyomásával tudunk.
  • Az r billentyű törli a pontlistát és visszaállítja az eredeti képet.
  • A q billentyűvel léphetünk ki a programból.

Affin transzformáció keresése és végrehajtása

05_02_ocv_reg_similarity.py példaprogramunk betölt két képet, amelyek egymás elforgatottjai, és lehetőséget biztosít pontpárok kijelölésével azok illesztésére. Fontos, hogy a pontpárok megadási sorrendje egyező legyen a két képen! Legalább 3 pontpárra van szükségünk a transzformáció számításához.

Megjegyzezzük, hogy az OpenCV nem ad függvényt merev-test regisztráció keresésére, csak hasonlósági vagy affin transzformáció használható! Ezekben az esetekben sem legkisebb négyzetes illesztés valósul meg, mert a nem párosíthatónak vált pontokat előzetesen kiszűri, vagy eleve csak 3 pontpár alapján számol!

Feladatok

Próbáljuk ki az előző példaprogramot!

  • Kattintsunk legalább 3 pontpárra a képeken!
  • Bővítsük a kijelölést további párokkal!
  • Figyeljük a konzolra kiírt forgatómátrix determináns értéket!
  • Kattintsunk minél pontosabban és kisebb-nagyobb hibákkal is!
  • Próbáljuk ki a cv2.getAffineTransform() és a cv2.estimateAffine2D() függvényeket is!

Kiterjesztés perspektív transzformáció keresésére

  • Legalább 4 pontpár szükséges!
    • if (len(refPts) == len(movPts)) and (len(refPts) >= 4):
  • cv2.findHomography() kell. A method paraméter 0 legyen. Lehetséges használati mód:
    • M, mask = cv2.findHomography(mov_pts, src_pts, 0)
  • Perspektív transzformáció végrehajtása képen (warpPerspective):
    • image_reg = cv2.warpPerspective(clone2, M, (w, h))

SVD alapú 2D merev test és hasonlósági transzformáció keresése

05_03_sim_svd_transform_pts_interactive.py példaprogram megvalósítja az előadás anyagában szereplő, SVD felbontáson alapuló merev test és hasonlósági transzformáció keresést.

Példát mutat arra is, hogyan lehet eltérő színű markereket rajzolni, valamint az eredményt fúzionálni.