我有一个图像(png),我想将它放在一个由 a 和一个值为 0-1 的 2D 矩阵组成的热图(可以这么说)下面。因此,点的强度将取决于矩阵中的值有多大。
我可以使用 imshow(matrix) 但这完全覆盖了下面的图像。是否有可能不绘制任何矩阵值 <.05 的像素或其他方式来完成这项工作?
我有一个图像(png),我想将它放在一个由 a 和一个值为 0-1 的 2D 矩阵组成的热图(可以这么说)下面。因此,点的强度将取决于矩阵中的值有多大。
我可以使用 imshow(matrix) 但这完全覆盖了下面的图像。是否有可能不绘制任何矩阵值 <.05 的像素或其他方式来完成这项工作?
这是在彩色图像上叠加二进制热图的示例:
%# some image
I = im2double( imread('peppers.png') );
%# I create here a random mask (gaussian centered in middle of image)
[r,c,~] = size(I);
[X Y] = meshgrid(1:r,1:c);
Z = mvnpdf([X(:) Y(:)], [r c]./2, diag(15.*[r c]));
Z = (Z-min(Z(:)))./range(Z(:));
Z = reshape(Z',[c r])';
%# show image and mask separately
subplot(121), imshow(I)
subplot(122), imshow(Z)
%# show overlayed images
figure, imshow(I), hold on
hImg = imshow(Z); set(hImg, 'AlphaData', 0.6);
%# also we can specify a colormap
colormap hsv
加载的 png 将是一个三维矩阵。您可以使用 repmat 将 2d 二进制矩阵转换为 3d 矩阵。然后使用 imresize 调整二进制矩阵的大小,使其与 png 的大小相同。最后,您可以显示两个矩阵与 imshow(alpha(myPng) + (1-alpha)*(myBinaryMat)) 之类的混合,其中 alpha 是介于 0 和 1 之间的混合参数。