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

How to apply Difference of Gaussian(DoG) approach to extract pores in fingerprint image in MATLAB?

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

您实际上需要应用具有 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

输出:

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