Raw Data from Figures

有时候我们经常会在文献中看到许多图表,特别是一些表示两个变量关系的散点图,但作者往往不一定提供原始数据,我们当然可以想办法联系作者获取原始数据,但有时候这样不但成功率不高,而且像一些早年的文献,可能作者无法联系,甚至原始数据已经无法获得了。

那么有什么办法么?今天看到Wu Lingfei写了一个文章,讲“摄影法”求原始数据,说白了就是拍(或扫描)一张无透视的图片,稍加处理便可得到其相对准确的原始数据。我在这里改良了一下原始方法,发挥建院同学的优势,可以前期用PS辅助处理一下,以增加准确度。

STEP 1:拍照

这是原文作者用手机拍的一张照片,虽然说手机也可以有不错的拍照效果,但难免会有透视,而且数据点清晰度低的话可能会影响后一步处理,如果可能的话建立试试扫描仪。

STEP 2:预处理

将图片在PS里先剪裁一下,大小需要正好剪裁到坐标轴边框;接着调整成阈值模式,再进一步其实可以单独用画笔点一下数据点,因为“粘连”在一起的数据点到后面计算机是没法分开的。

下面的工作就交给计算机啦。

STEP 3:用Python的包识别出点的组团

# -*- coding: utf-8 -*-
import numpy as np #数组
import matplotlib.pyplot as plt #画图
from scipy import ndimage #核心!图片处理
from scipy.ndimage import measurements

j = ndimage.imread("/Users/mac/Desktop/figure1.jpg")
#j是一个y行,x列的array
b = ndimage.gaussian_filter(j,4)
#用高斯法处理图片,得到点的cluster
c,d = ndimage.label(b<50)
#给cluster打上标签,后面b的值是个阈值,可调节
im = plt.imshow(c)
plt.show()

STEP 4:画出所有Cluster,并存下中心点的数据

# -*- coding: utf-8 -*-
import numpy as np #数组
import matplotlib.pyplot as plt #画图
from scipy import ndimage #核心!图片处理
from scipy.ndimage import measurements

j = ndimage.imread("/Users/mac/Desktop/figure1.jpg")
#j是一个y行,x列的array
b = ndimage.gaussian_filter(j,4)
#用高斯法处理图片,得到点的cluster
c,d = ndimage.label(b<50)
#给cluster打上标签,后面b的值是个阈值,可调节

sliced = measurements.find_objects(c)
#Find objects in a labeled array. Find points in this example

data=[]
for i in sliced:
    sliceX = i[1]
    sliceY = i[0]
    #注意,X,Y的坐标是反的
    x = np.abs(sliceX.stop - sliceX.start)/2 + min(sliceX.stop,sliceX.start) #point center x
    y = np.abs(sliceY.stop - sliceY.start)/2 + min(sliceY.stop,sliceY.start) #point center y
    xlim = [0,len(j[0])]
    ylim = [len(j),0]
    data.append([x,ylim[0]-y]) #换一下y的坐标
    plt.plot([sliceX.start, sliceX.start, sliceX.stop, sliceX.stop, sliceX.start],
                   [sliceY.start, sliceY.stop, sliceY.stop, sliceY.start, sliceY.start],
                   color="c")

plt.xlim(xlim)
plt.ylim(ylim)
plt.imshow(c)
plt.show()

STEP 5:对数据结合原坐标轴进行变换,得到真实数据

# -*- coding: utf-8 -*-
import numpy as np #数组
import matplotlib.pyplot as plt #画图
from scipy import ndimage #核心!图片处理
from scipy.ndimage import measurements

j = ndimage.imread("/Users/mac/Desktop/figure1.jpg")
#j是一个y行,x列的array
b = ndimage.gaussian_filter(j,4)
#用高斯法处理图片,得到点的cluster
c,d = ndimage.label(b<50)
#给cluster打上标签,后面b的值是个阈值,可调节

sliced = measurements.find_objects(c)
#Find objects in a labeled array. Find points in this example

data=[]
for i in sliced:
    sliceX = i[1]
    sliceY = i[0]
    #注意,X,Y的坐标是反的
    x = np.abs(sliceX.stop - sliceX.start)/2 + min(sliceX.stop,sliceX.start) #point center x
    y = np.abs(sliceY.stop - sliceY.start)/2 + min(sliceY.stop,sliceY.start) #point center y
    xlim = [0,len(j[0])]
    ylim = [len(j),0]
    data.append([x,ylim[0]-y]) #换一下y的坐标
    plt.plot([sliceX.start, sliceX.start, sliceX.stop, sliceX.stop, sliceX.start],
                   [sliceY.start, sliceY.stop, sliceY.stop, sliceY.start, sliceY.start],
                   color="c")

