Python 寻找轮廓的中心
我有一个生成图像轮廓的代码。计算最后一个轮廓的中心像素的最佳方法是什么Python 寻找轮廓的中心,python,matplotlib,Python,Matplotlib,我有一个生成图像轮廓的代码。计算最后一个轮廓的中心像素的最佳方法是什么 import numpy as np import matplotlib.pyplot as plt levels = [] for i in np.arange(0.1,0.9, 0.1): levels.append(i*40) s = plt.contour(Y, X, twhole, levels, linewidths=1, colors=('k','#0000ff', '#0033ff', '#0066f
import numpy as np
import matplotlib.pyplot as plt
levels = []
for i in np.arange(0.1,0.9, 0.1):
levels.append(i*40)
s = plt.contour(Y, X, twhole, levels, linewidths=1, colors=('k','#0000ff', '#0033ff', '#0066ff', '#0099ff','#00ccff','#00ffff', '#660000' ))#'k','0.5','0.75','0.8','0.9', 'g','c','b','m','y','r', '0.2', '0.3', '0.4', ))#colors='k')
plt.show()
如果s=ax.contour(…)
,则通过
s.allsegs[-1][0]
您可以使用这些工具以通常的方式计算点的质心,如wikipedia
例如:
import numpy as np
import matplotlib.pyplot as plt
def center_of_mass(X):
# calculate center of mass of a closed polygon
x = X[:,0]
y = X[:,1]
g = (x[:-1]*y[1:] - x[1:]*y[:-1])
A = 0.5*g.sum()
cx = ((x[:-1] + x[1:])*g).sum()
cy = ((y[:-1] + y[1:])*g).sum()
return 1./(6*A)*np.array([cx,cy])
X,Y = np.meshgrid(np.linspace(-2,2),np.linspace(-1,4))
f = lambda x,y: np.exp(-x**2-y**2)+np.sin(np.arctan2(y,x))
Z = f(X,Y)
fig, ax = plt.subplots()
ax.pcolormesh(X,Y,Z, cmap="Reds", vmax=10)
contour = ax.contour(X,Y,Z,levels=[1.01,1.1,1.2], colors="k")
c = center_of_mass(contour.allsegs[-1][0])
ax.plot(c[0],c[1], marker="o", markersize=12, color="red")
plt.show()
如果轮廓是不规则形状,您如何定义“中心像素”?我想应该尽量减少与边缘的平均距离,那么您到目前为止做了哪些尝试?请注意,您可以从
s.allsegs
中获得每条等高线的坐标列表。所以您要查找的是一个?即使它意味着在C形的情况下,它位于多边形之外?