⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 videomorpher.m

📁 实现图像morphing的matlab代码
💻 M
字号:
%Takes two composite image files prepared in 'pointinder.m' and morphs from
%one to the other smoothly

clear;

for q=1:31

% %Read in composite image/vector files prepared in pointfinder=====
% [FileName,PathName] = uigetfile('*.*','Choose The Starting Picture Composition');
% [FileName2,PathName2] = uigetfile('*.*','Choose The Target Picture Composition');

load(strcat('C:\Documents and Settings\Administrator\Desktop\Work\Uni\Fourth Year\Image Processing\Morphing Project\Video Morph\fcomps\', [num2str(q) '.jpg.mat']));
images=double(pic1);
vectors=vector;

load(strcat('C:\Documents and Settings\Administrator\Desktop\Work\Uni\Fourth Year\Image Processing\Morphing Project\Video Morph\fcomps\',['s' num2str(q) '.jpg.mat']));
imagef=double(pic1);
vectorf=vector;

[x,y,z]=size(images); %adds on corner points to vectors - allows cubic to work
corners=[1,1;1,y;x,1;x,y];
vectors=cat(1,vectors,corners);
vectorf=cat(1,vectorf,corners);
vecdiff=(vectors-vectorf);
[X,Y] = meshgrid(1:x,1:y);

frames=30;

final=zeros(x,y,z,frames+1);final(:,:,:,1)=images;
finalf=zeros(x,y,z,frames+1);finalf(:,:,:,frames+1)=imagef;
morph=zeros(x,y,z,frames+1);


%=====================================

%Interpolate changes across all pixels in image
totaltranx=(griddata(vectorf(:,1),vectorf(:,2),vecdiff(:,1),X,Y,'v4'))';
totaltrany=(griddata(vectorf(:,1),vectorf(:,2),vecdiff(:,2),X,Y,'v4'))';

n=q;
    
    %Apply changes incrementally==========
    transx=round(totaltranx.*(n-1)/frames);
    transy=round(totaltrany.*(n-1)/frames);
    
    tranfx=round(transx-totaltranx);
    tranfy=round(transy-totaltrany);
    %=====================================

    for i=1:x
        for j=1:y

            if (i+transx(i,j)<=x)&&(j+transy(i,j)<=y)&&(i+transx(i,j)>=1)&&(j+transy(i,j)>=1)
                final(i,j,1,n)=images(i+transx(i,j),j+transy(i,j),1);
                final(i,j,2,n)=images(i+transx(i,j),j+transy(i,j),2);
                final(i,j,3,n)=images(i+transx(i,j),j+transy(i,j),3);
            end
            
            if (i+tranfx(i,j)<=x)&&(j+tranfy(i,j)<=y)&&(i+tranfx(i,j)>=1)&&(j+tranfy(i,j)>=1)
                finalf(i,j,1,n)=imagef(i+tranfx(i,j),j+tranfy(i,j),1);
                finalf(i,j,2,n)=imagef(i+tranfx(i,j),j+tranfy(i,j),2);
                finalf(i,j,3,n)=imagef(i+tranfx(i,j),j+tranfy(i,j),3);
            end
        end
    end



for p=1:frames+1
    morph(:,:,:,p)=imlincomb((p-1)/frames,finalf(:,:,:,p),(frames-p+1)./(frames),final(:,:,:,p));
end
morph=uint8(morph);
figure(1)
    h=imshow(morph(:,:,:,q));
    saveas(h,['framet' num2str(q) '.tif'])

end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -