Main Content

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

创建热图叠加图像

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

ThingSpeak™ 通过在图像或地图上投影测量值来帮助您可视化数据。您不需要特殊的硬件,但需要面积和位置测量的图像。有关详细信息,请参阅 Wireless Network Signal Strength with ESP32 in Arduino

创建 MATLAB® 可视化

选择 App > MATLAB 可视化 .然后选择“新建”并选择“自定义(无起始代码)”并点击“创建”。

收集数据

将 X 和 Y 坐标以及信号强度保存在单独的向量中。您可以从 ThingSpeak通道读取信号强度数据。将 CHANNEL_ID, READ_API_KEYFIELD_NUMBER 替换为您通道中的适当值。您可以在通道主页的顶部找到您的通道ID。您可以在通道视图的“API 密钥”选项卡上找到 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); 

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

另请参阅

| | | |