如何应用高斯差分(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 参数。祝你好运!
我正在研究指纹识别系统,我需要提取存在于 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 参数。祝你好运!