首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在matlab中,如何使用图像平滑2D热图中的像素

在matlab中,如何使用图像平滑2D热图中的像素
EN

Stack Overflow用户
提问于 2015-06-26 09:45:23
回答 2查看 10.7K关注 0票数 4

使用MATLAB,我有一个矩阵(data),并使用imagesc(data)绘制,以生成热图:

代码语言:javascript
运行
复制
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];
imagesc(data)

有没有一种方法可以“平滑”像素,以便产生更多像这样的东西:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-26 10:49:25

interp2在这里可能很有用。使用数据作为关键点,然后创建跨越相同宽度和高度的更精细的点网格,并在关键点之间进行插值。

如下所示:

代码语言:javascript
运行
复制
%// 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;

底部的代码是必需的,因为定义更精细的网格最终会增加图像的大小。我需要重新标记轴以恢复到原始大小。

我们得到这样的结果:

小笔记

我使用MATLAB R2014a,默认的色彩映射是jet。您使用的是R2014b+,默认的颜色映射是parula。你不会得到和我一样的颜色分布,但你会得到你想要的流畅度。

票数 8
EN

Stack Overflow用户

发布于 2017-09-28 00:49:49

还可以将pcolor(data)函数与shading interp一起使用,以使颜色分辨率更平滑。不需要在绘图前对数据进行插值。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31063591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档