【问题标题】:Image overlay with matrix带矩阵的图像叠加
【发布时间】:2011-09-25 09:02:06
【问题描述】:

我有一个图像 (png),我想将它放在一个由 a 和一个值为 0-1 的二维矩阵组成的热图(可以这么说)下面。因此,点的强度将取决于矩阵中的值有多大。

我可以使用 imshow(matrix) 但这完全覆盖了下面的图像。是否有可能不绘制任何矩阵值 <.05>

【问题讨论】:

    标签: matlab matlab-figure


    【解决方案1】:

    这是在彩色图像上叠加二进制热图的示例:

    %# 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' 的二维矩阵,那么您可以在选定的位置应用颜色图,而不会影响图像中的其他区域。
    • @ParagS.Chandakkar: 是的,在上面的例子中,我们可以使用掩码矩阵 Z 本身作为 alpha 映射:h=imshow(I); set(h, 'AlphaData',Z)(在这种情况下,图像变为透明,显示图形灰色背景背后)
    【解决方案2】:

    加载的 png 将是一个三维矩阵。您可以使用 repmat 将 2d 二进制矩阵转换为 3d 矩阵。然后使用 imresize 调整二进制矩阵的大小,使其与 png 的大小相同。最后,您可以显示两个矩阵与 imshow(alpha(myPng) + (1-alpha)*(myBinaryMat)) 之类的混合矩阵,其中 alpha 是介于 0 和 1 之间的混合参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      相关资源
      最近更新 更多