이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

regionprops

영상 영역의 속성 측정

설명

예제

stats = regionprops(BW,properties)는 이진 영상 BW의 각 8-연결성분(객체)에 대해 properties로 지정된 속성 세트의 측정값을 반환합니다. stats는 영상의 각 객체에 대한 구조체를 포함하는 구조체형 배열입니다. 인접 영역과 인접하지 않은 영역에 regionprops를 사용할 수 있습니다(알고리즘 항목 참조).

참고

3차원 볼륨 영상의 측정값을 반환하려면 regionprops3을 사용하는 것이 좋습니다. regionprops가 3차원 영상을 인수로 받을 수 있지만, regionprops3regionprops보다 3차원 영상에 대한 통계량을 더 정확하게 계산합니다.

모든 구문에서, properties 인수를 지정하지 않으면 regionprops'Area', 'Centroid', 'BoundingBox' 측정값을 반환합니다.

선택적으로 GPU를 사용하여 영상 영역의 속성을 측정할 수 있습니다(Parallel Computing Toolbox™가 필요함). 자세한 내용은 GPU를 사용한 영상 처리 항목을 참조하십시오. 'ConvexArea', 'ConvexHull', 'ConvexImage', 'Circularity', 'EulerNumber', 'FilledArea', 'FilledImage', 'MaxFeretProperties', 'MinFeretProperties' 'Solidity' 속성은 GPU에서 지원되지 않습니다.

stats = regionprops(CC,properties)bwconncomp에 의해 반환된 구조체인 CC의 각 연결성분(객체)에 대한 속성 세트를 측정합니다.

이 구문은 GPU에서 지원되지 않습니다.

stats = regionprops(L,properties)는 레이블 행렬 L에서 레이블이 지정된 각 영역의 속성 세트를 측정합니다.

stats = regionprops(___,I,properties)는 영상 I의 레이블이 지정된 각 영역에 대해 properties로 지정된 속성 세트의 측정값을 반환합니다. regionprops에 대한 첫 번째 입력값(BW, CC 또는 L)은 I의 영역을 식별합니다.

예제

stats = regionprops(output,___)은 속성 세트의 측정값을 반환합니다. 여기서 output은 반환 값 유형을 지정합니다. regionprops는 측정값을 struct 배열 또는 table로 반환할 수 있습니다.

'table' 출력값은 GPU에서 지원되지 않습니다.

예제

모두 축소

이진 영상을 작업 공간으로 읽어 들입니다.

BW = imread('text.png');

regionprops를 사용하여 영상의 연결성분의 중심을 계산합니다. regionprops 함수는 중심을 구조체형 배열로 반환합니다.

s = regionprops(BW,'centroid');

중심의 x, y 좌표를 2열 행렬에 저장합니다.

centroids = cat(1,s.Centroid);

중심 위치를 겹쳐 놓은 이진 영상을 표시합니다.

imshow(BW)
hold on
plot(centroids(:,1),centroids(:,2),'b*')
hold off

이진 영상을 gpuArray로 읽어 들입니다.

BW = gpuArray(imread('text.png'));

영상의 객체 중심을 계산합니다.

s  = regionprops(BW,'centroid');

영상의 중심을 플로팅합니다.

centroids = cat(1, s.Centroid);
imshow(BW)
hold on
plot(centroids(:,1), centroids(:,2), 'b*')
hold off

영상에 있는 원형 객체의 중심과 반지름을 추정하고, 이 정보를 바탕으로 영상의 원을 플로팅합니다. 이 예제에서는 regionprops는 측정된 영역 속성을 테이블로 반환합니다.

영상을 작업 공간으로 읽어 들입니다.

a = imread('circlesBrightDark.png');

입력 영상을 이진 영상으로 변환합니다.

bw = a < 100;
imshow(bw)
title('Image with Circles')

영상의 영역 속성을 계산하고 그 데이터를 테이블로 반환합니다.

