如何应用高斯差分(DoG)方法在MATLAB中提取指纹图像中的孔隙?

时间:2015-03-11 19:07:33

标签: matlab image-processing gaussian feature-detection

我正在研究指纹识别系统,我需要提取脊中存在的毛孔。在我的研究中,我读到斑点检测技术可以将毛孔与脊分开。但是当我应用高斯滤波器时,它使图像平滑。此外,DoG还会产生另一个类似的图像。如果这是正确的方法那么我哪里出错?

1 个答案:

答案 0 :(得分:1)

您实际上需要应用具有2组不同参数的高斯滤波器,然后减去滤波器并使用新滤波器对输入图像进行卷积,即高斯差。

以下是coins.png演示图像的示例...代码已注释;不要犹豫,使用参数来看看它如何影响输出:

clear
clc


Im = imread('coins.png');

[r,c,~] = size(Im);

%// Initialize 3d array containing 3 images.
FilteredIm = zeros(r,c,3);

%// Try with 3 different kernel sizes
GaussKernel = [7 11 15];
figure;
subplot(2,2,1)
imshow(Im);
title('Original image');

TitleText = cell(1,numel(GaussKernel));
%// Apply Gaussian filter with 3 different kernel sizes/sigma values.
for k = 1:numel(GaussKernel)

    %// Kernel sizes change but sigma values stay the same for
    %// simplicity...you can play around with them of course.

    GaussFilt1 = fspecial('Gaussian', GaussKernel(k), 12);
    GaussFilt2 = fspecial('Gaussian', GaussKernel(k), 4);

    %// Subtract the filters
    DiffGauss = GaussFilt1 - GaussFilt2;

    %// Perform convoluton to get filtered image
    FilteredIm(:,:,k) = conv2(double(Im), DiffGauss, 'same');

    %// Display
    subplot(2,2,k+1)

    imshow(FilteredIm(:,:,k));
    TitleText{k} = sprintf('Filtered- Kernel of %i',GaussKernel(k));
    title(TitleText{k});
end

输出:

enter image description here

现在,对于您的应用程序,您可能需要使用提供给fspecial的内核大小和sigma参数。祝你好运!