拟合曲线到分割图像

时间:2014-05-15 16:37:10

标签: python numpy scipy

在我目前的数据分析中,我有一些分段图像,例如下面的图片。

我的问题是我想要将多项式或样条拟合(s.th. one-dimensional) 分割图像中的某个区域(红色)。 (结果将是黑线)。

通常我会使用像正交距离回归这样的问题 需要某种适合的功能,在这种情况下我不具备。 那么使用python / numpy执行此操作的最佳方法是什么? 对于这类问题,是否有一些标准算法?

example

更新: 看来我的绘图技巧可能不是最好的,图片中的红色区域也可能有一些随机噪音而且不必完全连接(由于噪音可能会有很小的间隙)。

UPDATE2: 总体目标是具有参数化曲线p(t),其返回位置,即p(t)=> (x,y)表示[0,1]中的t。其中t = 0开始黑线,t = 1黑线结束。

1 个答案:

答案 0 :(得分:3)

我使用scipy.ndimagethis gist作为模板。这让你几乎到了那里,你必须找到一种合理的方法来从大部分骨架化的图像中参数化曲线。

from scipy.misc import imread
import scipy.ndimage as ndimage

# Load the image
raw = imread("bG2W9mM.png")

# Convert the image to greyscale, using the red channel
grey = raw[:,:,0]

# Simple thresholding of the image
threshold = grey>200

radius = 10
distance_img = ndimage.distance_transform_edt(threshold)
morph_laplace_img = ndimage.morphological_laplace(distance_img, 
                                                  (radius, radius))
skeleton = morph_laplace_img < morph_laplace_img.min()/2

import matplotlib.cm as cm
from pylab import *
subplot(221); imshow(raw)
subplot(222); imshow(grey, cmap=cm.Greys_r)
subplot(223); imshow(threshold, cmap=cm.Greys_r)
subplot(224); imshow(skeleton, cmap=cm.Greys_r)
show()

enter image description here

您可能会发现其他引用骨架化的答案很有用,例如:

Problems during Skeletonization image for extracting contours