Как создать последовательность изображений, которые «вибрируют / деформируют» в определенных c точках расположения пикселей на основе определенной формы? - PullRequest
0 голосов
/ 29 февраля 2020

Допустим, я создал изображение зебры, и в определенном месте в пикселях я бы хотел, чтобы линии «вибрировали» туда-сюда на определенных частотах в последовательности изображений времени t, предпочтительно с субпиксельным сдвигом. Обведенная область - это самая значительная область, которую я намеревался имитировать.

enter image description here

Изображение зебры можно получить с помощью следующего кода:

m=75;
n=75;
stripe_px=1;
single_pattern=[ones(m,stripe_px),zeros(n,stripe_px)];
zebra=repmat(single_pattern,[1 ceil(n/stripe_px*2)]);
zebra=zebra(:,1:n);

А интересующая область для усиления значимого местоположения, как показано на рисунке ниже (как обведенная область на изображении зебры выше):

enter image description here

Эту форму можно легко воспроизвести, используя код формулы:

X=repmat(1:m,[n 1]);
Y=repmat((1:n)',[1 m]);
Shape=0.04*( ((((X/m)-0.75).^2).*X) - ((((Y/n)-0.75).^2).*Y) );

Теперь, основываясь на этой форме, как мне «вибрировать / деформировать» в горизонтальном направлении (только) области представляет интерес с определенной частотой для последовательности изображений. Визуально это выглядит примерно так:

enter image description here

Я смотрел на imwarp ( ссылка ), но я не уверен, что он может сдвигать локальные пиксели, где обычно это было предназначено для преобразования всего изображения, кроме того, я не уверен, как правильно использовать его в моем случае. Простой псевдокод для изображения того, чего я пытаюсь достичь:

omega=3;
T=30;
Fs=20;
dt=1/Fs;
for t=0:dt:T
    vibrate_im=(zebra + Shape) * sin(omega*t);
end

Есть идеи, как это сделать? Спасибо, что нашли время, читая это, ценим любую помощь!

...