介绍背景

文章中的图片上有多个曲线,数据已经丢失,想要图片上的一个周期的数据。
这个图片分两种:
1,已经转化成图片了,图片格式的,没办法,只能一步步解决。
2,另一种从别的软件里拷贝出来直接粘贴到word中,还未转化成图片的图片。

以下程序都是matlab中写的,部分是别的博客分享,但是没保存,所以没法引用,只能在此归类,如果涉及到侵权,请告知删除。

未转成图片的曲线提取

一般直接拷贝过来到word中,是从matlab中得到的,或者origin,等软件中。但是插入到word中后,matlab图像无法在返回到matlab编辑,而origin图像还可以返回修改。
对于不能转化的matlab图像,有一个特别方便的办法。选中,复制,到Visio中粘贴,取消组合,然后就可以提取每一条曲线了。

图片格式的曲线提取

单一曲线

如果图片中只有一个曲线,简单很多,网上有利用图像提取特征点,提取坐标。

% 提取图片中的曲线数据
clear,clc,close all
%% 图片与曲线间的定标
im=imread('1.fig');%读入图片(替换成需要提取曲线的图片)
im=rgb2gray(im);%灰度变化
thresh = graythresh(im);%二值化阈值
im=im2bw(im,thresh);%二值化
set(0,'defaultfigurecolor','w')
imshow(im)%显示图片
[y,x]=find(im==0);%找出图形中的“黑点”的坐标。该坐标是一维数据。
y=max(y)-y;%将屏幕坐标转换为右手系笛卡尔坐标
y=fliplr(y);%fliplr()——左右翻转数组
plot(x,y,'r.','Markersize', 2);
disp('请在Figrure中先后点击实际坐标框的两个顶点(左上点和右下点),即A、B两点. ');
[Xx,Yy]=ginput(2);%Xx,Yy——指实际坐标框的两个顶点
min_x=input('最小的x值');%输入x轴最小值
max_x=input('最大的x值');%输入x轴最大值
min_y=input('最小的y值');%输入y轴最小值
max_y=input('最大的y值');%输入y轴最大值
x=(x-Xx(1))*(max_x-min_x)/(Xx(2)-Xx(1))+min_x;
y=(y-Yy(1))*(min_y-max_y)/(Yy(2)-Yy(1))+max_y;
plot(x,y,'r.','Markersize', 2);
axis([min_x,max_x,min_y,max_y])%根据输入设置坐标范围
title('由原图片得到的未处理散点图')
%% 将散点转换为可用的曲线
%需处理的问题与解决思路
%(1)散点图中可能一个x对应好几个y <---> 保留mean()-std()到mean()+std()之间的y值 并取平均处理
%(2)曲线的最前端和最后段干扰较大 <---> 去掉曲线整体的前(如5%)和后5%
%(3)曲线的最顶端和最底段干扰较大 <---> 去掉曲线整体的上10%和下10%
%参数预设
rate_x=0.08;%曲线的最前端和最后段删除比例
rate_y=0.05;%曲线的最顶端和最底段删除比例
[x_uni,index_x_uni]=unique(x);%找出有多少个不同的x坐标
x_uni(1:floor(length(x_uni)*rate_x))=[];%除去前rate_x(如5%)的x坐标
x_uni(floor(length(x_uni)*(1-rate_x)):end)=[];%除去后rate_x的x坐标
index_x_uni(1:floor(length(index_x_uni)*rate_x))=[];%除去前rate_x的x坐标
index_x_uni(floor(length(index_x_uni)*(1-rate_x)):end)=[];%除去后rate_x的x坐标
[mxu,~]=size(x_uni);
[mx,~]=size(x);
for ii=1:mxuif ii==mxuytemp=y(index_x_uni(ii):mx);elseytemp=y(index_x_uni(ii):index_x_uni(ii+1));end
%删除方差过大的异常点threshold1=mean(ytemp)-std(ytemp);threshold2=mean(ytemp)+std(ytemp);ytemp(find(ytemp<threshold1))=[];%删除同一个x对应的一段y中的异常点ytemp(find(ytemp>threshold2))=[];%删除距顶端和底端较近的点thresholdy=(max_y-min_y)*rate_y;%y坐标向阈值
ytemp(find(ytemp>max_y-thresholdy))=[];%删除y轴向距离顶端与底端距离小于rate_y的坐标ytemp(find(ytemp<min_y+thresholdy))=[];%剩下的y求均值y_uni(ii)=mean(ytemp);
end
%此时很多x_uni点处对应的y_uni为空,即NAN,要进一步删去这些空点
x_uni(find(isnan(y_uni)))=[];
y_uni(find(isnan(y_uni)))=[];
%画图
figure,plot(x_uni,y_uni),title('经处理后得到的扫描曲线')
axis([min_x,max_x,min_y,max_y])%根据输入设置坐标范围
% 将最终提取到的x与y数据保存
curve_val(1,:)=x_uni';
curve_val(2,:)=y_uni;
%% 对提取出的数据进行拟合(按实际情况进行修改)
[p,s]=polyfit(curve_val(1,:),curve_val(2,:),4);%多项式拟合(为避免龙格库塔,多项式拟合阶数不宜太高)
[y_fit,DELTA]=polyval(p,x_uni,s);%求拟合后多项式在x_uni对应的y_fit值
figure,plot(x_uni,y_fit),title('拟合后的曲线')
axis([min_x,max_x,min_y,max_y])%根据输入设置坐标范围

