基于二值图像的Matlab叠加图像

基于二值图像的Matlab叠加图像,matlab,Matlab,我正在尝试将imagesc图像覆盖在二值图像之上。我在网上搜索,但没有找到。下面是我的代码: figure; imshow(BW4); hold on imagesc(image2,'AlphaData',0.5); axis equal; axis tight; axis off; myColorMap = jet(256); myColorMap(1,:) = 0; colormap(myColorMap); colorbar; hold off 我得到的输出看起来像下图右侧,而不是白色顶

我正在尝试将imagesc图像覆盖在二值图像之上。我在网上搜索,但没有找到。下面是我的代码:

figure;
imshow(BW4);
hold on
imagesc(image2,'AlphaData',0.5); axis equal; axis tight; axis off;
myColorMap = jet(256);
myColorMap(1,:) = 0;
colormap(myColorMap); colorbar;
hold off
我得到的输出看起来像下图右侧,而不是白色顶部的jet colormap线条。有人能帮我解决这个问题吗?我感谢你的时间和努力

谢谢

二值图像

射流图像

结果我得到了我不想要的东西


因此,我们首先读取您的bw数据
a
,并创建一些jet图像
b
,这是一些nxm强度矩阵:

 a=rgb2gray(imread('fFIG2.png'));
 a=a==max(a(:)); 
 a=a>0; % now it is binary

% make jet data with 0 being it's minimal value
b=(imresize(peaks(100),size(a))).*a ;
b=b.*(b>0);
现在,我们将
b
中0到1之间的数据标准化,并将其生成RGB数组。我们将创建一个遮罩并为其指定白色

cmap=[0,0,0;jet(255)]; % set the colormap to be always black and jet

% normalize from nxm matrix to nxmx3 rgb values
c=b;
c=round( ((c-min(c(:)) )/(max(c(:))-min(c(:))))*(length(cmap)-1)+1);
im=reshape(cmap(c(:),:),[size(c),3]);

% get the mask for all pixels that are in a but are zero in b
bw2=repmat( (a>0 & b==0),[1 1 3]);
im(bw2)=1; % assign this pixels with rgb=white
imagesc(im)

这里几乎没有问题。检查文档中的
轴ij
轴xy
,查看iimshow和imgagesc轴之间的差异以及如何更改。另外,定义覆盖?如果你覆盖它,你会得到第二个,不是吗?@AnderBiguri,我不知道你指的是什么覆盖?请你详细说明一下好吗?不,你指的是叠加,它在你问题的标题中。你想覆盖什么?白色上面的颜色?你到底想覆盖什么?我对你的问题陈述感到困惑。那么,你想要的是标有“Jet image”的图像吗?或者是您的输入图像
image2
?但这种方法会使所有内容都变成黑色背景。我想要的是,当我把jet图像放在二值图像的顶部时,我应该得到白色背景。这就像在二值图像上叠加imagesc绘图。换句话说,在imagesc绘图中围绕线条的黑色区域应该是白色的。我仍然不明白。你想把喷流叠加在BW图像上,并且能够独立地看到它们吗?i、 e.要在图像中看到jet+白色+黑色?确切地说,背景将是黑色的,我希望jet图像位于二值图像的白色背景上。好的,这假设jet图像中也有零(黑色),白色部分是一个遮罩,以显示该区域的所有内容?我将编辑我的答案…之前的快速问题,喷气式飞机图像是否总是有正值,或者它们可能是什么?换句话说,黑色总是零吗?