Sadržaj

Sažetak

U ovom seminaru objašnjen je jednostavan način kako odrediti dimenziju objekta na fotografiji. Prikazani algoritam kojim je to moguće ostvariti koristi referentni objekt koji se mora nalaziti na fotografiji, kako bi usporedili veličine na fotografiji i u stvarnosti. Ukratko je i opisan pokazni primjer koji koriste programsku knjižnicu OpenCV koja omogućava razne obrade fotografije.

Uvod

Danas se može primjetiti ubrzani razvoj računalnog vida, što omogućava razne nove primjene. Jedna od tih primjena je mjerenje dimenzija objekata na forografiji. Primjenu ovakvih metoda postoji već dulje vrijeme, no sada su te metode automatizirane te prestaje potreba za ljudskim intervencijama. Klasičan primjer uporabe ove metode možemo vidjeti u svakoj kriminalističkoj seriji, gdje se objekti fotografiraju pored ravnala da se kasnije mogu odrediti njihove dimenzije. U ovom seminaru biti će opisan sličan postupak, gdje postoji referentni objekt čiju veličinu poznajemo i pomoću njega određujemo veličinu svih ostalih objekata na fotografiji. Također ukratko će se opisati programksa knjižnica OpenCV koja omogućava jednostavno rješavanje ovog problema.

Algoritam za mjerenje dimenzija objekata na fotografiji

U ovom poglavlju opisan je algoritam za mjerenje dimenzija objekata na fotografiji. Kako bi se odredile dimenzije objekata na fotografiji potreban je referentan objekt. Referentni objekt mora zadovoljavati sljedeća svojstva:

  1. moraju biti poznate njegove dimenzije u stvarnome svijetu (unaprijed se odredi njegova veličina u nekoj mjernoj jedinici, npr. milimetrima, inči…).
  2. mora biti lako identificiran, nalaziti se na unaprijed određenom mjestu na fotografiji (npr. skroz lijevi objekt na fotografiji) ili se razlikovati po boji/ obliku u odnosu na druge objekte.
  3. mora biti jednako udaljen od kamere kao i svi ostali objekti

Nakon što se na fotografiji pronađe referentni objekt računaju se njegove dimenzije na fotografiji u odnosu na stvarne dimenzije. Na taj način sljedećom vrlo jednostavnom formulom određuje se koliko piksela je potrebno za prikaz odabrane mjerne jedinice.

piksela_po_mjernoj_jedinici = dimenzija_objekta_na_fotografiji / stvarna_dimenzija_objekta

Zatim kako bi se odredila dimenzija nekog nepoznatog objekta samo se primjeni ista formula no sada je nepoznanica stvarna_dimenzija_objekta:

stvarna_dimenzija_objekta= dimenzija_objekta_na_fotografiji / piksela_po_mjernoj_jedinici

Postoji i metoda mjerenja dimenzija objekata bez referentnog objekta. U tom sljučaju mora biti poznata udaljenost objekta od kamere i žarišna duljina leće. Do žarišne duljine može se jednostavno doći ako se zna kojom kamerom je fotografija fotografirana. U tom je slučaju omjer veličine objekta na fotografiji i žarišne udaljenosti leće jednak omjeru stvarne veličine objekta i udaljenosti objekta od leće. Iz te jednakosti može se jednostavno doći do veličine objekta na fotografiji pomoću sljedeće jednadžbe:

stvarna_dimenzija_objekta = (dimenzija_objekta_na_fotografiji * udaljenost_objekta_do_leće) / žarišna_duljina_leće

OpenCV

Obradu fotografije vrlo je efikasno i jednostavno implementirati pomoću OpenCV programske knjižnice. OpenCV je programska knjižnica otvorenog koda za računalni vid i strojno učenje. OpenCV ima BSD licencu što omogućava široku uporabu korištenja te modificiranja koda. OpenCV sadrži preko 2500 optimiziranih algoritama, što uključuje klasične kao i najsuvremenije algoritme računalnog vida i strojnog učenja. Ti algoritmi omogućavaju prepoznavanje lica, prepoznavanje gesti, prepoznavanje pokreta, identifikaciju objekata u prostoru te njihovo praćenje, prepoznavanje i obrađivanje 3D modela, obradu fotografije tako da iz skupa fotografija “lijepljenjem” tvorimo fotografiju scene itd. OpenCV je izvorno pisan u C++ a ima sučelje za Javu, Python, C++ i Matlab. API za ova sučelja mogu se naći u službenoj online dokumentaciji. OpenCv se može koristiti na Windowsu, Linuxu, Androidu i Mac OS-u. Pomoću niza funkcionalnosti OpenCV-a moguće je implementirati i mjerenje dimenzija objekata na fotografiji.

Praktični primjer

Kako bi se pobliže prikazao algoritam iz prethodnog poglavlja u ovom poglavlju biti će opisana implementacija mjerenja dimenzija objekata na fotografiji 1.1. Na fotografiji se nalazi novčić koji predstavlja referenti objekt kao i dva objekta (autić i plišana ptica) čije su dimenzije nepoznate. Sve daljne obrade fotografije obavljene su korištenjem OpenCV programske knjižnice. Izvorni kod korišten u ovom primjeru nalazi se ovdje .

Fotografija prije obrade

1.1 Orginalna fotografija [3]  

Prvi korak obrade je pronalazak objekata na fotografiji. Nakon pretvorbe fotografije u crno bijelu, pozivom metode cv2.Canny() detektiraju se rubovi. Metoda cv2.Canny() to radi tako da traži gdje dolazi do velikih promjena gradijenata. Na fotografiji 1.2 prikazana je detekcija rubova.

 Detektirani rubovi objekata

1.2 Detektirani rubovi objekata [3]  

Nadalje je potrebno pronaći konture objekata. To se radi pozivom metode cv2.findContours() koja prima prethodno detektirane rubove. Kada se pronađu konture zaključuje se da su to traženi objekt gdje se skroz lijevi odnosi na referentni. Sada je moguće izračunati broj piksela po mjernoj jedinici pomoću referentnog objekta. Pomoću te vrijednosti prolazeći kroz sve detektirane objekte i prema formuli iz prethodnog poglavlja računa se stvarna dimenzija objekta.

Na fotografiji 1.3 prikazan je konačni izlaz, gdje je pomoću pravokutnika označen svaki objekt zasebno kao i njegova visina i širina.

 Završni izlaz programa

1.3 Završni izlaz programa [3]  

Zaključak

Mjerenje dimenzija objekata na fotografiji postalo je lakše razvojem računalnog vida. Pojavile su se programske knjižnice kao što je OpenCV koje omogućavaju jednostavno rješavanje ovog problema. Da bi se objek na slici mogao izmjeriti, na slici se treba nalaziti referentni objekt poznatih dimenzija i mora biti na jednakoj udaljenosti od kamere kao objekt čije se dimenzije mjere. Praktičnim primjerom prikazano je mjerenje dimenzija autića i plišane igračke uz novčić kao referentni objekt. Često se u stvarnom svijetu trebaju riješiti složeniji problemi u kojima referentni objekt nije na istoj udaljenosti kao objek koji se mjeri. Tada postupak postaje dosta složeniji.

Literatura

[1] Adrian Rosebrock. Measuring size of objects in an image with OpenCv. pyimagesearch, 2016.

[2] T. Dhikhi, A. N. Suhas, G. R. Reddy, K. C. Vardhan. Measuring Size of an Object using Computer Vision.

[3] D. Nance. Calculating the Size of Objects in Photos with Computer Vision.

[4] OpenCV team. OpenCV about

[5] OpenCV documentation