2015-10-16 4 views
0

У меня есть пиксельные местоположения P точек на -constant-image, для T итераций алгоритма, поэтому locations = [T x 2*P] double.Как оживить точки на изображении в MATLAB?

Теперь я хочу создать анимацию, где она изобразит изображение, затем нарисует точки, приостанавливает N секунд и обновляет их местоположение до следующего шага. Я не знаю, есть ли стандартный способ следовать. Я думаю, что мне нужно что-то вроде:

figure; 
imshow(img); 
hold on; 
for t=1:T 
    anim = updatePlot(locations(t,:), anim); % ? 
end 

Как я могу реализовать эту функцию updatePlot?

Спасибо за помощь!

+0

При каждом обновлении вам нужно было отображать только текущий набор точек, или вы хотите, чтобы все точки, которые ранее видели до текущей точки, отображались? В частности, допустим, у нас есть момент времени t-1. В момент 't' вы хотите, чтобы точки в момент времени t-1 исчезли, и только точки в момент времени' t' были видны? – rayryeng

+0

Мне только нужно, чтобы появлялись точки (t, :) ', да, я хочу, чтобы они были удалены. Но также может быть очень приятно, если я смогу добавить эффект перехода (например, постепенное исчезновение или интерполяцию), это будет демонстрация проекта, чтобы максимально «красиво» :) – jeff

ответ

1

Вы можете сделать это несколькими различными способами. Первый способ был бы дать построенным точкам ручки, так что вы можете удалить их до следующей итерации:

figure 
imshow(img); 
hold on; 
for t = 1:T 
    % delete the previous points plotted (skip t = 1 since they won't exist) 
    if t > 1 
     delete(hPoints); 
    end 
    hPoints = plot(xLocations(t,:),yLocations(t,:),'.'); 
    getframe; 
    pause(N); 
end 

(я точно не знаю, как вы разбираете свои места вдоль каждой строки, чтобы отделить й и у компоненты, так что я просто использовал xLocations и yLocations для представления этих значений)

Второй способ будет перерисовать все изображение на каждой итерации:.

figure 
for t = 1:T 
    clf; 
    imshow(img); 
    hold on; 
    plot(xLocations(t,:),yLocations(t,:),'.'); 
    getframe; 
    pause(N); 
end 

Обратите внимание, что imshow может иметь свой собственный эффект getframe, так что вы увидите мерцание изображения перед построением точек - если это произойдет, просто переключитесь с imshow на image.

+0

Большое спасибо Брайану. что я ищу. Но мне интересно, можем ли мы добавить эффект перехода тоже. Я все равно принимаю ваш ответ, но будущие пользователи: пожалуйста, не стесняйтесь предлагать способы перехода. – jeff

+0

Что именно вы подразумеваете под переходом? Ваш комментарий заставил меня понять, что я забыл включить паузу в течение N секунд, что можно сделать с помощью 'pause (N)' - я отредактировал ответ соответствующим образом. Какой эффект перехода вы ищете? –

+0

Я не уверен, на самом деле :) Я просто хочу сделать приятную презентацию/демонстрацию. Одна из основных вещей может заключаться в том, что «точки (t)» исчезают, а «точки (t + 1)» исчезают. Или каждая точка может «перемещаться» постепенно в следующее место. Просто чтобы люди смотрели процесс лучше. – jeff

Смежные вопросы