【论文党福利】如何提取图像中的数据

【论文党福利】如何提取图像中的数据


     从事科研的老师和同学们在撰写论文时,经常需要将文献中的曲线与自己的结果进行对比,为获取原始数据,最靠谱的方法当然是找原作者要。如果没有要到呢?本文将成为论文党的福利,为你提供你两种解决方案,均是用matlab实现的。
     一种办法是编写一个GUI程序,将待扣取数据的图像绘制到屏幕上,再配合一些放大、拖拽等功能,通过手动描点的方法来得到结果,我们称作描点法。
     另一种方法,根据你待获取数据的曲线中的一些规律,编写一个从图像中扣取数据点的程序。相比手动描点方法带来的随机误差,这种方法得到的结果比较精确,但也许需要你根据实际问题来调整代码或者配置文件。
     第一种方法源于网上比较流行的一个手动描点小程序。第二种方法是我在解决实际问题时编写出来的,本文将只介绍第二种方法如何实现,两种方法的程序均免费提供,获取途径见文末。
----------------------------------------------华丽分割线------------------------------------------------------
     直接进入主题,我面临到这样一个问题,老师希望我能获取到下面一幅图像中的数据,以便能够和自己得到的结果进行对比。图像如下所示:

     为了我们写出的程序能够尽量用在更多的场合,需要提取一些普遍的原理出来,就像上面一副图像,我们待提取数据的图像有这些特点:
     图形中曲线一般有特定的颜色加以区分,比如红色。
     图中可能出现多个曲线需要提取。
     一般情况待提取数据的曲线出现的位置是不固定的,但我们根据实际背景很容易确定一个提取曲线的横坐标范围。
     通常我们只需在X轴进行等距提取就可以了。

     总的来说,图像就是一个矩阵,矩阵的每个元素对应一个像素,其实就是一种颜色。我们只需要告诉程序我们要提取X=X0时的函数值Y0,程序要做的也仅仅是沿着X0对应的矩阵的那一列从函数值低的方向向函数值高的方向去寻找是否到达了曲线上的点,这样就可以达到提取数据点的功能。
     再结合上面的分析,我们的程序从设计的角度建立了下述的一些逻辑,来尽可能的让我们的程序能够处理大多数的图像提取问题。阅读了下面这些细节,你将能对整个程序的大体框架有很好的理解,并且能针对具体问题进行针对性的调整。
     1.如何批量处理?
     为了能够提高效率,我们需要批量处理,其实很简答,我们需要一个ImageList.txt文件来告诉程序都有哪些图像需要处理。文本文件内部结构如下图所示:

     2.遍历矩阵时,当前判定点是否是曲线上的点?
     这很好处理,使用当前像素的颜色,也就是R、G、B三原色的取值来判定。例如,上图中,我们待提取曲线是红色的,我们只需判断矩阵中的每个元素是否为红色,也就是(255,0,0)。实际使用时我添加了一个阈值,来防止图中的曲线颜色看起来是红色,但其实不是正红,也就是数值接近红色但有区别的情况,比如颜色是(250,10,5)。
     3.等距提取
     我们的程序使用在X轴上等距提取数据点的方法,这更符合我们的需求。你只需要告诉程序你要提取点的范围和等距提取多少个点。
     4.如何确定坐标轴范围?
     这里我们又需要配置一个Axeslist.txt文件来告诉程序每幅图像中的坐标轴范围,以便程序能够在矩阵索引值和实际坐标轴坐标间进行换算。该文件如下图所示:

     需要注意的是,每行代表一幅图像的坐标轴范围信息,其内容要与ImageList.txt中列出的图像一一对应。
     5.如何确定提取范围?
     这里我们又需要配置一个ExtractPointsList.txt文件来告诉程序需要提取点的范围是什么?每个范围内等距分为多少份?该文件如下图所示:

     每行代表一幅图像的取点范围及个数信息,同样地,其内容要与ImageList.txt中列出的图像一一对应。

     配置好了上面所介绍的三个.txt文件,剩下的工作交给程序来完成就好了。运行的结果会保存在当前目录下,就像这样:

     以保存的文件结果Result1为例,使用如下一行代码即可将结果提取出来:
     load Result1 Result


     最后就可以将提取的论文中的结果和我们自己的比对着试试了:

     效果还不错!快试试吧~
------------------------------------------------华丽分割线----------------------------------------------------
     另一种描点法的程序是我在网上找到的。

     本文介绍方法的源代码是我自己编写的。

     我打包在了一起:下载链接

     另外,欢迎大家关注我们团队的微信公众号:LSGO软件技术团队

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

添加串口和虚拟终端输出帮助调试

在使用IAR开发STM32项目时,使用串口或者是虚拟终端来输出我们想看的信息是一个非常好而且简便的方式。 首先来看看串口怎么实现信息输出。简单来说串口输出信息就是将标准输出重定向到串口,在上位机的超级终端或者串口助手等工…

1.1股票数据预处理练习

第一阶段、一个简单策略入门量化投资 1.1股票数据预处理练习 无论我们要对股票市场进行何种探索,在开始前,研究如何获取数据,并进行对应的预处理都是必要的。 本节以美股为例,进行股票数据预处理的练习。正文如下: …

1-2 移动均线交叉策略1

第一阶段、一个简单策略入门量化投资 1-2 移动均线交叉策略1 第一阶段一个简单策略入门量化投资1-2 移动均线交叉策略1前言获取数据移动均线交叉策略数据可视化绘制折线图绘制K线图绘制移动均线 移动均线交叉策略回测什么是回测回溯买卖信号计算收益 未完待续完整代码 前言 …

