2014-03-24 3 views
2

필자는 내 전체 전체 이진 이미지에 대한 좌표 (X, Y)를 찾고 각 구성 요소에 대한 CoM을 seperatly로 찾는 것에 관심이 있습니다. 어떻게 효율적으로 만들 수 있습니까? regionprops를 사용하는 것 같지만 올바른 방법을 찾을 수 없습니다.전체 바이너리 이미지의 중심을 찾는 방법은 무엇입니까?

+0

[centroid] (http://en.wikipedia.org/wiki/Image_moments#Examples)에 대한 방정식이 있습니다. 맞습니까? 코딩 해봤습니까? – beaker

+0

경계 상자를 계산하고 중심 값을 계산 하시겠습니까? (당신은 개별 구성 요소의 중심을 원하지 않기 때문에). –

+0

나는 방정식을 가지고 있으며 경계 상자를 계산하는 것은 다른 구성 요소 사이의 구멍과 틈새를 고려하지 않을 것입니다. – idow09

답변

8

BWregionprops의 데이터 타입에 따라 regionprops

props = regionprops(double(BW), 'Centroid'); 

위한 단일 영역으로서 모든 영역을 정의 할 수는 다른 영역으로서 각 연결 컴포넌트 라벨 또는 모든 비 - 제로 처리해야하는지 여부를 결정 여러 구성 요소가있는 단일 영역.


또는,

[y x] = find(BW); 
cent = [mean(x) mean(y)]; 
6

그냥 회색이 방법을 확장

void centerOfMass (int[][] image, int imageWidth, int imageHeight) 
{ 
    int SumX = 0; 
    int SumY = 0; 
    int num = 0; 
    for (int i=0; i<imageWidth; i++) 
    { 
     for (int j=0; j<imageHeight; j++) 
     { 
      if (image[i][j] == WHITE) 
      { 
       SumX = SumX + i; 
       SumY = SumY + j; 
       num = num+1; 
      } 
     } 
    } 

    SumX = SumX/num; 
    SumY = SumY/num; 
    // The coordinate (SumX,SumY) is the center of the image mass 
} 

좌표 반복 모든 픽셀들이 X와 Y의 평균을 계산 스스로 중심을 계산할 수 있습니다 범위 [0..255] 범위의 확대/축소 이미지 : 대신

if (image[i][j] == WHITE) 
       { 
        SumX = SumX + i; 
        SumY = SumY + j; 
        num = num+1; 
       } 
,515,

너무 어두운 픽셀 질량 계산의 중앙 약간 작은 부분 기여 값 (100)의 화소의 값 1과 어두운 픽셀보다 100 배 중량 갖는다이 경우 다음과 같은 계산

SumX = SumX + i*image[i][j]; 
SumY = SumY + j*image[i][j]; 
num = num+image[i][j]; 

사용. 이 경우 이미지가 클 경우 32 비트 정수가 넘칠 수 있으므로 int 대신 long int sumX, sumY 변수를 사용하십시오.

+3

알아. C/C++는 java와 동일하며 일반 영어로 읽을 수 있습니다. 따라서이 질문에 비틀 거리고 다른 프로그래밍 언어를 사용하는 다른 사람들은 여전히 ​​수학적 해결책을 이해할 수 있습니다. 나는 'idow90'알고리즘을 이해하고 기본적으로 당신의 대답 인 Matlab으로 변환 할 수있을 것이라고 확신합니다. – DanielHsH

+0

색상이 검은 색 이어도 num을 늘리지 않아야합니까? 그레이 스케일 이미지에 수식을 적용 할 때 검정이 아닌 모든 색상을 추가해야합니까? – user3452075

+0

num은 전체 흰색 픽셀의 수를 계산합니다. SumX 및 SumY는 X 및 Y 방향으로 적분을 계산합니다. 총 픽셀 수로 나누면 정답이됩니다. 귀하의 리젠트에 대한 그레이 스케일 이미지에 대한 대답을 확장했습니다. – DanielHsH

관련 문제