2014-12-06 1 views
0

지문 인식 프로젝트가 있는데 이미지의 종단점과 분기점을 표시하는 데 막혔습니다. 이미 픽셀 좌표를 저장했습니다. 이 일을 어떻게 하죠?MATLAB의 이미지에서 종단점 및 분기점의 미세한 점 표시

+0

이것은 약간 불명확합니다. '종결 지점과 분기점'이란 정확히 무엇을 의미합니까? 그리고 마킹을 할 때, 지문 이미지에서 그 점들을 플로팅하는 것입니까? – gg349

+0

두 개의 이미지를 지문과 대조하려면 주로 융기 지점과 융기 지점을 추출한 다음 비교합니다. 나는이 점들을 발견했지만, 이제 나는 그것들을 표시해야한다. 마킹으로, 나는이 색깔의 포인트 (좌표)를 넣고 싶다. –

+0

표시된 이미지를 저장해야합니까? – shoham

답변

1

이미지가 im이라는 회색 음영 이미지에 저장되어 있고 종료 지점과 분기점이 2D 행렬에 저장되어있는 것으로 가정하면 첫 번째 열은 행을 나타내고 두 번째 열은 각 점의 열을 나타냅니다. sub2ind을 사용하여이 작업을 수행하십시오. sub2ind은 2D 좌표를 선형 인덱스로 변환하므로 이미지의 픽셀 또는 매트릭스의 위치를 ​​빠르게 벡터화 할 수 있습니다. 따라서 이미지를 3D 매트릭스로 세 번 스태킹하여 그레이 스케일 이미지를 RGB 이미지로 만드십시오. 리콜하면 RGB 색상 모델의 회색 음영 이미지는 모두 빨강, 녹색 및 파랑 채널이 동일합니다. 예를 들어 회색은 (R,G,B) = (128,128,128)입니다.

분기점을 bifur, 종료점을 term으로하고 앞에서 지정한 2D 매트릭스 형식으로합시다. 이와 같이 다음과 같이하십시오.

%// Get linear indices for bifurcation and termination points 
ind_b = sub2ind(size(im), bifur(:,1), bifur(:,2)); 
ind_t = sub2ind(size(im), term(:,1), term(:,2)); 

%// Mark them on the image 
red = im; 
green = im; 
blue = im; 

red(ind_b) = 255; 
green(ind_b) = 0; 
blue(ind_b) = 0; 

red(ind_t) = 0; 
green(ind_t) = 255;  
blue(ind_t) = 0; 

im_colour = cat(3, red, green, blue); 
imshow(im_colour); 

이 코드를 천천히 살펴 봅니다. 우선 분기점과 종단점이 이미지의 선형 인덱스를 찾습니다. 다음으로 수행 할 작업은 원본 이미지의 모든 복사본 인 빨강, 녹색 및 파랑 채널을 만드는 것입니다. 그 후 각 색상 채널에 액세스하고 분기점과 종단점을 다른 색상으로 표시합니다. 분기점에 대해서는 순전히 빨간색 또는 (R,G,B) = (255,0,0)으로 만들었습니다. 종착점은 순전히 녹색이거나 (R,G,B) = (0,255,0)입니다. 점에 대한 색상을 설정 한 후에는 채널을 cat과 함께 스태킹하고 특히 3 차원을 선택하여 컬러 이미지를 만듭니다. 마침내 마지막으로 이미지를 보여줍니다.

함께 놀아야 할 수도있는 것은 이미지의 표시 크기입니다. 보시다시피, 표시된 픽셀은 단일 픽셀 그 자체 일 뿐이며 이미지의 해상도에 따라 이미지에서 제대로 볼 수도 그렇지 않을 수도 있습니다. 따라서 원래의 점을 둘러싸는 격자 안의 픽셀을 표시하는 것이 좋습니다. 아마도 관심있는 픽셀을 둘러싼 5 x 5 격자로 만들 수 있습니다. 이를 통해 각 점에 대해 for 루프를 만들고이 점을 감싸는 5 x 5 픽셀 격자를 표시하십시오. 또한 표식이 이미지 내부에 충분히 있다고 가정하여 그리드를 그리는 위험을 감수하지 않도록 할 것입니다. 그래서 코드는과 같이 수정 될 : 변경된 무엇

%// Get linear indices for bifurcation and termination points 
ind_b = []; 
for idx = 1 : size(bifur,1) 
    [c,r] = meshgrid(bifur(idx,2)-2:bifur(idx,2)+2, bifur(idx,1)-2:bifur(idx,1)+2); 
    c = c(:); 
    r = r(:); 
    ind_b = [ind_b; sub2ind(size(im), r, c); 
end 

ind_t = []; 
for idx = 1 : size(term,1) 
    [c,r] = meshgrid(term(idx,2)-2:term(idx,2)+2, term(idx,1)-2:term(idx,1)+2); 
    c = c(:); 
    r = r(:); 
    ind_t = [ind_t; sub2ind(size(im), r, c); 
end 

%// Mark them on the image 
red = im; 
green = im; 
blue = im; 

red(ind_b) = 255; 
green(ind_b) = 0; 
blue(ind_b) = 0; 

red(ind_t) = 0; 
green(ind_t) = 255;  
blue(ind_t) = 0; 

im_colour = cat(3, red, green, blue); 
imshow(im_colour); 

코드의 시작입니다. 분기점과 종점에 대한 각 점에 대해 meshgrid을 사용하여 각 관련 픽셀을 둘러싸는 5x5 격자 점을 결정한 다음 5x5 격자 내의 각 점에 대한 선형 색인을 생성합니다. 그런 다음 위에서 설명한 것과 동일한 마킹 논리를 수행 할 수 있도록 두 배열을 하나의 최종 배열에 추가합니다.

빨간색과 초록색이 아닌 다른 색상으로 원한다면 색상을 가지고 놀아야 할 것입니다.하지만이 색상은 반드시 시작해야합니다. RGB 모델에서 가능한 색상 목록을 원하면 좋은 도구는 RGB colour picker이며 원하는 색상을 알아낼 수 있으며 해당 색상을 복제 할 RGB 값을 제공합니다.

행운을 빈다.