[英]How to find ellipse coordinates from indexed image (Python)?
我有这样的形象:
代表同心椭圆。 该图像包含在 numpy 矩阵中,其中不同椭圆周长的索引中为 1,其他位置为 0。
因为我想找到每个椭圆的中心,所以我找到了这两个函数:
def fitEllipse(x,y):
x = x[:,np.newaxis]
y = y[:,np.newaxis]
D = np.hstack((x*x, x*y, y*y, x, y, np.ones_like(x)))
S = np.dot(D.T,D)
C = np.zeros([6,6])
C[0,2] = C[2,0] = 2; C[1,1] = -1
E, V = eig(np.dot(inv(S), C))
n = np.argmax(np.abs(E))
a = V[:,n]
return a
def ellipse_center(a):
b,c,d,f,g,a = a[1]/2, a[2], a[3]/2, a[4]/2, a[5], a[0]
num = b*b-a*c
x0=(c*d-b*f)/num
y0=(a*f-b*d)/num
return np.array([x0,y0])
它可以拟合椭圆曲线并分别找到给定椭圆的中心。 问题是,如果我能够自己绘制不同的椭圆“对象”,我就可以知道不同点的坐标是什么。 但在我的情况下,我只能访问值为 1 的索引,而不知道哪些索引属于某个椭圆以及哪些索引属于另一个椭圆。
那么有没有一种方法可以分离这些不同的椭圆,分别存储它们的索引坐标?
最后,想法是为所有这些椭圆对象拟合一个椭圆并找到它们的中心。 提前致谢:)
那么有没有一种方法可以分离这些不同的椭圆,分别存储它们的索引坐标?
您可以像这样使用 scikit-image label
到 label 椭圆:
import skimage.io
import skimage.measure
import numpy as np
im = (skimage.io.imread("so67279689.png", as_gray=True)>.3).astype(int)
labeled_im, n = skimage.measure.label(im, return_num=True)
然后访问 6 号椭圆,例如:
el6 = np.where(labeled_im==6, im, 0)
总共你会得到标签1
... n
, label 0
是背景。
(这是我从您的问题中复制的用于测试的图像:
要可视化标记的椭圆:
import matplotlib.pyplot as plt
fig,ax=plt.subplots(3,5)
for i in range(n):
ax.flat[i].imshow(np.where(labeled_im==i+1, im, 0))
ax.flat[i].set_title(f"{i+1}")
ax.flat[i].axis("off")
ax.flat[13].axis("off")
ax.flat[14].axis("off")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.