2014-01-05 27 views

回答

2

buttord用于1D信号处理。你可以编写一个简单的代码来自己设计2D butterworth过滤器。以下是带通巴特沃思滤波器的示例代码。您可以在高通滤波器上删除d1,或在低通滤波器上删除d0

filter1 = ones(2*nx-1,2*ny-1); 
filter2 = ones(2*nx-1,2*ny-1); 
filter3 = ones(2*nx-1,2*ny-1); 

for i = 1:2*nx-1 
    for j =1:2*ny-1 
     d = ((i-(nx+1))^2 + (j-(ny+1))^2)^.5; 

     filter1(i,j)= 1/(1 + (d/d1)^(2*n)); % d1:higher cutoff frequency 
     filter2(i,j) = 1/(1 + (d/d0)^(2*n)); % d0:lower cutoff frequency 
     filter3(i,j)= 1 - filter2(i,j); 
     butterworthf(i,j) = filter1(i,j).*filter3(i,j); % Create Butterworth filter. 

    end 
end 
0

我不知道MATLAB内置函数,但我已经写了一巴斯沃斯过滤器,您可以使用图片

function Filter = MyButterWorth(grade, cutoff_freq, img_name,type) 

img=imread(img_name); %read image 
[rows,cols] = size(img); 
img_double=double(img); 
FImg = fftshift(fft2(img_double)); %Fast Fourier transform 2D and shift it to Center 
%immagphase(FImg); 

% compute distance to center with consider image size 
x = (ones(rows,1) * [1:cols] - (fix(cols/2)+1))/cols; 
y = ([1:rows]' * ones(1,cols) - (fix(rows/2)+1))/rows; 

radius = sqrt(x.^2 + y.^2); 
% create filter 
Filter = 1 ./ (1.0 + (radius ./ cutoff_freq).^(2*grade)); 
% change filter type low pass or high 
if(strcmp(type, 'hpf')) 
    Filter = 1 - Filter; 
end 
figure; 
surf([-1:2/(cols-1):1],[-1:2/(rows-1):1], Filter); 
shading interp; 
title('Butterworth filter'); 
xlabel('x'); 
ylabel('y'); 
zlabel('intensity'); 
grid on; 

%applay filter 
resultFImg = FImg .* Filter; 

resultImg = real(ifft2(ifftshift(resultFImg))); 

%show image 
figure; 
subplot(1,2,1); imshow(img); title('Orginal Image') 
subplot(1,2,2); imshow(resultImg,[]); title('Filtered Image') 

以获取更多信息端 检查herehere

相关问题