تبدیل فوریه تصویر ورودی بعد از پیش پردازش، در حوزه فرکانس در پاسخ فرکانسی فیلتر مورد نظر ضرب شده و با تبدیل فوریه معکوس ، تصویر نهایی به دست می آید.
فیلترهای مکانی که قبلا استفاده شد، میتواند در حوزه فرکانس نیز انجام گیرد. در حوزه مکانی عمل فیلترینگ با کانولوشن تصویر و ماسک فیلتر به دست می آید. در حوزه فرکانس ، این کار با ضرب تبدیل فوریه فیلتر و تصویر به دست می آید.
کد:
f(x,y)*h(x,y) □(⇔┴ ) H(u,v)F(u,v)
با تابع Freqz2 تابع تبدیل فیلتر حوزه مکانی را به فرکانسی تبدیل می کند:
که H فیلتر در حوزه فکرانس ، R تعداد سطر و C تعداد ستونهای آن و h فیلتر در حوزه مکان است.
برای مقایسه فیلترینگ حوزه زمان و فرکانس ، فیلتر sobel را برای هر دو حوزه اعمال کرده و مقایسه می کنیم . این فیلتر لبه های افقی و عمودی را آشکار میکند.
کد:
f=imread(cameraman.tif);
F=fft2(f);
h1=fspecial(sobel); %horizontal mask in spatial
domain
h2=h1; %vertical mask in spatial
domain
gs1=imfilter(f,h1); %horizontal edges
gs2=imfilter(f,h2); %vertical edges
gs=imadd(gs1,gs2);
[R,C]=size(f);
H1=fftshift(freqz2(h1,R,C)); %horizontal
filter
in frequency
domain
H2=fftshift(freqz2(h2,R,C)); %vertical
filter
in frequency
domain
gf1=real(ifft2(H1.*F)); %horizontal edges
gf2=real(ifft2(H2.*F)); %vertical edges
gf=imadd(gf1,gf2);
gff=gf/max(max(gf)); % convert to [0,1]
gfb=im2bw(gff,.1); % convert to binary image with T=0.1
subplot(2,2,1);imshow(f,[]);title(Original Image);
subplot(2,2,2);imshow(gs,[]);title(Sobel Filtering in Spatial
Domain
);
subplot(2,2,3);imshow(gf,[]);title(Sobel Filtering in Frequency
Domain
);
subplot(2,2,4);imshow(gfb,[]);title(Sobel Filtering in Frequency
Domain
(Binary Image));
تابع fftshift فیلتر حوزه فرکانسی را از حالت متمرکز خارج ساخته و به فرم مناسب برای فیلترینگ تبدیل میکند.
فیلتر پایین گذر (BLPF) Butterworth
فیلتر ایده آل در عمل و با عناصر الکترونیک محدود قابل پیاده سازی نیست و فقط با شبیه سازی کامپیوتری قابل نمایش است.
یکی از روشهای پیاده سازی فیلتر پایین گذر عملی ، فیلتر پایین گذر با ترورث از درجه n و فرکانس قطع (cutoff Frequency) D0 با تابع تبدیل زیر است:
کد:
H(u,v)=1/(1+〖[(D(u,v))⁄D0]〗^2n )
برخلاف فیلتر ایده آل ، این فیلتر دارای ناپیوستگی در D0نیست. وقتی D(u,v)= D0 ، مقدار0.5u,v) = H( بوده و به 50% مقدار ماکزیمم ( H(u,v)=1) میرسد.
فیلتر پایین گذر (GLPF) Guassian
تابع تبدیل این فیلتر به صورت زیر است:
کد:
H(u,v)=e^(〖-D〗^2 (u,v)/2σ^2 )
σ انحراف استاندارد بوده و با فرض فرکانس قطع به صورت σ=D0 تابع تبدیل فیلتر به صورت زیر خواهد بود:
کد:
H(u,v)= e^(〖-D〗^2 (u,v))⁄(2〖D0〗^2 )
وقتی D0 D(u,v)= ، مقدار H(u,v)=0.607 به 60.7% مقدار ماکزیمم ((H(u,v)= 1 میرسد.
در محیط Matlab برای افزایش سرعت به دست آوردن تابع تبدیل فیلتر ، میتوان از تابع meshgrid استفاده نمود. برای یک فیلتر M*N ، مقادیر H(u,v) از H(0,0) تا M-1,N-1))H بایستی محاسبه گردد.
تابع meshgrid مقادیر (u,v)را بدون استفاده از حلقه For آماده می کند.
EXAMPLE
کد:
u=0:3;
v=0:3;
[V,U]=meshgrid(v,u)
V =
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
U =
0 0 0 0
1 1 1 1
2 2 2 2
3 3 3 3
EXAMPLE
کد:
f=imread(cameraman.tif);
[R,C]=size(f);
F=fft2(f);
u=0:R-1;
v=0:C-1;
[V,U]=meshgrid(v,u);
D0=.1*C;
H=exp(-(U.^2+V.^2)/(2*(D0^2)));
g1=real(ifft2(H.*F));
subplot(2,2,1);imshow(f,[]);title(Original Image);
subplot(2,2,2);imshow(g1,[]);title(GLPF D0=0.1*(Image width));
D0=.5*C;
H=exp(-(U.^2+V.^2)/(2*(D0^2)));
g2=real(ifft2(H.*F));
subplot(2,2,3);imshow(g2,[]);title(GLPF D0=0.5*(Image width));
D0=.9*C;
H=exp(-(U.^2+V.^2)/(2*(D0^2)));
g3=real(ifft2(H.*F));
subplot(2,2,4);imshow(g3,[]);title(GLPF D0=0.9*(Image width));
برای توابعی که به طور مرتب در برنامه Matlab استفاده میشوند، میتوان از function استفاده نمود . با استفاده از آن میتوان توابع جدیدی تعریف و به محیط Matlab اضافه نمود. فانکشن را به صورت m file نوشته و به اسم تابع استفاده شده ذخیره میگردد. در مثال قبلی برای تعریف فیلتر با فرکانس قطع مختلف ، میتوان یک فانکشن به صورت زیر تعریف کرد:
کد:
function H=GLPF(M,N,D0)
R=M;C=N;
u=0:R-1;
v=0:C-1;
[V,U]=meshgrid(v,u);
H=exp(-(U.^2+V.^2)/(2*(D0^2)));
اسم فانکشن GLPF بوده و تابع فوق با نام GLPF.m ذخیره می گردد. H خروجی و M,N, D0 آرگومانهای ورودی هستند. با استفاده از این تابع ، برنامه قبلی را میتوان به صورت زیر تغییر داد:
کد:
f=imread(cameraman.tif);
[R,C]=size(f);
F=fft2(f);
D0=.1*C;
H=GLPF(R,C,D0);
g1=real(ifft2(H.*F));
subplot(2,2,1);imshow(f,[]);title(Original Image);
subplot(2,2,2);imshow(g1,[]);title(GLPF D0=0.1*(Image width));
D0=.5*C;
H=GLPF(R,C,D0);
g2=real(ifft2(H.*F));
subplot(2,2,3);imshow(g2,[]);title(GLPF D0=0.5*(Image width));
D0=.9*C;
H=GLPF(R,C,D0);
g3=real(ifft2(H.*F));
subplot(2,2,4);imshow(g3,[]);title(GLPF D0=0.9*(Image width));
برای نمایش سه بعدی فیلتر ، میتوان از تابع mesh استفاده کرد. mesh(H) فیلتر H را به ازای u=1:M و v=1:N که [M,N] ابعاد فیلتر هستند نمایش می دهد.
کد:
R=256;C=256;
u=0:R-1;
v=0:C-1;
[V,U]=meshgrid(v,u);
D0=.1*C;
H=exp(-(U.^2+V.^2)/(2*(D0^2)));
mesh(H)
فیلترهای بالاگذر
با داشتن تابع تبدیل فیلتر پایین گذر، تابع تبدیل فیلتر بالاگذر به صورت زیر به دست می آید:
کد:
H_hp (u,v)=1-H_lp (u,v)
که Hlp(u,v) تابع تبدیل فیلتر پایین گذر و Hhp(u,v) تابع تبدیل فیلتر بالاگذر است.
با توجه به نتایج ، لبه ها و تغییرات شدید شدت روشنایی بهبود می یابند.
- فیلتر تاکید فرکانس بالا (High Frequency Emphasis Filter )
چون F(0,0) که مقدار dc تصویر تعریف شد، در فیلتر کردن بالا گذر حذف می گردد، مقدار میانگین تصویر خروجی خواهد بود. یک روش برای حل این مشکل افزودن یک مقدار dc به فیلتر بالاگذر است. فیلتری که با افزودن یک مقدار dcو افزودن فیلتر بالاگذر با یک ضریب بزرگتر از یک به دست می آید، فیلتر تاکید فرکانس بالا نامیده می شود.
کد:
H_hfe (u,v)=a+bH_hp (u,v)
شکل زیر روش اشاره شده را برای یک تصویر X- Ray نشان می دهد. این تصاویر اغلب به دلیل فوکوس نامناسب تار هستند.
اغلب ترکیب روشهای حوزه مکان مانند متعادل سازی هیستوگرام و روشهای حوزه فرکانس می تواند مفید باشد.