matlab練習程式(水波特效)

Dsp Tian發表於2018-12-14

還記得原來寫過一個對影象進行波紋扭曲操作的博文

這次實現的是水波特效,其實就是通過正餘弦函式表示波紋中心位置慢慢向外擴散,通過疊加衰減因子使振幅不斷減小,進而產生水波的效果。

效果如下:

原圖:

波紋特效:

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

相關文章