04.06.2013 Views

RANSAC – potrivirea unui cerc la un set de puncte

RANSAC – potrivirea unui cerc la un set de puncte

RANSAC – potrivirea unui cerc la un set de puncte

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Sisteme <strong>de</strong> rec<strong>un</strong>oastere a formelor<br />

Laborator 2: <strong>RANSAC</strong> <strong>–</strong> <strong>potrivirea</strong> <strong><strong>un</strong>ui</strong> <strong>cerc</strong> <strong>la</strong> <strong>un</strong> <strong>set</strong> <strong>de</strong><br />

p<strong>un</strong>cte<br />

1. Obiective:<br />

Scopul acestui <strong>la</strong>borator este aplicarea meto<strong>de</strong>i <strong>RANSAC</strong> <strong>la</strong> o noua problema:<br />

estimarea parametrilor <strong><strong>un</strong>ui</strong> <strong>cerc</strong> pe baza <strong><strong>un</strong>ui</strong> <strong>set</strong> <strong>de</strong> p<strong>un</strong>cte 2D.<br />

2. Metoda <strong>RANSAC</strong> - recapitu<strong>la</strong>re<br />

Obiectiv: Potrivirea robusta a <strong><strong>un</strong>ui</strong> mo<strong>de</strong>l parametric <strong>la</strong> <strong>un</strong> <strong>set</strong> <strong>de</strong> date S, care<br />

contine si p<strong>un</strong>cte zgomot.<br />

Algoritm:<br />

1. Selectie aleatoare a <strong><strong>un</strong>ui</strong> esantion <strong>de</strong> p<strong>un</strong>cte s din multimea S si instantiere a<br />

mo<strong>de</strong>lului din acest esantion.<br />

2. Determinarea multimii <strong>de</strong> date Si care contine p<strong>un</strong>cte situate <strong>la</strong> o distanta mai mica<br />

<strong>de</strong>cat <strong>un</strong> prag t <strong>de</strong> mo<strong>de</strong>l. Multimea Si este multimea <strong>de</strong> consens a esantionului, si<br />

<strong>de</strong>fineste p<strong>un</strong>ctele din S care satisfac mo<strong>de</strong>lul.<br />

3. Daca dimensi<strong>un</strong>ea lui Si (numarul <strong>de</strong> p<strong>un</strong>cte care satisfac mo<strong>de</strong>lul) este mai mare<br />

<strong>de</strong>cat <strong>un</strong> prag T, algoritmul se termina. Optional, se poate re-estima mo<strong>de</strong>lul folosind<br />

toate p<strong>un</strong>ctele din Si.<br />

4. Daca dimensi<strong>un</strong>ea lui Si este mai mica <strong>de</strong>cat T, se selecteaza <strong>un</strong> nou sub<strong>set</strong> si se<br />

repeta pasii anteriori.<br />

Dupa N in<strong>cerc</strong>ari, se selecteaza multimea <strong>de</strong> consens Si cu cele mai multe p<strong>un</strong>cte,<br />

si (optional) mo<strong>de</strong>lul este re-estimat folosind toate p<strong>un</strong>ctele din aceasta multime.<br />

3. <strong>RANSAC</strong> pentru <strong>cerc</strong>uri<br />

Problema <strong>de</strong> rezolvat este: dandu-se <strong>un</strong> <strong>set</strong> <strong>de</strong> p<strong>un</strong>cte 2D, sa se gaseasca <strong>cerc</strong>ul care<br />

minimizeaza suma patratelor distantelor <strong>de</strong> <strong>la</strong> contur <strong>la</strong> aceste p<strong>un</strong>cte.<br />

n<br />

∑<br />

i=<br />

2<br />

2<br />

2 2<br />

ε = ( ( x − x ) + ( y − y ) − r)<br />

cu conditia ca nici <strong>un</strong>ul dintre p<strong>un</strong>cte sa nu<br />

1<br />

i<br />

c<br />

i<br />

c<br />

<strong>de</strong>vieze <strong>de</strong> <strong>la</strong> <strong>cerc</strong> cu mai mult <strong>de</strong> t <strong>un</strong>itati. Aici (xc,yc) reprezinta coordonatele centrului<br />

<strong>cerc</strong>ului, iar r este raza.<br />

1


De fapt s<strong>un</strong>t doua probleme: <strong>potrivirea</strong> <strong><strong>un</strong>ui</strong> <strong>cerc</strong> <strong>la</strong> <strong>un</strong> <strong>set</strong> <strong>de</strong> date, si c<strong>la</strong>sificarea<br />

datelor ca date (p<strong>un</strong>cte) vali<strong>de</strong> si p<strong>un</strong>cte <strong>de</strong> tip zgomot. Pragul t este ales in f<strong>un</strong>ctie <strong>de</strong><br />

