我有一个FPK(指关节打印)项目,切割手指有趣部分后的一个步骤是使用Gabor滤镜过滤图像。
现在几天(整整天)我一直试图制作滤波器组并从公式中过滤图像并将其写为Matlab代码。
我读了很多关于参数值的内容,但我很困惑,我应该采取什么价值?
我需要做什么?
我应该使用conv2还是imfilter(对称或covn)?
由于
答案 0 :(得分:-1)
%Read the original gray input image
image=imread('cameraman.jpg');
%convert it to gray scale
image=double(image);
%show the image
figure(1);
imshow(image);
title('Input Image');
%Gabor filter size 7x7 and orientation 90 degree
%declare the variables
gamma=0.3; %aspect ratio
psi=0; %phase
theta=pi/2; %orientation you can change theta 0°, 45°, 90°,180° but value is in radian..
bw=2.8; %bandwidth or effective width
lambda=3.5; % wavelength
pi=180;
N=9; % size of filter
Cx=ceil(N/2);
Cy=ceil(N/2);
[x,y] = meshgrid(N-Cx:N+Cx,N-Cy:N+Cy);
x_theta=(x-Cx)*cos(theta)+(y-Cy)*sin(theta); % scalair value
y_theta=-(x-Cx)*sin(theta)+(y-Cy)*cos(theta); % scalair value
% calculate Gabor filter
gb= exp(-(x_theta.^2/2*bw^2+ gamma^2*y_theta.^2/2*bw^2)).*cos(2*pi/lambda*x_theta+psi);
image_gb=conv2(image,gb,'same');
imshow(image_gb);
title('filtered image');
Gb是在conv2或filter2中使用的过滤器。 Gb的大小是NxN示例7x7或9x9或11x11(奇数或偶数滤波器)。您可以使用meshgrid优化代码.. http://en.wikipedia.org/wiki/Gabor_filter
答案 1 :(得分:-1)
您在图像中提取高频信息。高滤波器的必要条件,滤波器gb(x,y)之和为0(x = 0..N-1,y = 0..N-1)(N = 3,5,7 ..或窗口3x3或5x5或7x7或9x9或11x11,... 31x31)。 gb(x,y)是你的滤波器,滤波器的值是实数(你选择cos或sin,你的结果是去相位PI / 2比较sin,不需要使用复杂的Gabor滤波器)。它非常简单。它是一个高过滤的过滤器。
% See http://en.wikipedia.org/wiki/Gabor_filter.
x_theta=x*cos(theta)+y*sin(theta);
y_theta=-x*sin(theta)+y*cos(theta);
gb= exp(-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).*cos(2*pi/lambda*x_theta+psi);
<强>默认值强>
C = conv2(A, B) performs the 2-D convolution of matrices A and B.
If [ma,na] = size(A), [mb,nb] = size(B), and [mc,nc] = size(C), then
mc = max([ma+mb-1,ma,mb]) and nc = max([na+nb-1,na,nb]).
ma,na大小的过滤器大小不同于mb和nb。嘛
例如,如果图像的像素分辨率为128x128,则滤波器大小仅为na <128,且ma <128。过滤器不应该很大。
或者 filter2 二维数字滤波器。 Y = filter2(B,X,SHAPE)使用2-D FIR对X中的数据进行滤波 在矩阵B中过滤。计算结果Y. 使用二维相关并且与X的大小相同( SHAPE 是&#39;相同&#39;)。 同样的事情,但B是过滤器。我选择了第二个。 SHAPE 值为,
'same' - (default) returns the central part of the
correlation that is the same size as X.
'valid' - returns only those parts of the correlation
that are computed without the zero-padded
edges, size(Y) < size(X).
'full' - returns the full 2-D correlation,
size(Y) > size(X).