1
Akademia Górniczo-Hutnicza w Krakowie
Wydział Inżynierii Mechanicznej i Robotyki
Katedra Robotyki i Mechatroniki
Camera Calibration Toolbox for Matlab
Opis narzędzia i sposobu wykorzystania jego możliwości do kalibracji kamery
2
1. Problem kalibracji systemu wizyjnego
Podczas tworzenia stanowiska z jednym robotem i systemem mamy zwykle do czynienia z następującą
sytuacją:
Robot jest przymocowany na stałe sztywno do stanowiska
Jako globalny układ współrzędnych wygodnie jest obrać układ związany z robotem – przemawia za tym
wygoda zadawania współrzędnych w programie sterującym lub przez operatora.
Położenie i orientacja kamery względem układu związanego z robotem nie są dokładnie znane, ich
wyznaczenie jest jednym z celów kalibracji
Takie podejście można uzasadnić tym, że kamerę umieszcza się tam, gdzie jednocześnie spełnia ona
swoje zadanie najlepiej (zadanie „obserwacji” przestrzeni roboczej) i gdzie jest ją najwygodniej
umieścić. Można również ująć to następujący sposób: położenie i orientacja kamery są zależne od
ustawienia kamery wynikającego z jej zadania i możliwości montażu, natomiast nie możemy zadać
kamerze z góry określonych wartości położenia i orientacji nie zwracając uwagi na możliwość
osiągnięcia tych wartości w praktyce i wynikający z tego obszar widzenia kamery.
W przypadku takiego rozwiązania możliwe jest dowolne „dostrajanie” położenia kamery związane z
korekcją zasięgu widzenia. Może być to związane np. ze zmianami w przestrzeni roboczej. W takiej
sytuacji należy po prostu przeprowadzić kalibrację w celu otrzymania nowych parametrów – ręczny
pomiar położenia orientacji i położenia kamery nie jest potrzebny.
Na czas kalibracji stanowiska jest w nim umieszczony wzorzec o znanym położeniu i orientacji
Wzorzec w postaci przedmiotu będącego punktem odniesienia o określonym przez proces kalibracji
kształcie, wymiarach i kolorach bądź innych cechach jest umieszczony w znanym położeniu i orientacji
względem układu związanego z robotem.
Robot może np. uchwycić wzorzec w pewnym jego punkcie który można uznać za początek układu
współrzędnych związanego z wzorcem – otrzymujemy możliwe do obliczenia położenie o orientację
tego układu względem układu globalnego (związanego z robotem)
Dowolny przedmiot umieszczony w zasięgu widzenia systemu wizyjnego w zależności od możliwości
tego systemu może być opisany przy pomocy cech takich jak kształt, położenie, orientacja względem
kamery. W stanowisku zrobotyzowanym potrzeba natomiast określenia położenia i orientacji przedmiotu
względem układu współrzędnych związanego z robotem.
Jednym z celów kalibracji jest wyznaczenie położenia i orientacji kamery względem układu związanego z
robotem – dzięki temu dane z dowolnego systemu wizyjnego (po odpowiednim przekształceniu) można
zinterpretować w układzie globalnym (związanym z robotem), co w rezultacie tworzy kompletne stanowisko
z robotem ze sprzężeniem wizyjnym.
3
Innym celem jest natomiast wyznaczenie parametrów kamery – nie zawsze są one znane i nie zawsze jest
dostęp do informacji o nich. Kalibracja umożliwia również zbadanie cech kamery takich jak: ogniskowa,
punkt skupienia czy zniekształcenia geometryczne. Jest to o tyle istotne, że w przypadku kalibracji
otrzymujemy informacje o konkretnym egzemplarzu kamery pracującym w warunkach, w jakich będzie on
pracował po przeprowadzeniu kalibracji co daje nam rzeczywisty i dokładny obraz jakości i parametrów
systemu jakim dysponujemy.
Poniższe rysunki ilustrują opisany powyżej problem kalibracji i jej cel:
(p/o oznacza położenie i orientację)
Rys 1.1. Układy współrzędnych podczas kalibracji
Rys 1.2. Układy współrzędnych po przeprowadzeniu kalibracji
Ro
b
o
t
W
z
o
rz
e
c
K
a
m
e
ra
p/o kamery (globalne)
nieznane
p/
o w
zo
rca
(g
lob
aln
e)
zn
an
e
p/o w
zorca
wzglę
dem ka
mery
wyzn
acz
ane p
odcz
as ka
libra
cji
Ro
b
o
t
K
a
m
e
ra
p/o kamery (globa
lne)
znane
p/o
prz
ed
mio
tu (g
lob
aln
e)
mo
żliw
e d
o o
blicz
en
ia
p/o p
rzedm
iotu w
zglę
dem
kam
ery
zna
ne
P
rz
e
d
m
io
t
4
2. Camera Calibration Toolbox
– opis narzędzia
Informacje ogólne
Przybornik Camera Calibration Toolbox jest narzędziem opracowanym przez Jean-Yves Bouguet,
doktora Wydziału Inżynierii Elektrycznej California Institute of Technology w Pasadenie.
Narzędzie jest udostępniane do pobrania jako przybornik z GUI dla Matlaba w wersji 5.0 i wyższych,
dostępny do pobrania pod adresem [1], oraz w wersji napisanej w języku C, udostępnione w ramach otwartej
biblioteki „Open Source Computer Vision Library” (link do strony pobierania: [2]).
Instalacja i uruchomienie narzędzia
po rozpakowaniu archiwum *.zip należy umieścić w zbiorze path ścieżkę wskazującą na folder w
którym znajdują się pliki *.m narzędzia
przybornik z graficznym interfejsem GUI uruchomić można z poziomu Matlaba poleceniem calib lub
calib_gui
Dane wejściowe do kalibracji
Do przeprowadzenia kalibracji należy przygotować następujące elementy:
płaski i dokładnie wykonany wzorzec (szachownica)
wymiar pojedynczego pola wzorca
należy wybrać pewien obszar na wzorcu o wymiarze n x m pól który będzie brany pod uwagę
podczas kalibracji (Uwaga: najlepiej wybrać obszar w którym łatwo jest rozpoznać narożniki, czyli
taki, którego narożniki nie zlewają się z nie wykorzystywaną częścią wzorca)
należy określić który z narożników będzie stanowił punkt odniesienia (początek lokalnego układu
współrzędnych związanego z wzorcem) i pamiętać o wybranym narożniku podczas całego procesu
kalibracji
wykonać serię zdjęć wzorca przy pomocy kalibrowanej kamery, w różnych położeniach i orientacji
wzorca (Uwaga: położenie i orientacja kamery powinny być stałe)
aby móc wykorzystać dane z kalibracji do ustalenia położenia i orientacji kamery względem układu
współrzędnych związanego z robotem należy wybrać jako punkt odniesienia narożnik wybranego
obszaru na wzorcu, którego położenie względem układu związanego z robotem jest znane oraz znać
orientację wzorca względem układu związanego z robotem (Uwaga: wystarczą dane o położeniu i
orientacji wzorca względem układu związanego z robotem dla jednego z fotografowanych położeń)
katalog w którym znajdują się zdjęcia należy ustawić jako aktualny katalog roboczy w Matlabie
5
Parametry zwracane przez program
Po przeprowadzeniu kalibracji w przestrzeni roboczej Matlaba znajdują się zmienne przechowujące
parametry kalibracji oraz jej wyniki. Poniżej zestawiono poszczególne parametry i opisano ich znaczenie:
rodzaj
parametrów
zmienna
przechowująca
parametr
wymiary
zmiennej
znaczenie
wewnętrzne
fc
2x1
Długość ogniskowej [piksele]
cc
2x1
Odległość punktu skupienia [jednostka w jakiej podawane
były dane podczas kalibracji]
alpha_c
1x1
Kąt pomiędzy osiami X i Y [stopnie]
kc
5x1
Zniekształcenia osiowe i styczne [współczynnik]
zewnętrzne
Rc_<nr_obrazu>
3x3
Macierz rotacji dla obrazu o numerze <nr_obrazu>
Tc_<nr_obrazu>
3x1
Macierz translacji dla obrazu o numerze <nr_obrazu>
Wykorzystanie wyników kalibracji
Opisane powyżej dane wewnętrzne można wykorzystać jako informacje o jakości systemu wizyjnego,
które mogą pomóc w ocenie/modyfikacji kalibrowanego stanowiska.
Dane zewnętrzne, czyli macierze rotacji i translacji mogą posłużyć do ustalenia położenia i orientacji
kamery względem globalnego (związanego z robotem) układu współrzędnych. Mając dane macierze rotacji i
translacji wzorca względem kamery dla poszczególnych fotografii można wybrać jedną z fotografii (pod
warunkiem że znamy położenie i orientację wzorca względem robota podczas wykonywania danej fotografii)
i po odpowiednich przekształceniach otrzymamy położenie i orientację kamery względem robota.
6
3.
Przykład kalibracji kamery z wykorzystaniem Camera Calibration Toolbox
Uruchomienie aplikacji z poziomu Matlaba:
>> calib
Do wyboru są 3 opcje: wczytanie wszystkich obrazów od razu do pamięci, wczytywanie ich kolejno oraz wyjście z
programu
Po kliknięciu przycisku „Standard” wyświetlone zostaje okno z pozostałymi funkcjami programu:
W celu podania nazw plików ze zdjęciami należy kliknąć przycisk „Image Names”
. Picture 17.jpg Picture 26.jpg Picture 35.jpg Picture 5.jpg
.. Picture 18.jpg Picture 27.jpg Picture 36.jpg Picture 6.jpg
Picture 1.jpg Picture 19.jpg Picture 28.jpg Picture 37.jpg Picture 7.jpg
Picture 10.jpg Picture 2.jpg Picture 29.jpg Picture 38.jpg Picture 8.jpg
Picture 11.jpg Picture 20.jpg Picture 3.jpg Picture 39.jpg Picture 9.jpg
Picture 12.jpg Picture 21.jpg Picture 30.jpg Picture 4.jpg Thumbs.db
Picture 13.jpg Picture 22.jpg Picture 31.jpg Picture 40.jpg folder.dat
Picture 14.jpg Picture 23.jpg Picture 32.jpg Picture 41.jpg
Picture 15.jpg Picture 24.jpg Picture 33.jpg Picture 42.jpg
Picture 16.jpg Picture 25.jpg Picture 34.jpg Picture 43.jpg
7
Zostają załadowane pliki znajdujące się w katalogu roboczym
Basename camera calibration images (without number nor suffix): Picture
Program pyta o początkowe znaki nazwy plików które będzie wczytywał. Ponieważ pliki znajdujące się w folderze
m
ają nazwy w formacie „Picture XX” gdzie XX to numer obrazu, podano jako nazwę bazową: „Picture ”
Image format: ([]='r'='ras', 'b'='bmp', 't'='tif', 'p'='pgm', 'j'='jpg',
'm'='ppm') j
Program oczekuje teraz na wprowadzenie przez użytkownika typu plików graficznych jakie mają zostać
załadowane
Jako typ pliku wybrano „j”, co oznacza pliki w formacie *.jpg
Loading image
1...2...3...4...5...6...7...8...9...10...11...12...13...14...15...16...17...18.
..19...20...21...22...23...24...25...26...27...28...29...30...31...32...33...34
...35...36...37...38...39...40...41...42...43...
done
Program wyświetla załadowane pliki
8
Kolejnym etapem jest wydobywanie narożników ze zdjęć:
Extraction of the grid corners on the images
Number(s) of image(s) to process ([] = all images) = 22:32
Należy wskazać numery zdjęć, które mają być brane pod uwagę podczas kalibracji. Wybrano zdjęcia o numerach
od 22 do 23. Pozostawienie pustego miejsca wskazuje na wszystkie obrazy znajdujące się w katalogu.
Ustalenie rozmiaru okna dla wy
szukiwarki narożników
Wybrano rozmiar domyślny poprzez pozostawienie pustego pola
Window size for corner finder (wintx and winty):
wintx ([] = 5) =
winty ([] = 5) =
Window size = 11x11
Program pyta czy zastosować automatyczne liczenie prostokątów
Do you want to use the automatic square counting mechanism (0=[]=default)
or do you always want to enter the number of squares manually (1,other)?
Wybrano liczenie automatyczne
Rozpoczęcie analizy obrazu „Picture 22.jpg”
Processing image 22...
Using (wintx,winty)=(5,5) - Window size = 11x11 (Note: To reset the window
size, run script clearwin)
9
Wskazanie narożników
Click on the four extreme corners of the rectangular complete pattern (the
first clicked corner is the origin)...
Należy wskazać na cztery kolejne narożniki fragmentu mxn kratek przy pomocy którego przeprowadzamy
kalibrację
UWAGA: Należy w przypadku wszystkich obrazów wybranych do kalibracji jako pierwszy narożnik wskazywać
ten sam punkt na wzorcu i powinien to być ten punkt dla którego znane są położenie i orientacja (wystarczy
znajomość tych cech tylko dla jednego zdjęcia)
Określenie ilości pól wzdłuż osi X i Y:
Could not count the number of squares in the grid. Enter manually.
Number of squares along the X direction ([]=10) = 4
Number of squares along the Y direction ([]=10) = 5
Jak widać, automatyczne liczenie nie powiodło się, program prosi o ręczne wprowadzenie ilości pól.
Wprowadzono odpowiednie wartości.
10
Określenie wymiaru pojedynczego pola:
Size dX of each square along the X direction ([]=100mm) = 40
Size dY of each square along the Y direction ([]=100mm) = 40
Wprowadzono odpowiednie wymiary.
Wprowadzenie współczynników zniekształceń
If the guessed grid corners (red crosses on the image) are not close to the
actual corners,
it is necessary to enter an initial guess for the radial distortion factor kc
(useful for subpixel detection)
Need of an initial guess for distortion? ([]=no, other=yes)
W przypadku gdy czerwone znaki + (widoczne na poprzedniej stronie
) nie pokrywają się z rzeczywistymi
punktami przecięcia wzorca można wprowadzić współczynnik zniekształcenia dzięki któremu program
zmodyfikuje utworzoną siatkę. Jego wartości wynosi w praktyce od -1 do 1. W przypadku zastosowania
współczynnika można obejrzeć efekt i w razie potrzeby ponownie zmodyfikować współczynnik. W tym przypadku
nie użyto współczynnika zniekształceń.
Następuje wydobywanie krawędzi
Corner extraction...
Ten sam proces przeprowadzany jest dla kolejnych zdjęć.
Rozmiar okna, wymiary k
ratek oraz ilości kratek wzdłuż prostych X i Y proponowane są takie jakie zostały
wprowadzone wcześniej. Po zakończeniu analizy ostatniego zdjęcia wyświetlany jest napis:
done
Uruchomienie procesu kalibracji
W celu uruchomienia procesu kalibracji należy kliknąć przycisk „Calibration”
Seria komunikatów o zdjęciach które nie zostały wykorzystane w kalibracji:
WARNING: Need to extract grid corners on image 1 - This image is now set
inactive
11
WARNING: Need to extract grid corners on image 2 - This image is now set
inactive
WARNING: Need to extract grid corners on image 3 - This image is now set
inactive
WARNING: Need to extract grid corners on image 4 - This image is now set
inactive
WARNING: Need to extract grid corners on image 5 - This image is now set
inactive
WARNING: Need to extract grid corners on image 6 - This image is now set
inactive
WARNING: Need to extract grid corners on image 7 - This image is now set
inactive
WARNING: Need to extract grid corners on image 8 - This image is now set
inactive
WARNING: Need to extract grid corners on image 9 - This image is now set
inactive
WARNING: Need to extract grid corners on image 10 - This image is now set
inactive
WARNING: Need to extract grid corners on image 11 - This image is now set
inactive
WARNING: Need to extract grid corners on image 12 - This image is now set
inactive
WARNING: Need to extract grid corners on image 13 - This image is now set
inactive
WARNING: Need to extract grid corners on image 14 - This image is now set
inactive
WARNING: Need to extract grid corners on image 15 - This image is now set
inactive
WARNING: Need to extract grid corners on image 16 - This image is now set
inactive
WARNING: Need to extract grid corners on image 17 - This image is now set
inactive
WARNING: Need to extract grid corners on image 18 - This image is now set
inactive
WARNING: Need to extract grid corners on image 19 - This image is now set
inactive
WARNING: Need to extract grid corners on image 20 - This image is now set
inactive
WARNING: Need to extract grid corners on image 21 - This image is now set
inactive
WARNING: Need to extract grid corners on image 33 - This image is now set
inactive
WARNING: Need to extract grid corners on image 34 - This image is now set
inactive
WARNING: Need to extract grid corners on image 35 - This image is now set
inactive
WARNING: Need to extract grid corners on image 36 - This image is now set
inactive
WARNING: Need to extract grid corners on image 37 - This image is now set
inactive
WARNING: Need to extract grid corners on image 38 - This image is now set
inactive
WARNING: Need to extract grid corners on image 39 - This image is now set
inactive
WARNING: Need to extract grid corners on image 40 - This image is now set
inactive
WARNING: Need to extract grid corners on image 41 - This image is now set
inactive
12
WARNING: Need to extract grid corners on image 42 - This image is now set
inactive
WARNING: Need to extract grid corners on image 43 - This image is now set
inactive
Optymalizacja parametrów: współczynnik proporcjonalności, ogniskowa, punkt skupienia, kąt pomiędzy
krawędziami kratek (nie został zoptymalizowany), zniekształcenia (niezupełnie zoptymalizowane)
Aspect ratio optimized (est_aspect_ratio = 1) -> both components of fc are
estimated (DEFAULT).
Principal point optimized (center_optim=1) - (DEFAULT). To reject principal
point, set center_optim=0
Skew not optimized (est_alpha=0) - (DEFAULT)
Distortion not fully estimated (defined by the variable est_dist):
Sixth order distortion not estimated (est_dist(5)=0) - (DEFAULT) .
Initialization of the principal point at the center of the image.
Initialization of the intrinsic parameters using the vanishing points of planar
patterns.
Initialization of the intrinsic parameters - Number of images: 11
Wypisanie parametrów kalibracji (najpierw przed, a następnie po optymalizacji). Te i inne parametry zostają
zapisane w przestrzeni roboczej. Można je zapisać na dysku klikając przycisk „Save”.
Calibration parameters after initialization:
Focal Length: fc = [ 862.90282 862.90282 ]
Principal point: cc = [ 319.50000 239.50000 ]
Skew: alpha_c = [ 0.00000 ] => angle of pixel = 90.00000 degrees
Distortion: kc = [ 0.00000 0.00000 0.00000 0.00000 0.00000 ]
Main calibration optimization procedure - Number of images: 11
Gradient descent iterations:
1...2...3...4...5...6...7...8...9...10...11...12...13...14...15...16...17...18.
..19...20...21...22...23...24...25...26...27...28...29...30...done
Estimation of uncertainties...done
Calibration results after optimization (with uncertainties):
Focal Length: fc = [ 840.76314 840.27962 ] ± [ 20.49455 20.45415 ]
Principal point: cc = [ 318.39471 254.68520 ] ± [ 13.45152 15.66744 ]
Skew: alpha_c = [ 0.00000 ] ± [ 0.00000 ] => angle of pixel axes
= 90.00000 ± 0.00000 degrees
Distortion: kc = [ 0.29300 -3.22058 0.02060 0.00245 0.00000 ]
± [ 0.16613 1.60011 0.00632 0.00481 0.00000 ]
Pixel error: err = [ 0.84073 0.83030 ]
Note: The numerical errors are approximately three times the standard
deviations (for reference).
13
4.
Przeglądanie i interpretacja otrzymanych wyników
Wymiary ogniskowej i punktu skupienia zostały wyznaczone z względnie dużymi niepewnościami. W
celu obniżenia wartości niepewności należało by przeprowadzić dokładniej procedurę wyznaczania
krawędzi.
Ogniskowa soczewki oraz punkt skupienia mają różne wartości we wzajemnie prostopadłych kierunkach,
występują także zniekształcenia, co świadczy o niedoskonałościach geometrycznych soczewki.
Kąt pomiędzy krawędziami pikseli kamery jest równy 90°.
Klikając przycisk „Reproject on images” można przeglądać jak wyglądają punkty rzutowane po kalibracji
przez program na tle wcześniej utworzonych punktów:
14
Klikając na przycisk „Analyse error” otrzymujemy wykres błędów odwzorowania poszczególnych
wewnętrznych narożników dla każdego ze zdjęć [błąd w pikselach]:
15
Chcąc obejrzeć jak program rozpoznał poszczególne położenia i orientację wzorca względem kamery
należy kliknąć „Show extrinsic”:
W powyższym trybie można przełączać się pomiędzy widokiem wzorca „ruchomego” względem kamery,
lub na odwrót.
Macierze translacji i rotacji układu związanego z wzorcem względem układu związanego z kamerą
wyznaczone dla wzorca z fotografii „Picture 22.jpg”:
Tc_22 =
-70.8519
97.9226
551.0323
Rc_22 =
0.9624 -0.2702 0.0262
-0.2706 -0.9468 0.1740
-0.0223 -0.1746 -0.9844
16
5.
Źródła:
http://www.vision.caltech.edu/bouguetj/calib_doc/download/TOOLBOX_calib.zip
http://sourceforge.net/project/showfiles.php?group_id=22870
http://www.vision.caltech.edu/bouguetj/calib_doc/index.html
[4] prezentacja „Metoda kalibracji Jean Yves Bouguet Toolbox Matlab”