본문 바로가기

컴퓨터비전

2. 이진영상의 중심좌표/방향/장축,단축길이 구하기

이진 영상 B[i,j]에 대해서, B[i,j] = 1 if F[i,j]<=70 0 otherwise 

1. B[i,j]=1인 영역의 중심좌표를 구하시오. 

2. B[i,j]=1인 영역의 방향(orientation)을 구하시오. 

3. B[i,j]=1인 영역의 Elongation(장축길이/단축길이)을 구하시오



< 원본 영상 >

< 처리 결과 >


- 주요 소스 코드 

pgm파일 읽어오는 소스 및 이진화 하는 소스 생략

 
for(i=0; i < rows; i++){ 
		for(j=0; j < cols; j++){
			if (buffer[i*cols+j] <=70){ //70보다 작거나 같을 경우 
				sum_x += j; //행 증가 
				sum_y += i; //열 증가 
				area++; //픽셀 수 증가 
			}
		}
	}

	x = sum_x/area;	//x의 중심좌표 계산
	y = sum_y/area; //y의 중심좌표 계산

	/* orientation, elongation 계산하기*/

	for(i=0;i< rows ;i++){//행증가
		for(j=0;j< cols;j++){//열 증가 
			if(buffer[i*cols +j] <=70){
				i_x+=(j-x)*(j-x);	//대입
				i_y+=(i-y)*(i-y);
				i_xy+=(j-x)*(i-y);
			}
		}
	}


	t =0.5*atan((2*i_xy)/(i_x-i_y)); //각각 계산
	n_max = (i_x + i_y + sqrt(4*i_xy*i_xy + (i_x-i_y)*(i_x-i_y)));
	n_min = (i_x + i_y - sqrt(4*i_xy*i_xy + (i_x-i_y)*(i_x-i_y)));

	printf("중심좌표 : (%f,%f)\n",x,y); //무게 중심 출력하기 
	printf("orientaion : %f \n",t);	//orientation 출력하기
	printf("elongation : %f \n",sqrt(n_max)/sqrt(n_min));//elongation출력하기
}



 



'컴퓨터비전' 카테고리의 다른 글

7. Template matching  (0) 2015.09.17
6. Iterative thresholding / Otsu's thresholding  (0) 2015.09.17
5. Morphology  (0) 2015.09.17
4. boundary following  (0) 2015.09.17
3. connected component labelling  (0) 2015.09.17