Exercise 3
Fra Wikipedia, den frie encyklopedi.
| Innholdsfortegnelse |
Bildebehandlingsøving
Mål med øvingen:
- Behandling av tabeller med bildedata
- Implementering av forskjellige former for romlige filtre
- Implementering av 2-dimensjonal diskret Fourier transformasjon
- Filtrering av bilder i frekvensdomenet
- Muligheter for ekstra utfordringer for de som liker å programmere
Del 1: Grunnleggende ferdigheter
A: Last inn et bilde vha. det utdelte JPEG-biblioteket (finnes under eksempelkode på menyen til venstre).
B: Lek deg med å justere lysstyrke og kontrast på bildet. Gjør dette uavhengig for hver fargekanal slik at rød kanal inverteres, grønn kanal dobles og blå kanal subraheres med 10. Husk å benytte mettet/saturated aritmetikk slik at 255+1 ikke blir 0.
C: Lagre det modifiserte bildet som en ny JPEG-fil
Eksempel på implementering av mettet aritmetikk i C:
/* saturated arithmetics; to avoid 255+1==0 and 0-1==255 */
unsigned char SAT(int val) {
if (val < 0) return 0;
else if (val > 255) return 255;
return (uchar) val;
}
Eksempel på hvodan man kan arbeide med fargebilder i C:
typedef struct {
unsigned char red; //first
unsigned char green; //second
unsigned char blue; //third
} colorPixel;
imageRGB image = read_JPEG_file("input_file.jpg");
int width = image.width;
colorPixel* colorImg = (colorPixel*) image.data;
/* Castingen til colorPixel gjør det enklere å skille fargekanalene fra hverandre */
colorImg[xPos + yPos*width].blue = 7;
/* Alternativet ville vært */
image.data[3*(xPos + yPos*width)+2] = 7; // alters the blue color component
Del 2: Romlig filtrering
A: Konverter bilde i farger til bilde i gråtoner. Tips: velg den høyeste verdien av RGB-verdiene eller lag et gjennomsnitt. Lagre denne ene verdien i alle RGB-verdiene. Dette kan du bruke i resten av øvingen, ved å kjøre filter teknikken på en av RGB-verdiene og skrive tilbake til alle RGB-verdiene. Lag gråtonebilder av bildene Fig3_35 og Fig3_37 (link til bildene finnes i oppgavene under).
B: Filtrer/glatt et bilde vha. en uniform 3x3 konvolusjonsmaske. Tips: uniforme og Gaussiske konvolusjonsmasker kan implementeres separabelt (horisontal og vertikal filtrering hver for seg), noe som gir bedre kjøretid for store masker. Uniforme masker kan i tillegg implementeres inkrementellt (vha. akkumulator som man legger til og trekker fra), slik at kjøretiden blir uavhengig av maskestørrelsen. Benytt bilde Figure 3.35a fra boka (side 122). Ønsket output finnes i Figure 3.35b.
C: Medianfiltrer et bilde vha. en maske på størrelse 3x3. Her blir du nødt til å sortere verdiene innenfor masken, og finne det midterste elementet. Benytt bilde Figure 3.37a fra boka (side 124). Ønsket output finnes i Figure 3.37c.
Diskuter forskjellen mellom de to glattingsteknikkene. Hvilke fordeler/ulemper har de? Er begge teknikkene lineære?
Avansert: De av dere som programmerer i Visual Studio, og ønsker å tøffe dere med litt hardcore programmering kan benytte MMX/SSE instruksjonene til å speede opp filtreringen. Dokumentasjon på hvordan disse fungerer finnes på MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrfMMXSSESSE2Intrisics.asp).
Del 3: Filtrering frekvensdomenet
A: Implementer en algoritme for 2-dimensjonal diskret Fourier transform (formel finnes i boka). Husk å benytte komplekse flyttall og skikkelig kompleks multiplikasjon! Algoritmen bør utnytte at Fourier transfomen er en separabel transform slik at kjøretiden blir O(N3) isteden for naive O(N4). En enkel test på om transformen virker er å lage et 100x100 bilde slik som Fig 4.38a (side 156) i boka og lese dette inn og skriv ut Fourier spectrum (Figure 4.3b).
B: Utnytt vår gode venn konvolusjonsteoremet til å foreta bildefiltrering i frekvensdomenet. Verifiser at dette gir samme resultat som den romlige filtreringen i Del 2B.
Avansert: Dere får stjerner i margen hvis dere i tillegg implementerer Fast Fourier Transform (FFT), noe som reduserer kjøretiden ytterligere til O(N2log(N) ).
Løsningsforslag
Løsningsforslag finnes på [1] (http://www.idi.ntnu.no/emner/tdt4195/kode/exercise_3/) og[2] (http://www.idi.ntnu.no/emner/tdt4195/kode/exercise_3_Tore_Bruland/).
