在MATLAB中叠加两个图像

时间:2013-09-08 10:55:48

标签: image matlab image-processing

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

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

有人可以提出一些其他功能或方法来叠加两个图像吗?谢谢和问候。

3 个答案:

答案 0 :(得分:6)

尝试此操作以叠加两张图像。

figure,imshowpair(originalImage,edgeImage);

这会给你一个数字,它是两者的组合。 imshowpair有一些额外的选项,如混合,差异,蒙太奇。也尝试一下。

答案 1 :(得分:5)

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

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

答案 2 :(得分:2)

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

使用图片AlphaData提到的ShaiSteve在很多情况下会给出非常好的结果。但是,如果您需要使用原始分辨率保存图像(并且不使用getframeprintsaveas等) ,以下内容会有所帮助。

(我使用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)

希望它有所帮助!