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

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 写代码的时候翻翻非常有用呢
时间: 2024-10-08 10:04:32

【图像处理】提取图片中的交点数据的相关文章

如何识别图片中的表格数据

??在很多时候,我们的数据来源形式是多种多样的,有时候数据(或表格)也会呈现在图片中.那么,我们如何来获取图片中的有用数据呢?当一张图片中含有表格数据的时候,我们可以用OpenCV识别表格中的直线,然后再用OCR技术识别其中的文字. ??本文仅作为如何识别图片中的表格的一个例子,希望能给读者一些启示.笔者用到的工具如下: opencv pyteressact numpy 我们用opencv来识别表格中的直线,用pyteressact来识别单元格文字,用numpy做数值处理.我们要识别的示例图片(

从一个字符串中提取想要的数据

这个知识还热着呢,刚刚学来.... 最近做了一个小东西,通过串口通信,把电脑上运行的labview和单片机连到了一起. 我的想法是这样的,我会在labview的图形界面设置好一系列参数,然后在把所有参数转成字符串然后按顺序连接起来,  例如:p1.2i33d4.445s7这样子. 电脑就把这样一个字符串扔给了单片机,然后我需要在单片机上进行数据提取. 先是定义好几个准备接收的字符串,P[10].I[10].D[10].S[10], 我希望得到这样的结果: P[10]=1.2 I[10]=33 D

Python连接mongodb提取部分字段内数据并写入txt文件

部门负责工业领域知识图谱构建,用于工业化与信息化两化融合,听起来好高大上好难,反正目前的我还理解不了那么深,好在有部门经理带领. 想要做专业领域知识图谱首先要有专业领域知识,这些知识从哪来呢?主要来源肯定是从互联网上爬啦! 爬下来一大堆知识直接堆在那肯定不行,还要建立起相互关系,其中重要一项就是文本分类啦!那么怎么分类呢? 还是以后再说吧...因为不管怎么做,首先都要把数据库里自己想要的数据取出来. #coding=utf-8 import sys reload(sys) sys.setdefa

Jsoup学习笔记9:Jsoup 解析saz文件,读取其中的htm文件到字符串,提取字符串中的数据写入csv文件中

本篇笔记将上篇笔记的操作做些改进,不再把saz文件中的htm文件解析出来,而是不解压直接读取其中的数据成字符串,基本思路如下: 1.自定义一个从文本文件读取内容到字符串的类:解析saz文件中的htm文档,将文件的内容读取到字符串中 2.自定义利用Jsoup解析htm字符串的类:利用Jsoup解析传入的htm字符串,将解析结果写入csv文件中 3.解析时,指定好文件路径,直接调用上面的两个工具类即可 示例代码如下: package com.daxiang.saztest; /** * 自定义一个从

从Zabbix数据库中提取内存采集的数据,做内存使用率计算

背景需求很简单,分析所有的设备的内存使用率,看那些设备的内存不够用是否需要加内存... 下面的脚本逻辑,就是通过提取zabbix数据库中的hostid,在提取itemid.. 然后通过item name过滤提取趋势数据,获取一天中最大的内存总数和最小可用内存 然后在计算在一天中最小内存可用率的设备, 下面的是通过free来计算的,当然也可以通过used来计算了... #!/usr/bin/ruby $KCODE = 'utf8' require 'mysql' db = Mysql.real_c

Jmeter之正则表达式提取获取数组类型数据

前言 在之前,我们已经学会了Jmeter正则表达式提取器提取某个数据,还没掌握的小伙伴可以翻看我之前写的随笔Jmeter之正则表达式提取器,今天我们来学习一下怎么利用正则表达式提取器获取数组类型的数据,多用于列表信息数据的获取. 一:添加唯品会商城http请求,我们要提取的是商城的商品类型 二:添加后置处理器-正则表达式提取器,引用名称为menu-title 三:添加取样器-Debug Sampler,查看是否获取到数组类型的数据 原文地址:https://www.cnblogs.com/zha

转:java提取图片中的像素

本文转自:http://www.infosys.tuwien.ac.at/teaching/courses/WebEngineering/References/java/docs/api/java/awt/image/PixelGrabber.html PixelGrabber 类实现可以附加在 Image 或 ImageProducer 对象上获得图像像素子集的 ImageConsumer.下面是一个示例: public void handlesinglepixel(int x, int y,

OpenCV_提取图片中任意形状的区域

转载自:http://blog.csdn.net/hanbinga17/article/details/6536331# ---------------------------------------------------------------------------------------------------------------------------------------------- 正在做一个基于内容的图像检索项目,客户要求可以让用户提取图片上的任意形状的子图作为输入.为了

Servelt学习笔记之二——使用Servlet提取表单中的数据

1.Servlet表单数据 在很多的情况下,我们需要在浏览器,Web服务器和后台程序之间传递数据.浏览器使用两种方法可将这些信息传递到Web服务器,分别为Get方法和Post方法. 1.1.Get方法: Get方法向页面请求发送已编码的用户信息.页面和已编码的信息中间用?字符分隔,如下所示: http://www.test.com/hello?key1=value1&key2=value2 GET方法是默认的从浏览器向Web服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中.