在图像处理领域,巴特沃斯高通滤波器(BHPF)用于频域中的图像锐化。图像锐化是一种增强精细细节并突出显示数字图像边缘的技术。它从图像中去除了低频成分,并保留了高频成分。
此Butterworth高通滤波器是Butterworth低通滤波器的反向操作。可以使用以下关系式确定: 在哪里, 是高通滤波器的传递函数, 是相应的低通滤波器的传递函数。
订单BHPF的传递函数被定义为-
在哪里,
- 是一个正常数。 BHPF通过所有大于值不衰减,并切断所有小于该值的频率。
- 这是H(u,v)= 1和H(u,v)= 0之间的过渡点,因此称为截止频率。但是,它没有进行陡峭的截止(例如理想高通滤波器(IHPF)),而是引入了从0到1的平滑过渡以减少振铃失真。
- 是从任意点(u,v)到频率平面原点的欧几里得距离,即
Approach:
Step 1: Input – Read an image
Step 2: Saving the size of the input image in pixels
Step 3: Get the Fourier Transform of the input_image
Step 4: Assign the order and cut-off frequency
Step 5: Designing filter: Butterworth High Pass Filter
Step 6: Convolution between the Fourier Transformed input image and the filtering mask
Step 7: Take Inverse Fourier Transform of the convoluted image
Step 8: Display the resultant image as output
在MATLAB中的实现:
% MATLAB Code | Butterworth High Pass Filter
% Reading input image : input_image
input_image = imread('[name of input image file].[file format]');
% Saving the size of the input_image in pixels-
% M : no of rows (height of the image)
% N : no of columns (width of the image)
[M, N] = size(input_image);
% Getting Fourier Transform of the input_image
% using MATLAB library function fft2 (2D fast fourier transform)
FT_img = fft2(double(input_image));
% Assign the order value
n = 2; % one can change this value accordingly
% Assign Cut-off Frequency
D0 = 10; % one can change this value accordingly
% Designing filter
u = 0:(M-1);
v = 0:(N-1);
idx = find(u > M/2);
u(idx) = u(idx) - M;
idy = find(v > N/2);
v(idy) = v(idy) - N;
% MATLAB library function meshgrid(v, u) returns
% 2D grid which contains the coordinates of vectors
% v and u. Matrix V with each row is a copy of v
% and matrix U with each column is a copy of u
[V, U] = meshgrid(v, u);
% Calculating Euclidean Distance
D = sqrt(U.^2 + V.^2);
% determining the filtering mask
H = 1./(1 + (D0./D).^(2*n));
% Convolution between the Fourier Transformed
% image and the mask
G = H.*FT_img;
% Getting the resultant image by Inverse Fourier Transform
% of the convoluted image using MATLAB library function
% ifft2 (2D inverse fast fourier transform)
output_image = real(ifft2(double(G)));
% Displaying Input Image and Output Image
subplot(2, 1, 1), imshow(input_image),
subplot(2, 1, 2), imshow(output_image, [ ]);
输入图像–
输出:
注意: BHPF的结果比IHPF平滑得多。在这里,即使对于最小截止频率值,边界也不会失真得多。使用BHPF可以更平滑地过渡到更高的截止频率值。