利用matlab读取曲线的数据,利用matlab将图片中的曲线提取数据,实验一

有时候仅能找到一副图片,希望获取图片里的曲线数据。

​​本实验思路:​

核心思想:以像素点作为曲线的数据点。

具体实现:采用matlab处理图片,并二值化后提取曲线坐标,以平均值作为同一个横坐标上相邻的纵坐标数据。

1.如某pdf文档截图得到的图片:​​

a4c26d1e5885305701be709a3d33442f.png某模块datasheet截图

2.用绘图软件删除无用的标记,并将图片零点移动到图片的左下角,切割图片使图片仅仅包含坐标网格的范围。如下:

a4c26d1e5885305701be709a3d33442f.png删除掉无用数据并移动零点后(d1.png)

3.用matlab处理图片,并获取数据。

源码如下:

​clear all;

clc;

%%

B=imread('Z:\d1.png');

ax= [0 60 0 2];

%整个图片的数据范围

%%

C=im2bw(B);

%图像二值化

[m n]=find(C==0);

%搜寻曲线的矩阵坐标

NM=[n m];

D=NM;

S=size(C);

%获取图片像素大小

for i=1:max(n)

[x

y]=find(NM(:,1)==i);

D(x,2)=mean(NM(x,2));

%平均值合并同一个横坐标上的纵坐标数据

end

%%

IM=[D(:,1) S(1)-D(:,2)];

plot(IM(:,1),IM(:,2));

Imx=(IM(:,1)/S(2))*(ax(2)-ax(1))+ax(1);

Imy=(IM(:,2)/S(1))*(ax(4)-ax(3))+ax(3);

%归一化图片坐标,并计算实际坐标值

plot(Imx,Imy,'x-');

grid on;

%%

Imm=[Imx,Imy];

%获取到的数据~~~

4.结果如下:

a4c26d1e5885305701be709a3d33442f.pngmatlab的plot

​总结:在整个操作过程中,对图片的处理花费了较长时间,特别是由于坐标网格的原因使清除无用格点较难精确,多擦或少擦了部分,致使数据计算存在偏差。。。

再思考下有没有什么好策略,可以直接处理,不用或尽量简化图片的预处理~~~~

p.s.对下面这种图还是可行的,框选下删删就成了。。。

a4c26d1e5885305701be709a3d33442f.png来源于网络

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值