【发布时间】:2013-09-08 10:55:47
【问题描述】:
我想在matlab中叠加两个相同尺寸的图像。我尝试使用imfuse 函数,但得到的图像与我想要的不一样。
第一张图像是在我的原始图像上应用 Canny 边缘检测器后获得的图像的负片。我想将这个带有黑边的负像强加到我的原始图像上。
有人可以建议一些其他功能或方法来叠加两个图像吗?谢谢和问候。
【问题讨论】:
标签: image matlab image-processing
我想在matlab中叠加两个相同尺寸的图像。我尝试使用imfuse 函数,但得到的图像与我想要的不一样。
第一张图像是在我的原始图像上应用 Canny 边缘检测器后获得的图像的负片。我想将这个带有黑边的负像强加到我的原始图像上。
有人可以建议一些其他功能或方法来叠加两个图像吗?谢谢和问候。
【问题讨论】:
标签: image matlab image-processing
您可以使用第二张图片的'AlphaData' 属性:
>> imshow( origImg ); hold on;
>> h = imagesc( edgeImg ); % show the edge image
>> set( h, 'AlphaData', .5 ); % .5 transparency
>> colormap gray
【讨论】:
试试这个来叠加两张图片。
figure,imshowpair(originalImage,edgeImage);
这将为您提供一个数字,它是两者的组合。 imshowpair 有一些额外的选项,如混合、差异、蒙太奇。也试试吧。
【讨论】:
我发现了一些东西,我想我应该在这里分享。
正如Shai 和Steve 提到的,使用图像的AlphaData 在许多情况下会产生非常好的结果。但是,如果您需要以 原始 分辨率保存图像(而不是使用getframe、print、saveas 等),以下方法会有所帮助。
(我用Steve's article中的第二个例子)
% 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)
希望它对某人有所帮助!
【讨论】:
reddish 颜色?我想为特定像素显示叠加的蓝色、红色、黄色、绿色。我有二进制掩码,其中包含应为每种颜色叠加的像素。