之前写过一个滞回曲线数据提取工具,但还是决定重写一下,一来是因为Python的打包程序只能在64位平台上使用,二来是还要自己先期处理一下图片比较麻烦,本着能简单化绝不搞复杂的原则,重新用C++结合OpenCV编写了这个图像数据提取软件,软件使用了OpenCV最简单的颜色识别方法,结合OpenCV膨胀和腐蚀的功能,可以有效的提取图片中的曲线数据(支持对数坐标提取)。
下载安装
软件适用于Windows(x32, x64)平台:
基本操作
为了简单起见,现在以下图进行数据提取测试,目标是提取下图中的蓝色曲线数据点:
注意:上图包含在软件安装目录下,名称为Img.png,为提高网页传输速度,上图经过压缩。
打开软件,加载上图曲线,图像区域接受滚轮缩放和左键平移,左键双击以及右键将在选点过程中用到:
在“From X”、“To X”、“From Y”和“To Y”中设置坐标轴的起始坐标后,点击“Pick Point”,光标会变为十字形,在图中分别依次右键点击或者双击下图中的四个点,这四个点分别对应X=-0.1、X=0.1、Y=-300和Y=300的四个点(当然不一定非要这样选择),选点过程注意左下角状态栏会有相应提示:
完成之后“Pick Point”以及上面的输入框会灰化不可用,直到点击“Reset”重设提取过程。接下来为图片添加“Mask”遮罩,使用遮罩将不需要的部分采用黑色遮住,留下需要提取的数据。软件会将图像上所有非纯黑色部分的数据全部提取出来,如果图片曲线自身为黑色或者深色,可以在“Mask…”中进行反色。点击“Mask…”按钮,打开HSV色彩控制对话框,由于蓝色数据点颜色较深,且背景为白色,所以先勾选 “Reverse Image Color” 选项,这时候图像颜色反转,蓝色曲线会变成黄色曲线:
调整HSV色彩控制对话框中的每一个滑条,在保证黄色曲线存在的同时尽量减小 “Hue”、“Saturation”和“Value”滑块对之间的距离,这样不仅可以将其他多余颜色去除,也可以减少图片的噪点数量 (提示:如果提取结果噪点数量较多或者噪点颜色与曲线颜色一致,还可以使用软件上“Modify…” 的 “Erode” 操作去除噪点,然后使用“Dilate”操作还原被腐蚀的曲线):
调节滑块至上图的位置(具体的调整可以多次尝试),基本上可以保证图像上只剩下我们需要的曲线,关闭HSV色彩控制对话框,设置“Digitize Precision”,这个是用于控制图片取样精度,1为最高精度,5为最低精度,一般默认为1即可,如果图片较大,可能提取较多数据,这时候适当扩大“Digitize Precision”的值,可以降低取样的数据量。这里默认为1,点击“Export…”:
如果是一般的坐标轴直接选择默认的“X: Linear Y: Linear”就可以了,如果是对数坐标,在下拉菜单中选择X或者Y坐标轴为对数坐标即可,这里按照默认设置,点击OK后选择保存位置保存csv数据。使用Excel打开csv数据文件,选择两列数据后,绘制散点图:
可以得到提取结果:
从上图可以看出,未被其他曲线遮挡部分已经全部提取出来了,虽然软件不能脑补其中的被其他曲线遮挡的部分,但是基本上还是够用的。
博主厉害。。。
哈哈,我服务器配置方法都是从你那边看来的~~~
网站主题也很干净。
这个赞。
几天前有用到这个软件的需求,最后用了 OriginLab 的 Digitize 插件,还行,就是界面比较粗糙,需要选点,不能靠色彩选出曲线。
scanit 也行。
不过还是站长的厉害。
支不支持对数坐标?
我还真没想到对数坐标的问题,今天将这个功能加上~
好啦,现在的版本支持对数坐标的提取了,支持10为底的坐标轴,我感觉以非10为底的比较少,用到在增加吧~
您好:
对您弄得东西很感兴趣,能告诉我一下您的邮箱吗。
图像中点的大小和形状有考虑吗?如果图片的像素不是很高的情况下不知道效果如何。
想问一下,有些滞回是有顺序的,可这个只是散点图,这个该如何处理呢?
没办法,叠在一起的曲线很难区分的。
厉害啊!
博主你好啊,我应用这个程序,想提取曲线数据,但是我的图像本身是又有曲线又有mark的那种,线上面有个圈圈,而且不是均匀分布,两侧的点比较密集,把红线盖住了基本黑了,我怎么调都调不出来。。你看有办法解决么?现在提取的数据相当于缺了头尾
如果原始数据就是缺失的,肯定不能完整提取出来,因为本身信息就是丢失的。
如果是遮挡了,可以用其他图像处理软件把缺失的数据补上。
啊,还有个问题是,提取的数据,不光顺,可能是把mark圈圈的点取出来了,抖来抖去的