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

1. 前言

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

2. 处理思路

2.1 基本需求

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

2.2 基本思路

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

2.3 基本流程

2.3.1 降采样

由于图像数据太大, 处理起来特别占用内存空间, 这里对他进行降采样处理,但是图像整体的形貌还是保持不变
【图像处理】提取图片中的交点数据_第2张图片
【图像处理】提取图片中的交点数据_第3张图片

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变换获取图像中的直线数据
【图像处理】提取图片中的交点数据_第4张图片

2.3.5 直线合并

我们看到通过hough变换得到的直线的数量是非常多的,从物理角度我们可以认为相互贴合的直线实际上是一条
【图像处理】提取图片中的交点数据_第5张图片

2.3.6 求直线的交点

对我们提取得到的直线数据两两求他们的交点
【图像处理】提取图片中的交点数据_第6张图片

2.3.7 合并相近的交点

可以非常容易的发现, 空间中间隔非常近的点, 在物理空间中实际上是一个点
【图像处理】提取图片中的交点数据_第7张图片

2.3.8 初始匹配结果

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

2.3.9.1 ROI

2.3.9.2 二值化

【图像处理】提取图片中的交点数据_第8张图片

2.3.9.3 边缘检测

【图像处理】提取图片中的交点数据_第9张图片

2.3.9.4 直线检测

2.3.9.5 直线去重

【图像处理】提取图片中的交点数据_第10张图片

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 写代码的时候翻翻非常有用呢

你可能感兴趣的:(opencv,图像处理)