图像处理水波纹效果

总结起来就是将水波圆周从0-R逐渐扩大并逐帧显示。在扩大的同时赋予该像素点波动函数和能量递减的变换。颜色就是对像素点四个方向取整(色彩邻域),取权值相乘,最后赋予回给该点。

可以随机自动选择涟漪生成点的圆心,涟漪波及的半径等。

按道理应该是动态显示的,但是由于无法放视频和gif图片的尺寸问题,只能在博客中显示最后效果。

下图是效果:

确定涟漪范围代码:

 dis=dx*dx+dy*dy;
 if dis>R*R || dis==0
     new=[i j k];
else
     dis=sqrt(dis);
a= ((R-dis) * wave*l * sin(dis/wave * 2*pi))/(R*dis); %圆形波动+能量递减(R-dis)/R
*dis去模拟水波效果    
i1=(i+dy*a);         %获得迁移变量
j1=(j+dx*a);         %获得迁移变量

水波效果能量变换核心代码:

float_Y=new(1)-floor(new(1)); %这一步可以算是归一化,方便计算后面四个点的权重
float_X=new(2)-floor(new(2));
new_up_left=[floor(new(1)) floor(new(2)) ];          %获得像素位置的四个邻域
new_up_right=[floor(new(1)) ceil(new(2)) ];
new_down_left=[ceil(new(1)) floor(new(2)) ];
new_down_right=[ceil(new(1)) ceil(new(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,k)=value_up_left*img(new_up_left(1),new_up_left(2),new(3))+ ...
value_up_right*img(new_up_right(1),new_up_right(2),new(3))+ ...
                                
value_down_left*img(new_down_left(1),new_down_left(2),new(3))+ ...
                               
value_down_right*img(new_down_right(1),new_down_right(2),new(3));%将该点计算后的颜色结果赋予该点
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值