Я работаю над прототипом приложения для создания карты (изображения) ткани, отсканированной с помощью микроскопа. Для этого я:
- записываю видео, пока я использую микроскоп для «исследования» ткани
- извлечение некоторых кадров
- сшивание их для получения панорамного изображения.
Код для извлечения кадров из видео прост и понятен сам по себе:
import cv2
vidcap = cv2.VideoCapture('.\images\microscope2.avi')
success,image = vidcap.read()
count = 0
success = True
while success:
success,image = vidcap.read()
if (count / 20) * 20 == count:
cv2.imwrite("./images/microscope/frame%d.jpg" % (count/20), image)
if cv2.waitKey(10) == 27:
break
count += 1
Как вы можете заметить, я просто извлекаю один кадр каждые 20. Моя текущая проблема заключается в том, что некоторые кадры размыты, поэтому алгоритм сшивания не может обнаружить особенности, чтобы выровнять и перекрыть изображения.
Одно из решений может состоять в том, чтобы взять несколько — скажем, 3 — последовательных кадра каждые 20, найти тот, который менее размыт, и отбросить остальные.
Другие идеи о том, как я мог бы изменить свой подход, приветствуются (в качестве комментария), пожалуйста, имейте в виду, что я работаю над прототипом, поэтому я хотел бы не тратить слишком много времени на кодирование решения. Кроме того, его не нужно запускать в реальном времени.
Вопрос:
Есть ли умный/простой способ сравнить очень похожие изображения, чтобы определить, какое из них менее (или более) размыто?