分享

复杂户型图处理(基于边缘特征)...

 猎狐肥 2021-05-24

需求突然转换到,识别有背景的户型图:

具体效果参考空间大师,首先提出墙体,然后识别门窗、家具。

空间大师对实现思路几乎没有帮助,绝望之际找到一篇论文,看结果还不错,于是我们就开始根据论文一步步实现。

论文为:基于形状与边缘特征的户型图识别研究_江州,有两种方法:

一、基于形状特征的户型图识别

1、墙体线分割

彩色图-->灰度图-->统计灰度直方图,最大值即为背景灰度。

墙体的几何特征,平直度

若某灰度值的平直度越高,则代表该灰度值的整体分布越趋于平直化。

墙体分割算法的主要流程为:

(1)统计全局图像的灰度值,(2)计算分布图中峰值灰度的平直度,(3)平直度最高的灰度值即为墙体线的灰度,(4)二值化阈值(通常取灰度域)。

2、墙体线降噪

观察发现,噪声部分连图片连通区大小远小于墙体线构成的连通区,且峰值连通区的数目决定了墙体的数量。

提出,基于连通区的快速去噪算法,主要思路:(1)统计全局的连通区大小,(2)找到能分割出所有峰值连通区对应的最小阈值,(3)以该阈值的1/2作为分割阈值,对图像中的连通区进行分割。

3、墙体线矫正与分析

4、门窗的分割与识别

窗:平行线的纹理特征

门:圆弧所分割两个区域的面积比

二、基于边缘特征的户型图识别(我们进行了代码实现)

1、像素级边缘提取

对于边缘提取,canny算子的效果最好,保留了图像更多的细节,且对部分破损边缘进行修补,但处理时间长;

sobel算子,能较好地保持边缘细节,速度快,但自动过滤掉了一部分不关注的边缘。

选择了sobel算子进行边缘检测。

(1)去标尺,得到处理图像的边界(灰度值投影找峰值的方法)

imageWithoutRuler(image, imageWithoutR, border);

(2)边缘梯度的计算,计算四个方向的sobel梯度模板,选取最大的作为其梯度值及方向。

采用四个方向的梯度模板的好处在于充分利用8邻域内像素灰度信息的同时,判断方向快速且只涉及到加法。

sobelGrad(src_gray, gradImage, thetaImage, ShowthetaImage, border);

梯度图:

方向图:

(3)阈值分割非极大值抑制

阈值分割,对感兴趣的图像进行分离,提取出梯度较高的像素点,这些像素点灰度值变化剧烈,为边缘的候选点。

论文推荐分割的阈值:

非极大值抑制,保证该店为局部范围内梯度最大的点,保证边缘为单像素宽度,方便进行后续的边缘追踪。

方法:在该梯度上,该像素点大于等于相邻的两个像素点的梯度值。

threshold_nms(gradImage, thetaImage, gradImage1, border, 0.3);

(4)去冗余点与毛刺

(冗余点的定义没看懂。)

毛刺,即分支点的特征为:在像素的八邻域内,有不超过一个像素点。

removeBurr(gradImage1, gradImage2, border);

(5)边缘跟踪

为了方便后续对边缘数据进行参数化,必须对提取的边缘进行编码。其编码算法的步骤如下:

步骤 1:从左到右,从上到下,检索出所有连续边界的起始点,记下起始点坐标,并将该点的灰度值,置为背景灰度 0;

步骤 2:以该点的梯度方向为搜索方向,不断循环检索下一个顶点。若找到,则加下该检索方向,并将该点的灰度值置为背景灰度 0;若没找到,说明该点是孤立点,即边缘的终点,跳出循环;

步骤 3:以像素数目门限对跟踪结果进行过滤,低于门限的边缘被滤除。

该边缘编码方案与传统的编码方法进行比较,一方面,直接对源图像内的像素点进行置零操作,极大地减少了遍历次数;另一方面,在检索下一个边界点时,把上一个检索方向作为优先检索方向,检索效率得到了较大的提升。

edgeTracking(gradImage2, thetaImage, border, lines_before);

2、亚像素级边缘提取

。。。。。。

我们的困境在于不知道怎么去除干扰项,实现了部分代码后,发现论文中是手动去除干扰。。放弃。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多