stats = regionprops('table',bw,'Centroid',...
    'MajorAxisLength','MinorAxisLength')
stats=4×3 table
        Centroid        MajorAxisLength    MinorAxisLength
    ________________    _______________    _______________

     256.5     256.5        834.46             834.46     
       300       120        81.759             81.759     
    330.47    369.83        111.78             110.36     
       450       240        101.72             101.72     

원의 중심과 반지름을 가져옵니다.

centers = stats.Centroid;
diameters = mean([stats.MajorAxisLength stats.MinorAxisLength],2);
radii = diameters/2;

원을 플로팅합니다.

hold on
viscircles(centers,radii);
hold off

입력 인수

모두 축소

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

GPU를 사용하여 영상 영역의 속성을 측정하려면 BW를 2차원 논리형 행렬을 포함하는 gpuArray로 지정하십시오.

데이터형: logical

연결성분으로, bwconncomp에서 반환된 구조체로 지정됩니다.

데이터형: struct

레이블 행렬로, 임의 차원의 숫자형 배열로 지정됩니다. regionprops는 음수 값 픽셀을 배경으로 처리하고, 정수가 아닌 입력 픽셀은 가장 가까운 정수로 버림합니다. L의 양의 정수 요소는 서로 다른 영역에 해당합니다. 예를 들어, 1에 해당하는 L의 요소 세트는 영역 1에 해당하고, 2에 해당하는 L의 요소 세트는 영역 2에 해당하는 식입니다.

GPU를 사용하여 영상 영역의 속성을 측정하려면 L을 2차원 레이블 행렬을 포함하는 gpuArray로 지정하십시오.

데이터형: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

측정값 유형으로, string형 스칼라 또는 문자형 벡터가 쉼표로 구분된 목록, string형 스칼라 또는 문자형 벡터로 구성된 셀형 배열 또는 'all'이나 'basic'으로 지정됩니다. 속성 이름은 대/소문자를 구분하지 않으며 축약형일 수 있습니다. regionprops는 코드 생성에 사용될 경우 string형 스칼라 또는 문자형 벡터로 구성된 셀형 배열을 지원하지 않습니다.

  • 'all'을 지정하면, regionprops는 모든 형태 측정값을 계산하고, 회색조 영상에 대해서는 픽셀 값의 측정값도 함께 계산합니다.

  • 'basic'을 지정하거나 properties 인수를 지정하지 않으면, regionprops'Area', 'Centroid', 'BoundingBox' 측정값만 계산합니다.

다음 표에는 형태 측정값을 제공하는 모든 속성이 나와 있습니다. 픽셀 값의 측정값 표에 나열된 속성은 회색조 영상을 지정하는 경우에만 유효합니다.

형태 측정값

속성 이름설명N차원 지원GPU 지원코드 생성
'Area'

영역의 실제 픽셀 수로, 스칼라로 반환됩니다. 이 값은 픽셀의 패턴마다 서로 다른 가중치를 부여하는 bwarea에서 반환하는 값과 조금 다를 수 있습니다.

3차원 볼륨 영역에 상응하는 것을 찾으려면 regionprops3'Volume' 속성을 사용하십시오.

'BoundingBox'영역을 포함하는 가장 작은 사각형으로, 1xQ*2 벡터로 반환됩니다. 여기서 Q는 영상 차원 개수입니다. 예를 들어, 벡터 [ul_corner width]에서 ul_corner는 경계 상자의 왼쪽 상단 코너를 [x y z ...] 형식으로 지정합니다. width는 각 차원을 따라 경계 상자의 너비를 [x_width y_width ...] 형식으로 지정합니다. regionpropsndims를 사용하여 레이블 행렬이나 이진 영상의 차원 ndims(L)을 얻고, numel을 사용하여 연결성분의 차원 numel(CC.ImageSize)를 얻습니다.
'Centroid'

