2014-09-22 4 views
0

저는 현재 지문 확인과 특징점 추출에 관심이 많습니다. 다음 코드를 온라인에서 찾았으며 누군가가 설명 할만큼 친절한 지 궁금합니까? 나는 centroid, regionprops 등을 보았는데, 나는 이것들을 조금 이해하지만, 아래의 코드는 나를 의아하게 만든다!Matlab FingerPrint Minutia Extraction

[email protected]; 
L = nlfilter(K,[3 3],fun); 

%% Termination 
LTerm=(L==1); 
imshow(LTerm) 
LTermLab=bwlabel(LTerm); 
propTerm=regionprops(LTermLab,'Centroid'); 

CentroidTerm=round(cat(1,propTerm(:).Centroid)); 
imshow(~K) 
set(gcf,'position',[1 1 600 600]); 
hold on 
plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') 

%% Bifurcation 
LBif=(L==3); 
LBifLab=bwlabel(LBif); 
propBif=regionprops(LBifLab,'Centroid','Image'); 
CentroidBif=round(cat(1,propBif(:).Centroid)); 
plot(CentroidBif(:,1),CentroidBif(:,2),'go') 

답변

2

코드는 먼저 이진 이미지를 3x3 픽셀의 이웃으로 필터링합니다. nfilter은 움직이는 필터 기능입니다. 인수로 주어진 이미지의 모든 픽셀을 통과하고 인접 픽셀의 값을 기반으로 연산을 적용합니다.

나는 minutie 필터의 정확한 내용을 알지 못하지만 나머지 코드로 판단 할 때 모든 1의 근처에있는 값이 1 인 픽셀을 계산합니다. 다시 말해 세그먼트의 끝에서 1과 같고 3 개의 분기 (분기)가있을 때 3과 같습니다.

예 :

이 필터는 다음과 같이, 근방의 것들을 정리해 보자

block 이진 화상의 각 화소 주변의 주변을 나타내고
sum(block(1,1:3), block(3,1:3), block(2,1), block(2,3))*block(2, 2); 

.

아래의 왼쪽 행렬 (경계 예외를 무시한 경우)에는 3x3 근처에 정확히 1이있는 위치가 하나 있고, 오른쪽 행렬에는 정확히 3 개의 위치가있는 위치가 있습니다 그것의 3x3 인근에있는 1s.

[0 0 0 0 0  [0 0 1 0 0 
0 0 0 0 0   0 0 1 0 0 
0 0 1 0 0   1 1 1 0 0 
0 0 1 0 0   0 0 1 0 0 
0 0 1 0 0]  0 0 1 0 0] 

필터링 된 출력 될 것이다 : 그것은 좌측 행렬의 종단, 우측 행렬의 분기점을 발견

[0 0 0 0 0  [0 0 0 0 0 
0 0 0 0 0   0 0 0 0 0 
0 0 1 0 0   0 0 3 0 0 
0 0 0 0 0   0 0 0 0 0 
0 0 0 0 0]  0 0 0 0 0] 

.

필터링 된 이미지의 값은 1과 3으로 임계 값이 지정되고 bwlabelregionprops은 다소 혼란 스럽습니다. 쪼개짐과 종결은 단일 지점이므로 위치는 단순히 색인입니다. 난 당신이 단순히 같은 것을 사용하여 종단 및 분기의 좌표를 검출 달성 할 수 있다고 생각 : 그 이미지의 좌표와 배열은 MATLAB에서 다른입니다

[It Jt]= find(L==1); 
[Ib Jb]= find(L==3); 

내가 생각할 수있는 이유 중 하나 †, 그리고이 두 가지 기능 원본 이미지 위에 플롯하기가 더 쉬운 이미지 형식의 좌표를 출력합니다.

+0

대단히 감사합니다. bwlabel 및 regionprops를 제거하면 오류가 발생합니다. 그들이 포함되는 이유가있을 것임에 틀림 없다? – user1877082

+0

@ user1877082 -이 코드 줄을 제거하면'bwlabel'과'regionprops' 다음에 나오는 줄은 그 단계에서 할당 된 출력 변수에 의존하므로 오류가 발생합니다. 따라서 분명히 얻을 것입니다. 오류. – rayryeng

+0

다음 코드를 다시 설명해주십시오. 합계 (블록 (1,1 : 3), 블록 (3,1 : 3), 블록 (2,1), 블록 (2,3)) * 블록 (2, 2); 나는 이해하기가 어렵다. 나는 이것에 익숙하지 않으며 이것을 이해하기가 어렵다고 생각하고있다. 내 주요 문제는 스캔 프로세스가 어떻게 작동하는지 이해하지 못한다고 생각합니다. 내가 얻을 수 있다면 이드는 괜찮을거야! – user1877082