非常好的边界检测工作.我曾经研究类似的分割问题.
理论:
一旦你获得了边缘图,其中e(i,j)表示像素i,j的“边缘度”,你想要一个尽可能尊重边缘图的图像分割.
为了以更正式的方式制定这个“尊重边缘图”,我建议你看看Correlation clustering (CC)功能:
CC功能基于相邻像素之间的成对关系来评估分割的质量,无论它们是否应该在相同的簇(它们之间没有边缘)或不同的簇中(它们之间存在边缘).
请查看aforementioned论文第7.1节中的示例.
CC也用于医学(神经元)成像中的类似分割问题,参见例如here.
实践
一旦你说服自己CC确实是适合你的问题的公式,仍然存在如何将二进制边缘映射转换为CC可以处理的亲和度矩阵的问题.请记住,CC需要作为输入(通常是稀疏的)邻接矩阵,其中假设属于同一段的像素对具有正条目,并且假定属于不同分段的像素对的负条目.
这是我的建议:
>边缘贴图中的边缘看起来很厚,并且没有很好的局部化.我建议将非最大抑制或形态学作为预处理阶段.
>一旦你有一个更好的局部边缘,你忽略“边缘”像素,只使用“非边缘”像素,让我们称之为“活动”.
两个相邻的有效像素:它们之间没有“边缘”像素 – 它们应该在一起.所以,对于不朽的nieghbors的进化矩阵应该是积极的.
考虑一条线上的三个像素,两个端点是“活动”像素:如果中间的一个是边缘,那么两个活动像素不应属于同一个集群 – 在这一点中,对象矩阵中的相应条目应为负数.如果中间像素也是活动的,则对象矩阵中的相应条目应该是正的.
>考虑所有可能的相邻对和三元组(诱导24连通网格图)允许您构建具有适合CC的正和负条目的亲和度矩阵.
>给定矩阵,您应该搜索具有最佳CC分数的分段(优化阶段).我有这个here的Matlab代码.您也可以使用优秀的openGM包.
>优化将仅生成有效像素的分区,您可以将其映射回输入图像域,将边缘像素保留为未分配给任何段.