我试图从嘈杂的数据(如示例中的圆)估算/插值曲线。我的数据包含不止一个圆,但这应该是解决其他结构的良好起点。
我有一个有噪声的二值图像,我正试图将一个连续的曲线/ backbone 拟合到它(每个像素有两个邻居,如果形状不是圆形的话,除了起始像素和结束像素)。我成功地分别拟合了x,y坐标,使用到起点的距离作为x值,坐标作为y值,然后用小步插值距离。然后我检查了坐标是否都连接好了。在某些极端情况下,新的插值点没有连接,我必须使用较小的步骤进行插值。这通常也会导致像素有两个以上的邻居和其他奇怪的伪影。
是否有更简单的方法将这些值拟合到曲线并获得连续曲线?
import numpy as np
from skimage import draw
from matplotlib import pyplot as plt
image = np.zeros((200,200), dtype=np.uint8)
coords = np.array(draw.circle_perimeter(100,100,50))
noise = np.random.normal(0,2,coords.shape).astype(np.int64)
coords += noise
image[coords[0], coords[1]] = 1
plt.imshow(image, cmap="gray")
plt.show()
2条答案
按热度按时间blmhpbnm1#
要拟合数据,您需要一个模型。拟合圆的方法有很多种。我最成功的一个是ian coope的线性化解。该文件可在以下网址查阅:https://ir.canterbury.ac.nz/handle/10092/11104
我已经在一个称为scikit guess的线性化拟合库中对其进行了python实现。功能是
skg.nsphere_fit
. 考虑到你的(2, n)
排列coords
,您可以这样使用它:要在图像上绘图,可以使用
matplotlib.patches.Circle
:你需要倒车
center
因为你的输入坐标是(row, col)
虽然Circle
期望(x, y)
,即(col, row)
.要适应不同的模型,您需要不同的方法。对于任意模型,您可能需要研究
scipy.optimize
及lmfit
.gopyfrb32#
将圆拟合到噪声数据非常简单:
这种方法来源于https://fr.scribd.com/doc/14819165/regressions-coniques-quadriques-circulaire-spherique