Как убрать искажения из-за движения, из изображения

Я пытаюсь отследить движение игрушечной машины. Я записал несколько видео и сейчас пытаюсь вычислить вращение.

Моя проблема заключается в том, что из-за размытия в движении извлечение объектов с поверхности объекта стало проблематичным. Ниже изображение показывает обрезанное изображение из видеокадра. Искажения происходят в горизонтальных линиях. На этом изображении видны искажения, когда объект движется. Когда объект не движется, нет искажений.

Изображение показывает искаженное изображение автомобиля, когда оно движется вперед по диагонали, пересекающей рамку изображения.

Я попробовал фильтр Винера, основанный на медиане и дисперсии, но он не принес большого улучшения. Это только дало мне сглаженное изображение, как будто к нему было применено размытие по Гауссу.

Какие улучшения я должен сделать, чтобы улучшить изображение?

видео - 720 x 576 кадров - 25 кадров в секунду

4 ответа

Решение

На картинке видно, что вам нужно деинтерлейсировать видео, а не пытаться фильтровать то, что там есть; я помню, как делал это, просто беря все остальные строки сканирования, а затем выполняя изменение размера, чтобы вернуть его в перспективу.

Я нашел довольно крутой сайт, который рассказывает о деинтерлейсинге на тот случай, если вы захотите посмотреть, есть ли у вас другие возможности:

http://www.100fps.com/

(о, и я не очень внимательно изучил изображение, так что возможно, что существует какая-то другая схема чередования, отличная от любой другой строки; в этом случае мой первый ответ не будет работать должным образом. и это означает, что вы потеряете какое-то разрешение, но это только природа чересстрочного видео...)

Учитывая, что ваша камера выводит чересстрочное видео, вам лучше использовать одно поле видео. Либо используйте только четные строки изображения, либо только нечетные. Изображение будет раздавлено, но вы не будете смешивать два изображения вместе.

Да, это изображение должно быть чересстрочным. Исправление "искажения" из-за линейного движения - это другое дело, вам нужно выполнять линейную направленную фильтрацию в зависимости от скорости автомобиля, расстояния до камеры и скорости обтюрации. Сначала необходимо рассчитать импульсную характеристику для заданного набора условий (те, что указаны выше, которые представляют отклонение или расстояние между той же точкой, взятой в начале захвата, и в конце ее), а затем применить обратную фильтрацию. Возможно, вам придется использовать некоторые инструменты фильтрации или обработки изображений, если вы используете Matlab, это будет легко.

Следующий алгоритм представляет собой очень простой метод деинтерлейсинга:

cv::Mat input = cv::imread("img.jpg");
cv::Mat tmp(input.rows/2, input.cols*2, input.type(), input.data);
tmp = tmp.colRange(0, input.cols);
cv::Mat output;
cv::resize(tmp, output, Size(), 1, 2);

Ты пробовал:

deconvblind

Следуйте примеру по математике deconvblind. Это может хорошо работать на вашем примере изображения. Другой пример - Восстановление изображения

Другие вопросы по тегам