matlab中关于矩阵数组数据图像化的方法总结


应用目的

1、材料研究中试样接头处不同部位的硬度是不一样的,有时候为了形象的表示该现象,需要将不同位置的硬度数据图像化。

2、能谱面扫描时,牛津仪器给出的图像时依据明暗调节的,图像并不好看,如果可以保留原始数据,zaimatlab中将明暗做成云图将会让结果非常好看。

源数据类型

与位置相关的数据。可以理解为一个大的二维矩阵,每个位置存在不同的数据。

方法及命令

imshow等。

原始数据

。。。。。。。。。。。。。。。

方法0:最笨的方法

X=[对应每个点的横坐标,,,,,,,,,,]

Y=[对应每个点的纵坐标,,,,,,,,,,]

Z=[对应每个点的具体数值,,,,,,,,,]

fill(X,Y,Z)
shading interp;
colorbar;
axis equal;

方法1:

首先需要导入excel数据并保存呈mat格式

将mat格式打开并采用table2array命令转换成矩阵

然后采用imshow命令

load(hardness.mat)

A=table2array(hardness)  %该函数可以将table数据变为数组,即double.

imshow(A)

然而存在如下问题

1 图片为白色;2 图片为灰度图

 在matlab中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。在matlab中,为了保证精度,经过了运算的图像矩阵A其数据类型会从unit8型变成double型。如果直接运行imshow(A),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。

即使采用采取各个数据与最大值相除,然而=1的位置仍为白色,因此imshow命令并不合适

imshow(B,[])等效于C=B/max(max(B)) imshow(C,[])

方法2:

linspace是Matlab中的一个指令,用于产生指定范围内的指定数量点数,相邻数据跨度相同,并返回一个行向量。

调用方法:linspace(x1,x2,N)

功 能:用于产生x1,x2之间的N点行矢量,相邻数据跨度相同。其中x1、x2、N分别为起始值、终止值、元素个数。若缺省N,默认点数为100。

举个例子 A=linspace(-6,6,4)

运行结果如下:A=-6 -2 2 6

意思就是 -6为起点 6为终点 4指向量的个数 且是均匀的分段的。

如在命令窗口中输入:

X=linspace(5,100,20)

将输出:

X =

5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100

这和X=[5:5:100]的效果是一样的。

所以

X=linspace(1,10,10)

Y=linspace(1,30,30)

matlab中 hold on 的作用是在作下一幅图时保留已有图像

方法3

最终在发现可以采用imagesc函数解决。

需要注意的是

1、imagesc函数得到的图像时块状图,需要meshgrid函数重新网格细化,线性插值,重新得到outData后,再采用imagesc即可

2、一定注意将数据table转换为数组形式。A=table2array(B);imagesc(A);enter

例子代码如下

%// Define your data
data = [1 1 1 1 1 1 1 1 1 1; 1 1.04 1.04 1.04 1.03 1 1.01 1.01 1.03 1.01; 1.36 1.3 1.25 1.2 1.15 1.1 1.2 1.13 1.07 1.11; 3.65 3.16 2.94 2.68 2.39 2.22 2.17 1.95 1.79 1.81; 5.91 5.75 5.47 5.3 4.98 4.79 4.62 4.55 4.38 4.19; 6 6 5.99 5.83 5.49 5.33 5.14 4.94 4.77 4.74];    

%// Define integer grid of coordinates for the above data
[X,Y] = meshgrid(1:size(data,2), 1:size(data,1));

%// Define a finer grid of points
[X2,Y2] = meshgrid(1:0.01:size(data,2), 1:0.01:size(data,1));

%// Interpolate the data and show the output
outData = interp2(X, Y, data, X2, Y2, ‘linear’);
imagesc(outData);

%// Cosmetic changes for the axes
set(gca, ‘XTick’, linspace(1,size(X2,2),size(X,2))); 
set(gca, ‘YTick’, linspace(1,size(X2,1),size(X,1)));
set(gca, ‘XTickLabel’, 1:size(X,2));
set(gca, ‘YTickLabel’, 1:size(X,1));

%// Add colour bar
colorbar;