题目如下:
利用MATLAB工具编写一段代码,实现一幅小尺寸彩色照片居中叠加于一幅大尺寸的彩色风景图上,彩色照片保留50%的透明度。
你需要将两张将要叠加的图片,分别命名为e1.jpg
和e2.jpg
,我使用的两张照片如下:
接下来,运行以下代码:
clc,close all,clear all;
% 分别读取两幅彩色图像
% 注意I1要比I2大一些
I1=imread('e1.jpg');
I2=imread('e2.jpg');
% 显示原图1
imshow(I1);
% 显示原图2
figure,imshow(I2);
% 确定加权融合系数
a = 0.5; b = 1-a;
% 两幅不同尺寸的图像叠加
% 分别计算两幅彩色图像的尺寸
s1 = size(I1);
s2 = size(I2);
r1 = floor((s1(1)-s2(1))/2)+1;
r2 = floor((s1(1)+s2(1))/2);
c1 = floor((s1(2)-s2(2))/2)+1;
c2 = floor((s1(2)+s2(2))/2);
% 取出I1中与I2尺寸一致的局部图像块,作为临时图像
tmp = I1(r1:r2, c1:c2,:);
% 局部叠加
im_fusion = a*tmp + b*I2;
% 局部叠加结果赋值给I1中对应的位置
I1(r1:r2,c1:c2,:) = im_fusion;
% 显示结果
figure,imshow(I1);
得出叠加后的照片,用Photoshop裁剪掉未叠加的部分,最终图像如下: