21.07.2013 Views

Detektering og klassificering af kimplanter ved brug af computer vision

Detektering og klassificering af kimplanter ved brug af computer vision

Detektering og klassificering af kimplanter ved brug af computer vision

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

18 Appendiks 18.9 Implementering<br />

<strong>og</strong> makeBlobs() bliver eksekveret i nævnte rækkefølge (figur 18.18).<br />

18.9.4.2 findSubBlobs()<br />

Denne funktion sørger for at knytte de enkelte pixels i billedet til de forskellige subblobs. Hvis det<br />

opdages, at 2 subblobs rører <strong>ved</strong> hinanden, bliver disse knyttet sammen med funktionen<br />

rootUnion().<br />

18.9.4.3 Træstrukturen<br />

Træstrukturen realiseres med arrayet pSubBlobList, samt funktionerne rootFind() <strong>og</strong> rootUnion().<br />

For hver subblob er der en plads i arrayet, som <strong>brug</strong>es til sammenknytning. Værdien i arrayet<br />

<strong>af</strong>spejler hvilken subblob, subblobben er knyttet til. Hvis værdien svarer til subblobens eget<br />

nummer, er subblobben en rod i sig selv.<br />

18.9.4.4 rootFind()<br />

Funktionen <strong>brug</strong>es til at finde roden til en subblob. Dette gøres <strong>ved</strong> at slå subblobbens nummer op i<br />

pSubBlobList, hvorfra det kan indlæses hvilken subblob, den er knyttet til. D<strong>og</strong> kan det forekomme,<br />

at roden er knyttet til en tredje subblob. Derfor kalder funktionen sig selv med det nye<br />

subblobnummer som parameter. Funktionen stopper med at kalde sig selv, når den har fundet<br />

roden.<br />

int BlobDetection::rootFind(int a)<br />

{<br />

if (pSubBlobList[a] == a)<br />

{<br />

return a;<br />

}<br />

else<br />

{<br />

return rootFind(pSubBlobList[a]);<br />

}<br />

}<br />

18.9.4.5 rootUnion()<br />

Funktionen <strong>brug</strong>es til at sætte to forskellige subblobs sammen. Da de begge kan være knyttet til<br />

andre subblobs, er det nødvendigt først at finde deres rod med rootFind(). Når rødderne er fundet,<br />

knyttes rødderne sammen, <strong>ved</strong> at lade den med det største nummer pege på den med det mindste<br />

<strong>ved</strong> at rette i pSubBlobList.<br />

void BlobDetection::rootUnion(int a, int b)<br />

{<br />

int rootA;<br />

int rootB;<br />

rootA = rootFind(a);<br />

rootB = rootFind(b);<br />

if(rootA < rootB)<br />

{<br />

pSubBlobList[rootB] = rootA;<br />

}<br />

else if(rootA > rootB)<br />

{<br />

pSubBlobList[rootA] = rootB;<br />

}<br />

Side 107 <strong>af</strong> 131

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

Saved successfully!

Ooh no, something went wrong!