xlim_org = [0,0.3]
ylim_org = [1000,3000]
x = []
y = []
#xlim_org,ylim_org是图片上的坐标轴,x,y用来存点的x坐标和y坐标

for k in range(len(data)):
    data[k][0] *= (0.3/len(j[0]))
    data[k][1] = data[k][1] * 2000/len(j) + 1000
    x.append(data[k][0])
    y.append(data[k][1])

plt.xlim(xlim_org)
plt.ylim(ylim_org)
plt.scatter(x, y ,c='blue', s=50, alpha=0.8)
plt.show()

是不是很像呢?data这个list里存的就是点的真实坐标了,因为有些Cluster这种简单的方法识别还是不太好,可以进一步处理,点不多的情况下也可以在之前PS的时候调整好。

原文:大专栏  Raw Data from Figures

原文地址:https://www.cnblogs.com/wangziqiang123/p/11618260.html

时间: 2024-08-05 22:14:58

Raw Data from Figures的相关文章

ISP模块之RAW DATA去噪(二)--BM3D算法

在正式开始本篇文章之前,让我们一起回顾一下CFA图像去噪的一些基本思路与方法.接着我会详细地和大家分享自己学习理解的BM3D算法,操作过程,它的优缺点,最后会给出算法效果图供参考. 在ISP模块里,研究者们会讨论去噪模块(Noise Reduction)到底是在去马赛克模块(Demosaic)之前还是之后进行.如果在之前处理的话,随着去噪过程的进行,噪声点消除的同时,伴随着彩色信息的损失:如果在之后,复杂的插值过程将会改变噪声的统计模型,使其变得很复杂并且难以计算.所以,更多的情况是选择在Dem

Sensor信号输出YUV、RGB、RAW DATA、JPEG【转】

本文转载自:http://blog.csdn.net/southcamel/article/details/8305873 简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B.G多一位,原因是人眼对绿色比较敏感.RAW RGB: sensor的每一像素对应一个彩色滤光片

ISP模块之RAW DATA去噪(一)

ISP(Image Signal Processor),图像信号处理器,主要用来对前端图像传感器输出信号处理的单元,主要用于手机,监控摄像头等设备上. RAW DATA,可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据,是无损的,包含了物体原始的颜色信息等.RAW数据格式一般采用的是Bayer排列方式,通过滤波光片,产生彩色滤波阵列(CFA),鉴于人眼对绿色波段的色彩比较敏感,Bayer数据格式中包含了50%的绿色信息,以及各25%的红色和蓝色信息

嵌入式开发之davinci--- 8148/8168/8127 中的图像采集格式Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别

简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B.G多一位,原因是人眼对绿色比较敏感.RAW RGB: sensor的每一像素对应一个彩色滤光片,滤光片按Bayer pattern分布.将每一个像素的数据直接输出,即RAW RGB dataJPEG: 有些sensor

DICOM设备Raw Data与重建

DICOM设备Raw Data与重建     现在的医疗影像设备基本都已DICOM为标准.但现在许多医院的技术人员都以为只要支持DICOM就一切OK,其实不然.DICOM中有Storage.Print.Worklist.Storage Commitment等很多部分.影像传输其实只用到了Storage部分. 分清楚了不同DICOM功能,每一个功能中还分SCU/SCP.U是User,P是Provider.某项功能动作的发起者就是User,反之是Provider.例如:Storage.设备要往其他服

vooya --- a YUV player and a generic raw data player

vooya是一个raw数据播放器,可播放yuv数据,兼容win.linex以及mac平台. 下载地址:https://www.offminor.de/(见最下面) ubuntu需要安装依赖: apt -f install libqt4-core libqt4-gui apt install libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5xml5 原文地址:https://www.cnblogs.com/jiu0821/p/

kitti raw data development kit的使用

run_demoVelodyne.m使用:http://blog.csdn.net/qq_33801763/article/details/78959205   https://www.cnblogs.com/zoucheng/p/7860827.html   https://www.zhihu.com/question/67428995/answer/253652303 原文地址:https://www.cnblogs.com/ymjyqsx/p/8337969.html

A web crawler design for data mining

Abstract The content of the web has increasingly become a focus for academic research. Computer programs are needed in order to conduct any large-scale processing of web pages, requiring the use of a web crawler at some stage in order to fetch the pa

Data Types

原地址: Home / Database / Oracle Database Online Documentation 11g Release 2 (11.2) / Database Administration Data Types Each value manipulated by Oracle Database has a data type. The data type of a value associates a fixed set of properties with the va