영역의 질량 중심으로, 1xQ 벡터로 반환됩니다. Centroid의 첫 번째 요소는 질량 중심의 가로 좌표(또는 x 좌표)입니다. 두 번째 요소는 세로 좌표(또는 y 좌표)입니다. Centroid의 다른 모든 요소는 차원 순서대로 위치합니다. 아래 그림은 인접하지 않은 영역의 중심과 경계 상자를 나타낸 것입니다. 영역은 흰색 픽셀로 구성됩니다. 녹색 상자는 경계 상자이고, 빨간색 점은 중심입니다.

'ConvexArea''ConvexImage'의 픽셀 수로, 스칼라로 반환됩니다.2차원만아니요아니요
'ConvexHull'영역을 포함할 수 있는 가장 작은 볼록 다각형으로, px2 행렬로 반환됩니다. 행렬의 각 행에는 해당 다각형 꼭짓점의 x, y 좌표가 포함되어 있습니다.2차원만아니요아니요
'ConvexImage'볼록 껍질을 지정하는 영상으로, 껍질 내 모든 픽셀이 채워져(on으로 설정됨) 있으며, 이진 영상(logical형)으로 반환됩니다. 영상은 영역의 경계 상자 크기입니다. 껍질의 경계가 거치는 픽셀에 대해, regionpropsroipoly와 같은 논리를 사용하여, 픽셀이 껍질 안에 있는지 밖에 있는지 확인합니다. 2차원만아니요아니요
'Circularity'객체의 원형률을 지정하는 원형성으로, 필드 Circularity를 가진 구조체로 반환됩니다. 구조체는 입력 영상의 각 객체에 대한 원형성을 포함합니다. 원형성 값은 (4*Area*pi)/(Perimeter2)로 계산됩니다. 완전한 원의 경우 원형성 값은 1입니다. 입력값은 레이블 행렬 또는 인접 영역을 갖는 이진 영상이어야 합니다. 인접하지 않은 영역이 영상에 있으면 regionprops는 예상치 못한 결과를 반환합니다. 원형성은 3*3 정사각형과 같이 매우 작은 객체에 대해서는 권장되지 않습니다. 이 경우 결과값이 완전한 원의 원형성 값인 1을 초과할 수 있습니다.2차원만아니요
'Eccentricity'영역과 같은 2차 적률을 갖는 타원의 이심률로, 스칼라로 반환됩니다. 이심률은 타원의 포커스와 타원의 주요 축 길이 간의 거리 비율입니다. 값은 0과 1 사이입니다. (0과 1은 퇴화된 경우입니다. 이심률이 0인 타원은 실제로는 원이고, 이심률이 1인 타원은 선분입니다.)2차원만
'EquivDiameter'영역과 같은 면적을 갖는 원의 지름으로, 스칼라로 반환됩니다. sqrt(4*Area/pi)로 계산됩니다.2차원만
'EulerNumber'영역의 객체 수에서 객체의 구멍 수를 뺀 값으로, 스칼라로 반환됩니다. 이 속성은 2차원 레이블 행렬에만 지원됩니다. regionprops는 8-연결성을 사용하여 오일러 수 측정값을 계산합니다. 연결성에 대한 자세한 내용은 Pixel Connectivity 항목을 참조하십시오.2차원만아니요
'Extent'영역의 픽셀과 총 경계 상자의 픽셀 비율로, 스칼라로 반환됩니다. 경계 상자의 면적으로 나눈 Area로 계산됩니다.2차원만
'Extrema'

영역의 극점으로, 8x2 행렬로 반환됩니다. 행렬의 각 행에는 점 중 하나의 x, y 좌표가 포함되어 있습니다. 벡터 형식은 [top-left top-right right-top right-bottom bottom-right bottom-left left-bottom left-top]입니다. 아래 그림은 서로 다른 두 영역의 극점을 보여줍니다. 왼쪽 그림의 각 영역 극점은 뚜렷하게 구분됩니다. 오른쪽 그림의 영역은 특정 극점이 일치합니다(예: top-leftleft-top).

