我正在研究指纹识别系统,我需要提取脊中存在的毛孔。在我的研究中,我读到斑点检测技术可以将毛孔与脊分开。但是当我应用高斯滤波器时,它使图像平滑。此外,DoG还会产生另一个类似的图像。如果这是正确的方法那么我哪里出错?
答案 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
输出:
现在,对于您的应用程序,您可能需要使用提供给fspecial
的内核大小和sigma参数。祝你好运!