Megabangetz’s Weblog

Portofolio 3

Posted on: May 18, 2008

Merekonstruksi foto diri dengan menggunakan freqcomp.m

Listing program freqcomp.m

function recon = freqcomp(im, Npts, delay)

if ndims(im) == 3

% mengubah image jadi grayscale

im = rgb2gray(im);

warning(‘converting colour image to greyscale’);

end

if nargin < 2

Npts = 50;

end

[rows,cols] = size(im);

% If necessary crop one row and/or column so that there are an even

% number of rows and columns, this makes things easier later.

if mod(rows,2) % odd

rows = rows-1;

end

if mod(cols,2) % odd

cols = cols-1;

end

im = im(1:rows,1:cols);

rc = fix(rows/2)+1; % Centre point

cc = fix(cols/2)+1;

% The following code constructs two arrays of coordinates within the FFT

% of the image that correspond to complex conjugate pairs of points that

% spiral out from the centre visiting every frequency component on

% the way.

p1 = zeros(Npts,2); % Path 1

p2 = zeros(Npts,2); % Path 2

m = zeros(rows,cols); % Matrix for marking visited points

m(rc,cc) = 1;

m(rc,cc-1) = 1;

m(rc,cc+1) = 1;

p1(1,:) = [rc cc-1];

p2(1,:) = [rc cc+1];

d1 = [0 -1]; % initial directions of the paths

d2 = [0 1];

% Mark out two symmetric spiral paths out from the centre (I wish I

% could think of a neater way of doing this)

for n = 2:Npts

l1 = [-d1(2) d1(1)]; % left direction

l2 = [-d2(2) d2(1)];

lp1 = p1(n-1,:) + l1; % coords of point in left direction

lp2 = p2(n-1,:) + l2;

if ~m(lp1(1), lp1(2)) % go left

p1(n,:) = lp1;

d1 = l1;

m(p1(n,1), p1(n,2)) = 1; % mark point as visited

else % go sraight ahead

p1(n,:) = p1(n-1,:) + d1;

m(p1(n,1), p1(n,2)) = 1; % mark point as visited

end

if ~m(lp2(1), lp2(2)) % go left

p2(n,:) = lp2;

d2 = l2;

m(p2(n,1), p2(n,2)) = 1; % mark point as visited

else % go sraight ahead

p2(n,:) = p2(n-1,:) + d2;

m(p2(n,1), p2(n,2)) = 1; % mark point as visited

end

end

% Having constructed the path of frequency components to be visited

% we take the FFT of the image and then enter a loop that

% incrementally reconstructs the image from its components.

IM = fftshift(fft2(im));

recon = zeros(rows,cols); % Initialise reconstruction matrix

if max(rows,cols) < 150

fontsze = 7;

else

fontsze = 10;

end

figure(1), clf

subplot(2,2,1),imagesc(im),colormap gray, axis image, axis off

title(‘Original Image’,’FontSize’,fontsze);

subplot(2,2,2),imagesc(log(abs(IM))),colormap gray, axis image

axis off, title(‘Fourier Transform + frequency component pair’,’FontSize’,fontsze);

warning off % Turn off warnings that might arise if the images cannot be

% displayed full size

truesize(1)

for n = 1:Npts

% Extract the pair of Fourier components

F = zeros(rows,cols);

F(p1(n,1), p1(n,2)) = IM(p1(n,1), p1(n,2));

F(p2(n,1), p2(n,2)) = IM(p2(n,1), p2(n,2));

% Invert and add to reconstruction

f = real(ifft2(fftshift(F)));

recon = recon+f;

% Display results

subplot(2,2,2),imagesc(log(abs(IM))),colormap gray, axis image

axis off, title(‘Fourier Transform + frequency component pair’,’FontSize’,fontsze);

hold on, plot([p1(n,2), p2(n,2)], [p1(n,1), p2(n,1)],’r.’); hold off

subplot(2,2,3),imagesc(recon),colormap gray, axis image, axis off, title(‘Reconstruction’,’FontSize’,fontsze);

subplot(2,2,4),imagesc(f),colormap gray, axis image, axis off

title(‘Basis function corresponding to frequency component pair’,’FontSize’,fontsze);

if nargin == 3

pause(delay);

else

fprintf(‘Hit any key to continue \n’); pause

end

end

Dengan jumlah komponen frekuensi 30, hasilnya seperti dibawah ini:

clip_image002

Dengan jumlah komponen frekuensi 50, hasilnya seperti dibawah ini:

clip_image004

Dengan jumlah komponen frekuensi 120, hasilnya seperti dibawah ini:

clip_image006

Filter Gausian

function tugasgausian = Gausian(images);

% mendapatkan image

i = imread(images);

% image grayscale

im = rgb2gray(i);

% filter gausian

gausianfilter = fspecial(‘gaussian’, size(im), 5);