zgomotul din <strong>set</strong>ul <strong>de</strong> date.<br />

Un <strong>cerc</strong> este complet <strong>de</strong>finit <strong>de</strong> trei p<strong>un</strong>cte, care vor fi alese aleator. Multimea<br />

suport pentru acest <strong>cerc</strong> este multimea p<strong>un</strong>ctelor care s<strong>un</strong>t <strong>la</strong> o distanta mai mica <strong>de</strong>cat t<br />

<strong>de</strong> acest <strong>cerc</strong>. Selectia aleatoare este repetata <strong>de</strong> mai multe ori, iar <strong>cerc</strong>ul cu cea mai mare<br />

multime suport este <strong>de</strong>c<strong>la</strong>rat cea mai robusta potrivire.<br />

Algoritmul:<br />

1. Se aleg aleator 3 p<strong>un</strong>cte. (s=3). Gasiti <strong>cerc</strong>ul care circumscrie tri<strong>un</strong>ghiul format <strong>de</strong><br />

cele trei p<strong>un</strong>cte..<br />

2. Calcu<strong>la</strong>rea distantei celor<strong>la</strong>lte p<strong>un</strong>cte fata <strong>de</strong> <strong>cerc</strong>ul gasit, si numararea celor care<br />

s<strong>un</strong>t <strong>la</strong> o distanta mai mica <strong>de</strong>cat t.<br />

3. Daca numarul <strong>de</strong> p<strong>un</strong>cte suport este mai mare <strong>de</strong>cat <strong>un</strong> prag T, algoritmul se<br />

termina, altfel se repeta pasii anteriori.<br />

4. Dupa <strong>un</strong> numar <strong>de</strong> N in<strong>cerc</strong>ari, se alege <strong>cerc</strong>ul cu cea mai mare multime suport<br />

(consens).<br />

2


4. F<strong>un</strong>damente matematice<br />

4.1. Gasirea parametrilor <strong><strong>un</strong>ui</strong> <strong>cerc</strong> ce trece prin trei p<strong>un</strong>cte P1, P2, si P3<br />

dintr-<strong>un</strong> p<strong>la</strong>n.<br />

Coordonatele centrului se calculeaza astfel:<br />

• Doua drepte se formeaza din doua perechi <strong>de</strong> p<strong>un</strong>cte. Prima (a) trece prin p<strong>un</strong>ctele<br />

P1 si P2. Dreapta (b) trece prin urmatoarele doua p<strong>un</strong>cte, P2 si P3.<br />

( y x x m − +<br />

( y x x m = − + ,<br />

• Ecuatiile celor doua drepte s<strong>un</strong>t: 1 1 )<br />

ya = a<br />

si 2 2 )<br />

yb b<br />

<strong>un</strong><strong>de</strong> m este panta dreptei,:<br />

y<br />

− y<br />

2 1 ma = si mb x2<br />

− x1<br />

3<br />

y3<br />

− y2<br />

=<br />

x − x<br />

• Centrul <strong>cerc</strong>ului este intersectia dintre mediatoarele segmentelor P1P2 si P2P3.<br />

• Perpendicu<strong>la</strong>ra pe o dreapta <strong>de</strong> panta m are o panta -1/m, astfel ca ecuatiile<br />

mediatoarelor segmentelor P1P2 SI P2P3 s<strong>un</strong>t:<br />

y<br />

y<br />

'<br />

a<br />

'<br />

b<br />

1 2 ⎞ y1<br />

2<br />

⎛ x1<br />

+ x<br />

= − ⎜ x −<br />

ma<br />

⎝ 2<br />

⎟ +<br />

⎠<br />

+ y<br />

2<br />

= −<br />

m<br />

⎛ x2<br />

+ x3<br />

⎞ y2<br />

+ y<br />

⎜ x − ⎟ +<br />

⎝ 2 ⎠ 2<br />

1 3<br />

b<br />

• Cele doua drepte se intersecteaza in centrul <strong>cerc</strong>ului, <strong>de</strong>ci daca sistemul <strong>de</strong> mai<br />

mamb<br />

( y1<br />

− y3)<br />

+ mb<br />

( x1<br />

+ x2<br />

) − ma<br />

( x2<br />

+ x3)<br />

sus se rezolva pentru x se gaseste: xc<br />

=<br />

2(<br />

m −m<br />

)<br />

⎛ x1<br />

+ x2<br />

⎞ y1<br />

+ y<br />

• Folosind valoarea lui x, putem calcu<strong>la</strong> y: yc = − ⎜ xc<br />

− ⎟ +<br />

ma<br />

