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 />

…<br />

for(int y = 0; y < height; y++)<br />

{<br />

for(int x = 0; x < width; x++)<br />

{<br />

if(ppTempSource1GrayScalePointer[y][x]!=<br />

ppTempSource2GrayScalePointer[y][x])<br />

{<br />

ppTempDestGrayScalePointer[y][x] = 255;<br />

numberOfWhitePixels++;<br />

}<br />

}<br />

}<br />

…<br />

Derefter beregnes massemidtpunktet for de små arealer som er opstået. Til dette formål anvendes<br />

Utilities-klassens calculateCenterOfMass(). Bagefter tilføjes koordinater for punktet i seedobjektet:<br />

…<br />

CenterOfMass centerOfMassCoordinates;<br />

Utilities utilities;<br />

centerOfMassCoordinates = utilities.calculateCenterOfMass(destination, numberOfWhitePixels);<br />

pSeed[count].centerTopX = int(centerOfMassCoordinates.xCoordinate) + pSeed[count].boundsXMin;<br />

pSeed[count].centerTopY = int(centerOfMassCoordinates.yCoordinate) + pSeed[count].boundsYMin;<br />

pSeed[count].TopBottomDetection = true;<br />

…<br />

18.9.7.3 findTop()<br />

I denne funktion implementeres beregningen <strong>af</strong> vinklen mellem den linie, der går igennem de to<br />

massemidtpunkter <strong>og</strong> det vandrette plan. De to massemidtpunkter er fra henholdsvis<br />

ellipseapproksimationen <strong>og</strong> subtract()-funktionen. Som det første beregnes sidelængderne i<br />

trekanten a, b <strong>og</strong> c. Derefter beregnes vinklen. Herefter følger de to tjek der <strong>af</strong>gør om topmassemidtpunktet<br />

ligger på henholdsvis den ene eller den anden side <strong>af</strong> lilleaksen. Til sidst tilføjes<br />

det i hvilken ende toppen er beregnet til at ligge, i seed-objektet:<br />

…<br />

b = float(pSeed[count].centerTopX - pSeed[count].centerOfMassX);<br />

a = float(pSeed[count].centerTopY - pSeed[count].centerOfMassY);<br />

c = sqrt(pow(a,2)+pow(b,2));<br />

angle = acos(b/c);<br />

if(a pSeed[count].thetaMinorAxis && pSeed[count].thetaCenterTop <<br />

pSeed[count].thetaMinorAxis + M_PI)<br />

{<br />

pSeed[count].thetaTop += float(M_PI);<br />

}<br />

}<br />

else<br />

{<br />

if(pSeed[count].thetaCenterTop > pSeed[count].thetaMinorAxis || pSeed[count].thetaCenterTop <<br />

pSeed[count].thetaMinorAxis - M_PI)<br />

{<br />

pSeed[count].thetaTop += float(M_PI);<br />

}<br />

}<br />

…<br />

Side 115 <strong>af</strong> 131

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

Saved successfully!

Ooh no, something went wrong!