首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二值图像中平滑曲线的拟合

二值图像中平滑曲线的拟合
EN

Stack Overflow用户
提问于 2019-06-03 08:26:29
回答 2查看 1.6K关注 0票数 1

我想在二值图像中加入一条平滑的线条。

该图像是利用对比度、轮廓、骨架、近邻、轮廓分离等对原始图像进行预处理的结果。

我想,一旦我得到一个由白点组成的数组(x,y),拟合一条曲线就会非常容易。但是当我试图在这个图像中拟合一条曲线时,由于某个x上的多个值,就会出现一条锯齿形线,我需要一个广义的解来解决我的问题。我的形象可能会有所不同(我正在制作一个应用程序)。它可以有特定x的4-5值,反之亦然。

方法我试过:

  1. 凸包ConvexHull图像(图像不光滑)

  1. 最近的邻居连接。(图像不光滑)
  2. 内插(z-zag线因多个y@x而出现)
  3. matplotlib样条曲线

建议我如何在这样的图像中拟合光滑的曲线。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-01 03:41:57

通过使用以下步骤和代码可以解决这一问题:

  1. 首先连接所有最近的近邻点。这将以曲线或图形的方式提供数组。
  2. 然后使用univariateSpline平滑使您的曲线光滑。

问题解决了

连接所有最近邻居的代码:

代码语言:javascript
复制
def distance(P1, P2):
    return ((P1[0] - P2[0])**2 + (P1[1] - P2[1])**2) ** 0.5

def optimized_path(coords, start=None):
    if start is None:
        start = coords[0]
    pass_by = coords
    path_connected = [start]
    pass_by.remove(start)
    while pass_by:
        nearest = min(pass_by, key=lambda x: distance(path_connected[-1], x))
        path_connected.append(nearest)
        pass_by.remove(nearest)
    return path_connected

start = None
    points=[[i,j] for i,j in zip(x_data,y_data)]
    points = optimized_path(points,start)

平滑最近邻点的代码:

代码语言:javascript
复制
# Smoothing
distance_smooth = np.cumsum( np.sqrt(np.sum( np.diff(points, axis=0)**2, axis=1 )) )
distance_smooth = np.insert(distance_smooth, 0, 0)/distance_smooth[-1]
splines = [UnivariateSpline(distance_smooth, coords, k=5, s=None) for coords in points.T]
alpha = np.linspace(0, 1, 75)
points_fitted = np.vstack( spl(alpha) for spl in splines ).T

这是最后的图像-平滑图像

票数 0
EN

Stack Overflow用户

发布于 2019-06-03 16:52:25

我理解这个问题,意思是你想通过数据找到曲线,作为x和y坐标的列表。

选择一个点开始,例如,在图的边或边有一个高密度的点。

找到中间到一边或另一边,排除传单,并找到平均值。挪过去,再做一次。

对于有两条线的区域,可以将中值中所考虑的点的范围限制在当前或以前点的某个范围内。

中位数将避免对远距离点的权重过大,并且倾向于在x(或y,如果您愿意的话)点的数据中心强烈地拉力。

这个平均值通常与你可能正在研究的物理理论或模型有着更强的联系。

您可以对不同的数据点集群重复此操作,以找到所有的行。

最后,对所有的曲线进行比较,修剪重复的曲线,例如,通过平方差之和来检测。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56423604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档