⎝ 2 ⎠ 2<br />

Raza <strong>cerc</strong>ului se calculeaza usor, tinand cont ca p<strong>un</strong>ctul P1 este pe <strong>cerc</strong>, iar coordonatele<br />

centrului (xc,yc) s<strong>un</strong>t c<strong>un</strong>oscute. ( ) ( ) 2<br />

2<br />

x x y y<br />

r c 1 c<br />

4.2. Calculul distantei dintre <strong>un</strong> p<strong>un</strong>ct (x0, y0) si <strong>un</strong> <strong>cerc</strong>.<br />

=<br />

−<br />

+<br />

3<br />

2<br />

b<br />

1 2<br />

−<br />

1<br />

a


Daca se consi<strong>de</strong>ra dreapta <strong>de</strong>finita <strong>de</strong> p<strong>un</strong>ctul (x0, y0) si centrul <strong>cerc</strong>ului, aceasta<br />

dreapta intersecteaza <strong>cerc</strong>ul in p<strong>un</strong>ctele P1 si P2. Distanta este segmentul format <strong>de</strong><br />

p<strong>un</strong>ctul (x0, y0) si cel mai apropiat p<strong>un</strong>ct <strong>de</strong> pe <strong>cerc</strong>, P1.<br />

=<br />

2<br />

2<br />

( x − x ) + ( y − y ) − r<br />

d c 0 c<br />

5. Noti<strong>un</strong>i <strong>de</strong> implementare <strong>–</strong> <strong>de</strong>senarea <strong>cerc</strong>ului<br />

void CDibView::OnProcessing<strong>RANSAC</strong>Circle()<br />

{<br />

BEGIN_PROCESSING();<br />

/************************************************<br />

TODO:<br />

Write down the co<strong>de</strong> for <strong>RANSAC</strong> circle<br />

**************************************************/<br />

/* Drawing a circle on the image */<br />

CDC dc;<br />

dc.CreateCompatibleDC(0);<br />

CBitmap ddBitmap;<br />

HBITMAP hDDBitmap = CreateDIBitmap(::GetDC(0),<br />

&((LPBITMAPINFO)lpS)->bmiHea<strong>de</strong>r, CBM_INIT, lpSrc,<br />

(LPBITMAPINFO)lpS, DIB_RGB_COLORS);<br />

ddBitmap.Attach(hDDBitmap);<br />

CBitmap* pTempBmp = dc.SelectObject(&ddBitmap);<br />

CPen pen(PS_SOLID, 1, RGB(255,0,0));<br />

CPen *pTempPen = dc.SelectObject(&pen);<br />

/* draw a circle having radius r and center a point of<br />

coordinates (x,y)*/<br />

int x = 100;<br />

int y = 90;<br />

int r = 20;<br />

dc.MoveTo ( (int)(x + r), dwHeight-1-y );<br />

4<br />

0


}<br />

dc.AngleArc(x, dwHeight-1-y, r, 0, 360);<br />

dc.SelectObject(pTempPen);<br />

dc.SelectObject(pTempBmp);<br />

GetDIBits(dc.m_hDC, ddBitmap, 0, dwHeight, lpDst,<br />

(LPBITMAPINFO)lpD, DIB_RGB_COLORS);<br />

END_PROCESSING("<strong>RANSAC</strong>-circle");<br />

6. Activitate practica:<br />

Folosind mediul Diblook, implementati algoritmul <strong>de</strong>scris. Folositi imaginea circle.bmp<br />

pentru datele <strong>de</strong> intrare. P<strong>un</strong>ctele s<strong>un</strong>t <strong>de</strong>senate cu negru (valoarea 0 pentru pixel).<br />

Desenati rezultatul obtinut peste imaginea <strong>de</strong> intrare. In<strong>cerc</strong>ati cu alte imagini <strong>de</strong>senate <strong>de</strong><br />

dumneavoastra. Parametrii pentru imaginea data s<strong>un</strong>t: w = 0.5, p = 0.99; pentru t puteti<br />

in<strong>cerc</strong>a mai multe variante, precum 10, 12, 15 pixeli. (vezi <strong>la</strong>boratorul 1 pentru<br />

explicatii).<br />

7. Bibliografie:<br />

[1] Alexan<strong>de</strong>r Hornberg: Handbook of Machine Vision, 2006<br />

[2] Robert C. Bolles, Martin A. Fischler: A <strong>RANSAC</strong>-Based Approach to Mo<strong>de</strong>l Fitting<br />

and Its Application to Finding Cylin<strong>de</strong>rs in Range Data, 1981<br />

[3] Richard Hartley, Andrew Zisserman: Multiple View Geometry in Computer<br />

Vision,2003<br />

5

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!