- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                计算机视觉课程设计实验报告
1.题  目: 图 像 变 形
2.组  员:曹英(  叶超(  李淑珍(
3.实验目的:掌握图像几何运算中变形算法
4.实验原理:对两幅图分别进行卷绕、插值,每幅图得到一序列图片,然后对这些序列图片进行加权求和,得到一序列帧,再将其显示出来,就得到了由一幅图到另一幅图的变形。
5.实验步骤:对一幅图分别选4行4列的16个控制点,在每条边上进行五等分,每条边形成六个点,加上原来的16个就是36个控制点,这样就把它分成了不规则的25小块,对每小块进行卷绕、插值,本实验我们用的是最近邻插值,目标控制点就是将图片分成标准并且相同大小的25小块的36个点。这样会得到一幅不规则图片,让它作为新的原图进行如前所述一样的处理,控制点都是这样自动产生的:一开始所选每个控制点到相应标准控制点等距离(本实验我们是分成9等分)产生一序列的36个控制点。这样每产生一幅图都对它进行相类似的处理,控制点的产生方法就是上面所说的那样。得到的一序列图片越来越接近原图,最后一幅与原图一样。这样我们就可以得到这样的一序列图片:原图,手工选控制点进行处理后得到的不规则图,循环产生控制点得到的越来越接近原图的9幅图(最后一幅与原图一样)。为了描述的方便,这里我把它编号为1_1到1_11。
对目标图进行与原图一样的处理。编号也类似,即2_1到2_11。
最后进行加权求和,第一帧是原图,第二帧是1_10与2_2加权求和,其中1_10的权值是0.9,2_2的权值是0.1,第三帧是1_9与2_3加权求和,其中1_9的权值是0.8,2_3的权值是0.2,……,第十帧是1_2与2_10加权求和,其中1_10的权值是0.1,2_2的权值是0.9,第十一帧是目标图。这样就得到了所要的结果。
这里需要说明的是两幅手工选择的控制点最好是那些有代表性的特征点,这样的话结果会更好。
下面的程序的源代码:
clear all; clc;
x1=imread(im1.jpg);
x2=imread(im2.jpg);
[m,n,p]=size(x1);
subplot(2,2,1),imshow(x1);
subplot(2,2,2),imshow(x2);
x1=double(x1);
x2=double(x2);
newx=[];
newy=[];
%在图片上选36个点将图片分成标准并且相同大小的25小块
for k=1:36
    newx(k)=fix((n/5))*(mod(k-1,6))+1;
    newy(k)=fix((m/5))*fix((k-1)/6)+1; 
end
%对原图进行分块
for k=1:36
    switch k
        case {1,2,3,4,5,6,7,12,13,18,19,24,25,30,31,32,33,34,35,36}      %边界上的点还是标准的等分点
            oldx1(k)=newx(k);
            oldy1(k)=newy(k);
        otherwise                   %在图片中选择4行4列的16个控制点
            [oldx1(k),oldy1(k)]=ginput(1);
            hold on;
            subplot(2,2,1),plot(oldx1(k),oldy1(k),o);
    end
end
%对目标图进行分块,方法同上
for k=1:36
    switch k
        case {1,2,3,4,5,6,7,12,13,18,19,24,25,30,31,32,33,34,35,36}
            oldxx1(k)=newx(k);
            oldyy1(k)=newy(k);
        otherwise
            [oldxx1(k),oldyy1(k)]=ginput(1);
            hold on;
            subplot(2,2,2),plot(oldxx1(k),oldyy1(k),*);
    end
end
%对第一张进行卷绕,插值
for i=1:29
    newspic=[];
    if mod(i,6)~=0
    for j=1:4                        %每个小块分别处理
        if j==1
            newspic=[1 newx(i) newy(i) newx(i)*newy(i)];
                
原创力文档
                        

文档评论(0)