创建热图叠加图像
此示例演示如何使用 ESP32 开发板的无线网络信号强度测量值创建热图。
ThingSpeak™ 通过在图像或地图上投影测量值来帮助您可视化数据。您不需要特殊的硬件,但需要面积和位置测量的图像。有关详细信息,请参阅 Wireless Network Signal Strength with ESP32 in Arduino。
创建 MATLAB® 可视化
选择 App > MATLAB 可视化 .然后选择“新建”并选择“自定义(无起始代码)”并点击“创建”。
收集数据
将 X 和 Y 坐标以及信号强度保存在单独的向量中。您可以从 ThingSpeak通道读取信号强度数据。将 CHANNEL_ID, READ_API_KEY
和 FIELD_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);
最终结果分别以红色和蓝色表示信号强度最高和最低的区域。
另请参阅
MATLAB 分析 App | MATLAB 可视化 App | 带有 Arduino IDE 的 ESP32 无线网络信号强度 | Write Data | thingSpeakRead