Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воган Ли - Python для хакеров (Библиотека программиста) - 2023.pdf
Скачиваний:
5
Добавлен:
07.04.2024
Размер:
14.76 Mб
Скачать

Проект #7. Воссоздание блинк-компаратора      153

cv.imshow(window_name, image_1) cv.waitKey(330) cv.imshow(window_name, image_2) cv.waitKey(330)

if __name__ == '__main__': main()

Определяем функцию blink() с четырьмя параметрами: двумя файлами изображений, именем окна и количеством выполняемых переключений. Цикл for начинается с диапазона, установленного на количество переключений изображений. Поскольку доступ к меняющемуся индексу нам не требуется, мы применяем одиночное нижнее подчеркивание, указывая на использование незначительной переменной. Как уже говорилось, это предотвратит выдачу проверяющими код программами предупреждения «unused variable».

Теперь вызываем метод OpenCV imshow(), передавая ему имя окна и первое изображение. Это будет зарегистрированное первое изображение. Затем приостанавливаем программу на 330 мс, продолжительность, рекомендованную Клайдом Томбо.

Повторяем две предыдущие строки кода для второго изображения. Поскольку эти два изображения выровнены, единственное, что изменится в окне, — это транзиенты. Если транзиент содержится только на одном изображении, то он будет мерцать. Если же транзиент находится на обоих снимках, то он будет смещаться туда-сюда.

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

Использование блинк-компаратора

Прежде чем запускать blink_comparator.py, приглушите освещение в комнате, чтобы сымитировать просмотр изображений через окуляры устройства. Теперь запускайте программу. Сначала вы должны увидеть две отчетливые яркие точки, мерцающие возле центра изображения. На следующей паре изображений те же точки станут очень маленькими — всего пиксель в диаметре, но вы все равно должны их разглядеть.

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

154      Глава 5. Поиск Плутона

Четвертый цикл содержит один транзиент, представленный на левом изображении. Теперь он должен уже не скакать туда-сюда, как на предыдущих снимках, а мерцать.

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

Заключительный цикл использует негативные варианты первой пары изображений. Яркий транзиент здесь проявляется в виде мигающих черных точек. Именно такой тип изображения использовал Клайд Томбо, поскольку это экономило время. Ввиду того что черную точку так же легко обнаружить, как и белую, он не видел необходимости распечатывать позитивные изображения для каждого негатива.

Вдоль левой стороны зарегистрированного негатива видна черная полоса, которая показывает размер смещения, необходимый для выравнивания изображений (рис. 5.10). Ее не удастся увидеть на позитивных снимках, потому что она сливается с черным фоном.

Рис. 5.10. Негативное изображение, 6_bright_transient_neg_left_registered.png

Во всех циклах можно заметить тусклую звезду, мерцающую в верхнем левом углу каждой пары снимков. Это не транзиент, а ложноположительный результат, вызванный краевым эффектом. Краевой эффект — изменение в изображении вследствие его неверного выравнивания. Опытный астроном проигнорировал бы эту тусклую звезду, потому что она появляется очень близко к краю изображения и возможный транзиент не перемещается между изображениями,а просто тускнеет.

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