经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 职业生涯 » 查看文章
matlab练习程序(水波特效)
来源:cnblogs  作者:MATLAB基于模型的设计  时间:2018/12/17 9:31:34  对本文有异议

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

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

效果如下:

原图:

波纹特效:

matlab代码如下:

 
  1. clear all;
  2. close all;
  3. clc;
  4.  
  5. cenH=128; %波纹中心
  6. cenW=128;
  7. R=80; %扩散半径
  8. amplitude =3; %幅度
  9. wavelength=30; %波长
  10. phase =20; %相位
  11.  
  12. img = double(imread('lena.jpg'));
  13. imshow(img,[])
  14. [H, W] = size(img);
  15.  
  16. imgn=zeros(H,W);
  17. ii=1;
  18. jj=1;
  19. for i=1:H
  20. for j=1:W
  21. dy = i-cenH;
  22. dx = j-cenW;
  23. dis=dx*dx+dy*dy;
  24. if dis>R*R || dis==0
  25. pix=[i j];
  26. else
  27. dis=sqrt(dis);
  28. amount= amplitude * sin(dis/wavelength * 2*pi - phase);
  29. amount = amount*(R-dis)*wavelength/(R*dis);
  30. ii=(i+dy*amount);
  31. jj=(j+dx*amount);
  32. if ii<=1
  33. ii=1;
  34. end
  35. if jj<=1
  36. jj=1;
  37. end
  38. if ii>=H
  39. ii=H ;
  40. end
  41. if jj>=W
  42. jj=W;
  43. end
  44. pix=[ii jj];
  45. end
  46. float_Y=pix(1)-floor(pix(1));
  47. float_X=pix(2)-floor(pix(2));
  48. pix_up_left=[floor(pix(1)) floor(pix(2))]; %四个相邻的点
  49. pix_up_right=[floor(pix(1)) ceil(pix(2))];
  50. pix_down_left=[ceil(pix(1)) floor(pix(2))];
  51. pix_down_right=[ceil(pix(1)) ceil(pix(2))];
  52. value_up_left=(1-float_X)*(1-float_Y); %计算临近四个点的权重
  53. value_up_right=float_X*(1-float_Y);
  54. value_down_left=(1-float_X)*float_Y;
  55. value_down_right=float_X*float_Y;
  56. imgn(i,j)=value_up_left*img(pix_up_left(1),pix_up_left(2))+ ...
  57. value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...
  58. value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...
  59. value_down_right*img(pix_down_right(1),pix_down_right(2));
  60. end
  61. end
  62.  
  63. figure;
  64. imshow(imgn,[])
  65. imwrite(mat2gray(imgn),'imgn.jpg')

关注公众号: MATLAB基于模型的设计 (ID:xaxymaker) ,每天推送MATLAB学习最常见的问题,每天进步一点点,业精于勤荒于嬉

 打开微信扫一扫哦!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号