【发布时间】:2011-09-25 09:02:06
【问题描述】:
我有一个图像 (png),我想将它放在一个由 a 和一个值为 0-1 的二维矩阵组成的热图(可以这么说)下面。因此,点的强度将取决于矩阵中的值有多大。
我可以使用 imshow(matrix) 但这完全覆盖了下面的图像。是否有可能不绘制任何矩阵值 <.05>
【问题讨论】:
标签: matlab matlab-figure
我有一个图像 (png),我想将它放在一个由 a 和一个值为 0-1 的二维矩阵组成的热图(可以这么说)下面。因此,点的强度将取决于矩阵中的值有多大。
我可以使用 imshow(matrix) 但这完全覆盖了下面的图像。是否有可能不绘制任何矩阵值 <.05>
【问题讨论】:
标签: matlab matlab-figure
这是在彩色图像上叠加二进制热图的示例:
%# 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
【讨论】:
'AlphaData' 的二维矩阵,那么您可以在选定的位置应用颜色图,而不会影响图像中的其他区域。
Z 本身作为 alpha 映射:h=imshow(I); set(h, 'AlphaData',Z)(在这种情况下,图像变为透明,显示图形灰色背景背后)
加载的 png 将是一个三维矩阵。您可以使用 repmat 将 2d 二进制矩阵转换为 3d 矩阵。然后使用 imresize 调整二进制矩阵的大小,使其与 png 的大小相同。最后,您可以显示两个矩阵与 imshow(alpha(myPng) + (1-alpha)*(myBinaryMat)) 之类的混合矩阵,其中 alpha 是介于 0 和 1 之间的混合参数。
【讨论】: