在MATLAB中叠加两张图片

3
我想在matlab中叠加两个相同尺寸的图像。我尝试使用"imfuse"函数,但得到的图像与我想要的不同。第一张图片是对我的原始图片应用Canny边缘检测后得到的负片。我想将这个有黑色边缘的负片叠加到我的原始图像上。是否有其他函数或方法可以实现两个图像的叠加?谢谢。
3个回答

6

您可以使用第二张图片的'AlphaData'属性:

>> imshow( origImg ); hold on;
>> h = imagesc( edgeImg ); % show the edge image
>> set( h, 'AlphaData', .5 ); % .5 transparency
>> colormap gray

6
尝试这个方法来叠加两张图片。
figure,imshowpair(originalImage,edgeImage);

这将给你一个组合了两者的单个数字。imshowpair还有一些额外的选项,如blend、diff和montage。也可以尝试使用它们。

2

我发现了一些内容,想在这里分享。

正如ShaiSteve所提到的,在许多情况下,使用图像的AlphaData可以得到非常好的结果。但是,如果您需要以原始分辨率保存图像(而不使用getframeprintsaveas等方法),以下内容可能会有所帮助。

(我使用了Steve文章中的第二个示例

% Reading images
E = imread('http://www.mathworks.com/cmsimages/63755_wm_91790v00_nn09_tips_fig3_w.jpg');
I = imread('http://www.mathworks.com/cmsimages/63756_wm_91790v00_nn09_tips_fig4_w.jpg');

% normalizing images
E = double(E(:,:,1))./double(max(E(:)));
I = double(I(:,:,1))./double(max(I(:)));

这里介绍使用 AlphaData(透明度)实现叠加效果:
figure, imshow(E), hold on
red = cat(3, ones(size(E)), zeros(size(E)), zeros(size(E)));
h = imshow(red);
set(h, 'AlphaData', I);

为了得到与上述相同的外观,但是在一个矩阵中(我无法使用 imfuse 实现这一点),您可以使用以下简单的代码:
Comb = E;
Comb(:,:,1) = (1-I).*E + I; % red
Comb(:,:,2) = (1-I).*E; % green
Comb(:,:,3) = (1-I).*E; % blue

figure, imshow(Comb)

希望这能对某些人有所帮助!

很好!有没有可能以某种方式显示多个叠加的颜色,而不是单一的“红色”颜色?我想要为特定像素显示叠加的蓝色、红色、黄色和绿色。我有包含应该叠加每种颜色的像素的二进制掩码。 - Tin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接