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

18.9 Implementering<br />

18.9.1 Color<br />

Da der er behov for at arbejde med billeder i forskellige størrelser, er bredden <strong>og</strong> højden variable.<br />

Selve billedet gemmes i tre dobbeltarrays. Disse tre dobbeltarrays indeholder hver sin farve (rød,<br />

grøn <strong>og</strong> blå). Det første index er y-koordinatet mens det andet index er x-koordinatet. På grund <strong>af</strong><br />

den variable højde <strong>og</strong> bredde er de tre dobbeltarrays allokeret dynamisk.<br />

18.9.1.1 Color()<br />

Ved hjælp <strong>af</strong> overloading er der lavet to forskellige versioner <strong>af</strong> constructoren Color(). Den ene er<br />

en simpel constructor, som sørger for at højden, bredden bliver initialiseret til 0. Da der er behov for<br />

at kunne kopiere et billede er den anden er en copy-constructor, der sørger for at kopiere et billede<br />

fra det ene color-objekt til et andet. Dette gøres <strong>ved</strong> at kopiere variablerne, allokere plads til de tre<br />

dobbelt arrays <strong>og</strong> kopiere værdierne fra de tre arrays til det nye objekt.<br />

18.9.1.2 execute()<br />

Ved hjælp <strong>af</strong> overloading er der lavet to forskellige versioner <strong>af</strong> execute(). Den ene version <strong>af</strong><br />

execute() tager den ønskede bredde <strong>og</strong> højde som parameter. Funktionen opretter de tre dobbeltarrays<br />

<strong>og</strong> sørger for at nulstille disse så billedet er sort som udgangspunkt.<br />

void Color::execute(int setWidth, int setHeight)<br />

{<br />

width = setWidth;<br />

height = setHeight;<br />

}<br />

makeVirtualImage();<br />

clearImage();<br />

Den anden version <strong>af</strong> execute() tager et filnavn som parameter. Filen skal være et ikke<br />

komprimeret BMP-billede. Hele filen bliver kopieret over i en buffer, så der kun skal læses fra<br />

harddisken én gang. Ud fra oplysninger fra headeren findes billedets højde samt bredde <strong>og</strong> de<br />

dynamiske arrays bliver allokeret.<br />

Far<strong>ved</strong>ybden læses ind fra headeren. Hvis far<strong>ved</strong>ybden er 8 bit oprettes der en palette. Indlæsning <strong>af</strong><br />

billeddata starter fra den adresse som offset-værdien peger på. Hvis billedets far<strong>ved</strong>ybde er 8 bit slås<br />

billeddataene op i paletten for at finde farven. Hvis billedet er 24 bit læses billededataene direkte ind<br />

i de 3 farvearrays.<br />

18.9.1.3 save()<br />

Funktionen sørger for at billedet bliver gemt til disken. For at undgå flere skrivninger til harddisken<br />

oprettes der en buffer, hvor alle dataene skrives i. Billedet bliver gemt i 24-bit, så der er ikke n<strong>og</strong>en<br />

palette med. Billedets højde, bredde, far<strong>ved</strong>ybde mv. bliver skrevet til headeren. Efterfølgende bliver<br />

de enkelte pixels farve skrevet i datadelen <strong>af</strong> bufferen. Når alle pixels er skrevet til bufferen kopieres<br />

denne til harddisken hvor filen oprettes.<br />

Side 102 <strong>af</strong> 131

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

Saved successfully!

Ooh no, something went wrong!