Documente Academic
Documente Profesional
Documente Cultură
Transformarea Hough se bazeaza pe maparea ecuatiei unui segment de dreapta din domeniul spatial in cel
numit spatiul parametric.
Pentru o pereche de valori (xi, yi), dreapta definita de ecuatia de mai sus este unica.
In plus, un punct (xj, yj), are si el o dreapta asociata in spatiul parametric. Aceasta o intersecteaza pe cea
corespunzatoare punctului (xi, yi) in punctul (a’,b’), unde a’ si b’ sunt panta si respectiv ordonata la origine a
dreptei ce trece prin cele doua puncte considerate. De fapt toate punctele de pe aceasta dreapta au drepte
corespunzatoare in spatiul parametric care trec (toate), prin punctul (a’,b’).
Spatiul parametric este divizat in celule de acumulare. Fiecare celula corespunde unei perechi (ai, bj). Pentru
fiecare punct (xk, yk) al imaginii, se dau lui a, succesiv, toate valorile pe care le poate lua in intervalul pantelor
asteptate (amin, amax) si se rezolva ecuatia in b, b=-xka+yk. Valorile gasite sunt rotunjite la nivele acceptabile in
intervalul (bmin, bmax). Daca pentru o valoare ai se gaseste o valoare acceptabila pentru bj, celula de acumulare Ai,j
este incrementata cu 1. Daca la finalul procesului valoarea celulei Ai,j este M, inseamna ca exista M puncte in
domeniul spatial care apartin dreptei y=aix+bj. Este evident ca precizia de lucru depinde de desimea diviziunilor
de pe axele a si b.
In practica, aceasta metoda are dezavantajul ca nu negociaza bine situatiile dreptelor verticale, de panta
tinzand spre infinit. Evitarea acestui fenomen se face prin utilizarea ecuatiei dreptei de forma:
x cos y sin
In aceasta situatie, in planul parametric, se opereaza cu sinusoide in loc de segmente de dreapta.
imagine=imread('upg.jpg');
imshow(imagine);
l1=edge(imagine,'canny');
figure, imshow(l1);
[H,theta,rho]=hough(l1);
figure, imshow(imadjust(mat2gray(H)),[],'XData',theta,'YData',rho,...
'InitialMagnification','fit');
xlabel('\theta (degrees)'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot)
P = houghpeaks(H,50,'threshold',ceil(0.2*max(H(:))));
x = theta(P(:,2));
y = rho(P(:,1));
plot(x,y,'s','color','black');
lines = houghlines(l1,theta,rho,P,'FillGap',5,'MinLength',7);
figure, imshow(imagine), hold on
max_len = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
end
c( p, q ) H [ f ( p ) f (q )]
unde H este cel mai mare nivel de gri din imagine, iar f(p), respectiv f(q) sunt nivelele de gri ale pixelilor p si q.
O varianta de algoritm pentru aplicarea unui prag in vederea separarii obiectelor de fundal este urmatoarea:
1. Stabilirea unei valori initiale pentru prag
- Cand fundalul si obiectul ocupa aproximativ aceeasi suprafata din imagine, T se poate lua valoarea
medie de gri a imaginii.
- Cand cele doua suprafete sunt sensibil diferite, T se considera o valoarea mediana intre cele doua
nivele de gri (ale fundalului si obiectului)
In general succesul unei operatii de segmentare prin utilizarea pragurilor depinde de iluminarea obiectelor din
imagine.
Imaginile prost iluminate sunt caracterizate de histograme la care maximele nu mai sunt aproape deloc
separate, ceea ce face aplicarea unui prag imposibila. O solutie ar fi segmentarea imaginii in subimagini si
aplicarea algoritmului de mai sus pentru fiecare subimagine.
Functia converteste o imagine de intensitate, indexata sau color intr-o imagine alb-negru. Parametrul level, cu
valori in intervalul [0 1] defineste pragul utilizat.
Exemple:
Exemplu:
[level,EM]=graythresh(imagine);
>> EM
EM =
0.9522
>> level
level =
0.4902
X = grayslice(I, n)
X = grayslice(I, v)
Exemplu:
type:
'isodata': Thresholding cu algoritmul Isodata - Ridler and Calvard (1978)
'otsu‘: Thresholding prin utilizarea variantei maximale inter-clase - Otsu (1979)
'minerror' : Thresholding prin utilizarea metodei erorii minime - Kittler si Illingworth (1986)
'triangle': Thresholding prin utilizarea metodei coardei - by Zack, Rogers si Latt (1977)
'background': Thresholding prin utilizarea metodei simetriei de fundal bimodale
'fixed': Thresholding cu o valoare fixa
'double': Thresholding intre doua valori fixe
'volume': Thresholding pentru obtinerea unei fractii de volum
'hysteresis': Din imaginea binara (valoare de gri > low (min), sunt selectati numai regiunile pentru care cel putin
un pixel are valoarea > high (max)
parameter:
Pentru ‘isodata’: numarul de praguri ce se vor folosi. Implicit 1
Pentru 'background’: distanta pana la maximul maximul unde se aplica pragul, masurata la jumatate de latime
si jumatate din maxim. Implicit 2.
Pentru ‘fixed’, : Threshold la valoare fixa. Implicit valoarea medie de gri.
Pentru 'double’: Doua valori de prag. Implicit min+[1/3,2/3]*(max-min).
Pentru 'volume’: Volumul fractiei. Implicit 0.5
Pentru 'hysteresis’: Doua valori: [min,max]
Threshold (dip-image)
min=50,
max = 120
binarize2(M, lowThresh, highThresh, inValue, outValue) – Intoarce forma binarizata a imaginii M. Pixelii cu valori
intre lowTresh si highTresh sunt setati pe valoarea inValue, iar ceilalti pe valoarea outValue.
threshold(M, thresh) – Intoarce imaginea M, cu pixelii cu valoarea sub thresh setati pe thresh.
0, daca f T
s ( x, y ) , daca f T si 2 f 0
, daca f T si 2 f 0
Simbolurile + si – reprezinta nivele de gri distincte.
Astfel, pentru o imagine ce contine un obiect intunecat pe un fond deschis, procedeul descris mai sus va produce
o imagine in care:
- Pixelii care nu sunt pe o muchie (prima conditie), vor primi eticheta (valoarea) 0
- Pixelii pe partea intunecata a unei muchii (conditia 2) eticheta vor primi eticheta “+” (ceea ce poate insemna o
anumita valoare de gri)
-Pixelii care sunt pe partea luminoasa a unei muchii (conditia 3), vor primi eticheta “-”
Se poate obtine astfel o imagine segmentata, binara, la care valorile 1 corespund obiectelor de interes, iar 0-
urile corespund fundalului.
Matlab:
L = watershed(A)
L = watershed(A, conn)
Dipimage:
image_out = watershed(image_in,connectivity,max_depth,max_size)
image_out = waterseed(seed_image,grey_image,connectivity,max_depth,max_size)