TEM­Projekt Transformmetoder Utförs av: Mikael Bodin 19940414­4314 William Sjöström 19940404­6956 Sammanfattning I denna laboration undersöks hur Fouriertransformering kan användas vid behandling och analysering av bilder.Med hjälp utav Matlab kunde avstånd mellan atomlager beräknas och dessutom togs det reda på vad som händer om man filtrerar bort vissa komponenter och transformerar tillbaka en bild. Uppsala 2015­12­08 Inledning Det är vanligast att Fouriertransformering används för att analysera signaler genom att ta en funktion i tidsdomänen, f(t), och transformera till frekvensdomänen, F(w). Fouriertransformen har då ekvationen: Men Fourierserier kan användas till mycket annat, exempelvis för att transformera från det reella rummet till det reciproka rummet. Transformen går alltså från f(x), där x är en längd, till F(k), där k är den inversa längden. Foriertransformen har då ekvationen: Denna typ av Fouriertransform kan alltså användas för att transformera exempelvis en bild, vilket skall studeras i denna laboration. Fouriertransformen av en bild kan ses som en oändlig summa kombinationer av komplexa exponentialfunktioner. Med enklare ord fasförskjutna sinus­ och cossinus­termer med olika frekvens och amplitud. Dessa kurvor interfererar alltså med varandra och resultatet är den transformerade bilden. Genom att modifiera Fouriertransformen så kan man finna återkommande mönster. Detta används bland annat vid bildbehandling och analysering av bilder. Man kan exempelvis ta bort (dölja) störningar i bilder genom att ta bort vissa “kanaler”, det vill säga vissa av kurvorna. Vid återtransformering saknas alltså dessa delar av bilden vilket kan ge många olika resultat. En kanal som ofta tas bort vid bildanalysering är den så kallade DC­komponenten. DC­komponenten är där k (eller w) är 0, det vill säga F(0). Detta betyder alltså att DC­komponenten är ett medelvärde av hela intervallet, varför den ofta är så stor att de andra kanalerna blir svåra att se. Teori Fouriertransformering i Matlab: Som nämnt i inledningen så kan Fouriertransformen ses som en oändlig summa, det är naturligtvis inte praktiskt möjligt att utföra sådana beräkningar i en dator eftersom att det skulle ta en oändlig tid. Därför använder man sig av en ändligt lång Fouriertransform vid datorberäkningar, detta kallas för Diskret Fouriertransform, DFT. I Matlab finns en variant av DFT som kallas Fast Fourier Transform, FFT. Målet med laborationen är att undersöka tvådimensionella bilder, alltså används kommandot: fft2() Vilket är Matlabs kommando för fouriertransformering i två dimensioner. För att återtransformera finns motsvarande: ifft2() 2 Bilder i Matlab: Bilder kan importeras till Matlab med kommandot: imread() Bilden importeras då som en matris. Detta gör att varje pixel representeras som tre element i matrisen, en för varje färg röd, grön och blå. Varje element i matrisen innehåller alltså en siffra från 0 till 255 vilken representerar pixelns färgton. Metod Experiment 1 I experiment 1 undersöks hur långt det är mellan atomlagren utifrån en bild på en guldbit. Experiment 1 utfördes enligt följande: 1. En bild importerades som en matris, ‘bildmatris’, i Matlab med hjälp av “imread()”­funktionen. 2. Sedan användes funktionen “real()” på ‘bildmatris’ för att skapa en ny matris, ‘nymatris’. Detta görs för att säkerställa att alla element i ‘nymatris’ är reella decimaltal och således senare kan Fouriertransformeras av Matlab. 3. ‘nymatris’ Foriertransformeras med “fft2()”­funktionen. Den transformerade matrisen sparas som en ny matris, ‘FTmatris’. 4. Eftersom att mönstret ofta ser likadant ut för alla färger så analyseras endast en färgkanal (kanal 1 valdes, dvs rött). 5. DC­komponenten togs bort (sattes till 0), för att enklare kunna se de svagare kanalerna. 6. Antalet pixlar mellan mitten samt en av de ljusare punkterna i FFT bilden räknades och från detta kunde avståndet mellan atomlagrena beräknas. Experiment 2: I experiment 2 undersöks återtransformering på en bild med kakelplattor efter att olika kanaler tagits bort. Experiment 2 utfördes enligt följande: 1. Steg 1­5 från experiment 1 implementerades även i detta experiment. 2. Områden filtrerades bort från FTmatrisen genom att utesluta vissa element. tex: FTmatris(:,1:50,:)=0; (se figur 3 ) 3. Därefter transformerades matisen tillbaka med hjälp av “ifft2()” 4. Slutliga bakmatrisen sparades för att kunna jämföras med upprepade experiment där filtreringen varierat. 3 Resultat Experiment 1: Figur 1: Den svartvita bilden är ett resultat av en TEM­scanning medan den blåa bilden är resultatet av FFT behandlingen av bilden efter att DC­komponenten tagits bort.. En nm motsvarar 33,8 pixlar enligt skalan som syns till vänster i figur 1. Avstånd mellan atomlager beräknades till 0,215 nm. Experiment 2: Figur 2: Den lila bilden är ett foto på kakelplattor som sedan blivit inläst i Matlab och tillbakatransformerad. Blå bilden är resultatet av FFT behandlingen Här användes “ FTmatris(1,1,:)=0;” Här filtrerades inga komponenter bort och bilden ändrades bara så att färgerna blev inversa gentemot orginalbilden. (se appendix) 4 Figur 3: Den lila bilden är ett foto på kakelplattor som sedan blivit inläst i Matlab och tillbakatransformerad. Blå bilden är resultatet av FFT behandlingen Här användes “ FTmatris(:,1:50,:)=0;” Här filtrerades komponenter bort innan bilden återtransformerades Detta gjorde att resultatbilden blev otydligare samt mörkare i allmänhet. Diskussion och slutsatser Det uppmärksammades att DC­komponenten faktiskt blev mycket större än de övriga. Detta upptäcktes genom att de mindre komponenterna inte syntes innan DC­komponenten togs bort. Det reciproka rummet är det som visas i FFT­plotterna, där stora avstånd i den verkliga bilden blir små avstånd i FFT­plotten. Vilket man kan se om man jämför FFT­plotten och verkliga bilden. Kakelplattorna är längre än vad de är höga, medan punkterna i FFT­plotten påvisar större mellanrum mellan punkterna i den vertikala delen än den horisontella. Ännu klarare är det om man jämför detta med FFT­plotten och bilden från experiment 1. Där avståndet i själva bilden är litet men stort i FFT­plotten. Annat som är tydligt i FFT­plotten är att man kan urskillja en viss periodicitet och symmetri. Ju mer ursprunsbilden relaterar till dessa desto mer av det kan man urskillja i plotten. Ser man till exempel på plotten från experiment 1 så handlar detta om avståndet mellan atomlagrena som är symmetriskt men eftersom atomerna är mer kaosartat placerade så kan man urskillja ett brus i bakgrunden. Om man däremot tittar på FFT­plotten av kakelplattorna så kan man se både symmetri samt periodicitet. Mönstret i denna plott är i form utav symmetriskt placerade punkter på x­ samt y­axeln. Bakgrunden påvisar däremot vaga punkter som tillsammans med punkterna på axlarna ett symmetriskt punktnät. Referenser [1] http://rsb.info.nih.gov/ij/docs/examples/tem/ [2] http://www­personal.umich.edu/~engelmm/lectures/ShortCourseSymmetry4.pdf 5 Appendix Kod för experiment 1: nm=(169/5); %motsvarar en nm, 5nm är 169px i x­led bildmatris=imread( 'tem­1.TIF' ); nymatris=real(bildmatris); FTmatris=fft2(nymatris); FTmatris(5:50,5:250,1)=0; bakmatris=abs(ifft2(FTmatris)); FTmatris(1,1,:)=0; %imagesc(bakmatris(:,:,1)); imagesc(fftshift(abs(FTmatris(:,:,1)))); %imwrite(uint8(abs(FTmatris)),'tem­2.png','png'); x1=input('Min x­value of dot?: '); %Startpunkt då pixlarna i FFT bilden räknas x2=input('Max x­value of dot?: '); %Slutpunkt där ljusa punkten befinner sig x=x2­x1; %x är avståndet mellan mittpunkten och den närmsta ljusa punkten avst=1/(x/nm) %Avstånd mellan atomlagren i nm Kod för experiment 2: clear all bildmatris=imread(uigetfile); %Lets user choose image­file nymatris=real(bildmatris); %Saves the real part of bildmatris as a new matrix FTmatris=fft2(nymatris); %Fouriertransforms nymatris bakmatris=abs(ifft2(FTmatris)); %Removes imaginary part and inverse­transform FTmatris(1,1,:)=0; %Deletes DC­komponent, makes image easier to see FTmatris(:,1:50,:)=0; %Used in experiment 2 part 2 imagesc(fftshift(abs(FTmatris(:,:,1)))); %plot image bakmatris=abs(ifft2(FTmatris)); savefile = input( 'Do you want to save the transformed image? (YES/NO): ' , 's' ); if isequal(savefile, 'YES' ); imwrite(uint8(abs(bakmatris)),input( 'Filename: ' , 's' ), 'png' ); end 6 Använd bild för experiment 2: 7