【问题标题】:Ripple effect in MATLABMATLAB 中的波纹效应
【发布时间】:2015-01-13 07:29:39
【问题描述】:

我想写一个函数newim = rippleim(im),它获取一张图片并返回一张带有涟漪效果的新图片。

我认为计算所有点到(p,q) 的距离,然后乘以sin(d).*exp(-d) 会产生很好的衰减波效果。

n = 800;
m = 800;
im = zeros(n,m,3);
p = [round(m*.5) round(n*.5)];
[x y] = meshgrid(1:m,1:n);
x = x - p(1,1);
y = y - p(1,2);
d = (x .^2 + y .^2).^.5;
R = cos(.05*d) .* exp(-.005*d);
G = cos(.05*d) .* exp(-.005*d);
B = cos(.05*d) .* exp(-.005*d);
im = cat(3,R,G,B);
imshow(im);

我得到了,

通过对[0 1] 的标准化,它变得更好了,

看起来还是不对。

我什至在 python here 中搜索了一些关于动画的类似案例。但我只想要一个固定的效果。

Q1如何提升效果?

Q2如何将其应用于现有图像?

谢谢,

【问题讨论】:

    标签: image matlab image-processing image-effects


    【解决方案1】:

    我终于找到了答案。我要找的,可以通过warp 命令来完成。

    所以我在cos(d)*exp(-d) 的帮助下定义了一个 3D 波纹表面,并在上面纹理我的图片。

    im = imread('peppers.png');
    n = -10 : .1 : 10;
    [X,Y] = meshgrid(n,n);
    d = (X .^ 2 + Y .^ 2) .^ .5;
    Z = cos(1.5 * d) .* exp(-.1 .* d);
    warp(X,Y,Z,im);axis equal;axis off;
    

    【讨论】:

      【解决方案2】:

      关于您的第一部分问题,我建议您手动手动创建您想到的查找表“功能”,而不是通过反复试验找到适合您口味的功能,然后适合它的高阶多项式。

      关于你的第二部分,我猜你的意思是用它作为面具。 在这种情况下,您可以简单地将标准化版本的波纹效果乘以您的图像:

      imp = double(imread('peppers.png'));
      n = size(imp,1);
      m = size(imp,2);
      p = [round(m*.5) round(n*.5)];
      [x,y] = meshgrid(1:m,1:n);
      x = x - p(1,1);
      y = y - p(1,2);
      d = (x .^2 + y .^2).^.5;
      mask = cos(.05*d) .* exp(-.005*d);
      im = (mask-min(mask(:)))./ ( max(mask(:))-min(mask(:)));
      I = bsxfun(@times,im,imp);
      imshow(I/255);
      

      【讨论】:

      • 谢谢。关于效果有什么建议吗?一些公式可以提供比sin*exp 更自然的结果?再次感谢。
      • 很抱歉不接受这个答案。也许我的问题不够清楚。我希望能为你弥补。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 2017-05-12
      相关资源
      最近更新 更多