지문 인식 프로젝트가 있는데 이미지의 종단점과 분기점을 표시하는 데 막혔습니다. 이미 픽셀 좌표를 저장했습니다. 이 일을 어떻게 하죠?MATLAB의 이미지에서 종단점 및 분기점의 미세한 점 표시
답변
이미지가 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 값을 제공합니다.
행운을 빈다.
이것은 약간 불명확합니다. '종결 지점과 분기점'이란 정확히 무엇을 의미합니까? 그리고 마킹을 할 때, 지문 이미지에서 그 점들을 플로팅하는 것입니까? – gg349
두 개의 이미지를 지문과 대조하려면 주로 융기 지점과 융기 지점을 추출한 다음 비교합니다. 나는이 점들을 발견했지만, 이제 나는 그것들을 표시해야한다. 마킹으로, 나는이 색깔의 포인트 (좌표)를 넣고 싶다. –
표시된 이미지를 저장해야합니까? – shoham