识别二进制图像中的曲线

问题描述:

我从显示曲线的实验中获得了一些截图,并且我想将该曲线提取到数组中以分析数据。识别二进制图像中的曲线

我的方法的第一部分是将图像转换为具有良好选择的阈值的二进制图像,只留下曲线。这工作正常,但从曲线中提取数组的第二部分没有。我尝试了通过图片识别白色像素的“天真”方法,但结果远不及预期的结果。

有人有解决方案吗?

A screenshot example

import numpy as np 
import matplotlib.pyplot as plt 
import PIL.Image as img 

gray = img.open('0100k.jpg').convert('L') 
bw = gray.point(lambda x: 0 if x<240 else 255, '1') 
bw = bw.convert('1') 
bw.show() 
pix = np.array(bw) 
(n,m) = pix.shape 
curve = np.zeros(n) 
for i in range(n): 
    for j in range(m): 
     if pix[i,j] == 1: 
     curve[i] = j 
plt.plot(curve) 
plt.show() 
+0

我不禁在想,如果你有你'i'和'j'逆转因为'np.array'返回一个列表列表。第一个元素访问内部列表(垂直),第二个元素访问每个列表的各个元素(水平)。 –

+0

你说得对。另外,0,0点在左上角,所以为了使它工作,我发现它更好,就像这样: '(n,m)= pix.shape curve = np.zeros(m) i在范围(n)中: 对于范围(m)中的j: 如果pix [i,j] == 1: 曲线[j] = ni' – Izzul

+0

啊,好吧,我很高兴你有这个想法出。这也是我的挫折之源。在所有的数学中,起源都位于左下角。为什么许多图书馆坚持否则超越了我。 –

谢谢你们,方法现在工作,该解决方案是我的正确分配和j各自的尺寸。感谢@Matt Cremens指出。
但情节变稠,它检测到一些不存在的像素一样,在左侧画面的那些有形项目:http://s31.postimg.org/i0conbbxn/figure_1.png