matlab练习程序(水波特效)

还记得原来写过一个对图像进行波纹扭曲操作的博文。

这次实现的是水波特效,其实就是通过正余弦函数表示波纹中心位置慢慢向外扩散,通过叠加衰减因子使振幅不断减小,进而产生水波的效果。

效果如下:

原图:

波纹特效:

matlab代码如下:

clear all;
close all;
clc;

cenH=128;       %波纹中心
cenW=128;
R=80;           %扩散半径
amplitude =3;   %幅度
wavelength=30;  %波长
phase =20;      %相位

img = double(imread('lena.jpg'));
imshow(img,[])
[H, W] = size(img);

imgn=zeros(H,W);
ii=1;
jj=1;
for i=1:H
   for j=1:W 
       dy = i-cenH;
       dx = j-cenW;
       dis=dx*dx+dy*dy;
       if dis>R*R || dis==0
          pix=[i j];         
       else
            dis=sqrt(dis);
            amount= amplitude * sin(dis/wavelength * 2*pi - phase);
            amount = amount*(R-dis)*wavelength/(R*dis);
            ii=(i+dy*amount);
            jj=(j+dx*amount);           
 
            if ii<=1
               ii=1; 
            end           
            if jj<=1
               jj=1; 
            end             
            if ii>=H
               ii=H ;
            end            
            if jj>=W
                jj=W;
            end                
            pix=[ii jj];
       end
                
       float_Y=pix(1)-floor(pix(1)); 
       float_X=pix(2)-floor(pix(2));  
       
       pix_up_left=[floor(pix(1)) floor(pix(2))];          %四个相邻的点
       pix_up_right=[floor(pix(1)) ceil(pix(2))];
       pix_down_left=[ceil(pix(1)) floor(pix(2))];
       pix_down_right=[ceil(pix(1)) ceil(pix(2))]; 
       
       value_up_left=(1-float_X)*(1-float_Y);              %计算临近四个点的权重
       value_up_right=float_X*(1-float_Y);
       value_down_left=(1-float_X)*float_Y;
       value_down_right=float_X*float_Y;       
       
       imgn(i,j)=value_up_left*img(pix_up_left(1),pix_up_left(2))+ ...
                 value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...
                 value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...
                 value_down_right*img(pix_down_right(1),pix_down_right(2));
   end
end

figure;
imshow(imgn,[])
imwrite(mat2gray(imgn),'imgn.jpg')

参考:https://blog.csdn.net/jia20003/article/details/13159535

转载于:https://www.cnblogs.com/tiandsp/p/10121479.html

你可能感兴趣的:(matlab练习程序(水波特效))