STM32F412应用开发笔记之一:初识NUCLEO-F412ZG

今天终于收到了期待已久的NUCLEO-F412ZG,感谢电子发烧友论坛! 近几年来基本都是在STM32平台上做一些设计开发工作。STM32F103、STM32F107、STM32F429等都应用过,但却从没有申请过试用。没想到这次申请居然能被选中&a…

STM32F412应用开发笔记之二:基本GPIO控制

NUCLEO-F412ZG板子上的元器件并没有完全焊接,除去ST-LINK部分和电源部分后,还有用一个USB主机接口,三个LED灯和两个按钮,不过很多功能引脚都已经引到了插针。查看原理图可发现,由原理图模块的…

1-3移动均线交叉策略2

第一阶段、一个简单策略入门量化投资 1-3移动均线交叉策略2 上一篇文章1-2 移动均线交叉策略1中我们最后提到: 如果我们从第一天买入股票,一直持有股票,最后一天卖出,获得的收益是每股124.02美元,收益率为412% 如果…

1-4移动均线交叉策略3

第一阶段、一个简单策略入门量化投资 1-4移动均线交叉策略3 上一文1-3移动均线交叉策略2中,我们得到的结果是令人失望的。但我们的探索还要继续。 我们知道,使用投资组合的方式进行分散投资是降低风险的好办法。尽管移动均线交叉策略的表现并不理想&a…

STM32学习及应用笔记一:SysTick定时器学习及应用

 这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过。最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下。 1、SysTick究竟是什么? 关于SysT…

使用Atom快速打造好用的Markdown编辑器

使用Atom快速打造好用的Markdown编辑器 Atom当前主流的跨平台的三大编辑器(Atom,sublime,vscode)之一 今天尝试了使用Atom来打造Markdown编辑器,快速上手且易用,墙裂推荐! 下面直接进入正题,一步步介绍如何使用Atom快速打造好用…

PID控制器开发笔记之一:PID算法原理及基本实现

 在自动控制中,PID及其衍生出来的算法是应用最广的算法之一。各个做自动控制的厂家基本都有会实现这一经典算法。我们在做项目的过程中,也时常会遇到类似的需求,所以就想实现这一算法以适用于更多的应用场景。…

十分钟能学会的简单python爬虫

简单爬虫三步走,So easy~ 本文介绍一个使用python实现爬虫的超简单方法,精通爬虫挺难,但学会实现一个能满足简单需求的爬虫,只需10分钟,往下读吧~ 该方法不能用于带有反爬机制的页面,但对于我这样的非专业…

PID控制器开发笔记之二:积分分离PID控制器的实现

前面的文章中,我们已经讲述了PID控制器的实现,包括位置型PID控制器和增量型PID控制器。但这个实现只是最基本的实现,并没有考虑任何的干扰情况。在本节及后续的一些章节,我们就来讨论一下经典PID控制器的优化与改进。这一节我们首…

利用python实现短信和电话提醒功能

有时候,我们需要程序帮我们自动检测某些事件的发生 这个需求是广泛存在的 因此,这里整理了利用python实现短信和电话提醒功能的方法 主要需要完成以下4个步骤: - 安装核心库:twilio - 注册账号及配置 - 发送短信示例 - 电话…

PID控制器开发笔记之三:抗积分饱和PID控制器的实现

积分作用的引入是为了消除系统的静差,提高控制精度。但是如果一个系统总是存在统一个方向的偏差,就可能无限累加而进而饱和,极大影响系统性能。抗积分饱和就是用以解决这一问题的方法之一。这一节我们就来实现抗积分饱和的PID算法。 1、抗积…

Git 忽略编译后文件

当我们第一次对某个Git仓库中的项目进行编译后,未追踪的文件通常有两类。 一类是项目新增但还未提交的文件, 另一类是像 .pyc、.obj、.exe 等编译后的二进制文件。 显然前者应该出现在 git status 的输出中,而后者会让我们困惑究竟发生了什…

如何获取STM32 MCU的唯一ID

前段时间由于应用需要对产品授权进行限制,所以研究了一下有关STM32 MCU的唯一ID的资料,并最终利用它实现了我们的目标。 1、基本描述 在STM32的全系列MCU中均有一个96位的唯一设备标识符。在ST的相关资料中,对其功能的描述有3各方面&#x…

SHA256算法原理详解

1. SHA256简介 SHA256是SHA-2下细分出的一种算法 SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准,由美国国家安全局研发,属于SHA算法之一&…

学习笔记:区块链概念入门

本文是100天区块链学习计划的第二篇学习笔记,其实就是按照阮一峰的网络日志-区块链入门教程的讲解进行的简单梳理。也是时间有点紧张的原因,相比于上一篇SHA256算法原理详解,个人感觉质量和原创程度明显下降。待对区块链有了更深的理解后&…

PID控制器开发笔记之四:梯形积分PID控制器的实现

从微积分的基本原理看,积分的实现是在无限细分的情况下进行的矩形加和计算。但是在离散状态下,时间间隔已经足够大,矩形积分在某些时候显得精度要低了一些,于是梯形积分被提出来以提升积分精度。 1、梯形积分基本思路 在PID控制…

SHA256 的C语言实现

前几天总结了SHA256的算法原理一文 SHA2系列的原理并不复杂,但是需要注意细节还是挺多的。不少中文博客贴出的代码都有错,这两天也踩了几个坑。 代码在这里!!!SHA256的C Code 代码实现主要依照的这个git仓库crypto-…