์ฃผํŒŒ์ˆ˜ ์˜์—ญ์—์„œ์˜ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ: FFT์™€ ํ•„ํ„ฐ๋ง ๊ธฐ๋ฒ•์— ๋Œ€ํ•œ ์ดํ•ด

1. ๊ธฐ๋ณธ์ ์ธ FFT ๊ฐœ๋…๊ณผ ๋ฒกํ„ฐ ์ฒ˜๋ฆฌ

1.1 ๋ฒกํ„ฐ์˜ FFT ๋ณ€ํ™˜

์ฝ”๋“œ์˜ ์ฒซ ๋ถ€๋ถ„์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ FFT(Fast Fourier Transform) ์—ฐ์‚ฐ์˜ ํŠน์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์— ๋Œ€ํ•œ FFT ๋ณ€ํ™˜ ์‹œ ์ฃผ์˜ํ•  ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • MATLAB์—์„œ FFT ๊ฒฐ๊ณผ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ด ๋ฒกํ„ฐ(column vector)๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • ํ–‰ ๋ฒกํ„ฐ์˜ ๊ฒฝ์šฐ transpose(โ€˜)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ด ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ ํ›„ FFT๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

MATLAB์—์„œ FFT๋ฅผ ๋‹ค๋ฃฐ ๋•Œ์˜ ๊ธฐ๋ณธ์ ์ธ ํŠน์„ฑ์„ ์‚ดํŽด๋ด…์‹œ๋‹ค:

a = [1 2 3 4 5 6];
fft(a')  % column vector๋กœ ๋ณ€ํ™˜
fft(a)   % row vector ๊ฒฐ๊ณผ

alt text

1.2 ์ˆœํ™˜ ํ•ฉ์„ฑ๊ณฑ(Circular Convolution)

์ˆœํ™˜ ํ•ฉ์„ฑ๊ณฑ์€ ์ฃผํŒŒ์ˆ˜ ์˜์—ญ์—์„œ์˜ ์ค‘์š”ํ•œ ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค:

  • conv() ํ•จ์ˆ˜: ์„ ํ˜• ํ•ฉ์„ฑ๊ณฑ์„ ์ˆ˜ํ–‰
  • cconv() ํ•จ์ˆ˜: ์ˆœํ™˜ ํ•ฉ์„ฑ๊ณฑ์„ ์ˆ˜ํ–‰
  • ์ˆœํ™˜ ํ•ฉ์„ฑ๊ณฑ์˜ FFT๋Š” ๊ฐ ์‹ ํ˜ธ์˜ FFT์˜ ๊ณฑ๊ณผ ๋™์ผํ•จ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. (์ค‘์š”ํ•œ ํŠน์„ฑ)

์ˆœํ™˜ ํ•ฉ์„ฑ๊ณฑ๊ณผ ์ผ๋ฐ˜ ํ•ฉ์„ฑ๊ณฑ์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค:

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)'

alt text

1.3 ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜์˜ ์ด๋™์„ฑ(Shifting)

์‹œํ”„ํŒ… ํŠน์„ฑ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ค‘์š”ํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค:

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')

2. ๊ธฐ๋ณธ ๋„ํ˜• ์ƒ์„ฑ๊ณผ ์ฃผํŒŒ์ˆ˜ ๋ถ„์„

2.1 ์‚ฌ๊ฐํ˜• ํŒจํ„ด ์ƒ์„ฑ

meshgrid ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ ๋„ํ˜•์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋“ค์˜ ์ฃผํŒŒ์ˆ˜ ํŠน์„ฑ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค:

  • ์‚ฌ๊ฐํ˜•: zeros์™€ ones๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ
  • ์›: meshgrid์™€ sqrt๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ ํ›„ ์ž„๊ณ„๊ฐ’ ์ ์šฉ
  • ๋งˆ๋ฆ„๋ชจ: ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ์˜์—ญ ์ •์˜
a = zeros(256, 256);
a(78:178, 78:178) = 1;
figure, imshow(a)
af = fftshift(fft2(a));
figure, fftshow(af, 'log');

alt text

2.2 ๋งˆ๋ฆ„๋ชจ ํŒจํ„ด ์ƒ์„ฑ

