叠加来自Gabor滤镜的多个图像

时间:2018-10-15 21:55:21

标签: matlab

我是第一次学习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

我的输入是:

orientation.jpg

输出为: output

但是我真正想要的是一个单一的指纹,如下所示:

fingerprint.jpg

我知道我的输出当前是由于subplot而产生的。我尝试将subplot替换为hold onplot,但是最终发生的是Orientation = 135时的最终图像与其他图像重叠。

在平均每个像素的亮度/强度值时,是否有办法使图重叠?任何指导表示赞赏。

1 个答案:

答案 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,[]);

输出为:

combined