2차원만
'FilledArea'FilledImageon 픽셀 개수로, 스칼라로 반환됩니다.아니요
'FilledImage'

영역의 경계 상자와 크기가 같은 영상으로, 이진(logical형) 배열로 반환됩니다. on 픽셀은 영역에 해당하며 아래 그림에 나타난 것처럼 모든 구멍이 채워져 있습니다.

아니요
'Image'영역의 경계 상자와 크기가 같은 영상으로, 이진(logical형) 배열로 반환됩니다. on 픽셀은 영역에 해당하고, 그 외 모든 픽셀은 off입니다.
'MaxFeretProperties'최대 페렛 직경(Feret diameter), 상대 각도, 좌표값을 포함하는 페렛 속성으로, 다음 필드를 가진 구조체로 반환됩니다.
필드설명
MaxFeretDiameter최대 페렛 직경으로, 객체를 둘러싸고 있는 볼록 껍질의 대척점 상의 임의의 두 경계점 사이의 최대 거리로 측정됩니다.
MaxFeretAngle영상의 가로 축을 기준으로 하는 최대 페렛 직경의 각도입니다.
MaxFeretCoordinates최대 페렛 직경의 끝점 좌표입니다.
입력값은 이진 영상, 연결성분 또는 레이블 행렬일 수 있습니다.
2차원만아니요아니요
'MinFeretProperties'최소 페렛 직경, 상대 각도, 좌표값을 포함하는 페렛 속성으로, 다음 필드를 가진 구조체로 반환됩니다.
필드설명
MinFeretDiameter최소 페렛 직경으로, 객체를 둘러싸고 있는 볼록 껍질의 대척점 상의 임의의 두 경계점 사이의 최소 거리로 측정됩니다.
MinFeretAngle영상의 가로 축을 기준으로 하는 최소 페렛 직경의 각도입니다.
MinFeretCoordinates최소 페렛 직경의 끝점 좌표입니다.
입력값은 이진 영상, 연결성분 또는 레이블 행렬일 수 있습니다.
2차원만아니요아니요
'MajorAxisLength'영역과 같은 정규화된 2차 중심 적률을 갖는 타원의 주요 축 길이(단위: 픽셀)로, 스칼라로 반환됩니다.2차원만
'MinorAxisLength'영역과 같은 정규화된 2차 중심 적률을 갖는 타원의 보조 축 길이(단위: 픽셀)로, 스칼라로 반환됩니다.2차원만
'Orientation'

영역과 같은 2차 적률을 갖는 타원의 x축과 주요 축 간의 각도로, 스칼라로 반환됩니다. 값은 도 단위이며, 범위는 -90도에서 90도까지입니다. 아래 그림은 타원의 좌표축과 방향을 나타낸 것입니다. 왼쪽 그림은 영상 영역과 해당 타원을 보여줍니다. 오른쪽은 같은 타원과, 좌표축을 나타내는 파란색 실선을 보여줍니다. 빨간색 점은 포커스입니다. 방향은 가로 점선과 주요 축 간의 각도입니다.

2차원만
'Perimeter'

영역 경계 주변의 거리로, 스칼라로 반환됩니다. regionprops는 영역 경계 주변에서 서로 인접해 있는 각 픽셀 쌍의 거리를 계산하여 둘레를 계산합니다. 인접하지 않은 영역이 영상에 있으면 regionprops는 예상치 못한 결과를 반환합니다. 아래 그림은 이 객체의 둘레 계산에 포함된 픽셀을 나타냅니다.

2차원만
'PixelIdxList'영역 픽셀의 선형 인덱스로, 요소를 p개 가진 벡터로 반환됩니다.
'PixelList'영역의 픽셀 위치로, pxQ 행렬로 반환됩니다. 행렬의 각 행은 [x y z ...] 형태를 갖고, 영역에 있는 특정 픽셀의 좌표를 지정합니다.
'Solidity'볼록 껍질에도 있고 영역에도 있는 픽셀 비율로, 스칼라로 반환됩니다. Area/ConvexArea로 계산됩니다.2차원만아니요아니요
'SubarrayIdx'객체 경계 상자 내에 있는 L의 요소로, 인덱스를 포함하는 셀형 배열로 반환됩니다. L(idx{:})이 요소를 추출하게 됩니다.아니요