[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');

alt text

2.3 ์›ํ˜• ํŒจํ„ด ์ƒ์„ฑ

[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');

alt text

3. ์ฃผํŒŒ์ˆ˜ ์˜์—ญ ํ•„ํ„ฐ๋ง

3.1 ์ €์ฃผํŒŒ ํ†ต๊ณผ ํ•„ํ„ฐ๋ง(Low-pass Filtering)

[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');

alt text

3.2 ๊ณ ์ฃผํŒŒ ํ†ต๊ณผ ํ•„ํ„ฐ๋ง(High-pass Filtering)

[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');

alt text

3.3 ๋Œ€์—ญ ์ œ๊ฑฐ ํ•„ํ„ฐ๋ง(Band-reject Filtering)

[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');

alt text

3.4 ๊ฐ€์šฐ์‹œ์•ˆ ํ•„ํ„ฐ๋ง

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);

3.5 ๋ฒ„ํ„ฐ์›Œ์Šค ํ•„ํ„ฐ๋ง

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);

4. ์ฃผ๊ธฐ์  ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ ์˜ˆ์ œ

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);

alt text

๊ฒฐ๋ก 

์ด MATLAB ์ฝ”๋“œ๋“ค์€ ์ฃผํŒŒ์ˆ˜ ์˜์—ญ์—์„œ์˜ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•๋“ค์„ ํฌ๊ด„์ ์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํŠนํžˆ:

  1. ๊ธฐ๋ณธ์ ์ธ FFT ๊ฐœ๋…๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ
  2. ๋‹ค์–‘ํ•œ ๊ธฐํ•˜ํ•™์  ํŒจํ„ด์˜ ์ฃผํŒŒ์ˆ˜ ํŠน์„ฑ ๋ถ„์„
  3. ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํ•„ํ„ฐ๋ง ๊ธฐ๋ฒ• (์ €์ฃผํŒŒ/๊ณ ์ฃผํŒŒ/๋Œ€์—ญ์ œ๊ฑฐ/๊ฐ€์šฐ์‹œ์•ˆ/๋ฒ„ํ„ฐ์›Œ์Šค)
  4. ์‹ค์ œ ์ด๋ฏธ์ง€์—์„œ์˜ ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ๊นŒ์ง€

๊ฐ ๊ธฐ๋ฒ•๋“ค์€ ์„œ๋กœ ๋‹ค๋ฅธ ํŠน์„ฑ๊ณผ ์žฅ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ชฉ์ ์— ๋งž๋Š” ์ ์ ˆํ•œ ํ•„ํ„ฐ๋ง ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋ฒ•๋“ค์€ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ์™€ ์ปดํ“จํ„ฐ ๋น„์ „ ๋ถ„์•ผ์—์„œ ๋„๋ฆฌ ํ™œ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ์‘์šฉ ๋ถ„์•ผ

  1. ์˜๋ฃŒ ์˜์ƒ ์ฒ˜๋ฆฌ
    • MRI, CT, X-ray ์˜์ƒ์˜ ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ
    • ์˜๋ฃŒ ์˜์ƒ์˜ ์„ ๋ช…๋„ ๊ฐœ์„ 
    • ํŠน์ • ์กฐ์ง์ด๋‚˜ ๋ณ‘๋ณ€์˜ ๊ฐ•์กฐ
  2. ์œ„์„ฑ ์˜์ƒ ์ฒ˜๋ฆฌ
    • ๊ธฐ์ƒ ์œ„์„ฑ ์ด๋ฏธ์ง€์˜ ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ
    • ์ง€ํ˜• ํŠน์ง• ๊ฐ•์กฐ
    • ๋Œ€๊ธฐ ํšจ๊ณผ ๋ณด์ •
  3. ์‚ฐ์—… ํ˜„์žฅ ํ’ˆ์งˆ ๊ด€๋ฆฌ
    • ์ œํ’ˆ ํ‘œ๋ฉด ๊ฒฐํ•จ ๊ฒ€์‚ฌ
    • ๋ฐ˜๋„์ฒด ์›จ์ดํผ ๊ฒ€์‚ฌ
    • ์ธ์‡„ ํšŒ๋กœ ๊ธฐํŒ(PCB) ๊ฒ€์‚ฌ
  4. ๋ณด์•ˆ ๋ฐ ๊ฐ์‹œ ์‹œ์Šคํ…œ
    • CCTV ์˜์ƒ ํ™”์งˆ ๊ฐœ์„ 
    • ์ƒ์ฒด ์ธ์‹ ์‹œ์Šคํ…œ์˜ ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ
    • ๋ฒˆํ˜ธํŒ ์ธ์‹ ์‹œ์Šคํ…œ
  5. ๋””์ง€ํ„ธ ์นด๋ฉ”๋ผ ๋ฐ ์Šค๋งˆํŠธํฐ
    • ์‚ฌ์ง„์˜ ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ
    • ์ด๋ฏธ์ง€ ์„ ๋ช…๋„ ๊ฐœ์„ 
    • HDR ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ

์ด๋Ÿฌํ•œ ์‹ค์ œ ์‘์šฉ ์‚ฌ๋ก€๋“ค์€ ์ฃผํŒŒ์ˆ˜ ์˜์—ญ์—์„œ์˜ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•˜๊ณ  ์‹ค์šฉ์ ์ธ์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํŠนํžˆ ์˜๋ฃŒ ์˜์ƒ์ด๋‚˜ ์‚ฐ์—…์šฉ ๊ฒ€์‚ฌ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋†’์€ ์ •ํ™•๋„์™€ ์‹ ๋ขฐ์„ฑ์ด ์š”๊ตฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฌํ•œ ํ•„ํ„ฐ๋ง ๊ธฐ๋ฒ•๋“ค์˜ ์ •ํ™•ํ•œ ์ดํ•ด์™€ ์ ์šฉ์ด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.