2017-07-20 7 views
0

Mein Ziel ist es, in Matlab eine Heatmap zu erstellen, die einen vorhandenen Grundriss verwendet und manuell RF RSSI-Werte erfasst.Heatmap in Matlab: Heatmap_overlay() Offset von Bild

Ich habe numerische Werte (~ 30 bis ~ 80) auf einem Grundriss markiert mit Stift und Papier nach der Aufnahme Signalstärke in verschiedenen Bereichen eines Gebäudes. Ich möchte dies in einem Heatmap-Overlay zum ursprünglichen Grundriss darstellen.

Was ich getan habe ist folgendes:

Google. Youtube. Manpages. Meine Forschung hat mir gelandet folgendes erreichen:

  • Importieren eines Bildes in Matlab durch den Benutzer auffordert, ein Foto
  • schreiben es auf die imread auszuwählen() Funktion
  • ein Array die Größe des Bildes einstellen , auf Null gesetzt alle
    • aus dieser derzeit manuell durchgeführt wird, aber keine Sorge jetzt
  • manuell platzieren, Heatmap (x, y) = val; in Positionen markiert auf dem ursprünglichen Plan
    • I die x gefunden, y Pixel von Photoshops info Koordinaten
  • Palette eine Gauß'sche Tiefpassfilter auf die Punkte durch heatmap()
    • Satz verwendet das Filter Argument enthält die Bild Abmessungen in Pixel

an dieser Stelle ich versuche t anzuzeigen er filterte Heatmap() - Punkte über den ursprünglichen Grundriss. Ich verwende die gleichen Dimensionen für die Filterung und das Array aus der Bildgröße, in Pixel. Allerdings bekomme ich nicht die Heatmap-Punkte zu überlagern, wo ich durch harte Codierung angegeben.

Der Code ist wie folgt:

%Import an image*********************************************** 
%Ask a user to import the image they want 
%************************************************************** 

%The commented out line will not show the file type when prompted to select 
%an image 
%[fn,pn] = uigetfile({'*.TIFF,*.jpg,*.JPG,*.jpeg,*.bmp','Image files'}, 'Select an image'); 

%This line will select any file type, want to restrict in future 
[fn,pn] = uigetfile({'*.*','Image files'}, 'Select an image'); 
importedImage = imread(fullfile(pn,fn)); 

%Create size for heat map************************************** 
%Setting the size for the map, see comments below 
%************************************************************** 

%What if I wanted an arbitrary dimension 
%Or better yet, get the dimensions from the imported file 
heatMap = zeros(1512,1080); 


%Manually placing the heatmap values along a grid 
%Want to set zones for this, maybe plot out in excel and use the cells to 
%define the image size? 
heatMap(328,84) = .38; 
heatMap(385,132) = .42; 
heatMap(418,86) = .40; 
heatMap(340,405) = .60; 
heatMap(515,263) = .35; 
heatMap(627,480) = .40; 
heatMap(800,673) = .28; 
heatMap(892,598) = .38; 
heatMap(1020,540) = .33; 
heatMap(1145,684) = .38; 
heatMap(912,275) = .44; 
heatMap(798,185) = .54; 


%Generate the Map********************************************** 
%Making the density and heat map 
%************************************************************** 
gaussiankernel = fspecial('gaussian', [1512 1080], 60); 
density = imfilter(heatMap, gaussiankernel, 'replicate'); 

%imshow(density, []); 
oMask = heatmap_overlay(importedImage, density, 'summer'); 
set(figure(1), 'Position', [0 0 1512 1080]); 
imshow(oMask,[]); 
colormap(summer); 
colorbar; 

Jede Idee, warum das überlagerte Filter versetzt ist und nicht dort, wo angegeben?

Dies kann durch ein beliebiges Bild 1512 x 1080
Bitte lassen Sie mich, wenn Sie das Originalbild

Antwort

0

Das Array aus war verwendet wollen wissen, reproduziert werden.
Was ich tat, war die folgende:

  • Ausgabe der Dichtekarte nur
  • Bestätigte Dimension Größen im Matlab Workspace

ich das Array bemerkt haben für die Dichte, Heatmap, importedImage und oMask waren nicht alle nxm Größe.

heatMap und importierteBild waren n x m und importierteBild und mask waren m x n.

Ich tauschte die Dimensionen zu allen be n x m und jetzt das Bild überlagert einfach gut.

Verwandte Themen