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

一、接着上次canny边缘后基于长度和面积筛选后的图形做工作。

原图:

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第1张图片

筛选过后线段矢量化的图:

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第2张图片

(1)调整相邻线段到同一水平或竖直位置

linesMerge(vector&lines, int thresh)

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第3张图片

(2)延长需要延长的线段
    先搜索直线所在方向是否可延伸,再搜索与直线正交的方向能否延伸,
    如果与直线正交的方向能延伸,除了填补与直线方向一致的像素,还填补正交方向的像素   

    linesExtend(Mat &img, vector&lines)

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第4张图片

(3)以节点分割线段,端点悬空的线段删除

linesSplit(Mat &img, vector &lines, vector &lines1)

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第5张图片

效果还不错,得到了主要墙体,并且基本去除了干扰,

后续基于平行线找到墙体,对墙体再进行一些校正,并且去除小的干扰,效果应该更好。

但问题是,并不是每张图都能预处理到比较好的状态,基于长度和面积过滤效果并不理想。

二、换一种预处理方法,根据外轮廓找墙体特征,然后根据canny边缘做mask,提出墙体,再进行处理

(1)根据外轮廓向内搜索5个像素,找到墙体特征灰度值

       findFeature(Mat &src, Mat &contours, vector border, int(&a)[256])

         并画出归一化吼得灰度直方图

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第6张图片

(2)根据直方图找到峰值及应该保留的灰度值

   findHistPeak(Mat &hist, vector &gv)

   根据墙体灰度特征,单独标注出墙体

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第7张图片

(3)中值滤波去椒盐噪声

medianBlur(imgwall, imgmedianblur, 3);

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第8张图片

(4)膨胀腐蚀补小洞

dilateErode(imgDilateErode, 11);

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第9张图片

(5)会出现不同彩色有相同的灰度值进行干扰,所以改为直接操作三通道彩色图像

  根据外轮廓墙体特征灰度值找到对应彩色三通道值

findRGBfeature(Mat &img, Mat &src, Mat &contours, vector border, vector &gv, vector &rgbv)

画出彩色墙体

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第10张图片

(6)中值滤波及腐蚀膨胀后的结果

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第11张图片

(可以通过连通域的面积去除一些干扰物体,仅留下主要墙体)

(7)

复杂户型图处理(外轮廓颜色) — 20180718-20180721_第12张图片

(8)总结:根据初步结果分析可以看出,

a、此方法对单色墙体比较友好,处理双色墙体时很可能丢失一种墙体,需要解决这个问题。

b、处理三通道图像可基本解决橙色干扰问题,利用从外轮廓进行提取墙体可解决墙体与背景同色的问题,但是墙体与物体同色问题仍没解决。

c、有些奇怪的图可以忽略暂时不处理。。

你可能感兴趣的:(复杂户型图处理(外轮廓颜色) — 20180718-20180721)