matlab图像变形技术的实现求解

【算法原理】图像变形技术是指将一副图像A平滑地变换为另一幅图像B的方法,它实质上是将原图像平滑地变换到目标图像的一种数学变换。它是一种非常有效的视觉效果,常被用在教育及娱乐业上。图像变形的思路与技术方案有多种,其中有一个重要分支是Morphing技术。其思想是指定一个变换,该变换把第一幅图像变形成为第二幅图像。它的逆变换把第二幅图像变形为第一幅图像。由变形而生成的图像序列中,前面部分很象第一幅原始图像,中间部分既象第一幅原始图像又象第二幅图像,后面部分则很象第二幅图像。显然,图像变形不但是图像在空间域 上的变换,同时也是在时间域 上的变换。本作业的目的是利用图像变形算法产生图像A逐渐变换到图像B的过程中的每一“祯”图像,并将由变形而生成的图像序列生成一个视频文件(如AVI格式)。
设图像A与B的空间域描述函数为 和 ,其中 表示像素点的位置,而 和 则表示该位置像素点的值(可以是灰度值或RGB色彩值)。则每次变形变换产生的“一祯”图像是A图像和B图像的线性组合: ,其中 表示经过变换的时间。这个公式即是图像变形技术的基础。需要注意的是,不能将像素点值直接相加,而应该将它的RGB分量求出后(灰度图像的RGB分量值是互相相等的),再利用上面的公式分别计算新像素点的RGB分量并合成为新像素点的值。Matlab®中提供了一个名为imlincomb的函数,它可以实现多幅图像的线性组合,该函数的实现中考虑了上述分量的计算问题。它的原形为: ,其中 为组合系数, 为各个被组合的图像数据(各个图像尺寸相同)。组合结果图像为: 。至此,整个图像变形过程可以用伪代码描述为算法1:
算法1:
procedure MorphingImages;
begin
f = LoadImage(A); // 读入图像文件A和B,变形为 A -> B
g = LoadImage(B);
avi = CreateAVIFile; // 创建一个 AVI 动画文件
t = 0.00;
while (t <= 1.00) do
begin
h(x,y) = (1-t) * f(x,y) + t * g(x,y); // 图像变形
AddFrame(avi,h); // 将变形后的图像加入AVI文件,使之成为“一祯”
t = t + Step; // 处理下一祯(step 为可以调节的时间步长)
end;
SaveAVIFile(avi); // 生成最终的AVI文件
end;

需要指出的是,上面处理的A图像和B图像大小和格式应该一致。表1是本作业中需要使用的一些Matlab函数的说明。可以在Matlab®命令窗口中使用“help xxxxx”命令来得到某一函数“xxxxx”的具体用法。
表1 使用的部分函数功能列表
序号 函数名 功能
1 imread 读入一幅图像文件
2 avifile 创建一个AVI文件
3 imlincomb 多幅图像的线性组合
4 addframe 将一幅图像做为一祯加入AVI文件中
5 close 关闭并生成AVI文件

【作业要求】取2幅真彩色图像(已提供),按照上面的算法生成图像变形效果的AVI文件。

第1个回答  2009-09-17
a=imread('beach_011.jpg');
b=imread('bird_048.jpg');
mov=avifile('tuxiangbianxing.avi');
t=0.00;
while(t<=1.00)
c=imlincomb(t,a,(1-t),b);
mov=addframe(mov,c);
t=t+0.01;
end;
mov=close(mov);
附言:楼主找两张相同大小的图片取代上面的图片,把图片和M文件放在同一个文件夹里面,就可以了
第2个回答  2012-06-20
f=imread('face1.jpg');
g=imread('face2.jpg');
mov=avifile('big_work.avi');
mov.Quality=100;
mov.Fps=25;
t=0.00;
while(t<=1.00)
h=imlincomb(1-t,f,t,g);
mov=addframe(mov, h);
t=t+0.01;
end;
mov=close(mov);
相似回答