๊น์ ์
ํ์ธ๋ํ๊ต 22ํ๋ฒ ์ปดํจํฐ๊ณตํ๊ณผ
ํ์ธ๋ํ๊ต 22ํ๋ฒ ์ปดํจํฐ๊ณตํ๊ณผ
์ฝ๋์ ์ฒซ ๋ถ๋ถ์์๋ ๊ธฐ๋ณธ์ ์ธ FFT(Fast Fourier Transform) ์ฐ์ฐ์ ํน์ฑ์ ๋ณด์ฌ์ค๋๋ค. ๋ฒกํฐ์ ๋ํ FFT ๋ณํ ์ ์ฃผ์ํ ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
MATLAB์์ FFT๋ฅผ ๋ค๋ฃฐ ๋์ ๊ธฐ๋ณธ์ ์ธ ํน์ฑ์ ์ดํด๋ด ์๋ค:
a = [1 2 3 4 5 6];
fft(a') % column vector๋ก ๋ณํ
fft(a) % row vector ๊ฒฐ๊ณผ

์ํ ํฉ์ฑ๊ณฑ์ ์ฃผํ์ ์์ญ์์์ ์ค์ํ ์ฐ์ฐ์ ๋๋ค:
์ํ ํฉ์ฑ๊ณฑ๊ณผ ์ผ๋ฐ ํฉ์ฑ๊ณฑ์ ์ฐจ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์ ์ ๋๋ค:
a = [1 2 3 4];
b = [5 6 7 8];
conv(a,b) % ์ผ๋ฐ ํฉ์ฑ๊ณฑ
cconv(a,b,4) % ์ํ ํฉ์ฑ๊ณฑ
% ์ํ ํฉ์ฑ๊ณฑ์ FFT ํน์ฑ ํ์ธ
fft((cconv(a,b,4))')
fft(a').*fft(b');
ifft(ans)'

์ํํ ํน์ฑ์ ๋ณด์ฌ์ฃผ๋ ์ค์ํ ์์ ์ ๋๋ค:
x = [2 3 4 5 6 7 8 1];
x1 = (-1).^[0:7].*x % 2 -3 4 -5 6 -7 8 -1
X = fft(x')
X1 = fft(x1')
meshgrid ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ๊ธฐ๋ณธ ๋ํ์ ์์ฑํ๊ณ ์ด๋ค์ ์ฃผํ์ ํน์ฑ์ ๋ถ์ํฉ๋๋ค:
a = zeros(256, 256);
a(78:178, 78:178) = 1;
figure, imshow(a)
af = fftshift(fft2(a));
figure, fftshow(af, 'log');

[x,y] = meshgrid(1:256, 1:256);
b = (x+y<329) & (x+y>182) & (x-y>-67) & (x-y<73);
figure, imshow(b), impixelinfo
bf = fftshift(fft2(b));
figure, fftshow(bf, 'log');

[x,y] = meshgrid(-128:127, -128:127);
z = sqrt(x.^2 + y.^2);
c = (z<30);
figure, imshow(c);
cf = fftshift(fft2(c));
figure, fftshow(cf, 'log');

[x,y] = meshgrid(-128:127, -128:127);
z = sqrt(x.^2+y.^2);
c = (z<30); % ์ ์ฃผํ ํต๊ณผ ํํฐ ๋ง์คํฌ
figure, imshow(c);
cf = fftshift(fft2(c));
figure, fftshow(cf, 'log')
cm = imread('cameraman.tif');
cmf = fftshift(fft2(cm));
figure, imshow(cm);
cf = fftshift(fft2(cm));
figure, fftshow(cf);
cfl = cf.*c;
figure, fftshow(cfl, 'log');
cfli=ifft2(cfl);
figure, fftshow(cfli, 'abs');

[x,y] = meshgrid(-128:127, -128:127);
z = sqrt(x.^2+y.^2);
c = (z>15); % ๊ณ ์ฃผํ ํต๊ณผ ํํฐ ๋ง์คํฌ
figure, imshow(c);
cf = fftshift(fft2(c));
figure, fftshow(cf, 'log')
cm = imread('cameraman.tif');
cf = fftshift(fft2(cm));
cfh = cf.*c;
figure, fftshow(cfh, 'log');
cfhi=ifft2(cfh);
figure, fftshow(cfhi, 'abs');

[x,y] = meshgrid(-128:127, -128:127);
z = sqrt(x.^2+y.^2);
c = (z>5 & z<20); % ๋์ญ ์ ๊ฑฐ ํํฐ ๋ง์คํฌ
figure, imshow(c);
cf = fftshift(fft2(c));
figure, fftshow(cf, 'log')
cm = imread('cameraman.tif');
cmf = fftshift(fft2(cm));
cfh = cf.*c;
cfhi=ifft2(cfh);
figure, fftshow(cfhi, 'abs');

cm = imread('cameraman.tif');
cf = fftshift(fft2(cm));
g1 = mat2gray(fspecial('gaussian',256,10));
g2 = mat2gray(fspecial('gaussian',256,30));
h1 = 1-g1; % ๊ณ ์ฃผํ ํต๊ณผ ๊ฐ์ฐ์์ ํํฐ
h2 = 1-g2;
ch1 = cf.*h1;
ch2 = cf.*h2;
chi1 = ifft2(ch1);
chi2 = ifft2(ch2);
cm = imread("cameraman.tif");
cf = fftshift(fft2(cm));
[x,y] = meshgrid(-128:127,-128:127);
bl = 1./(1+((x.^2+y.^2)/15).^2); % ๋ฒํฐ์์ค ์ ์ฃผํ ํต๊ณผ ํํฐ
bl = lbutter(cm,15,1);
cfbl = cf.*bl;
cfbli = ifft2(cfbl);
bh = hbutter(cm,15,1); % ๋ฒํฐ์์ค ๊ณ ์ฃผํ ํต๊ณผ ํํฐ
cfbh = cf.*bh;
cfbhi = ifft2(cfbh);
tw = imread("twins.tif");
t = rgb2gray(tw);
figure(1),imshow(t);
[x,y] = meshgrid(1:256,1:256);
p = 1+sin(x+y/1.5); % ์ฃผ๊ธฐ์ ๋
ธ์ด์ฆ ์์ฑ
tp = (double(t)/128+p)/4;
figure(2),imshow(tp);
tf = fftshift(fft2(tp));
figure(3), fftshow(tf), impixelinfo;
z = sqrt((x-129).^2+(y-129).^2);
% Band reject ํํฐ ์ ์ฉ
br = (z<47 | z>51);
tbr = tf.*br;
figure(4), fftshow(tbr);
tbri = ifft2(tbr);
figure(5), fftshow(tbri);
% Notch ํํฐ ์ ์ฉ
tf(156,:) = 0;
tf(102,:) = 0;
tf(:,170) = 0;
tf(:,88) = 0;
figure(5), fftshow(tf);
tfi = ifft2(tf);
figure(6), fftshow(tfi);

์ด MATLAB ์ฝ๋๋ค์ ์ฃผํ์ ์์ญ์์์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๊ธฐ๋ฒ๋ค์ ํฌ๊ด์ ์ผ๋ก ๋ณด์ฌ์ค๋๋ค. ํนํ:
๊ฐ ๊ธฐ๋ฒ๋ค์ ์๋ก ๋ค๋ฅธ ํน์ฑ๊ณผ ์ฅ๋จ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ชฉ์ ์ ๋ง๋ ์ ์ ํ ํํฐ๋ง ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฒ๋ค์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ์ปดํจํฐ ๋น์ ๋ถ์ผ์์ ๋๋ฆฌ ํ์ฉ๋๊ณ ์์ต๋๋ค.
์ด๋ฌํ ์ค์ ์์ฉ ์ฌ๋ก๋ค์ ์ฃผํ์ ์์ญ์์์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ๊ฐ ์ผ๋ง๋ ์ค์ํ๊ณ ์ค์ฉ์ ์ธ์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค. ํนํ ์๋ฃ ์์์ด๋ ์ฐ์ ์ฉ ๊ฒ์ฌ ์์คํ ์์๋ ๋์ ์ ํ๋์ ์ ๋ขฐ์ฑ์ด ์๊ตฌ๋๊ธฐ ๋๋ฌธ์, ์ด๋ฌํ ํํฐ๋ง ๊ธฐ๋ฒ๋ค์ ์ ํํ ์ดํด์ ์ ์ฉ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.