matlab从曲线图提取数据

摘要:
对于第二条曲线,add_len需要改小,欧式距离的阈值需要改大。

同学用肉体一顿饭让我帮他做下这个DDL
matlab从曲线图提取数据第1张
样图是一张非常扭曲的三虚线图他甚至想OCR识别x轴y轴坐标单位
matlab从曲线图提取数据第2张

  • 上谷歌查了查,对于曲线图提取数据基本上是手动在曲线上取几个点,然后由这个几个点开始遍历领域点,判断领域点是否是黑色,然后再遍历这个黑色点的领域,最终找出一条最长的线便是曲线,一种类似曲线拟合的做法?
  • 知乎专栏提供了一种思路,先把曲线图上无关信息去掉,然后提取最大的连通区域,就是所需要的实线,只可惜样例图要做的是虚线
    第一种方法是同学AA想要的,不过英国人嘛,只告诉他要这样做,并没有告诉他基本思想,所以我们基于第二种方法拓展尝试一下。

清洗图像

所给的图像是RGB图像,且有噪声点,先将图像灰度化,计算图像阈值,通过阈值将图像二值化。
matlab从曲线图提取数据第3张

提取真实区域

想要的真实区域就是下图中使用红框标出的区域matlab从曲线图提取数据第4张

法1

一开始的想法是先在图片的(end*0.8:end-10,)区域中霍夫变换识别出下边框,然后取下边框的(,1:10)部分识别左边框,取左边框的最上端坐标和下边框的最右端坐标,作为分割图像的基准,真实区域就分割出来了。

  • 提取下边框很顺利
    matlab从曲线图提取数据第5张
  • 提取左边框不是很顺利
    matlab从曲线图提取数据第6张
  • 提取右边框也不是很顺利
    matlab从曲线图提取数据第7张
  • 提取上边框很顺利
    matlab从曲线图提取数据第8张
    虽然和计划的有所偏差,但通过上边框的最左端坐标和下边框的最右段坐标,作为分割图像的基准,得到的真实图像理论上是相同的。

法2

对于样例图,真实区域是封闭的,是图中的最大连通区域,那找最大联通区域也可以提取出样例图的真实区域。
matlab从曲线图提取数据第9张
再取得该区域最左上端白点坐标和最右下端白点坐标,作为分割图像的基准,得到真实图像。
真实图像如图所示
matlab从曲线图提取数据第10张

再次清洗图像

为了方便起见,下文中“图”、“图像”指的是上一步中得到的真实图像,而不是原始图像。
对于得到的图像,仍然存在边框、刻度线、右下角标识区域等无关信息。

  • 边框可以直接通过上一步法1中得到的边框坐标数组去掉。
  • 刻度线以左边框的刻度线为例,遍历图像(,1:5)范围内,若该点是黑点,则从该点开始,向右寻找最大的直线区域,去除。
    样例图中存在曲线与刻度线相交的情况,我采用的方法是对于该点,如果24领域中的黑点总数大于一个阈值,则认为该点是曲线上的点,保留。
  • 右下角标识区域直接找取联通区域,如果该连通区域的大小大于阈值,认为是标识区域,去除。
    得到的结果图像,边界存在问题,有待改进:
    matlab从曲线图提取数据第11张

分离曲线

