Я хочу написать функцию newim = rippleim(im)
, которая принимает изображение и возвращает новое изображение с эффектом пульсации на нем.Эффект пульсации в MATLAB
Я думал, вычисляя расстояние от всех точек от (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]
, это стало немного лучше,
Он по-прежнему не кажется правильным.
Я даже нашел googled и нашел некоторые подобные случаи в python here, о анимации. Но я просто хочу фиксированный эффект.
Q1 Как улучшить эффект?
Q2 Как применить его к существующему изображению?
Спасибо,
+1 - Очень приятно! – rayryeng
Спасибо. Любые предложения об эффекте? какая-то формула, которая могла бы дать более естественные результаты, чем 'sin * exp'? еще раз спасибо. – Rashid
@ Kamtal, см. Обновленный ответ –