如何解决如何从索引图像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
来标记您的椭圆:
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
,标签 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,0))
ax.flat[i].set_title(f"{i+1}")
ax.flat[i].axis("off")
ax.flat[13].axis("off")
ax.flat[14].axis("off")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。