4

如何计算 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)?

4

1 回答 1

3

计算伸长率的方法不止一种,请参阅论文“从形状边界测量伸长率”以获得更标准的方法以及新方法的建议。

基于同一篇论文,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)
于 2013-02-18T01:14:21.197 回答