Python中的高效2D边缘检测

时间:2011-08-16 20:08:07

标签: python image-processing numpy scipy

我知道此问题之前已经解决,但我很难找到任何描述用于处理此类数据的算法的文献。我基本上是对一组2D数据进行边缘搜索。我希望能够在眼图上找到几个点(通常用于限定高速通信系统),而且由于我没有图像处理经验,所以我很难编写有效的方法。

正如您可能看到的那样,这些图表之所以被称为是因为它们类似于人眼。它们的厚度,斜率和噪声可能会有很大变化,具体取决于信号和被测系统。通常采取的测量是抖动(交叉区域的水平厚度)和眼睛高度(在宽度的一些指定百分比或最大可能点处测量)。我知道这可以通过图像处理而不是更线性的方法来完成,因为到目前为止我的尝试只需要几秒钟才能找到第一个交叉点的左侧。关于如何在Python中解决这个问题的任何想法?我已经在使用NumPy进行一些处理了。

这是一些example data,它被格式化为具有相关x轴数据的一维数组。对于这个特殊的例子,它应该每666分(2 * int((1.0 / 2.5e9)/ 1.2e-12)),因为信号的速率是2.5 GB / s,点之间的时间是1.2 ps。

谢谢!

Example 1 Example 2

2 个答案:

答案 0 :(得分:3)

您是否尝试过OpenCV(打开计算机视觉)?它被广泛使用并具有Python绑定。

不是PITA,但是你肯定你用数值方法会不会更好?我在眼图分析中看到的所有工具都是数字化路线;我还没有看到一个分析图像本身的人。

你说你的算法在该数据集上的速度很慢 - 我的下一个问题就是原因。您是否在查看过采样数据集? (我猜你是。)如果是这样,你有没有尝试先取消信号?这至少可以为您的算法提供更少的样本。

答案 1 :(得分:1)

只是沿着你的路线走了一会儿,如果你将这些图像读入内存,就像它们一样,做两个洪水填充(起始中心和左边缘中间)包括所有“白色”不是很容易“数据。如果填充例程记录了每列的最大和最小高度,以及最大水平范围,那么您就拥有了所需的一切。

换句话说,我认为你过度思考了这一点。当边缘不清楚时,边缘检测用于复杂的“自然”场景。在这里你的边缘是如此完全明显,你不需要增强它们。