На самом деле вся проблема является немного более сложным, чем вы могли бы подумать, в самом начале. Давайте посмотрим так: когда вы перемещаете камеру по всему миру, все, что движется близко к камере, движется быстрее, чем те, что находятся в фоновом режиме, - поэтому объекты на разных глубинах меняют свое относительное расстояние (посмотрите на свой искатель, перемещая голову и посмотреть, как это указывает на разные вещи). Это означает, что изображение фактически трансформируется и не только переводит (перемещается по x или y) - так как вы хотите сопутствовать этому? Что вам нужно сделать, так это сделать вывод о том, насколько перемещена камера (перевод по х, y и z) и насколько она вращается (с углами рыскания, панорамирования и наклона).Это не очень простая задача, но OpenCV приходит с очень хорошим пакетом: http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html
Так что я рекомендую вам прочитать больше на гомография (http://en.wikipedia.org/wiki/Homography), модель камеры и калибровки, как это возможно, а затем думать, что вы на самом деле хотите, чтобы стабилизировать для и, если это только для углов поворота, задача намного проще, чем если бы вы также хотели бы стабилизировать трансляционные колебания.
Если вы не хотите проявлять фантазию и пренебрегать третьим измерением, я предлагаю вам усреднить оптический поток, фильтр высоких частот и компенсировать это перемещение с переводом изображения в противоположное направление. Это будет поддерживать ваше изображение более или менее в середине кадра, и только небольшие быстрые изменения будут противодействовать.
Благодарим за быстрый ответ. Можете ли вы рассказать мне больше о первом подходе? Простой '' 'достаточно, чтобы сделать фильтр нижних частот? Вот что я пробовал. –
В принципе, нет. Пожалуйста, взгляните на отредактированный ответ. – sansuiso