MarcWong / SemanticContour

implementation of snake postprocess of CNNs on matlab

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2.1 左分支(semantic_main.m)

  • 前处理(待补充) 端对端的语义分割网络(Semantic net),目前使用的是deeplab v2。

  • 后处理 输入为网络的预测结果(Semantic net output),对其进行边缘滤波(用任一边缘检测算子即可,如sobel算子),得到边缘图(Edge map),再通过漫水算法(water filing)分离开每个建筑的轮廓(Separated contour) 。

2.1.1 边缘滤波(filtering)

直接提取神经网络预测语义类间的边界,作为算法初始状态。这一步原本使用的是原图边缘提取(canny)的结果,现更新为语义边缘,主要原因有二:

  • 网络边缘连续性好,可以区分开建筑物实例。
  • 语义边缘准确率更高,防止噪声的增加。

2.1.2 漫水算法(water filling)

从边缘图(Edge map)中依次找到每个建筑物的轮廓,进行均匀取点,将每个建筑物的边缘点坐标存储为有序二维点集,作为snake算法的初始多边形坐标。在这一步,对于过小的轮廓应被舍弃。目前设置的是一个建筑物轮廓的总像素点10个像素以内就看作是噪声。八连通方式的像素间隔每隔4个单位距离进行一次采样,将顶点加入有向边缘轮廓集合中,备snake使用。

参数表

参数名 设置值
最小轮廓 0
采样距离 4

2.2右分支(edge_main.m)

  • 前处理(待补充)

端对端的语义轮廓检测网络(Edge net),目前使用的是hed网络。

  • 后处理

输入为网络的预测结果(Edge net output),对于其进行融合(fusion)和阈值(thresholding)操作,之后进行非极大抑制处理(nms),以及图像形态学操作(morphing),得到非极大抑制的结果(NMS result)。

2.2.1 融合、门限(fusion & thresholding)(edge_main.m)

参数表

参数名 设置值
融合操作 目前暂未设置,直接使用hed网络的fusion层结果
门限 0

神经网络预测结果为灰度图, 其灰度代表该点是边缘的概率。 算法目前使用的是神经网络的混合层的结果,没有设置门限(网络共有5个层级的输出,以及1个全连接层混合的输出)。在后续实验中,可将门限设置为128,并采用更合理的方式使用多层级信息(如投票法等),对比统计对实验结果的影响。

2.2.2 非极大抑制、图像形态学处理(nms & morphing)(edge_main.m)

参数表

参数名 设置值
edge map膨胀系数 3
形态学操作 bridge两次

神经网络的结果不能直接取门限二值化,需要利用非极大抑制和图像形态学的方法,使结果更贴近真实的边缘。在之前的实验中也看到,nms是准确率(precision)最高的初始结果,因此将其作为snake算法的收敛目标,即外部能量图。 图像形态学方法尝试了开闭运算,效果很不好,因为nms的结果散点太多,不能很好拟合成线,因此与canny算法一样,也对非极大抑制的结果采用了两次连接运算(bridge),作为snake算法的外部能量图。

2.3 snake算法(snake.cpp)

对于左分支的每个建筑物轮廓进行snake操作,在初始化snake多边形的时候,需要以每个轮廓的重心作为膨胀中心,将坐标点向外扩展10-20%,以保证轮廓全部在能量图的外侧。其外能量图为右分支的输出,迭代得到最终的建筑物轮廓检测结果。

在snake参数调整的过程中发现规律如下:对于一个好的收敛结果,曲线的一阶参数需要尽量小(1-20),二阶参数需要尽量大(50-100),外部力参数保持最大即可(100)。

参数表

参数名 设置值(当前值)
曲线一阶参数(ialpha) 1
曲线二阶参数(ibeta) 100
外部能量参数(igamma) 100
搜索范围(size.width/size.height) 21
迭代次数(criteria.max_iter) 500
迭代步长(criteria. epsilon) 0.2

2.4可视化(post_main.m)

将每个建筑物轮廓的snake算法结果合成,在原始图像上可视化。

#3.算法效果

snake算法结果

ground truth

About

implementation of snake postprocess of CNNs on matlab

License:MIT License


Languages

Language:MATLAB 86.4%Language:C++ 13.6%