다음 표의 픽셀 값의 측정값 속성은 회색조 영상 I를 지정할 때만 유효합니다.

픽셀 값의 측정값

속성 이름 설명N차원 지원GPU 지원코드 생성
'MaxIntensity'영역에서 가장 큰 명암을 갖는 픽셀 값으로, 스칼라로 반환됩니다.
'MeanIntensity'영역의 모든 명암 값의 평균으로, 스칼라로 반환됩니다.
'MinIntensity'영역에서 가장 낮은 명암을 갖는 픽셀 값으로, 스칼라로 반환됩니다.
'PixelValues'영역의 픽셀 수로, px1 벡터로 반환됩니다. 여기서 p는 영역의 픽셀 수입니다. 벡터의 각 요소에는 영역의 픽셀 값이 들어 있습니다.
'WeightedCentroid'위치와 명암 값을 기준으로 한 영역의 중심으로, 좌표로 구성된 pxQ 벡터로 반환됩니다. WeightedCentroid의 첫 번째 요소는 가중치가 부여된 중심의 가로 좌표(또는 x 좌표)입니다. 두 번째 요소는 세로 좌표(또는 y 좌표)입니다. WeightedCentroid의 다른 모든 요소는 차원 순서대로 위치합니다.

데이터형: char | string | cell

측정할 영상으로, 회색조 영상으로 지정됩니다. 영상의 크기는 이진 영상 BW, 연결성분 구조체 CC 또는 레이블 행렬 L의 크기와 일치해야 합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32

반환 유형으로, 다음 값 중 하나로 지정됩니다.

설명
'struct'길이가 BW, CC.NumObjects 또는 max(L(:))의 객체 수와 동일한, 구조체로 구성된 배열을 반환합니다. 구조체형 배열의 필드는 properties로 지정된 것처럼 각 영역의 서로 다른 속성을 나타냅니다.
'table'

높이(행 개수)가 BW, CC.NumObjects 또는 max(L(:))의 객체 수와 동일한MATLAB® 테이블을 반환합니다. 변수(열)는 properties로 지정된 것처럼 각 영역의 서로 다른 속성을 나타냅니다. MATLAB 테이블에 대한 자세한 내용은 table을 참조하십시오.

GPU에서는 지원되지 않습니다.

데이터형: char | string

출력 인수

모두 축소

측정값으로, 구조체형 배열이나 테이블로 반환됩니다. 배열의 구조체 수나 테이블의 행 수는 BW, CC.NumObjects 또는 max(L(:))의 객체 수에 해당합니다. 각 구조체의 필드나 각 행의 변수는 properties로 지정된 것처럼, 각 영역에 대해 계산된 속성을 나타냅니다.

