应用目的
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;