Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从二维点查找边_Python_Image Processing_Edge Detection_Convex Hull_Scikits - Fatal编程技术网

Python 从二维点查找边

Python 从二维点查找边,python,image-processing,edge-detection,convex-hull,scikits,Python,Image Processing,Edge Detection,Convex Hull,Scikits,我有几组分散的2d数据,我想找到它们的边缘。某些边可能是开放线,其他边可能是多边形 例如,这里有一个图有一个开放的边缘,我希望能够保持。实际上,我想从开放边创建一个多边形,这样我就可以使用point\u in\u poly来检查是否有另一个点在里面。关闭多边形的点是绘图区域的边界,顺便说一句。 关于从哪里开始有什么想法吗 编辑: 以下是我已经尝试过的: 来自sklearn的KernelDensity。边缘点密度变化很大,无法与大部分点完全区分 kde = KernelDensity()

我有几组分散的2d数据,我想找到它们的边缘。某些边可能是开放线,其他边可能是多边形

例如,这里有一个图有一个开放的边缘,我希望能够保持。实际上,我想从开放边创建一个多边形,这样我就可以使用
point\u in\u poly
来检查是否有另一个点在里面。关闭多边形的点是绘图区域的边界,顺便说一句。

关于从哪里开始有什么想法吗

编辑:

以下是我已经尝试过的:

  • 来自sklearn的KernelDensity。边缘点密度变化很大,无法与大部分点完全区分

    kde = KernelDensity()  
    kde.fit(my_data)  
    dens = np.exp(kde.score_samples(ds))  
    dmax = dens.max()  
    dens_mask = (0.4 * dmax < dens) & (dens < 0.8 * dmax)  
    ax.scatter(ds[dens_mask, 0], ds[dens_mask, 1], ds[dens_mask, 2],  
    c=dens[dens_mask], depthshade=False, marker='o', edgecolors='none')  
    
  • 理想情况下,凸面外壳的目标是最大化外壳内部的面积,同时只保留集内的感兴趣点,但我还无法编写此代码

  • sklearn.cluster中的KMeans()。使用n=3个簇,我试着用默认设置运行类,得到了三组水平点。我还没有学会如何训练数据来识别形成边缘的点
  • 这是数据点来自的模型的一部分。实心区域包含点,而空心区域不包含点


    ,以及我问过的其他一些问题,这些问题显示了我所看到的更多内容。

    因此我能够以一种迂回的方式完成这项工作

    我使用SolidWorks生成的xy平面模型切片图像来区分感兴趣的区域

    如果你看到它们,我在模型中放置的图片角落中有一些点,以已知距离作为参考。这些点允许我确定每毫米的像素数。从那里,我将分析集中的点映射到像素,并检查像素的颜色。如果像素是白色的,它将被遮罩

    def mask_z_level(xi, yi, msk_img, x0=-14.3887, y0=5.564):
        im = plt.imread(msk_img)
        msk = np.zeros(xi.shape, dtype='bool')
    
        pxmm = np.zeros((3, 2))
        p = 0
    
        for row in range(im.shape[0]):
            for col in range(im.shape[1]):
                if tuple(im[row, col]) == (1., 0., 0.):
                    pxmm[p] = (row, col)
                    p += 1
    
        pxx = pxmm[1, 1] / 5.5
        pxy = pxmm[2, 0] / 6.5
        print(pxx, pxy)
    
        for j in range(xi.shape[1]):
            for i in range(xi.shape[0]):
                x, y = xi[i, j], yi[i, j]
                dx, dy = x - x0, y - y0
                dpx = np.round(dx * pxx).astype('int')
                dpy = -np.round(dy * pxy).astype('int')
    
                if tuple(im[dpy, dpx]) == (1., 1., 1.):
                    msk[i, j] = True
    
        return msk
    
    以下是显示遮罩效果的曲线图:

    我仍然在微调边界,但我有一个非常容易管理的任务,现在面具已经基本完成。原因是某些遮罩点不正确,导致带状


    所以我能够以一种迂回的方式完成这项工作

    我使用SolidWorks生成的xy平面模型切片图像来区分感兴趣的区域

    如果你看到它们,我在模型中放置的图片角落中有一些点,以已知距离作为参考。这些点允许我确定每毫米的像素数。从那里,我将分析集中的点映射到像素,并检查像素的颜色。如果像素是白色的,它将被遮罩

    def mask_z_level(xi, yi, msk_img, x0=-14.3887, y0=5.564):
        im = plt.imread(msk_img)
        msk = np.zeros(xi.shape, dtype='bool')
    
        pxmm = np.zeros((3, 2))
        p = 0
    
        for row in range(im.shape[0]):
            for col in range(im.shape[1]):
                if tuple(im[row, col]) == (1., 0., 0.):
                    pxmm[p] = (row, col)
                    p += 1
    
        pxx = pxmm[1, 1] / 5.5
        pxy = pxmm[2, 0] / 6.5
        print(pxx, pxy)
    
        for j in range(xi.shape[1]):
            for i in range(xi.shape[0]):
                x, y = xi[i, j], yi[i, j]
                dx, dy = x - x0, y - y0
                dpx = np.round(dx * pxx).astype('int')
                dpy = -np.round(dy * pxy).astype('int')
    
                if tuple(im[dpy, dpx]) == (1., 1., 1.):
                    msk[i, j] = True
    
        return msk
    
    以下是显示遮罩效果的曲线图:

    我仍然在微调边界,但我有一个非常容易管理的任务,现在面具已经基本完成。原因是某些遮罩点不正确,导致带状


    尝试图像处理标签;他们一直在处理这类发现。:-)你要做的是找到一组点的“凸包”。你可以使用很多方法来实现这一点。看起来你的图中有一些结构。有可能利用这一点吗?或者这是一个非典型的例子?在这里,您似乎只对最左边的边缘感兴趣。这是一般的吗?Scipy可以帮你找到凸面外壳:是的,但那条线不是凸面外壳。OP想要接近点的东西,即使它们的“边缘”不是凸的;他们一直在处理这类发现。:-)你要做的是找到一组点的“凸包”。你可以使用很多方法来实现这一点。看起来你的图中有一些结构。有可能利用这一点吗?或者这是一个非典型的例子?在这里,您似乎只对最左边的边缘感兴趣。这是一般的吗?Scipy可以帮你找到凸面外壳:是的,但那条线不是凸面外壳。OP想要接近点的东西,即使它们的“边”不是凸的。