2014-04-24 2 views
1

나는 다음과 같은 이미지를 가지고있다 : Finger_vein 나의 궁극적 인 목표는 손가락의 정맥 패턴을 추출하는 것이다. 그래서 제가하려는 것은 손가락 개체 만 추출하는 것입니다. 그 목적을 위해, 나는 오츠 (Otsu) thresholding 단계를 먼저 시도한 다음에 침식과 팽창을 시도했다. 이제 이진 이미지를 마스크로 사용하여 엘리먼트를 현명한 이미지에 곱하여 손가락 만 얻습니다 (정확한 것은 아닙니다). enter image description hereMATLAB : 일부 기능을 식별하여 이진 이미지에서 개체를 자르는 방법?

코드는 다음과 같습니다 :

I = imread('3.5.bmp'); 
[level] = graythresh(I); 
BW = im2bw(I,level); 
[BWm] = imerode(BW,strel('disk',10)); figure, imshow(BWm) 
[BWmm] = imdilate(BWm,strel('disk',15)); figure, imshow(BWmm) 
B = I.*uint8(BWmm); % BWmm is the mask 
imshow(B) 

은 지금은 내가 전에 만든 마스크를 사용하여 혼자 손가락 부분을 잘라낼. 그것을 성취하는 방법?

자르기를 위해 이미지를 업로드 할 부분은 enter image description here입니다. (그리고 마지막으로 수동으로하거나 픽셀 좌표가있는 imcrop() 유틸리티를 입력으로 사용하고 싶지 않습니다.이 픽셀을 얻고 싶습니다. 일부 알고리즘을 사용하여 조정할 수 있습니다.

+0

을 사용하면 이미지의 분할을 향상 하시겠습니까 BWmm 사용의 extermal 포인트를 찾으려면? 그것이 당신의 질문입니까? – kkuilla

+0

출력 이미지를 단일 손가락 개체로만 사용하고 싶습니다. – dexterdev

+1

세그먼트 화하려는 영역을 빨간색으로 수동 그리는 이미지를 추가 할 수 있습니까? – kkuilla

답변

1

마스크 BWmm에서 픽셀 좌표를 찾은 다음 imcrop 좌표를 사용합니다.

projX = any(BWmm, 1); % projection of mask along x direction 
projY = any(BWmm, 2); % projection of mask along y direction 
fx = find(projX, 1, 'first'); % first column with non-zero val in mask 
tx = find(projX, 1, 'last'); % last column with non-zero val in mask 
fy = find(projY, 1, 'first'); % first row with non-zero val in mask 
ty = find(projY, 1, 'last'); % last row with non-zero val in mask 
cropRect = [fx, fy, tx-fx+1, ty-fy+1]; 
cImg = imcrop(I, cropRect); 
+0

대단한 것 같습니다. 내가 이것을 시도하자. – dexterdev

+0

완벽하게 작동합니다. 한 가지 더. 나에 의해 작성된 코드는 OK입니까? 이것을 달성하기위한 더 좋은 방법이 있습니까? – dexterdev

+1

@dexterdev 한 가지 예만 보면서 말하기는 어렵습니다. 그러나 코드는 간단하며 훌륭한 코드입니다. – Shai

관련 문제