Aluláteresztő szűrő
Aluláteresztő szűrő esetében az alacsonyabb frekvenciák jelennek csak meg a képen. Valósítsunk meg egy ideális aluláteresztő szűrőt! Legyen D0 egy nemnegatív szám, és D(u,v) az (u,v) pont távolsága a középponttól.
function H = ideal_lowpass( M, N, D0 )
% M, N: a szűrő mérete, D0 nemnegatív szám (sugár)
H = double(zeros(M,N));
M_center = M/2;
N_center = N/2;
for i = 1:M
for j = 1:N
if (i-M_center) * (i-M_center) + (j-N_center) * (j-N_center) <= D0*D0
H(i,j) = 1.0;
end
end
end
end
Próbáljuk ki!
>> img = imread( 'Columbo.JPG' );
>> fft_img = fft2( img );
>> fft_img2 = fftshift( fft_img );
>> [M,N] = size( img );
>> H = ideal_lowpass( M,N,60.0 );
>> filt_fft = fft_img2 .* H;
>> filt_ifft = ifft2( ifftshift( filt_fft ) );
>> imshow(filt_ifft,[])
Egy másik megoldás:
function H = ideal_lowpass( M, N, D0 )
%% M, N: a szűrő mérete, D0 nemnegatív szám (sugár)
u=0:(M-1);
v=0:(N-1);
idx = find(u>M/2); %% kigyujti az indexeket, amelynél u > M/2
u(idx)=u(idx)-M;
idy = find(v>N/2); %% kigyujti az indexeket, amelynél v > N/2
v(idy)=v(idy)-N;
[V,U] = meshgrid(v,u);
D=sqrt(U.^2 + V.^2);
H = double(D <= D0);
end
>> img = imread( 'Columbo.JPG' );
>> fft_img = fft2( img );
>> fft_img2 = fftshift( fft_img );
>> [M,N] = size( img );
>> H = ideal_lowpass( M,N,60.0 );
>> H1 = fftshift( H );
>> filt_fft = fft_img2 .* H1;
>> filt_ifft = ifft2( ifftshift( filt_fft ) );
>> imshow( filt_ifft,[] );
![]() |
![]() |
|
Eredeti kép | filt_fft | Eredmény kép IFFT után |