2013-08-08 3 views
1

OpenCV에서 다음 계산을 수행하는 방법을 알아 내려고합니다.OpenCV에서 픽셀의 평균 거리 결정 (이미지 중심까지)

(블랙/화이트) 이진 이미지를 가정 : 이미지의 중심에서 흰 화소

평균 거리. 가장 가까운 흰색 픽셀이 가장자리 근처에있는 이미지는 높은 점수를 얻지 만 센터 근처에 가장 흰색 픽셀이있는 이미지는 낮은 점수를 갖습니다.

나는이 작업을 루프를 사용하여 수동으로 수행하는 방법을 알고 있지만, Java를 사용하고 있기 때문에 원시 OpenCV 호출 집합을 사용하여 Java를 오프로드하려고합니다.

감사

답변

2

distanceTransform() 당신이 원하는 거의입니다. 불행히도 가장 가까운 검은 색 픽셀까지의 거리 만 계산합니다. 즉, 데이터를 약간 마사지해야합니다. distanceTransform()이 제대로 작동하려면 이미지의 중앙에 검정색 픽셀 하나만 있어야합니다.

  • 비아 평균 거리를 계산 수정 이미지
  • 블랙
  • 통화 distanceTransform()의 중심 화소로 설정하는 중간 값
  • 모든 블랙 픽셀 세트 : 다음

    내 방법은 mean(), 이진 이미지의 흰색 픽셀을 마스크로 사용

예제 코드는 다음과 같습니다. 그것은 C++에있어,하지만 당신은 아이디어를 얻을 수 있어야합니다 : 말했다와

cv::Mat img; // binary image 
img.setTo(128, img == 0); 
img.at<uchar>(img.rows/2, img.cols/2) = 0; // Set center point to zero 

cv::Mat dist; 
cv::distanceTransform(img, dist, CV_DIST_L2, 3); // Can be tweaked for desired accuracy 

cv::Scalar val = cv::mean(dist, img == 255); 
double mean = val[0]; 

을, 나는이 방법이 실제로 더 빨리 루프에서 반복보다 여부를 테스트하는 것이 좋습니다. 이 메소드는 API 호출을 수용하는 데 필요한 것보다 공정한 처리를 수행합니다.

+0

고마워요! –