我该如何在python opencv中计算第一刻和第二刻并获得形状延伸功能?

我对伸长率的定义不太确定,我发现:“较少见的伸长率形状因子定义为粒子围绕其主轴的两个第二矩之比的平方根”(参考:http://en.wikipedia.org/wiki/Shape_factor_%28image_analysis_and_microscopy%29#Elongation_shape_factor)

f_elong = sqrt (i2/i1)

根据定义,是i2和i1空间矩,中心矩还是规范化的中心矩(http://opencv.willowgarage.com/documentation/cpp/imgproc_structural_analysis_and_shape_descriptors.html)?

最佳答案

有多种方法来计算伸长率,有关更标准的方法,请参见论文“从形状边界测量伸长率”,以及提出一种新的方法。

基于同一篇论文,形状E的标准伸长率S由下式给出:

所有使用的时刻都是中心时刻。此特征“源自形状取向的定义,该定义基于最后的第二个惯性矩的轴。精确地,最小的第二个惯性矩的轴是使最小化惯性矩的距离的平方最小的线点(属于形状)指向线”(照原样取自纸)。

在OpenCV中,这直接翻译为:

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)

08-03 12:04