其实就是用sin或cos对x,y坐标进行变换,处理的时候依然是反向变换。
类似的,用不同的函数能得到不同的扭曲效果,比如log,1/x,exp等等。
效果如下:
代码如下(还给出了如何生成gif图片的代码):
clear all;close all;clc; img=imread('lena.jpg');
[h w]=size(img); wave=[,]; %[幅度,周期]
newh=h+*wave();
neww=w+*wave();
rot=; for i=:
imgn=zeros(newh,neww); rot=rot+0.2;
for y=:newh
for x=:neww yy=round((y-wave())-(wave()*cos(*pi/wave()*x+rot))); %依然是逆变换
xx=round((x-wave())-(wave()*cos(*pi/wave()*y+rot))); if yy>= && yy<=h && xx>= && xx<=w
imgn(y,x)=img(yy,xx);
end end
end figure();
imshow(imgn,[]); imgn(:,:,)=imgn; %生成gif图片
imgn(:,:,)=imgn(:,:,);
[I,map]=rgb2ind(mat2gray(imgn),);
if i==0
imwrite(I,map,'re.gif','Loopcount',inf,'DelayTime',1.5);
else
imwrite(I,map,'re.gif','DelayTime',0.1,'WriteMode','Append');
end
end