MATLAB读取figure图像中二维数据
背景
笔者做边坡雷达数据处理方向,雷达的形变图是由前人编写的matlab pcode加密过的。不会形成过程数据,运行程序后MATLAB只会弹出figure图,处理起来非常不方便。这时,就需要编写程序将figure图的“数据”读出来。在网络上搜索、整理后形成的代码,给需要的人以供参考。
环境配置
- matlab 2016b
生成图像数据的代码
data = '2018_03_27_10_50_36'; % 图像文件名
%% 查看相干结果
file2 = [data,'.AfterFilter'];
fun_show(file2,2) % pcode文件调用函数fun_show生成图形
显示图像如下:
%% 读取图像中数据的代码
xianggan = findobj(gcf,'type','image');
zz = get(xianggan,'cdata');
close(figure(gcf));
figure;
imagesc(-xx,yy,zz);colorbar;axis xy;colormap hot;
title(strrep(data,'_','\_'));xlabel('方位向(m)');ylabel('距离向(m)');
title([strrep(data,'_','\_'),'数据']);
在变量空间就可以找到图像中的数据、坐标轴
将读取的数据输出为三维数据
方法一
根据二维图像像素排列方式,图像左上角为起始像素,逐一存储。
[M,N] = size(zz);
img = zeros(M*N,3);
%=========================================
%像素点的形变值及像素点的对应的横纵坐标
%img(k+j,1)=d(i,j);%%如果不要像素值
%img(k+j,2)=j;%横坐标,对应原图像列
%img(k+j,3)=i; %纵坐标,对应原图像行
%=========================================
for i=1:M
for j=1:N
k=N*(i-1);
img(k+j,1)=zz(i,j);%如果不要像素值
img(k+j,2)=xx(j);%方位向坐标
img(k+j,3)=yy(i);%距离向坐标
end
end
% 保存形变图像中的数据到mat文件
save img.mat img;
% 保存形变图像中的数据到txt文件
save img_txt.txt img;
方法二
简便方案,同时生成X坐标和Y坐标空间网格,缺点是MATLAB的网格点数不能过多,网格点数多的情况建议选择方法一。
[M,N] = size(zz);
img = zeros(M*N,3);
[meshY,meshX] = meshgrid(yy,xx);
img = [meshX(:) meshY(:) zz(:)];
% 保存形变图像中的数据到mat文件
save img.mat img;
% 保存形变图像中的数据到txt文件
save img_txt.txt img;