原图:

复杂户型图处理(外轮廓颜色) — 20180724-20180726

基于外轮廓统计墙体特征提取出的结果:

复杂户型图处理(外轮廓颜色) — 20180724-20180726

1、基于每个连通域的像素个数可以过滤掉部分干扰物体,仅留下墙体

imgFilter(Mat &src, Mat &dst,int num)

复杂户型图处理(外轮廓颜色) — 20180724-20180726

2、提取canny边缘并进行校正

Canny(imgWall, imgCanny, 80, 110, 3);
 canny_fix(imgCanny);

矢量化  vectorize(Mat&src, vector <Vec4i> &lines_x, vector <Vec4i> &lines_y, vector<Vec4i>&lines)

复杂户型图处理(外轮廓颜色) — 20180724-20180726

3、提取墙体中线(黑色)

wall_skeleton(Mat&mask, vector<Vec4i>&lines_x, vector<Vec4i>&lines_y, vector<Vec4i>&walls_x, vector<Vec4i>&walls_y)

复杂户型图处理(外轮廓颜色) — 20180724-20180726

4、合并重合的线段、调整相邻线段到同一水平或竖直位置

lines_single(Mat &src, vector<Vec4i>&lines)

linesMerge(vector<Vec4i>&lines, int thresh)

复杂户型图处理(外轮廓颜色) — 20180724-20180726

5、搜索延长应该延长的线段

linesExtend(Mat &img, vector<Vec4i>&lines)

复杂户型图处理(外轮廓颜色) — 20180724-20180726

6、删除两端都悬空的线段和伸出的短的边角

linesSplit1(Mat &img, vector<Vec4i> &lines, vector<Vec4i> &lines1, int len)

复杂户型图处理(外轮廓颜色) — 20180724-20180726

7、根据伸出的线段找到门窗线

find_windoor(Mat &img, vector<Vec4i> &lines, vector<Vec4i> &win_doors, vector<Vec4i> &walls)

复杂户型图处理(外轮廓颜色) — 20180724-20180726

这时,几乎处理完了,但是对于有些图,可能会出现一些小问题,如:

复杂户型图处理(外轮廓颜色) — 20180724-20180726

此时就需要对结果图进行优化。。

8、合并相邻有重合的线段

linesMerge1(vector<Vec4i>&lines, int thresh)

9、去除有伸出的边角线段

linesSplit(Mat &img, vector<Vec4i> &lines, vector<Vec4i> &lines1)

最后得到效果不错:

复杂户型图处理(外轮廓颜色) — 20180724-20180726

这是仅对提出的墙体处理的结果,可以加上对外轮廓的处理,使户型图结构更完整,并且进一步分开门和窗。

复杂户型图处理(外轮廓颜色) — 20180724-20180726      复杂户型图处理(外轮廓颜色) — 20180724-20180726

复杂户型图处理(外轮廓颜色) — 20180724-20180726      复杂户型图处理(外轮廓颜色) — 20180724-20180726

10、对结果有影响的参数:

复杂户型图处理(外轮廓颜色) — 20180724-20180726

相关文章:

  • 2021-06-04
  • 2022-12-23
  • 2022-12-23
  • 2021-11-23
  • 2022-12-23
  • 2021-12-13
  • 2022-12-23
  • 2022-01-07
猜你喜欢
  • 2021-09-24
  • 2021-09-18
  • 2021-11-19
  • 2021-12-02
  • 2021-10-06
  • 2021-09-24
  • 2021-08-26
相关资源
相似解决方案