gpt4 book ai didi

python - 从噪声数据中插入连续曲线

转载 作者:行者123 更新时间:2023-12-05 02:41:04 24 4
gpt4 key购买 nike

我正在尝试从噪声数据(例如示例中的圆圈)中估计/插入一条曲线。我的数据不仅仅包含圆圈,但这也应该是解决其他结构的良好起点。

我有一个嘈杂的二值图像,我正在尝试为其拟合连续曲线/骨架(每个像素都有 2 个邻居,如果形状不是圆形,则开始和结束像素除外)。我在分别拟合 x、y 坐标方面取得了一些成功,使用到起点的距离作为 x 值,使用坐标作为 y 值,然后以小步长插入距离。然后我检查坐标是否全部连接。在某些极端情况下,新的插值点没有连接,我必须使用更小的插值步长。这通常还会导致像素具有 2 个以上的邻居和其他奇怪的伪影。

有没有一种更简单的方法可以将这些值拟合到一条曲线上并得到一条连续的曲线?

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()

noisy_circle

最佳答案

要拟合数据,您需要一个模型。拟合圆的方法有很多种。我最成功的解决方案是 Ian Coope 的线性化解决方案。该论文可在此处获得:https://ir.canterbury.ac.nz/handle/10092/11104

我在名为 scikit-guess 的线性化拟合库中对其进行了 Python 实现.函数是skg.nsphere_fit .给定您的 (2, n) 数组 coords,您可以这样使用它:

from skg import nsphere_fit

radius, center = nsphere_fit(coords, axis=0)

要绘制图像,您可以使用 matplotlib.patches.Circle :

from matplotlib.patches import Circle

fig, ax = plt.subplots()
ax.imshow(image, cmap='gray')
ax.add_patch(Circle(center[::-1], radius, edgecolor='red', facecolor='none'))

您需要反转center,因为您的输入坐标是(row, col),而Circle需要(x, y ),即(col, row)

enter image description here

要拟合不同的模型,您需要不同的方法。对于任意模型,您可能需要查看 scipy.optimizelmfit .

关于python - 从噪声数据中插入连续曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68302951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com