Python 将椭圆拟合到图像数据集
我正在用摄像机信号工作。摄像机的典型信号通过以下方式模拟:Python 将椭圆拟合到图像数据集,python,numpy,opencv,scipy,data-fitting,Python,Numpy,Opencv,Scipy,Data Fitting,我正在用摄像机信号工作。摄像机的典型信号通过以下方式模拟: import cairo import numpy import matplotlib.pyplot as plt data = numpy.zeros((352, 352), dtype = numpy.uint8) surface = cairo.ImageSurface.create_for_data( data, cairo.FORMAT_A8, 352, 352) cr =
import cairo
import numpy
import matplotlib.pyplot as plt
data = numpy.zeros((352, 352), dtype = numpy.uint8)
surface = cairo.ImageSurface.create_for_data(
data, cairo.FORMAT_A8, 352, 352)
cr = cairo.Context(surface)
cr.scale(0.85, 1.15)
cr.arc(200, 150, 100, 0, 2. * numpy.pi)
cr.set_line_width(15)
cr.stroke()
plt.imshow(data, cmap = "gray", interpolation = "None")
plt.show()
从该图像数据集中,我需要获得以下参数:x-中心
,y-中心
,半径
,厚度
,椭圆度
,白色椭圆环的椭圆角度
获得这些参数的快速准确方法是什么
我多年来获得的代码片段如下:
import scipy.odr
def gauss_2D(p, r):
# p = [amplitude, x-cen, y-cen, x-waist, y-waist, angle_in_rad, z-offset]
x = r[0,]
y = r[1,]
dx, dy = (x - p[1]), (y - p[2])
xp = dx * numpy.cos(p[5]) + dy * numpy.sin(p[5])
yp = dy * numpy.cos(p[5]) - dx * numpy.sin(p[5])
data = (p[0] * numpy.exp(-2 * (xp / p[3])**2 - 2 * (yp / p[4])**2))
return data + p[6]
def fit_gauss(p_guess, data_set):
rr = numpy.indices(data_set.shape[:2])
N = rr.shape[1] * rr.shape[2]
fix = [1, 1, 1, 1, 1, 1, 1]
model = scipy.odr.Model(gauss_2D)
data = scipy.odr.Data(rr.reshape((2, N)), data_set.reshape((1, N)))
odr = scipy.odr.ODR(data, model, p_guess, ifixb = fix)
odr.set_job(fit_type = 2)
output = odr.run()
coeff = output.beta
coeff_sd = output.sd_beta
return rr, coeff, coeff_sd
但是,我无法将gauss_2D
重写为一个函数,该函数适用于具有特定线宽的椭圆
感谢您的帮助 如果在外边缘和内边缘进行单独装配,会怎么样?像
findContours
一样,然后将每个轮廓渲染为一个薄多边形(甚至可能是填充多边形),对其进行拟合。从中计算厚度。