注意:

本代码是由【MATLAB R2015b win 32位】编写。

先上代码:

%% 清空变量
clear all;
clc;

%% 取点之后趋势是对的,也就是点与点之间的比例是对的,但是每个点的真实值和原图对不上,需要按照真实的坐标处理一下
max_axis_X=5;    %这里是真实坐标中横轴的最大值
max_axis_Y=25;    %这里是真实坐标中纵轴的最大值
flag = 0;    %如果图形的纵坐标是正数,flag=0,如果是负数,flag = 1;
shift = 0;    %如果横坐标不在最下边,而是在中间,那么需要往下平移若干单位

%% 读取图片数据
fig=imread('D:\OneDrive\Work\MATLAB工程\3.png');    %读取图片
imshow(fig);    %显示该图
set(gcf,'outerposition',get(0,'screensize'));    %使该图显示最大化,便于取点
[X0,Y0] = ginput;    %利用鼠标依次点击取出图片中数据区域边界的四个点。取点顺序:顺序点取图中坐标轴左下,左上,右上,右下四个点,回车结束。
X0(2) = X0(1);    %** 对“X0,Y0”做一下处理。
X0(4) = X0(3);
Y0(4) = Y0(1);
Y0(3) = Y0(2);

[X1,Y1] = ginput;    %开始点取其中一条实线上的点,按需要的精度,点取任意多的点,回车结束。

%% 因为位图的屏幕坐标是从左上角为坐标原点开始的,需要做些变换
X1 = X1 - min(X0);    %** 把图片的坐标原点移到图片中数据区域的左上角
Y1 = Y1 - min(Y0);

if flag == 0
    Y1= -( Y1 - (max(Y0) - min(Y0)) );    %** 把原来指向朝下的纵坐标翻转到朝上
else
    Y1 = ( max(Y0) - min(Y0) ) - Y1;
    Y1= ( Y1 - (max(Y0) - min(Y0)) );
end

X1 = X1 / ( max(X0) - min(X0) ) *  max_axis_X;    %** 按照每个取得的数据点在原图片中位置比例换算成真实坐标
Y1 = Y1 / ( max(Y0) - min(Y0) ) *  max_axis_Y;

Y1 = Y1 - shift;    %往下平移若干单位

plot(X1,Y1,'b-d');    %画图

具体例子:

Fig1

MATLAB 提取图片中的曲线数据重新画图-LMLPHP

Fig2

MATLAB 提取图片中的曲线数据重新画图-LMLPHP

Fig3

MATLAB 提取图片中的曲线数据重新画图-LMLPHP

如果是“Fig1”应该这样设置:


未完 ......

点击访问原文(进入后根据右侧标签,快速定位到本文)

05-11 18:13