Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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_Computer Vision_Image Segmentation_Edge Detection - Fatal编程技术网

Python 基于边缘像素映射的图像分割

Python 基于边缘像素映射的图像分割,python,image-processing,computer-vision,image-segmentation,edge-detection,Python,Image Processing,Computer Vision,Image Segmentation,Edge Detection,我用Python训练了一个分类器,用于将细胞图像中的像素分类为边缘或非边缘。我已经在一些图像数据集上成功地使用了它,但在这个特定的数据集上遇到了问题,即使在人眼看来,这个数据集也很模糊。我不知道任何现有的自动化技术,可以准确地分割它 在预测之后,我获得以下图像: 我对图像处理相对较新,不确定如何实际获得细胞的最终分割。我曾经简单地尝试过几种不同的技术——即Hough循环变换、水平集、骨骼化、轮廓查找——但都没有真正做到这一点。我只是没有正确调整参数,还是有更好的技术 顺便说一下,这是正确的轮廓

我用Python训练了一个分类器,用于将细胞图像中的像素分类为边缘或非边缘。我已经在一些图像数据集上成功地使用了它,但在这个特定的数据集上遇到了问题,即使在人眼看来,这个数据集也很模糊。我不知道任何现有的自动化技术,可以准确地分割它

在预测之后,我获得以下图像:

我对图像处理相对较新,不确定如何实际获得细胞的最终分割。我曾经简单地尝试过几种不同的技术——即Hough循环变换、水平集、骨骼化、轮廓查找——但都没有真正做到这一点。我只是没有正确调整参数,还是有更好的技术

顺便说一下,这是正确的轮廓,供参考

和原始图像:

以及连续概率图:


我认为你的霍夫变换是个好主意。有一件事你应该尝试一下(如果你还没有),那就是在你运行你的图像之前,先对它进行转换,尽管我刚刚链接的文章似乎只是二进制阈值。这可能会夸大边缘和背景之间的差异,因此可能更容易检测。基本上,对每个像素应用一个函数(以对像素值进行操作的过滤器的形式)

你可以尝试的另一件事是。基本上,你放下一些圆圈,它们在图像中移动,直到找到你要找的东西


我的最后一个想法是试试看。这些工具似乎可以很好地识别图像中的边界和边界。希望这些想法能让你开始。

在边界检测方面做得很好。我曾经处理过类似的分割问题

理论: 一旦获得边缘贴图,其中
e(i,j)
指示像素的“边缘度”
i,j
您希望对图像进行分割,尽可能尊重边缘贴图。
为了以更正式的方式表述“尊重边缘映射”,我建议您查看函数:
CC函数基于相邻像素之间的成对关系评估分割质量,无论它们是在同一簇中(它们之间没有边)还是在不同簇中(它们之间有边)。
请看本文第7.1节中的示例。
CC也用于医学(神经元)成像中的类似分割问题,参见


实践 一旦你确信CC确实是一个适合你的问题的公式,还有一个问题就是如何准确地将你的二元边映射转换成CC可以处理的亲和矩阵。请记住,CC需要一个(通常是稀疏的)邻接矩阵作为输入,假设属于同一段的像素对具有正条目,假设属于不同段的像素对具有负条目

以下是我的建议:

  • 边缘贴图中的边缘看起来很厚,并且没有很好地定位。我建议将非最大值抑制或形态细化作为预处理阶段

  • 一旦有了更好的局部边缘,就可以忽略“边缘”像素,只处理“非边缘”像素,我们称之为“活动”。
    两个相邻的活动像素:它们之间没有“边缘”像素-它们应该在一起。因此,immidate Nieghbor的邻接矩阵应具有正实体。
    考虑一行上的三个像素,这两个端点是“活动”像素:如果中间的一个是边缘,那么两个活动像素不应该属于同一个群集-在形容词矩阵中对应的条目应该是否定的。如果中间像素也处于活动状态,则邻接矩阵中的对应项应为正

  • 考虑所有可能的相邻对和三元组(诱导24连通网格图),可以构造一个包含适合CC的正负项的亲和矩阵

  • 给定一个矩阵,您应该搜索具有最佳CC分数的分段(优化阶段)。我有这方面的Matlab代码。您也可以使用优秀的软件包

  • 优化的结果是只对活动像素进行分区,您可以将其映射回输入图像域,使边缘像素未分配给任何分段


  • 看到分类器中边缘/非边缘像素的图片,我们可以看到您输入的梯度图像基本上已经给出了您学习的分类器的结果。但是信心图显示了一个很好的解决方案,除了: 1.它们是连接的水平集,大小不一。 2.单元格中有噪声亮点,导致分类器输出错误。(可能可以考虑进行一些平滑处理) 3.我想可能更容易描述每个细胞的内部:灰度变化,平均大小。学习这些分布可能会获得更好的检测结果。拓扑上,我们有一组嵌套在大灰度值中的低灰度值。
    要执行此操作,可以使用单一成本模型和成对项的学习梯度分布

    如果您也可以发布您正在处理的原始图像,则会更好。我添加了原始图像。在这方面使用水平集似乎是一个好主意。您是如何初始化初始零级别集的?您开发了多少级别集?请注意,水平集需要进行大量调整才能正常工作。您是如何获得具有正确轮廓的图像的?您是如何进行预测的?你能得到连续概率图像而不是二值图像吗?小波变换听起来不错。。。给出一些细节:我最终得到了cython和old algebr