2013-12-19 1 views
3

을 단순화 :MATLAB : 작은 가장자리를 제거하고이 같은 이미지가 조직학 이미지를

histology image

내가하고 싶은 것은 셀이 셀의 바깥 쪽과 안쪽 가장자리를 찾을 수 있습니다 다른 색상의 두 부분 사이.

그러나이 이미지에는 내가 생각하는 세부 사항이 포함되어 있으며이 이미지를 단순화하고 작은 가장자리를 제거하고 원하는 가장자리를 찾는 방법이 있습니까?

나는 matlab에서 제공하는 가장자리 기능을 시도했다. 그러나 그것은 단지 바깥 쪽 가장자리를 찾을 수 있고 그 상세한 가장자리에 의해 방해받습니다.

그것은 나에게 보인다

답변

2

경계가 모호하고 적색과 녹색의 강도가 약간 다르기 때문에 매우 어려운 작업입니다. 세분화를 매우 정확하게 구현하고 의료 요건을 충족시키려는 경우 Shai의 k-means와 graph cuts은 매우 적은 옵션 중 하나 일 수 있습니다 (EM algorithm이 대안 일 수 있음). 유사한 이미지가 많은 대형 데이터베이스가있는 경우 machine learning methods이 도움이 될 수 있습니다. 그렇지 않으면, 방금 내부 빨간색 영역을 대략적으로 추출하는 간단한 코드를 작성했습니다. 일부 녹색 영역도 포함되기 때문에 경계가 정확하지 않습니다.

I1=I; 
I=rgb2hsv(I); 
I=I(:,:,1); % the channel with relatively large margin between green and red 

I=I.*(I<0.25); 
I=imdilate(I, true(5)); 
% I=imfill(I,'holes'); depends on what is your definition of the inner boundary 
bw=bwconncomp(I); 
ar=bw.PixelIdxList; 

% find the largest labeled area, 
n=0; 
for i=1:length(ar) 
    if length(ar{i})>n 
     n=length(ar{i}); 
     num=i; 
    end 
end 
bw1=bwlabel(I); 
bwfinal(:,:,1)=(bw1==num).*double(I1(:,:,1)); 
bwfinal(:,:,2)=(bw1==num).*double(I1(:,:,2)); 
bwfinal(:,:,3)=(bw1==num).*double(I1(:,:,3)); 
bwfinal=uint8(bwfinal); 
imshow(bwfinal) 

enter image description here

2

당신은 이미지의 세 가지 지배적 인 색상이 있습니다 셀의
2. grenn 틱 한 부분 ("노이즈"등의 세포 내부뿐만 아니라 현재)
1. 블루 틱 배경
3 red-ish - 셀의 두 번째 부분
이 세 가지 색상이 서로 다른 경우 k- 평균 및 그래프 컷을 사용하여 이미지를 분할 해보십시오.

첫 번째 단계 - 각 픽셀을 세 가지 주요 색상 중 하나와 연결하는 k- 수단을 사용합니다. 이미지의 색상에 k-means를 적용하십시오 (각 픽셀은 선택한 색상 공간에서 3 벡터입니다). k=3으로 k-means를 실행하고 각 픽셀의 중심까지의 거리를 유지합니다.

두 번째 단계 - 배경과 별도의 셀. 그래프 컷을 사용하여 바이너리 분할을 수행합니다. 각 픽셀의 데이터 비용은 배경색과의 거리 (픽셀이 "배경"으로 레이블 된 경우) 또는 다른 두 색상과의 최소 거리 (픽셀이 "전경"으로 레이블 된 경우) 중 하나입니다. 이미지 대비를 사용하여 매끄러운 단어의 쌍별 가중치를 설정하십시오.

세 번째 단계 - 셀의 두 부분을 분리합니다. 그래프 컷을 사용하여 다시 바이너리 세분화를 수행하지만 이번에는 이전 단계에서 "셀"로 표시된 픽셀에서만 작동합니다. 배경에 할당되었지만 셀로 레이블 된 k- 평균이 모든 레이블 (셀 내부의 "노이즈"픽셀)에 대해 0이어야하는 픽셀의 데이터 용어.

matlab wrapper for graph-cuts이이 작업에 유용 할 수 있습니다.

관련 문제