赞
踩
使用说明:读论文的时候的时候,时常出现折线图,但是并不知道其中的X轴,Y轴的坐标,所参考的文章为:利用matlab从图片中提取曲线坐标数据。现在刚加了一下小小的改进,后续在使用场景下可一步步改写与升级。
第一版:功能将图像读取,可以基本实现取出均匀图像各个点的值,并作出图像。已经封装成函数,可以直接调用。
- % 参数说明,其中im为读取到的图像,num为新图像所需要采集的点的个数,line为采集到的曲线个数
- function [xg,yg]=draw_plot(im,num,line)
- im=rgb2gray(im); %灰度变化
- % thresh = graythresh(im); %二值化阈值
- im=imbinarize(im,0.9); %二值化
- set(0,'defaultfigurecolor','w')
- [y,x]=find(im==0); %//找出图形中的“黑点”的坐标。该坐标是一维数据。
- y=max(y)-y; %//将屏幕坐标转换为右手系笛卡尔坐标
- y=fliplr(y); %//fliplr()——左右翻转数组
- plot(x,y,'r.','Markersize', 2);
- disp('请在Figrure中先后点击实际坐标框的两个顶点(左上点和右下点). ');
- [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('由原图片得到的未处理散点图')
- disp('开始在曲线上取点');
- str='完成曲线';
- for j =1:line
- [xg(:,j),yg(:,j)]=ginput(num);
- str=[str,num2str(j)];
- disp(str);
- end
- figure(2)
- plot(xg,yg);
- end
具体效果如下:
原图为:
重新绘制的图像为:
这其中需要可以自定义修改图片中曲线的形状与格式。具体可以参考如下文章:
【MATLAB】基本绘图 ( 图形属性 | 绘图对象 | 图形属性界面 | 坐标轴属性 | 线属性 | 文本属性 | 图形属性设置策略 )
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。