% FFT image

imagefft = fft2(im);

% FFT dari filter gaussian

gausianfilterfft = fft2(gausianfilter);

% perkalian FFT image dengan FFT filter gaussian

result = gausianfilterfft.*imagefft;

figure,imshow(im);

clip_image008

figure,imagesc(gausianfilter),colormap gray;

clip_image010

figure,imagesc(fftshift(log(abs(imagefft)+eps))),colormap gray;

clip_image012

figure,imagesc(fftshift(log(abs(gausianfilterfft)+eps))),colormap gray;

clip_image014

figure,imagesc(fftshift(log(abs(result)+eps))),colormap gray;

clip_image016

% menampilkan hasil smoothing

figure,imagesc(fftshift(real(ifft2(result)))),colormap gray;

clip_image018

Filter Average

function tugasaverage = average(images);

% mendapatkan image

i = imread(images);

% image grayscale

im = rgb2gray(i);

[row col] = size(im);

averageFilter = zeros(row,col);

if (mod(row,2)==0 && mod(col,2)==0)

pusatx = row/2;

pusaty = col/2;

averageFilter(pusatx-10:pusatx+11, pusaty-10:pusaty+11) = 1;

elseif (mod(row,2)==0 && mod(col,2)==1)

pusatx = row/2;

pusaty = (col-1)/2;

averageFilter(pusatx-10:pusatx+11, pusaty-10:pusaty+10) = 1;

elseif (mod(row,2)==1 && mod(col,2)==0)

pusatx = (row-1)/2;

pusaty = col/2;

averageFilter(pusatx-10:pusatx+10, pusaty-10:pusaty+11) = 1;

elseif (mod(row,2)==1 && mod(col,2)==1)

pusatx = (row-1)/2;

pusaty = (col-1)/2;

averageFilter(pusatx-10:pusatx+10, pusaty-10:pusaty+10) = 1;

end

% filter average

averageFilter = averageFilter/(sum(sum(averageFilter)));

% FFT image

imagefft = fft2(im);

% FFT dari filter average

averagefilterfft = fft2(averageFilter);

% perkalian FFT image dengan FFT filter average

result = averagefilterfft.*imagefft;

figure,imshow(im);

clip_image019

figure,imagesc(averageFilter),colormap gray;

clip_image021

figure,imagesc(fftshift(log(abs(imagefft)+eps))),colormap gray;

clip_image012[1]

figure,imagesc(fftshift(log(abs(averagefilterfft)+eps))),colormap gray;

clip_image023

figure,imagesc(fftshift(log(abs(result)+eps))),colormap gray;

clip_image025

% menampilkan hasil smoothing

figure,imagesc(fftshift(real(ifft2(result)))),colormap gray;

clip_image027

Pertukaran Nilai Fase

Image1

clip_image029

Image2

clip_image031

informasi amplitudo dari image1 dan informasi fase dari image2, hasilnya lebih mirip image2

clip_image033

Informasi amplitudo dari image2 dan informasi fase dari image1, hasilnya lebih mirip image1

clip_image035

Fase dari image1

clip_image037

Fase dari image2

clip_image039

Listing program pertukaran nilai fase

% mendapatkan 2 gambar yg berbeda

image1 = imread(‘polka.jpg’);

image2 = imread(‘sok imut1.jpg’);

% image1 dirubah ke bentuk grayscale

image1 = rgb2gray(image1);

% image2 dirubah ke bentuk grayscale

image2 = rgb2gray(image2);

% FFT image1

image1fft = fft2(image1);

% FFT image2

image2fft = fft2(image2);

% mendapatkan informasi fase dari image1

image1fase = angle(image1fft);

% mendapatkan informasi fase dari image2

image2fase = angle(image2fft);

% mendapatkan amplitudo dari image1

image1amp = abs(image1fft);

% mendapatkan amplitudo dari image2

image2amp = abs(image2fft);

% informasi amplitudo dari image1, informasi fase dari image2

newimfft1 = image1amp.*(cos(image2fase) + i*sin(image2fase));

% informasi amplitudo dari image2, informasi fase dari image1

newimfft2 = image2amp.*(cos(image1fase) + i*sin(image1fase));

figure,imagesc(real(ifft2(newimfft1))),colormap gray;

figure,imagesc(real(ifft2(newimfft2))),colormap gray;

% mendapatkan fase dari image1 saja

image1faseaja = image1fft./image1amp;

% mendapatkan fase dari image2 saja

image2faseaja = image2fft./image2amp;

figure,imagesc(real(ifft2(image1faseaja))),colormap gray;

figure,imagesc(real(ifft2(image2faseaja))),colormap gray;

figure,imagesc(image1),colormap gray;

figure,imagesc(image2),colormap gray;

Leave a comment


  • None
  • No comments yet

Archives