当前位置:文档之家› Matlab手动点取图形曲线数据并重画

Matlab手动点取图形曲线数据并重画

Matlab手动点取图形曲线数据并重画
Matlab手动点取图形曲线数据并重画

z=imread('1.jpg');

imshow(z)

I=imread('f:/1.jpg')

imshow(I)

1: 若fig图像文件存在,而其数据丢失,可直接使用函数从fig文件中将数据导出

①open('d:\filename.fig');% filename是文件名

% 取出曲线的handle,这里gca表示当前图形的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格式的其他常见图片格式,如.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'));

六。图像处理与动画制作

例1-26 有一图像文件flower.jpg,在图形窗口显示该图像。程序如下:

[x,cmap]=imread('flower.jpg'); %读取图像的数据阵和色图阵image(x);colormap(cmap);

axis image off %保持宽高比并取消坐标轴

相关主题
文本预览
相关文档 最新文档