这个提取程序没用上,我的图像较为复杂,多条曲线在一个图里。

多个曲线在一个图中

(1)先从图片中点选关键点,得到粗略图
利用matlab软件,m文件。

% 提取图片中的曲线数据
clear,clc,close all
%% 图片与曲线间的定标
im=imread('C:\Users\MSI-PC\Desktop\重新修改\control\sp.png');%读入图片(替换成需要提取曲线的图片)
imshow(im)%显示图片
[x1,y1]=ginput;
plot(x1,y1,'r','Markersize', 2);

(2)通过曲线拟合图像

选择X1,Y1 发现图像y翻转,
调整数据:
y_new=2*y_对称轴-y

c=mean(y_new())求均值
然后再拟合。
(3)输出figure
拟合后的图像,选择文件

选择文件列表下,print to figure ,可在工具下看数据统计的均值,可以选择鼠标光标,然后选中拟合曲线,删除原来的点,重新粘贴,另存为fig图片。
(4)获取拟合曲线的坐标点
保持当前figure打开,在命令行输入:

 h=findobj(gca,'Type','Line');xx=get(h,'xdata');
yy=get(h,'ydata');

就可以得到x,y的点,如果还有Z,就依法炮制。
最后就能还原想要的图像了。

图片中提取曲线的办法相关推荐

  1. [GUI] 使用MATLAB从图片中提取曲线数据

    用MATLAB 2017b GUI写的一款小工具. 无论是课堂.会议上随手拍的照片,还是阅读文献的截图,很快可以提取到曲线的原始数据点作为学习研究的参考. 主要思路是: 1)预处理:裁剪选区.透视变换 ...

  2. 利用matlab从图片中提取曲线坐标数据

    目录 0.引言 1.思路详解与分析 2.MATLAB程序 0.引言   在读文献的时,经常遇到这样的情况:文章里提出的方法好有趣啊,好想拿文中用的数据来试试看看能不能得到相近的结果,可是文中只有根据原 ...

  3. 从Matlab的Fig图片中提取数据,并保存成csv文件

    从Matlab的Fig图片中提取数据,并保存成csv文件 1.Fig图像是由单条曲线绘制 2.Fig图像是由双条曲线绘制 3.小结 本人亲自实测有效,但能力有限,目前仅用代码测试了 Figure图片单 ...

  4. MacOS python从图片中提取文字

    环境:MacOS 10.14.6 python3.10.上一篇已经安装了python3.10. 本篇目标是从图片中提取文字:建立文件convertp2t.py. from PIL import Ima ...

  5. opencv获取图片像素坐标_利用OpenCV从图片中提取矩形并标注坐标(室内平面地图)(一)

    ​某城市会展中心室内地图 背景 一名室内设计师的日常工作从设计一张会展地图开始.常常有这样的场景:划分除规范的展位后,进入销售阶段,频繁的需要修改这张地图,如展示拆分.合并.换位置.标记已交易. 问题 ...

  6. MATLAB如何提取曲线原始数据

    无论是在工作上或是学习中,相信有不少朋友会碰到这类情况 参加学术研讨会,演讲者展示的数据曲线,很感兴趣,想了解曲线背后的原始数据.于是拍了照片,但是不知道如何从这张照片中提取原始数据 做汽车系统仿真, ...

  7. 利用OpenCV从图片中提取矩形并标注坐标(室内平面地图)——(一)

    某城市会展中心室内地图 背景 一名室内设计师的日常工作从设计一张会展地图开始.常常有这样的场景:划分除规范的展位后,进入销售阶段,频繁的需要修改这张地图,如展示拆分.合并.换位置.标记已交易. 问题 ...

  8. 怎么从图片中提取文字?

    在工作时间,电脑编辑文本和处理数据.下班后,手机文件.表格.数据也随之而来.如果没有合理的规划,将很难应对.毕竟编辑一份文件,整理一份表格,都会耗费我们不少精力.而合理的借鉴,会让我们省时省力的,如果 ...

  9. python提取图片中的曲线_OpenCV如何提取图片中曲线

    简单介绍 在实际的应用中,我们常常需要对图像中的曲线进行描述.处理,这个曲线可以是轮廓,骨架或者其他.可以用deque 描述曲线,接下来简单介绍下如何从图片中搜索这些曲线并保存. 首先,输入的图片是一 ...

