在MATLAB中叠加两个图像
image
image-processing
matlab
6
0

我想在matlab中叠加两个相同尺寸的图像。我尝试使用imfuse函数,但是得到的图像与我想要的图像不同。

第一幅图像是对我的原始图像应用Canny边缘检测器后获得的图像的负片。我想将此带有黑色边缘的负片图像强加到我的原始图像上。

有人可以建议其他功能或方法来叠加两个图像吗?谢谢并恭祝安康。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

尝试将此叠加两个图像。

figure,imshowpair(originalImage,edgeImage);

这将给您一个单一的数字,将两者结合起来。 imshowpair还有一些其他选项,例如blend,diff,montage。也尝试一下。

收藏
评论

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

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

我发现了一些东西,我想应该在这里分享。

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

(我使用了史蒂夫文章中的第二个示例)

% 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)

希望它能对某人有所帮助!

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号