首页 > 代码库 > 【图像处理】提取图片中的交点数据

【图像处理】提取图片中的交点数据

1. 前言

前两天老板突然给了一幅图像数据, 让我提取出其中的交点信息, 图片是这样的:
技术分享
由于图像数据实在太大,就传了一张截图上来~~

2. 处理思路

2.1 基本需求

我们的需求实际上就是, 提取图像中黑色线段相交的部分(简单来说就是相交的点)

2.2 基本思路

检测图像中的黑色直线部分, 根据hough变换提取出相应的直线方程, 根据直线方程求出他们的交点, 即为我们所需要的点。由于处理的时候, 存在一定误差, 所以一般可以分为两个步骤, 先粗略的寻找一个交点, 然后对他的周围进行搜素即可。

2.3 基本流程

2.3.1 降采样

由于图像数据太大, 处理起来特别占用内存空间, 这里对他进行降采样处理,但是图像整体的形貌还是保持不变
技术分享
技术分享

2.3.2 二值化处理

因为我们需要提取的是板块交接处的黑线, 这部分的灰度值和其他部分的差别是比较明显的, 因而我们可以找到一个阈值, 将这部分分离出来,效果如下:
技术分享

2.3.3 canny 检测边缘

在进行直线检测之前, 我们需要对图像进行边缘检测, 获取图像边缘数据, canny 检测的相关资料: http://blog.csdn.net/luoru/article/details/49022695
https://zh.wikipedia.org/wiki/Canny%E7%AE%97%E5%AD%90
技术分享

2.3.4 hough变换检测直线

在对图像进行边缘提取之后, 我们可以使用累计概率版本的hough变换获取图像中的直线数据
技术分享

2.3.5 直线合并

我们看到通过hough变换得到的直线的数量是非常多的,从物理角度我们可以认为相互贴合的直线实际上是一条
技术分享

2.3.6 求直线的交点

对我们提取得到的直线数据两两求他们的交点
技术分享

2.3.7 合并相近的交点

可以非常容易的发现, 空间中间隔非常近的点, 在物理空间中实际上是一个点
技术分享

2.3.8 初始匹配结果

技术分享

2.3.9 ROI 区域操作 (以第一个ROI区域为例)

2.3.9.1 ROI

技术分享

2.3.9.2 二值化

技术分享

2.3.9.3 边缘检测

技术分享

2.3.9.4 直线检测

技术分享

2.3.9.5 直线去重

技术分享

2.3.9.6 交点数据

技术分享

2.3.9.7 交点去重

技术分享

2.3.10 实现效果

技术分享

3. 工程地址

https://code.csdn.net/zhyh1435589631/picture_handle_tianwentai/tree/master

4. 遇到的一些问题及参考资料

  1. http://blog.csdn.net/luoru/article/details/49022695 canny 算子的原理,可以简单理解为是双阈值滤波,高阈值(伪边缘少, 边缘间断明显), 低阈值(伪边缘多, 边缘比较连续)
  2. http://blog.csdn.net/chinabinlang/article/details/6802686 atan函数与atan2函数的一点区别, 在求直线的变换角度的时候, 采用atan2 效果更好
  3. http://www.cnblogs.com/mikewolf2002/p/3454760.html opencv 中svd 的使用, 需要注意的是 opencv 和 matlab svd 得到的结果并不是一样的
  4. http://www.tuicool.com/articles/IvEBba 图像细化, 虽然最后没有用到
  5. http://blog.csdn.net/liyuanbhu/article/details/50193947 opencv 直线拟合函数
  6. http://blog.csdn.net/column/details/opencv-tutorial.html 毛星云的 opencv3 写代码的时候翻翻非常有用呢
<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    【图像处理】提取图片中的交点数据