如何在Python中加入片段?

问题描述 投票:0回答:2

我正在使用霍夫变换(https://en.wikipedia.org/wiki/Hough_transform)来获取段的数量和大小。

enter image description here

例如,我已经上传了一张图像(它是生物纤维的荧光图像)以及霍夫变换的结果。

a = np.array([[40,33,54,4],[40,34,54,5], [41,34,55,5], [43,34,57,7], [18,85,34,52], [15,83,30,51], [16,84,33,52], [42,34,56,5], [16,83,32,51]])

[基本上,它给出了一个由n * 4个元素组成的数组(它们是每行的末端:(x1,y1,x2,y2))。如您所见,此处的算法报告为n = 10行,但实际上只有2行。

为了处理此问题,我正在考虑采用每条线的x1和x2位置,然后定义线段。与建议的内容类似,可以进行以下操作(finding unions of line segments on a number line)。

对于第一行(x1 = 40,x2 = 54),我可以创建一个仅包含0和1的向量,其内容为:00000 ....... 0000001111 .... 111100。那是40个零,然后是15个,再是2个零。长度为57,因为这是最大的x2值。

我可以对所有行这样进行。

假设三行:

00011100000000

00000000001111

00111111000000

结果将是

00111111001111

然后我会知道有两条长度为6(从2开始)和4(从10开始)的线。

在python中有效率吗?

最佳,

W

python numpy-ndarray hough-transform
2个回答
0
投票

您可以使用RANSAC估算直线并从中获取直线。尽管不确定,RANSAC是一种非常简单且健壮的方法。除非您的图像容易出现噪点,否则应适合您的情况。例如herewiki上也有很好的视觉和直观解释。


0
投票

这是一种方法

a = list('00011100000000')
b = list('00000000001111')
c = list('00111111000000')

tmp = pd.DataFrame({'a': a, 'b':b, 'c':c})
tmp.apply(max, axis = 1).to_list()

也要使其看起来像每个仓上的或运算。

© www.soinside.com 2019 - 2024. All rights reserved.