我是第一次学习Gabor过滤器,以及如何将其用于从其方向图再生指纹。我以.jpg的形式获得了方向图,我想在其上应用具有4个方向的gabor滤镜。我遵循了文档中的example,并得到了以下代码:
input_img = imread('orientation.jpg');
input_img = rgb2gray(input_img);
wavelength = 6;
orientation = [0 45 90 135];
gaborArray = gabor(wavelength,orientation);
gaborMag = imgaborfilt(input_img,gaborArray);
figure
subplot(2,2,1);
for p = 1:4
subplot(2,2,p)
imshow(gaborMag(:,:,p),[]);
theta = gaborArray(p).Orientation;
lambda = gaborArray(p).Wavelength;
title(sprintf('Orientation=%d, Wavelength=%d',theta,lambda));
end
我的输入是:
但是我真正想要的是一个单一的指纹,如下所示:
我知道我的输出当前是由于subplot
而产生的。我尝试将subplot
替换为hold on
和plot
,但是最终发生的是Orientation = 135时的最终图像与其他图像重叠。
在平均每个像素的亮度/强度值时,是否有办法使图重叠?任何指导表示赞赏。
答案 0 :(得分:0)
按照克里斯·伦戈(Cris Luengo)评论的建议,我在显示之前通过对gaborMag
的幅度值求平均值来合并图像。我的代码如下:
input_img = imread('orientation.jpg');
input_img = rgb2gray(input_img);
wavelength = 2;
orientation = [0 45 90 135];
gaborArray = gabor(wavelength,orientation);
gaborMag = imgaborfilt(input_img,gaborArray);
[height, width, num_filters] = size(gaborMag(:,:,:));
combined_mag = zeros(height,width);
% Average the values from each filter
for i = 1:height
for j = 1:width
sum = 0;
for f = 1:num_filters
sum = sum + gaborMag(i,j,f);
end
combined_mag(i,j) = sum / num_filters;
end
end
imshow(combined_mag,[]);
输出为: