Digital Media Lab 2016-02-22 Tillämpad Fysik och Elektronik Ulrik Söderström Bildbehandling i spatialdomänen och frekvensdomänen Fouriertransform och filtering
Del 1. Fouriertransformen 1.1. Fourieranalys i två dimensioner Vi kommer att titta på några enkla signaler i både spatial- och frekvensdomänen. I den här övningen använder vi gråskalebilder med storleken 65 x 65 pixlar. Varje pixel har ett värde mellan 0 och 1. Ibland måste man skala om den resulterande bilden för att komma tillbaka till värden mellan 0 och 1. Ett sätt att få information om pixelvärden är funktionen "hist", som beräknar frekvensen för varje pixelvärde. Vi börjar med en "imensionell" sinusvåg. I följande kod finns 65 x 65 pixlar med två perioder av en horisontell sinusvåg. Bilden visas med "imshow", så vi måste skala om värdena så att de ligger mellan 0 och 1 innan den visas. Signalen är centrerad på x-axeln efter att Fouriertransformen beräknas. (fft, fft2, fftshift) clear; %the image will be in format Q x Q Q =65; %number of periods periods=2; %orginal image for m=1:1:q for n=1:1:q orig_image(m,n)=0.5+0.5.*sin(2.*pi.*(n./(q./periods))); %the "0.5" constants give values between 0 and 1 for use with "imshow" subplot(1,2,1),imshow(orig_image);title('original image'); %delete the added scaling values before FFT, gives values symmetrically around the x- axis A=orig_image-.5; B=fftshift(abs(fft2(A))); subplot(1,2,2),imshow(b);title('magnitude of FFT'); 1.1.1 Förklara resultatet. Vad är det som händer? 1.1.2 Vad händer med Fourierspektrumet om sinusvågen är vertikal? 1.1.3 Skapa en svart bild av storlek 65 x 65 med en 9 x 9 vit kvadrat i mitten. I det här fallet kan du behöva skala om frekvensbilden innan du visar resultatet. Använd en log-transform (log (abs (fftshift (fft2 (bild))) + 1)) och skala om bilden med formeln bild = bildmin (min (bild)))./(max (max (bild)) - min (min (bild))). Ser spektrumet ut som förväntat? Beskriv resultatet. 1.1.4 Upprepa föregåe experiment men använd en bild med nollor överallt förutom en vit pixel i mitten. Beskriv vad som händer och förklara varför.
Del 2 - Filtrering 2.1. Faltning (Filtrering i spatialdomänen) Om filtreringsfunktionen är känd och du vill beräkna en specifik utsignal från insignal går det att använda två metoder. I spatialdomänen används faltning. Du tillämpar faltning till insignalen och impulssvaret för filtret. Vanligtvis är insignalen en lång sekvens och impulssvaret en kort sekvens som kallas faltningskärna (filterkärna). (conv, conv2) Skapa en 65x65 stor bild med en 15 x 15 kvadrat i mitten. Skapa följande faltningskärna med koden nedan: 1 1 1 1 1 1 1 1 1 /9 filter1=ones(3, 3)./9; Beräkna utsignalen med hjälp av faltning. 2.1.1 Hur ändras bilden av filtreringen? Jämför Fourierspektrat för orignalbilden och den filtrerade bilden. 2.1.2 Följande filter är ett Laplace-filter: 0 1 0 1-4 1 0 1 0 filter2=[0 1 0; 1-4 1; 0 1 0]; Hur påverkas bilden och dess Fourierspektrum av denna typ av filter? 2.2. Filtrering i frekvensdomänen Den andra metoden för filtrering är filtrering i frekvensdomänen. Transformen av en bild multipliceras med ett filter som dämpar (eller förstärker) vissa frekvenser. Filtret kan antingen skapas direkt i frekvensdomänen eller vara transformen av ett filter som skapats i spatialdomänen. I detta fall multipliceras Fouriertransformen av bilden med Fouriertransformen av impulssvaret. Fouriertransformera både bilden och ett 3x3 medelvärdesfiltret till frekvensdomänen: [M1 N1]=size(bild); [M2 N2]=size(filter); M=M1+M2-1; %The images has to be zero-padded to this size! N=N1+N2-1; fftbild=fftshift(fft2(bild, M, N)); % calculate the FFT, fftfilter=fftshift(fft2(filter, M, N)); %automatic zero-pad B1=log(abs(fftbild)+1); B1=(B1-min(min(B1)))./(max(max(B1))-min(min(B1))); C1=log(abs(fftfilter)+1); C1=(C1-min(min(C1)))./(max(max(C1))-min(min(C1))); figure
subplot(1,2,1),imshow(b1);title('original'); subplot(1,2,2),imshow(c1);title('filter'); En ny, filtrerad, bild (i frekvensdomänen) skapas enkelt via multiplikation: nybild=fftbild.*fftfilter; %element wise multiplication D1=log(abs(nybild)+1); D1=(D1-min(min(D1)))./(max(max(D1))-min(min(D1))); figure subplot(1,2,1),imshow(d1);title('filtered image, magnitude as a function of frequency'); Det sista steget är att göra en inverstransform av resultatet: nybild=fftshift(nybild); %shift back recreate=ifft2(nybild); subplot(1,2,2),imshow(recreate);title('filtered image'); 2.2.1 Beskriv funktionen hos filtret. Hur påverkas bilden? 2.2.2 Jämför med resultatet i 2.1.1 Vad är skillnaden? 2.2.3 Skapa ett filter direkt i frekvensdomänen. Till exempel kan du skapa ett idealiskt lågpassfilter: [M, N]=size(fftbild); radius=15; filter=zeros(m, N); for i=1:m for j=1:n if (((i-(m+1)/2).^2+(j-(n+1)/2).^2).^0.5)<=radius filter(i,j)=1; Filtrera bilden från 2.1 (svart med vit fyrkant) med filtret. Vad blir resultatet? Vad för slags filter har du skapat i frekvensdomänen? 2.2.4 Diskutera fördelar och nackdelar med filtrering i spatialdomänen och i frekvensdomänen.
Del 3 - Image enhancement (Bildförbättring) 3.1. Sharpening Med ett högpassfilter är det möjligt att förstärka ett objekts konturer. Detta kan göras genom att kombinera den ursprungliga bilden med en högpassfiltrerad version av bilden. På hemsidan kan du hitta bilden "debbie 4.bmp" (imread, ind2gray). Ett högpassfilter kan kombineras med den ursprungliga bilden genom följande filter: 0-1 0 0-1 0 0 0 0-1 5-1 = -1 4-1 + 0 1 0 0-1 0 0-1 0 0 0 0 Falta bilden med filtret. Visa resultatet och beskriv effekten. Del 4 Färg 4.1. Ladda valfritt färgfotografi i jpeg-format. Det finns tre färgkanaler i bilden, röd, grön och blå. Byt plats på färgkanalerna. Visa effekterna och diskutera resultaten. 4.2. Justera nivån på färgkanalerna genom att multiplicera dem med en faktor (α). Du kan välja om du vill ha en högre nivå (α> 1) eller en lägre nivå (α <1). Visa resultaten för förändringar i två färgkanaler och diskutera resultatet. Rapport Lämna in en individuell skriftlig rapport genom att ladda upp den på Moodle. Rapporten ska innehålla följande: Problembeskrivning. Vad har ni löst? Resultat. Svar på frågor, värden och siffror. Slutsatser från svaren. Vad betyder de? En reflektion över uppgiften. Vad var svårt, bra och/eller meningslöst? Matlab-kod.