Main Content

dice

영상 분할을 위한 Sørensen-Dice 유사성 계수

설명

예제

similarity = dice(BW1,BW2)는 이진 영상 BW1BW2 간의 Sørensen-Dice 유사성 계수를 계산합니다.

예제

similarity = dice(L1,L2)는 레이블 영상 L1L2에서 각 레이블의 다이스 지수를 계산합니다.

similarity = dice(C1,C2)는 범주 영상 C1C2에서 각 범주의 다이스 지수를 계산합니다.

예제

모두 축소

분할할 객체가 있는 영상을 읽어 들입니다. 영상을 회색조로 변환하고 결과를 표시합니다.

A = imread('hands1.jpg');
I = im2gray(A);
figure
imshow(I)
title('Original Image')

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

능동 윤곽선(스네이크)을 사용하여 손을 분할합니다.

mask = false(size(I));
mask(25:end-25,25:end-25) = true;
BW = activecontour(I, mask, 300);

ground truth 분할을 읽어 들입니다.

BW_groundTruth = imread('hands1-mask.png');

ground truth 대비 능동 윤곽선 분할의 다이스 지수를 계산합니다.

similarity = dice(BW, BW_groundTruth);

마스크가 서로 겹치도록 표시합니다. 색은 마스크의 차이를 나타냅니다.

figure
imshowpair(BW, BW_groundTruth)
title(['Dice Index = ' num2str(similarity)])

Figure contains an axes object. The axes object with title Dice Index = 0.83828 contains an object of type image.

이 예제에서는 영상을 여러 영역으로 분할하는 방법을 보여줍니다. 그런 다음 영역별로 다이스 유사성 계수를 계산합니다.

분할할 여러 영역이 있는 영상을 읽어 들입니다.

RGB = imread('yellowlily.jpg');

세 영역의 일반적인 색 특성을 구별하기 위해 표식(Scribble)을 만듭니다. 첫 번째 영역은 노란색 꽃을 분류합니다. 두 번째 영역은 녹색 줄기와 잎을 분류합니다. 마지막 영역은 갈색 흙을 이 영상의 서로 다른 두 패치로 분류합니다. 영역은 4개 요소를 가지는 벡터로 지정합니다. 요소는 각각 ROI 왼쪽 상단 코너의 x 좌표와 y 좌표, ROI의 너비, ROI의 높이를 나타냅니다.

region1 = [350 700 425 120]; % [x y w h] format
BW1 = false(size(RGB,1),size(RGB,2));
BW1(region1(2):region1(2)+region1(4),region1(1):region1(1)+region1(3)) = true;

region2 = [800 1124 120 230];
BW2 = false(size(RGB,1),size(RGB,2));
BW2(region2(2):region2(2)+region2(4),region2(1):region2(1)+region2(3)) = true;

region3 = [20 1320 480 200; 1010 290 180 240]; 
BW3 = false(size(RGB,1),size(RGB,2));    
BW3(region3(1,2):region3(1,2)+region3(1,4),region3(1,1):region3(1,1)+region3(1,3)) = true;
BW3(region3(2,2):region3(2,2)+region3(2,4),region3(2,1):region3(2,1)+region3(2,3)) = true;

영상 위에 시드 영역을 표시합니다.

imshow(RGB)
hold on
visboundaries(BW1,'Color','r');
visboundaries(BW2,'Color','g');
visboundaries(BW3,'Color','b');
title('Seed Regions')

Figure contains an axes object. The axes object with title Seed Regions contains 7 objects of type line, image.

측지선 거리 기반 색 분할을 사용하여 영상을 3개 영역으로 분할합니다.

L = imseggeodesic(RGB,BW1,BW2,BW3,'AdaptiveChannelWeighting',true);

영상의 ground truth 분할을 불러옵니다.

L_groundTruth = double(imread('yellowlily-segmented.png'));

분할 결과와 ground truth를 시각적으로 비교합니다.

figure
montage({label2rgb(L),label2rgb(L_groundTruth)})
title('Comparison of Segmentation Results (Left) and Ground Truth (Right)')

Figure contains an axes object. The axes object with title Comparison of Segmentation Results (Left) and Ground Truth (Right) contains an object of type image.

분할된 영역 각각의 다이스 유사성 지수를 계산합니다. 다이스 유사성 지수가 두 번째 영역에서 훨씬 더 작습니다. 이 결과는 분할 결과를 시각적으로 비교한 것과 일치합니다. 영상의 오른쪽 아래 코너에서 흙을 잎으로 잘못 분류했습니다.

similarity = dice(L, L_groundTruth)
similarity = 3×1

    0.9396
    0.7247
    0.9139

입력 인수

모두 축소

첫 이진 영상으로, 임의 차원의 논리형 배열로 지정됩니다.

데이터형: logical

두 번째 이진 영상으로, BW1와 크기가 같은 논리형 배열로 지정됩니다.

데이터형: logical

첫 번째 레이블 영상으로, 음이 아닌 정수로 구성된 임의 차원의 배열로 지정됩니다.

데이터형: double

두 번째 레이블 영상으로, L1과 크기가 동일하면서 음이 아닌 정수로 구성된 배열로 지정됩니다.

데이터형: double

첫 번째 범주 영상으로, 임의 차원의 categorical형 배열로 지정됩니다.

데이터형: category

두 번째 범주 영상으로, C1과 동일한 크기의 categorical형 배열로 지정됩니다.

데이터형: category

출력 인수

모두 축소

다이스 유사성 계수로, 숫자형 스칼라 또는 [0, 1] 범위의 값을 갖는 숫자형 벡터로 반환됩니다. similarity가 1이면 두 영상의 분할이 완벽하게 일치하는 것입니다. 입력 배열에 따라 similarity는 다음과 같습니다.

  • 입력 배열이 이진 영상이면 similarity는 스칼라입니다.

  • 입력 배열이 레이블 영상이면 similarity는 벡터입니다. 여기서 첫 번째 계수는 레이블 1의 다이스 지수, 두 번째 계수는 레이블 2의 다이스 지수 등으로 진행됩니다.

  • 입력 배열이 범주 영상이면 similarity는 벡터입니다. 여기서 첫 번째 계수는 첫 번째 범주의 다이스 지수, 두 번째 계수는 두 번째 범주의 다이스 지수 등으로 진행됩니다.

데이터형: double

세부 정보

모두 축소

다이스 유사성 계수

두 집합 A와 B의 다이스 유사성 계수는 다음과 같이 표현됩니다.

dice(A,B) = 2 * | intersection(A,B) | / ( | A | + | B | )

여기서 |A|는 집합 A의 집합 크기(cardinal)를 나타냅니다. 다이스 지수는 참양성(TP), 거짓양성(FP), 거짓음성(FN)을 사용하여 다음과 같이 표현될 수도 있습니다.

dice(A,B) = 2 * TP / ( 2 * TP + FP + FN)

다음과 같이 다이스 지수는 자카드 지수와 관련 있습니다.

dice(A,B) = 2 * jaccard(A,B) / (1 + jaccard(A,B) )

버전 내역

R2017b에 개발됨

참고 항목

|