Matlab手动点取图形曲线数据并重画[修订]
z=imread('1.jpg');
imshow(z)
I=imread('f:/1.jpg')
imshow(I)
1: 若fig图像文件存在,而其数据丢失,可直接使用函数从fig文件中将数据导出
?open('d:\filename.fig');% filename是文件名
% 取出曲线的handle,这里gca
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示当前图形的CurrentAxes属性
% 如果图中有多条曲线,lh为一个数组
lh = findall(gca, 'type', 'line');
% 取出x轴数据
xc = get(lh, 'xdata');%多条曲线,若取第i条线的数据,则xc=get(lh(i),'xdata')
% 取出y轴数据
yc = get(lh, 'ydata');
%结果显示
xc %x轴数据矩阵
yc %y轴数据矩阵
解释:
gcf 返回当前Figure对象的句柄值
gca返回当前axes对象的句柄值
gco返回当前鼠标单击的句柄值,该对象可以是除root对象外的 任意图形对象,并且Matlab
会把当前图形对象的句柄值存放在Figure的CurrentObject属性中。
2:若为非fig
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
的其他常见图片格式,如.jpg,.png等等,可采取手动点击和程序取值等方式。
?手动点击取值作图
clear all;
clc;
y=imread('d:\xx.png'); %读取该图
imshow(y); %显示该图
set(gcf,'outerposition',get(0,'screensize')); %使该图显示最大化,便于取点
[x0,y0] = ginput; %利用鼠标取点,按回车键结束。
%这个时候可以顺序点取图中坐标轴的,左下,左上,右上,右下四个点。
%存取角点坐标信息
save corner.mat x0 y0
%开始撷取其中一条实线上的点,按你需要的精度,点取任意多的点,回车结束
[x1,y1] = ginput;
%存取曲线1的点源信息
save line1.mat x1 y1
%其余曲线类推
%存取曲线2的点源信息
[x2,y2] = ginput;
save line2.mat x2 y2
%重画
%因为屏幕坐标是从左上角为坐标原点开始的,需要做些变换 根据实际修改为自己的坐
标
%四个角点对应的坐标为(0,0) (0,4),(8,4),(8,0)
x1 = (x1-min(x0))*8.0/(max(x0)-min(x0));
y1 = (y1-max(y1))*4.0/(min(y0)-max(y0));
plot(x1,y1,'r-','Markersize',5);%修改线的属性设置
hold on;
x2 = (x2-min(x0))*8.0/(max(x0)-min(x0));
y2 = (y2-max(y2))*4.0/(min(y0)-max(y0));
plot(x2,y2,'m-','Markersize',5);%修改线的属性设置
axis equal;
axis([0 8 0 4]);
set(gcf,'outerposition',get(0,'screensize'));
如果是彩图,则M为三维矩阵,可分解为三色二维矩阵: R=M(:,:,1)
G=M(:,:,2)
B=M(:,:,3)
处理后,显示为 :imshow(M1)
[Z,cmap]=imread('lyl.jpg'); >> imshow(Z)
>> axis on
(3)提取图片中曲线的数据:
如图: 假设图片保存在D盘,图片名字为:一般图像.jpg,jpg格式。 打开matlab ,如下输入:
>> y=imread('d:\一般图像.jpg'); %读取该图
>> imshow(y) %显示该图
>> set(gcf,'outerposition',get(0,'screensize')); %使该图显示最大化,便于取点
>> [x0,y0] = ginput; %利用鼠标取点,按回车键结束。这个时候应顺序点取图中坐标轴
左下,左上,右上,右下四个点。 >> [x1,y1] = ginput; %开始撷取其中一条实线上的点,按你需要的精度,点取任意多的点,
回车结束
%因为位图的屏幕坐标是从左上角为坐标原点开始的,需要
做些变换: >> x1= (x1-min(x0))*350/(max(x0)-min(x0))+375;%如果坐
标原点不为0,则需在该轴加上
上坐标轴数(此处为x轴加上375);350是图像X轴的标长(725-375=350);3.5*10^5是图像Y轴的标长(3.5*10^5-0=3.5*10^5)
>> y1=(y1-max(y1))*3.5*10^5/(min(y0)-max(y0)); %y轴做同样的处理;
>> plot(x1,y1,'k.','Markersize',5); %画图,设置为黑色的点图 >> axis([400,700,0,350000]);%定义坐标范围
>> set(gcf,'outerposition',get(0,'screensize')); %使该图显示最大化,便于观察
Matlab手动点取图形曲线数据并重画
比如有下面这么一张图,我们要用鼠标取得曲线的数值,并记录下来:
clear all;
clc;
y=imread('./input.JPG'); %读取该图
imshow(y); %显示该图
set(gcf,'outerposition',get(0,'screensize')); %使该图显示最大化,便于取点
[x0,y0] = ginput; %利用鼠标取点,按回车键结束。
%这个时候可以顺序点取图中坐标轴的,左下,左上,右上,右下四个点。
%存取角点坐标信息
save corner.mat x0 y0
%开始撷取其中一条实线上的点,按你需要的精度,点取任意多的点,回车结束 [x1,y1] = ginput;
%存取曲线1的点源信息
save line1.mat x1 y1
%其余曲线类推
%重画
%因为屏幕坐标是从左上角为坐标原点开始的,需要做些变换 %四个角点对应的坐标为(0,0) (0,4),(8,4),(8,0)
x1 = (x1-min(x0))*8.0/(max(x0)-min(x0)); y1 = (y1-max(y1))*4.0/(min(y0)-max(y0)); plot(x1,y1,'k.','Markersize',5);
axis equal;
axis([0 8 0 4]);
set(gcf,'outerposition',get(0,'screensize'));