(5条消息) 复杂户型图处理(基于边缘特征)

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

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

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

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

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

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)

相关推荐

  • python+opencv图像处理(二十六)

    接上篇. 上篇介绍了计算出梯度后,梯度图像的一种显示方式,本篇介绍其他几种显示方式. (2)设置阈值,大于T为梯度,否则不变.即: 如下图所示,由于阈值不同,所显示的梯度图像也会有区别.下图中,第一张 ...

  • 使用OpenCV检测坑洼

    重磅干货,第一时间送达 本文将向大家介绍如何使用OpenCV库进行坑洼检测. 为什么要检测坑洼? 坑洼是道路的结构性指标,事先发现坑洼地可以延长高速公路的使用寿命,防止事故的发生,同时降低死亡率. 一 ...

  • 【从零学习OpenCV 4】Canny算法

    小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为 ...

  • 【从零学习OpenCV 4】边缘检测原理

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 基于阈值的车道标记

    重磅干货,第一时间送达 在这篇文章中,我将介绍如何从视频中查找并标记车道.被标记的车道会显示到视频上,并得到当前路面的曲率以及车辆在该车道内的位置.首先我们需要对图像进行相机失真校正,这里就不作详细介 ...

  • (13条消息) 北京峰会系列二|基于SPDK的UDisk全栈优化

    今天给大家带来的是UCloud基于SPDK的UDisk全栈优化解决方案分享.通过介绍UDisk如何结合SPDK(包括SPDK vhost虚拟化方案)来进行端到端IO路径上的CPU.网络.磁盘性能的优化 ...

  • (40条消息) 基于腾讯云的 Rust 和 WebAssembly 函数即服务

    腾讯云云函数 (SCF) 已经支持十多种编程语言和运行时框架.腾讯云最近发布的 SCF custom runtime(自定义运行时)更进一步 -- SCF 现在可以支持用任何编程语言编写的函数. 本文 ...

  • (1条消息) python常见图形代码可视化大全整理(包括动图)更新中...

    目录 一.离散型变量的可视化 1 饼图 1.1 matplotlib模块 1.2 panda模块 2 条形图 2.1 matplotlib模块 2.1.1 垂直或水平条形图 2.1.2 堆叠条形图 2 ...

  • (7条消息) Visual Studio 2019 基于Linux平台的C++开发

    由于很多unix特有的函数无法在Windows上使用,而Vim又用的不太顺手,突然想到最初用vs的时候有一个基于Linux的C++开发.在网上找了很多教程后,发现还是官方的教程比较详细,不过其中也有一 ...

  • (10条消息) 基于Linux的powerlink实现

    一,POWERLINK优和平台 1,POWERLINK优势:只要有以太网的地方就可以实现 POWERLINK,例如你的 PC 机上可以运行POWERLINK.一个带有以太网接口的 ARM 可以运行 P ...

  • (2条消息) 基于OpenCV使用OpenPose进行多个人体姿态估计

    目录 1.网络的体系结构 2.下载模型的权重文件 3. 第一步:生成图片对应的输出 3.1 读取神经网络 3.2 读取图像并生成输入blob 3.3 向前通过网络 3.4 样本输出 4. 第二步:关键 ...

  • (1条消息) 初学者如何找到自己的学习方向,41 张思维导图共享给你!

    现在市面上根本不愁学习资料,难的是如何我们通过这些资料,找到自己的学习方式!为了解决这个问题,我一口气整理了 41 张思维导图,大家顺藤摸瓜,就知道自己该学什么,不该学什么!自然就可以在 IT 的道路 ...

  • (10条消息) 基于OpenCVSharp的图像处理软件

    目录 1 任务与目的 2 方案总体设计 3 C#界面设计 4 OpenCVSharp功能实现 5 打包与运行 6 总结 1 任务与目的 本次任务是设计一个能够实现OpenCV部分功能的图像处理软件.目 ...

  • (4条消息) [OpenCV实战]7 使用YOLOv3和OpenCV进行基于深度学习的目标检测

    目录 1 YOLO介绍 1.1 YOLOv3原理 1.2 为什么要将OpenCV用于YOLO? 1.3 在Darknet和OpenCV上对YOLOv3进行速度测试 2 使用YOLOv3进行对象检测(C ...