函数图的图像处理

Image Processing of Function Graph

我想检测这张图中的这些点,我也想检测线条,

我搜索了边缘检测和角点检测(例如Harris Corner Detector),但是我不知道如何处理这样的图,我只需要知道一个sudo算法,或者解决这个问题的步骤

我也在做一个检测绘图中形状的项目。我不确定它是否也能解决您的问题,但这是我为此类问题所做的工作。 我假设您需要这些边缘点的 X 和 Y 坐标值

  • 您首先需要的是完整形状的 X 和 Y 值
  • next 在一个循环中放置一个 if 条件说“得到这个点如果 Y[i]<Y[i+1]Y[i]<Y[i-1]”。下一个和上一个点的 Y 大于当前 Y 值的点。 此条件将为您提供边缘点的 X 和 Y 值。 祝你好运

如果图形始终是相同的颜色,并且顶点总是用正方形标记,则可以通过颜色对图像进行阈值检测来检测直线和顶点。然后寻找连接的像素集,其宽度和高度恰好是您可以测量的像素。

  1. 检测顶点 - 按颜色分割(r>>max(g,b)),然后应用适当大小的中值或最小值过滤器,或者简单地二进制腐蚀几次。然后只需标记剩余的连接斑点。
  2. 检测线条 - 使用简化的霍夫变换。基本上,从每个顶点的中心到所有其他顶点绘制一条虚拟线,并沿线计算红色像素。如果有很多 - 线存在,否则两个顶点不连接。

类似的东西:

import numpy as np
from scipy.misc import imshow, imsave, imread
from scipy.ndimage import filters, morphology, measurements
from skimage.draw import line

img = imread("laGK6.jpg")

r = img[:,:, 0]
g = img[:,:, 1]
b = img[:,:, 2]

mask = (r.astype(np.float)-np.maximum(g,b) ) > 20

mask2 = morphology.binary_erosion(mask)
mask2 = morphology.binary_erosion(mask2)
mask2 = morphology.binary_erosion(mask2)
mask2 = morphology.binary_erosion(mask2)

mask2 = morphology.binary_dilation(mask2)

label, numfeatures = measurements.label(mask2)

mc = measurements.center_of_mass(mask2, label, range(1,numfeatures+1) )

mask3 = np.zeros_like(mask2)

for p in mc:
    mask3[p[0], p[1]]=255




arr = range(numfeatures)

connections=[]
for i in range( numfeatures):
    arr.remove(i)
    for j in arr:
        rr,cc = line(mc[i][0], mc[i][1], mc[j][0], mc[j][1])
        mask3[rr,cc]=255
        ms = np.sum(mask[rr,cc]).astype(np.float)/len(rr)
        if ms > 0.9:
            connections.append((i,j))


print "vertices: ", mc
print "connections: ", connections

这会输出以下内容:

vertices: [(76.551724137931032, 288.72413793103448), (76.568181818181813, 613.61363636363637), (138.72727272727272, 126.04545454545455), (139.33333333333334, 450.33333333333331), (265.18181818181819, 207.5151515151515), (264.96666666666664, 369.53333333333336), (265.41379310344826, 694.51724137931035), (265.51724137931035, 45.379310344827587), (327.57692307692309, 532.42307692307691)] connections: [(0, 4), (0, 5), (1, 6), (1, 8), (2, 4), (2, 7), (3, 5), (3, 8)]