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

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


     从事科研的老师和同学们在撰写论文时,经常需要将文献中的曲线与自己的结果进行对比,为获取原始数据,最靠谱的方法当然是找原作者要。如果没有要到呢?本文将成为论文党的福利,为你提供你两种解决方案,均是用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软件技术团队

猜你喜欢

转载自blog.csdn.net/u011583927/article/details/70243028