MATLAB Answers

0

Plot a heatmap from a matix

Asked by Ahmed Madhun on 25 Oct 2019
Latest activity Edited by Ahmed Madhun on 26 Oct 2019
I implemented the minutia heat map presented in this paper (page 7): https://arxiv.org/pdf/1909.09901.pdf
The result is that i have 6 matrixes and i am looking for a way to plot these as shown in the paper (same page), like this:
Basically, the low values is presented in dark, and it gets lighter when it increase.

  5 Comments

Ahmed Madhun 2019 年 10 月 26 日
Thanks it seems to work, however, it sees to not be accurate. Because all my 6 matrixes are different, but when i use:
heatmap(Mx, 'Colormap',gray,'GridVisible','off'));
all the figures are the same, any idea of why this happen ?
darova
2019 年 10 月 26 日
Make range for color axis the same for each figure
min = % minimum of 6 matrix
max = % maximum of 6 matrix
caxis([min max])
Ahmed Madhun 2019 年 10 月 26 日
Sorry didn't get you comment: how to apply that for my code ?
% Function to create the HeatMap matrix of a minutia set in "TestData" file
function HeatMapCreator()
% Start plotting minutia
[X, Y, A] = GetMinData("TestData");
% Minutia 1 has X1, Y1, and A1 => X and Y is the position and A is the angle between 0-359
% Count Minutiea
n = length(X);
% set Width and Hight
W = 600;
H = 750;
K = 6;
% Create the matixes
MM = cell(K, 1);
M = zeros(H,W);
% Define the gussian paramater
GP = 2*2^2;
% Go throw each pixel
for k = 1:6
for i = 1 : W
for j = 1 : H
Hijk = 0;
for t = 1 : n
Xt = X(t);
Yt = Y(t);
At = A(t);
%Calculate Cs
ED = sqrt((i-Xt)^2+(j-Yt)^2);
Cs = exp(-ED/GP);
%Calculate Co
DO = At - (2 * k * pi / K);
if (DO < -pi) || (DO > pi)
DO = 2 * pi - DO;
end
Co = exp(-DO/GP);
Hijk = Hijk + (Cs * Co);
end
M(i,j) = Hijk;
end
end
MM{k} = M;
end
% Show the 6 figures
for k = 1:6
figure(k)
heatmap(MM{k},'Colormap',gray,'GridVisible','off');
end
end
Comment: I set the Gussian paramater to test weather it works or not.

Sign in to comment.

1 Answer

darova
回答者: darova
2019 年 10 月 26 日
 採用された回答

You are using H for rows and W for columns
M1 = zeros(H,W);
% ...
for i = 1 : W
for j = 1 : H
% ...
M1(i,j) = Hijk; % looks like mistake
You can use cells to create 6 matrices automatically
MM = cell(6,1);
M = zeros(H,W);
for k = 1:6
for i
for j
for t
% do stuff
end
% ...
M(i,j) = %...
end
end
MM{k} = M;
end
After you found max and min values (global) use loop to visualize
for k = 1:6
figure(k)
heatmap(MM{k});
caxis([minx maxx])
colormap gray
end

  11 Comments

Ahmed Madhun 2019 年 10 月 26 日
Not sure, because according to the paper. If it's implemented correctly each heat map should highlight only minutia in the same degree range.
darova
2019 年 10 月 26 日
Can you attach a screenshot or something? The file is too large, can't donwload .pdf (i have low internet speed)
Ahmed Madhun 2019 年 10 月 26 日
The paper is only 8 Mb. You can find it if you search on google for: "Learning a Fixed-Length Fingerprint Representation"

Sign in to comment.