Main Content

本页采用了机器翻译。点击此处可查看英文原文。

创建热图叠加图像

此示例展示了如何使用来自 ESP32 开发板的无线网络信号强度测量来创建热图。

ThingSpeak™ 通过在图像或地图上投射测量值来帮助您可视化数据。您不需要特殊的硬件,但您需要区域和位置测量的图像。有关更多信息,请参阅 Arduino 中使用 ESP32 的无线网络信号强度

创建 MATLAB® 可视化

选择 Apps > MATLAB Visualizations。然后选择 New,接着选择 Custom (no starter code) 并点击 Create

收集数据

将 X 和 Y 坐标以及信号强度保存在单独的向量中。您可以从 ThingSpeak 通道读取信号强度的数据。将 CHANNEL_ID, READ_API_KEYFIELD_NUMBER 替换为您通道中的适当值。您可以在通道主页顶部找到您的通道 ID。您可以在通道视图的 API Keys 标签中找到 API 密钥。

% Enter data by hand if data from a ThingSpeak channel is not available.
strength = [-90 -90 -90 -90 -40 -20 -22.4 -45 -35 -41 -44 -55 -40 -75 -26]';
% Read data from a ThingSpeak channel.
% Uncomment the next line to read from ThingSpeak.
% strength = thingSpeakRead(CHANNEL_ID, ReadKey',READ_API_KEY,'numPoints',15,'fields',FIELD_NUMBER');
X = [10 550 550 10 50 234 393 129 237 328 448 225 344 457 477]';
Y = [10 10 410 410 293 210 202 132 130 142 141 272 268 274 200]';

将无线信号测量值转换为百分比。

strengthPercent = 2*(strength+100)/100;

读图

存储图像的尺寸。您的图像必须托管在网络上。

[I,m] = imread('https://www.mathworks.com/help/examples/thingspeak/win64/CreateHeatmapOverlayImageTSExample_02.png','png');
picture=ind2rgb(I,m); 
[height,width,depth] = size(picture); 

创建模型

插入现有点并使用插值结果填充覆盖图像。然后设置覆盖的透明度。

OverlayImage=[];
F = scatteredInterpolant(Y, X, strengthPercent,'linear');
for i = 1:height-1
   for j = 1:width-1
          OverlayImage(i,j) = F(i,j);
   end
end
alpha = (~isnan(OverlayImage))*0.4;

显示图像和颜色条

最后,用颜色条显示图像。将颜色限制设置为与数据值相关。将 AlphaData 设置为之前创建的透明度矩阵。

imshow(picture,m);
hold on

h = imshow(OverlayImage);

colormap(h.Parent, jet);
colorbar(h.Parent);
set(h,'AlphaData',alpha); 

Figure contains an axes object. The axes object contains 2 objects of type image.

最终结果分别用红色和蓝色表示信号强度最高和最低的区域。

另请参阅

| | | |