GPU에서 실행될 경우 regionprops는 구조체형 배열만 반환할 수 있습니다.

  • 특정 기준을 충족하는 객체나 영역만 포함하는 이진 영상을 만들 때에는 함수 ismemberregionprops, bwconncomplabelmatrix와 함께 사용하는 것이 유용합니다. 예를 들어, 이러한 명령을 사용하면 면적이 80을 넘고 이심률이 0.8 미만인 영역만 포함하는 이진 영상이 만들어집니다.

    cc = bwconncomp(BW); 
    stats = regionprops(cc, 'Area','Eccentricity'); 
    idx = find([stats.Area] > 80 & [stats.Eccentricity] < 0.8); 
    BW2 = ismember(labelmatrix(cc), idx);  
    
  • regionprops의 출력값을 사용할 때는 구조체형 배열이 쉼표로 구분된 목록 구문을 사용하는 것이 좋습니다. 스칼라를 포함하는 필드에 이 구문을 사용하여, 영상의 각 영역에 대한 이 필드 값을 포함하는 벡터를 만들 수 있습니다. 예를 들어, stats가 필드 Area를 갖는 구조체형 배열이면 다음 표현식은

    stats(1).Area, stats(2).Area, ..., stats(end).Area
    

    다음과 동일합니다.

    stats.Area
    

    따라서 이러한 호출을 사용하여, 영상의 각 영역에 대한 면적을 포함하는 벡터를 만들 수 있습니다. allArea는 구조체형 배열 stats와 같은 길이의 벡터입니다.

    stats = regionprops(L, 'Area');
    allArea = [stats.Area];
    
  • 함수 bwlabel, bwlabelnbwconncomp는 모두 이진 영상의 연결성분을 계산합니다. bwconncomp를 사용하면 bwlabelbwlabeln 사용을 대체할 수 있습니다. 이 함수는 다른 함수보다 메모리 사용량은 적고 속도는 간혹 더 빠릅니다.

    함수입력 차원출력 형식메모리 사용량연결성
    bwlabel2차원배정밀도 레이블 행렬높음4 또는 8
    bwlabelnN차원배정밀도 레이블 행렬높음임의
    bwconncompN차원CC 구조체낮음임의

    bwlabelbwlabeln의 출력값은 배정밀도 레이블 행렬입니다. 메모리 효율성이 더 높은 데이터형을 사용하여 레이블 행렬을 계산하려면 다음과 같이 bwconncomp의 출력값에 대해 labelmatrix 함수를 사용하십시오.

    CC = bwconncomp(BW);
    L = labelmatrix(CC);

    디폴트 연결성을 갖는 이진 영상의 성분을 측정할 경우, 이제 bwlabel 또는 bwlabeln을 먼저 호출할 필요가 없습니다. 이진 영상을 regionprops에 바로 전달하면, 메모리 효율적인 bwconncomp 함수를 사용하여 연결성분이 자동으로 계산됩니다. 디폴트 연결성이 아닌 값을 지정하려면 bwconncomp를 호출하고 그 결과를 regionprops에 전달하십시오.

    CC = bwconncomp(BW, CONN);
    S = regionprops(CC);
  • 측정값을 계산하는 데는 대부분 시간이 거의 걸리지 않습니다. 그러나 다음 측정값은 L의 영역 수에 따라 시간이 오래 걸릴 수 있습니다.

    • 'ConvexHull'

    • 'ConvexImage'

    • 'ConvexArea'

    • 'FilledImage'

  • 특정 그룹의 측정값을 계산할 때는 측정값 중 하나를 계산할 때와 동일한 시간이 걸립니다. regionprops는 각 계산에 유용한 중간 계산을 활용합니다. 따라서 원하는 모든 측정값을 regionprops에 대한 단일 호출로 계산하는 것이 가장 빠릅니다.

알고리즘

인접 영역은 객체, 연결성분 또는 블롭(Blob)이라고도 합니다. 인접 영역을 포함한 레이블 행렬은 다음과 같을 수 있습니다.

1 1 0 2 2 0 3 3
1 1 0 2 2 0 3 3
1에 해당하는 L의 요소는 첫 번째 인접 영역이나 연결성분에 속합니다. 2에 해당하는 L의 요소는 두 번째 연결성분에 속하는 식입니다.

인접하지 않은 영역은 연결성분이 여러 개 있을지 모르는 영역입니다. 인접하지 않은 영역을 포함한 레이블 행렬은 다음과 같을 수 있습니다.

1 1 0 1 1 0 2 2
1 1 0 1 1 0 2 2
1에 해당하는 L의 요소는 첫 번째 영역에 속하고, 이 영역은 인접하지 않은 영역이며 연결성분을 두 개 포함하고 있습니다. 2에 해당하는 L의 요소는 두 번째 영역이고, 이 영역은 단일 연결성분입니다.

확장 기능

R2006a 이전에 개발됨