3

어떻게 파이썬 opencv에서 첫 번째와 두 번째 순간을 계산하고 모양 연장 기능을 얻을 수 있습니까?python opencv에서 연신율 기능을 검색합니다. 어떤 순간을 사용해야합니까?

신장 정의에 대해 잘 모르겠다. "덜 일반적인 연신 모양 인자는 주축 둘레에서 입자의 두 번째 순간의 비율의 제곱근으로 정의됩니다." : http://en.wikipedia.org/wiki/Shape_factor_%28image_analysis_and_microscopy%29#Elongation_shape_factor)

f_elong = sqrt (i2/i1) 

정의를 토대로, I1 및 I2 공간 순간 순간 또는 중앙 정규화 중앙 모멘트 (http://opencv.willowgarage.com/documentation/cpp/imgproc_structural_analysis_and_shape_descriptors.html)이 있는가?

답변

2

신장률을 계산하는 방법은 여러 가지가 있습니다. 표준 경계선과 새로운 경계선에 대해서는 "모양 경계에서 신장 측정"을 참조하십시오. 사용 된 모든 순간이 중앙 것들

enter image description here

이 같은 용지에 기반

, 모양 S의 표준 신장 E는 다음과 같이 주어진다. 이 특징 "은 마지막 2 차 관성 모멘트의 축을 기준으로 한 모양 방향의 정의에서 파생됩니다 .2 번째 관성 모멘트의 최소 두 번째 모멘트 축은 모멘트의 두 번째 모멘트의 적분을 최소화하는 선입니다. 점 (모양에 속함)을 선에 "(종이에서 찍은 것처럼).

import sys 
import cv2 

def elongation(m): 
    x = m['mu20'] + m['mu02'] 
    y = 4 * m['mu11']**2 + (m['mu20'] - m['mu02'])**2 
    return (x + y**0.5)/(x - y**0.5) 

img = cv2.cvtColor(cv2.imread(sys.argv[1]), cv2.COLOR_BGR2GRAY) 
# Assuming input has grayscale dark contours: 
img = 255 - cv2.threshold(img, 0, 255, cv2.THRESH_OTSU)[1] 

m = cv2.moments(img) 
print elongation(m) 
+0

난 그냥 신장을 계산하는 접근 방식을 찾았지만, 다른 방법에 아주 약간의 차이를 발견 :로

는 OpenCV의에서이 직접 번역됩니다. 이 논문의 그림 1과 2에 따르면, 이것은 잘 알려져있다. 때때로 결과는 요인 2 이상으로 다릅니다. – Falko