2015-03-11 2 views
0

Я работаю над системой распознавания отпечатков пальцев, мне нужно извлечь поры, которые присутствуют в хребтах. Во время моего исследования я прочитал, что метод обнаружения блоба может отделять поры от гребней. Однако когда я применяю фильтр Гаусса, он сглаживает изображение. Кроме того, DoG приводит к другому аналогичному изображению. Если это правильный подход, то где я иду не так?Как применить разность гауссовского (DoG) подхода для извлечения пор в изображении отпечатков пальцев в MATLAB?

ответ

1

На самом деле вам нужно применить гауссовский фильтр с двумя различными наборами параметров, затем вычесть фильтры и выполнить свертку входного изображения с помощью этого нового фильтра, то есть разницу гауссовых.

Вот пример с демонстрационным изображением 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. Удачи!

+0

Спасибо за продуманный ответ, однако я все еще получаю серое изображение, пока моя цель - сохранить черно-белый цвет. Крайние низкие значения и высокие значения, как правило, делают фоновый белый и черный передние, что полностью противоположно моему входному изображению. – user1

+0

Можно ли вывести только внутренние края монеты, объединив круговые границы с фоном? – user1

+0

Извините за поздний ответ. Для вашего 1-го вопроса вы можете захотеть принять инверсию изображения ('~ Image'). Для второго случая, возможно, попытайтесь подорвать изображение, используя элемент структурирования диска. –