Výsledky 1 až 17 z 17

Téma: Algoritmus na 4-bodovou kalibraci 2D mapy?

Hybrid View

Předcházející příspěvek Předcházející příspěvek   Další příspěvek Další příspěvek
  1. #1

    Standardní Algoritmus na 4-bodovou kalibraci 2D mapy?

    Zdar,
    neresil tu nekdo nahodou problem kalibrace 2D mapy?
    Potreboval bych napsat fci, ktere dam 4 2D souradnice bodu na mape (v pixelech) a 4 2D souradnice (v nejakem systemu, treba wgs), a nasledne mi tato fce podle zadaneho bodu [x,y] vrati prepoctene souradnice [x',y']v pixelech (a naopak, inverzni fce).
    Mam napsanou jednochou verzi pro 2-bodovou kalibraci, ktera ale predpoklada ze osy obou sour. systemu sou rovnobezne, zistil sem vsak ze mapa je asi o 0.5stupne pootocena...

    BTW mozna by stacily jen 3 body, ale asi by musely tvorit pravouhly trojuhelnik..

    EDIT:
    Aby to bylo jasny, tak tady este nacrtek (znam x1-4,y1-4 a jejich obrazy, hledam funkci f)

    Idealni by byl zdrojak v C ale postaci nejaky odkaz kde se tohle resi, zatim sem nic rozumnyho nenasel.
    Naposledy upravil RayeR; 04.09.2007 v 20:49.

    Gigabyte GA-P67-DS3-B3, Core i7-2600K@4,5GHz, 2xKingston 2GB/1866MHz/CL11, Leadtek 7900GT-256MB DDR3 + Accelero S1, SB-Audigy + YMF724 + DreamBlaster combo, tuner FlyDVB duo, SSD Samsung 840 Pro 128GB + WD1003FBYX RE4 1TB, Seasonic S12II-430, 21" NEC 2190UXp, DVD-RW NEC 4550A->4551A mod, CD-RW Teac 524E, ZIP100, FDD, Canon PowerShot A70, A95+hacked firmware, EOS 350D+CHDK, Pentax K-30, Galaxy S3+CM13, HP ipaq 214, HP 200LX.
    2nd PC: Gigabyte GA-P31-DS3L with custom BIOS, Core2 Duo E8600@4,0GHz, 2xKingston 2GB/1066MHz/CL5
    3rd PC: Abit BX133-Raid, Tualatin 1300@1733/133/1,65V, 2x256MB. WEB: http://rayer.g6.cz

  2. #2

    Standardní Re: Algoritmus na 4-bodovou kalibraci 2D mapy?

    Tak uz zhruba vim jak na to, jen este nakej alg. na spocteni inverzni matice 9xn

    Gigabyte GA-P67-DS3-B3, Core i7-2600K@4,5GHz, 2xKingston 2GB/1866MHz/CL11, Leadtek 7900GT-256MB DDR3 + Accelero S1, SB-Audigy + YMF724 + DreamBlaster combo, tuner FlyDVB duo, SSD Samsung 840 Pro 128GB + WD1003FBYX RE4 1TB, Seasonic S12II-430, 21" NEC 2190UXp, DVD-RW NEC 4550A->4551A mod, CD-RW Teac 524E, ZIP100, FDD, Canon PowerShot A70, A95+hacked firmware, EOS 350D+CHDK, Pentax K-30, Galaxy S3+CM13, HP ipaq 214, HP 200LX.
    2nd PC: Gigabyte GA-P31-DS3L with custom BIOS, Core2 Duo E8600@4,0GHz, 2xKingston 2GB/1066MHz/CL5
    3rd PC: Abit BX133-Raid, Tualatin 1300@1733/133/1,65V, 2x256MB. WEB: http://rayer.g6.cz

  3. #3

    Standardní Re: Algoritmus na 4-bodovou kalibraci 2D mapy?

    Pokud si dobře vzpomínám na algebru, tak inverzní matice existuje jen ke čtvercové , protože matici a inverzní matice musejí být navzájem vynásobitelné, což je u čtvercových zaručeno.
    Jeden postup je:
    napsat si vedle matice jednotkovou
    původní matici Gaussovou eliminační metodou upravit na jednotkovou a stejné operace provádět s tou druhou. Výsledkem je, že z původně jednotkové matice se stane inverzní.
    Tady jsem vygooglil popis
    http://www.kolej.mff.cuni.cz/~lmotm2...ml/node55.html
    Je tady uvedený i druhý způsob přes determinanty, ale počítat determinanty matice rozměru +-9 je IMHO blbost, složité a dlouhé. Šel bych první cestou.

    Kdyby byl zájem můžu se mrknout, jestli ještě najdu skripta, pak bych je naskenoval.

    Kód:
    for (radek = 0; radek < n; radek ++) { /* projit vsechny radky */
       pivot = matice[radek][radek];
       for (i = 0; i < n; i++)
          matice[radek][i] /= -1 * pivot;    /*vyrobit jednicku na miste na hlavni diagonale */
       
       for (i = radek; i < n - 1; i++) {       /* projdu vsechny nizsi radky mimo posledniho */
          pivot = matice[i + 1][i] / matice[i][i] * -1;  /* cislo, kterym musim vynasobit radek a pricist k nizsimu radku */
          for (j = 0; j < n; j++) {  /* tady nasobim ten radek a pricitam ke spodnimu */
             matice[i + 1][j] += matice[i][j] * pivot
          }
       }
    }
    
    /* opakovat cele obracene, to jest odspoda nahoru a vytvaret nuly nad hlavni diagonalou. Ty same operace provadet s tou druhou matici */
    Je to jenom takovy lehoučký nástřel pro inspiraci, kdoví jestli by někde nějaký index nepřetekl apod. Možná je tam i logická chyba. Kdo ví . Ale zhruba takhle se to dělá.
    Naposledy upravil Warran; 19.03.2008 v 21:52. Důvod: Opravena chyba

  4. #4

    Standardní Re: Algoritmus na 4-bodovou kalibraci 2D mapy?

    Jenom bych podotkl, ze vypocet pres determinanty neni obecne slozitejsi. Mnohdy (u "nehezkych" cisel nebo u matic s neznamyma) je to vyhodnejsi nez pres jednotkovou matici. Navic u algoritmizace jsou potom determinanty/subdeterminanty zasadni.
    Black holes are where God divided by zero. - Steven Wright
    2600K s AC HF14 | P8P67Deluxe s 16GB DDR3 | GTX1080 s LP2480zx | EVO850 s ICH10R | X-Fi s HD555 | TripleXtreme 360 s HPPS+ | Windows 10 + 7

  5. #5

    Standardní Re: Algoritmus na 4-bodovou kalibraci 2D mapy?

    Citace Původně odeslal Haste
    Jenom bych podotkl, ze vypocet pres determinanty neni obecne slozitejsi.
    To je velká pravda.
    Ale dodal bych, že než se člověk dostane na matici 3x3, tak v případě matice 9x9 to bude patrně několik rekurzivních volání. Pokud si dobře vzpomínám, tak spočítat determinant matice n x n, kde n > 3 znamená spočítat 1 determinant matice n x n a n-1 determinantů matice rozměru n - 1. A pro každou to takhle rozvíjet až do řádu 3x3. Takže to narůstá neskutečným tempem a trvalo by to neskutečně dlouho. Učitel matematiky nám jednou demonstroval, že počítat takhle determinant matice 100x100 by i nejvýkonějšímu superpočítači trvalo miliardy let (možná desítky miliard).
    Pro matici 9x9 to myslím znamená následující:
    -1x determinant matice 9x9
    -8 x determinant matice 8x8
    (snad jsem to řekl dobře, nechce se mi hledat skripta z algebry).
    Leda by se ty determinanty počítaly jinak (úprava na dolní trojúhelníkovou a pak vynásobit prvky na hlavní diagonále ??), ale to je pak rovnou možné počítat tu inverzní matici tou první metodou.

  6. #6

    Standardní Re: Algoritmus na 4-bodovou kalibraci 2D mapy?

    Diky,
    uz sem sehnal nakej C kod na inv. matice, sou tam hned 2 algoritmy: Gauss routine a Crout routine. Gauss ma bejt rychlejsi a mene presnej, v praxi matice 1000x1000 trvala 0,4s a rozdil chyby byl par chlupu na poslednim desetinnym miste.

    K ty matici m*n, pry existuje neco jako pseudoinverzni matice, ktera je prave pro obdelnikovy a pocita se: (AT*A)^-1*AT (kde AT je transponovana k A)

    Gigabyte GA-P67-DS3-B3, Core i7-2600K@4,5GHz, 2xKingston 2GB/1866MHz/CL11, Leadtek 7900GT-256MB DDR3 + Accelero S1, SB-Audigy + YMF724 + DreamBlaster combo, tuner FlyDVB duo, SSD Samsung 840 Pro 128GB + WD1003FBYX RE4 1TB, Seasonic S12II-430, 21" NEC 2190UXp, DVD-RW NEC 4550A->4551A mod, CD-RW Teac 524E, ZIP100, FDD, Canon PowerShot A70, A95+hacked firmware, EOS 350D+CHDK, Pentax K-30, Galaxy S3+CM13, HP ipaq 214, HP 200LX.
    2nd PC: Gigabyte GA-P31-DS3L with custom BIOS, Core2 Duo E8600@4,0GHz, 2xKingston 2GB/1066MHz/CL5
    3rd PC: Abit BX133-Raid, Tualatin 1300@1733/133/1,65V, 2x256MB. WEB: http://rayer.g6.cz

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •