python – 基于边缘像素图的图像分割
作者:互联网
我已经在Python中训练了一个分类器,用于将单元格图像中的像素分类为边缘或非边缘.我已经成功地在一些图像数据集上使用它,但是遇到了这个特定数据集的问题,即使对人眼来说也是如此.我不知道任何可以准确分割它的现有自动化技术.
预测后,我得到以下图像:
我对图像处理相对较新,不确定如何继续实际获得细胞的最终分割.我简要地尝试了一些不同的技术 – 即霍夫圆形变换,水平集,骨架化,轮廓发现 – 但没有一个真正完成这个技巧.我只是没有正确调整参数,还是有更好的技术?
顺便提一下,这是正确的轮廓供参考.
和原始图像:
和连续概率图:
解决方法:
非常好的边界检测工作.我曾经研究类似的分割问题.
理论:
一旦你获得了边缘图,其中e(i,j)表示像素i,j的“边缘度”,你想要一个尽可能尊重边缘图的图像分割.
为了以更正式的方式制定这个“尊重边缘图”,我建议你看看Correlation clustering (CC)功能:
CC功能基于相邻像素之间的成对关系来评估分割的质量,无论它们是否应该在相同的簇(它们之间没有边缘)或不同的簇中(它们之间存在边缘).
请查看aforementioned论文第7.1节中的示例.
CC也用于医学(神经元)成像中的类似分割问题,参见例如here.
实践
一旦你说服自己CC确实是适合你的问题的公式,仍然存在如何将二进制边缘映射转换为CC可以处理的亲和度矩阵的问题.请记住,CC需要作为输入(通常是稀疏的)邻接矩阵,其中假设属于同一段的像素对具有正条目,并且假定属于不同分段的像素对的负条目.
这是我的建议:
>边缘贴图中的边缘看起来很厚,并且没有很好的局部化.我建议将非最大抑制或形态学作为预处理阶段.
>一旦你有一个更好的局部边缘,你忽略“边缘”像素,只使用“非边缘”像素,让我们称之为“活动”.
两个相邻的有效像素:它们之间没有“边缘”像素 – 它们应该在一起.所以,对于不朽的nieghbors的进化矩阵应该是积极的.
考虑一条线上的三个像素,两个端点是“活动”像素:如果中间的一个是边缘,那么两个活动像素不应属于同一个集群 – 在这一点中,对象矩阵中的相应条目应为负数.如果中间像素也是活动的,则对象矩阵中的相应条目应该是正的.
>考虑所有可能的相邻对和三元组(诱导24连通网格图)允许您构建具有适合CC的正和负条目的亲和度矩阵.
>给定矩阵,您应该搜索具有最佳CC分数的分段(优化阶段).我有这个here的Matlab代码.您也可以使用优秀的openGM包.
>优化将仅生成有效像素的分区,您可以将其映射回输入图像域,将边缘像素保留为未分配给任何段.
标签:edge-detection,image-segmentation,python,opencv,image-processing 来源: https://codeday.me/bug/20190917/1809777.html