경계가 모호하고 적색과 녹색의 강도가 약간 다르기 때문에 매우 어려운 작업입니다. 세분화를 매우 정확하게 구현하고 의료 요건을 충족시키려는 경우 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)