最新文章

  1. Python 爬虫原理实现自动google翻译
  2. Python 阅读书目推荐
  3. python open word_使用Python在OpenOffice / Microsoft Word中格式化输出
  4. Dynamics AX 2012 R2 外部程序运行在没有AD的环境(如PDA) 调用AX服务
  5. 利用XML生成Excel
  6. TCP拥塞控制和TCP流量控制
  7. B00003 C++标准库 std::bitset
  8. angular.js 验证码注册登录
  9. Web前端开发工具(编辑器)汇总
  10. HAL库中外设驱动的实现(任意外设通用)
  11. sys.path用法介绍
  12. 企业招聘面试十大之怪现状
  13. 深度分解服务业细分领域O2O
  14. 带武器的格斗游戏,武器带回血
  15. 第六章 DDL语言
  16. Android APP分享功能实现 .
  17. h5 HTML5 浏览器 录制视频
  18. 环境部署(物理手工部署):
  19. 未能猜测出图片名称??告诉你一个100%有用的搜图神器!
  20. 菜鸟|Egret微信小游戏好友排行榜教程

热门文章

  1. PLSQL入门与精通(第81章:利用游标进行递归调用的时候游标数超标问题)
  2. matlab怎么画周期性竖直线,matlab怎么画阶跃函数波形,这些经验不可多得
  3. 《战略品牌管理》思维导图,教你如何对品牌进行管理
  4. 大学,我的三个不爽的事
  5. html 语音播放插件,Html5添加audio音频播放器插件教程
  6. java:用Swing做一个普通计算器
  7. c语言多线程造成的崩溃,C++多线程析构函数引起程序崩溃解析.pdf
  8. 2013年12月综合交友类行业网站综合影响力排名
  9. 台式计算机欢迎界面下不去,电脑开机时卡在欢迎界面很久如何解决
  10. 还不了解国际化视野与交叉学科思维?收下这份让你学业职业成长的秘籍!