三条曲线都不是实线,没法通过找最大联通区域的方法逐个分离,但因为不同曲线中实线部分的长度是不一样的,所以可以贪心一下,从第1列开始,以某个阈值add_len为步长,找最大连通区域,再进行拼接,以图中最上面一条曲线为例:

  • 首先取图像(:,1:10)区域中的最大联通区域,或者取3个联通区域,认为联通区域在列上的坐标极小值为其高度值,高度值越小则越高,最高者则为想要取得最上面一条曲线。
    matlab从曲线图提取数据第12张
  • 然后取得该联通区域中最右端的点n1(x,y),再取(:,y+1:y+add_len)中的n个联通区域,对于每个联通区域,找出其最左端的点n2(x1,y1),求n1与n2之间的欧式距离,认为欧式距离最短的就是该曲线在(:,y+1:y+add_len)的部分,然后重复该步,直到y值无限接近于图像最右端。
  • 对于上一步也有不同的做法,取得该联通区域中最右端的点n1(x,y),在从i=1开始循环,取(:,y+1:y+add_len)中的i个最大联通区域,对于第i个区域,他的面积总是第i大的,找出其最左端的点n2(x1,y1),求n1与n2之间的欧式距离,若欧式距离小于某个阈值,则认为该联通区域是该曲线在(:,y+1:y+add_len)的部分,然后重复该步,直到y值无限接近于图像最右端。
    过程如图:
    matlab从曲线图提取数据第13张
    两种做法进行比较,得出的曲线基本相同。
    取得最上端曲线a如图所示:
    matlab从曲线图提取数据第14张
    然后将该曲线在图中去除,再重复之前的做法,取得第二条曲线b。对于第二条曲线,add_len需要改小,欧式距离的阈值需要改大。
    matlab从曲线图提取数据第15张
    将第二条曲线去除,得到第三条曲线c
    matlab从曲线图提取数据第16张
    可以看出第三条曲线的图像存在噪点,可以用一个区域对噪点清洗,得到第三条曲线c
    matlab从曲线图提取数据第17张

导出数据

将a,b,c的坐标值与图像的size相除,再乘上单位,即可得到数据。

免责声明:文章转载自《matlab从曲线图提取数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle报ORA-08103: 对象不再存在错误Windows系统下MySQL添加到系统服务方法(mysql解压版)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Halcon学习笔记1

转:https://www.cnblogs.com/hanzhaoxin/archive/2013/02/15/2912879.html 机器视觉工程应用主要可划分为硬件和软件两大部分。 硬件:工程应用的第一步就是硬件选型。硬件选型很关键,因为它是你后面工作的基础。主要是光源、工业相机和镜头选择。 软件:目前业内商业库主要有Halcon,康耐视,DALSA...

Halcon斑点分析BlobAnalysis解析

斑点分析的算法非常简单:在图像中,相关对象的像素(也称为前景)通过其灰度值来识别。例如,图中示例显示了液体中的组织颗粒。这些粒子是明亮的,液体(背景)是暗的。通过选择明亮的像素(阈值),可以很容易检测到颗粒。在许多应用中,暗像素和亮像素的简单条件不再成立,但结果相同可以通过额外的预处理或像素选择/分组的替代方法来实现。 在这种情况下,斑点分析的优点是HAL...

大数据技术之_19_Spark学习_08_Spark 机器学习_01_机器学习概述 + 机器学习的相关概念 + 算法常用指标

第1章 机器学习概述1.1 机器学习是啥?1.2 机器学习能干啥?1.3 机器学习有啥?1.4 机器学习怎么用?第2章 机器学习的相关概念2.1 数据集2.2 泛化能力2.3 过拟合和欠拟合2.4 维度、特征2.5 模型2.6 学习第3章 算法常用指标3.1 精确率和召回率3.2 TPR、FPR & TNR3.3 综合评价指标 F-measure...

限流的几种方式

先来描述一下什么是限流   限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延迟处理,拒绝处理,或者部分拒绝处理等等。 一般做接口限流主要是为了应对突发流量,避免突发流量拖垮服务。如...

【SpringCloud】SpringCloud Alibaba Sentinel实现熔断与限流

SpringCloud Alibaba Sentinel实现熔断与限流 限流与降级 限流 blockHandler 降级 fallback 降级需要运行时出现异常才会触发,而限流一旦触发,你连运行的机会都没有,当然就不会降级。 也就是说,两者如果同时触发,那么一定是限流触发(降级连机会都没有)。 Sentiel 官网 https://github.com/...

AUC指标深度理解

AUC 指标 直观意义 AUC 指标用于评价分类器对于正、负样例的辨别能力,对出结果的排序位置(按照预测为正例的概率)敏感。 为什么提出这个指标? 一般来讲,精确率、召回率等指标,都需要设定一个阈值去判别是属于正类还是负类,例如预测分大于等于0.5判别为正类,小于0.5判别为负类。如何设定这个阈值,是个问题。而AUC这个指标则不需要设阈值。(或者说,每种...