Получение и обработка стопки снимков при макросъемке


Стопку снимков при макросъемке можно получить двумя способами: перемещая объектив относительно камеры и, таким образом, изменяя плоскость фокусировки, и перемещая камеру вместе с объективом. Теоретически у обоих способов есть свои минусы. В обоих случаях меняется и масштаб резкого плана, и точка центра перспективы, из которой камера смотрит на объект. Однако меняются эти параметры по-разному. В идеале надо было бы менять еще и фокусное расстояние, но это достаточно сложно реализовать для большинства камер. Процесс получения стопки снимков достаточно кропотливый, и я решил его автоматизировать. Для этого была сделана система управления перемещением камеры с помощью компьютера. Так сказать, программно аппаратный комплекс.

Железо

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

фото

Устройство представляет собой шаговый двигатель с закрепленной на валу червячной передачей, по которой перемещается гайка с толкателем подвижной части салазок. Для уменьшения люфта гайка сделана разрезной, стягиваемой винтом. Двигатель закреплен на стойке, нижний конец которой крепится к штативу, а верхний к салазкам. Как видно на фотографии, снизу прикреплена стандартная площадка для крепления к штативу. Верхний винт снабжен контргайкой для фиксации салазок строго параллельно ходовому винту. После установки салазок к их подвижной части винтом крепится площадка, сопряженная со штоком. Шток может скользить внутри площадки, что позволяет использовать одну конструкцию при разных расстояниях до подвижной части салазок.

фото
Конструкция собрана для перемещения салазок фирмы Manfrotto. Камера Canon EOS 1000D, вспышка Sigma EM-140DG, объектив Canon EF 135 мм f/2,8. Между объективом и камерой установлены два кольца с байонетом Canon, соединенные кабелем, и удлинительные кольца с резьбой М42. Эта часть конструкции подробно описана в статье "Устройство с растяжением меха и камеры Canon EOS".
фото
Конструкция с мехами ПЗФ

Для управления шаговым двигателем я воспользовался стандартным контроллером - STEPPER-MOTOR-INTERFACE #M106, купленным в магазине Чип и Дип.

фото

Биполярное питание было получено из переменного напряжения 4В с помощью двух диодов и четырех конденсаторов. Были использованы первые подвернувшиеся диоды КД202 и конденсаторы 3300 мкФ, извлеченные из сгоревшей материнской платы. Для увеличения емкости они были попарно соединены параллельно. Контроллер приспособлен для работы через параллельный порт. Сегодня параллельный порт уже экзотика, и в моем компьютере его нет. Поэтому я воспользовался переходником USB - to-COM, а дальше биполярный сигнал с ножек последовательного порта RTS и DTR преобразовал в однополярный, включив в цепь светодиоды.

фото

В моей конструкции последовательный порт соединен с контролером кабелем нуль-модема, поэтому сигнал DTR c 4 ножки попадает на 6, а RTS c 7 на 8. Светодиоды здесь работают как обычные диоды, но заодно позволяют видеть, какой сигнал подан на конкретную ножку. Подавая сигнал на ножки контроллера, можно последовательно менять полярность на обмотках шагового двигателя. Не самое удачное решение для данного двигателя, поскольку ток течет и при простое двигателя, и тот довольно сильно нагревается. Для данного двигателя более логичным было бы сделать собственный контролер с импульсным питанием двигателя только при его вращении. Управление двигателем было реализовано с помощью простейшей программы, написанной на Gambas. Переходник USB-COM, возможно, придется оживить командой modprobe .... Если переходник на микросхеме Prolific PL-2303, то команда будет выглядеть так: modprobe pl2303.

Программа "Фокус"

Управление двигателем и камерой может, вообще говоря, осуществляться двумя независимыми программами. Для управления камерой можно воспользоваться программой gtkam о которой я писал в статье "Программа gPhoto2-2.4.8". Однако мне показалось более интересным объединить все органы управления в одном графическом интерфейсе.

Фокус

Рассмотрим подробнее интерфейс программы. В первой строке задаем имя порта, к которому подключен мотор. Обычно это будет /dev/ttyUSB0 или /dev/usb/ttyUSB0. Если к компьютеру подключено несколько переходников, то номер может быть отличным от 0.

CheckBox "RTS" и "DTR" отображают поданный сигнал, а также позволяют очень тонко управлять вращением, последовательно включая обмотки. Цикл из 4 переключений перемещает камеру на 0,02 мм. Следующая строка интерфейса позволяет перемещать аппарат сразу на значительное расстояние. Один шаг соответствует четырем переключениям напряжения на обмотке. Кнопки "<" и ">" перемешают камеру на один шаг. 50 шагов соответствуют одному обороту винта. Поскольку шаг резьбы 1 мм, то это нам дает перемещение камеры на 1 мм. За перемещение на один мм отвечают кнопки "<<" и ">>". За перемещение на 5 мм - кнопки "<<<" и ">>>". Поле "Тормоз" задает задержку между шагами и регулирует скорость перемещения. Чем больше величина, тем меньше скорость. Кнопка "Просмотр" позволяет включить автоматический предварительный просмотр после окончания перемещения, вызванного нажатием на кнопку. В следующей строке отображается положение камеры. Поле "Начальное положение" позволяет задать координаты камеры, если при открытии порта она находилась не в крайнем положении. Желательно, чтобы положение камеры было задано точно, в этом случае программа не даст двигателю вращаться, если камера переместилась до упора. Следующая строка графически иллюстрирует положение камеры.

Следующая строка отвечает за процесс автоматизации получения стопки снимков. Кнопка "+" определяет направление перемещения камеры. Поле "Интервал" задает перемещение в мм, через которое следует делать снимки. Поле "Кол-во Шагов" определяет, сколько снимков будет сделано. Кнопка "Просмотр - Пуск" запускает перемещение камеры с предварительным просмотром результатов после каждого шага. Кнопка "Снимки - Пуск" запускает перемещение камеры и съемку после каждого шага.

Далее расположены кнопки управления камерой. Кнопка "Просмотр" запускает однократное считывание изображения предварительного просмотра. Рядом расположенная кнопка "Старт" запускает непрерывный вывод предварительного изображения на экран компьютера. Однако поскольку это делается через внешнюю программу, то частота обновления кадров будет низкой. Для большинства компьютеров не более 2 х кадров в секунду. Кнопка "Снимок" соответствует нажатию на спусковую кнопку аппарата.

Следующая строка отвечает за фокусировку вращением объектива. Возможно как грубая, так и точная фокусировка. После перемещения объектива на экран выводится изображение предварительного просмотра.

Следующая строка позволяет считать (кнопка "?") или задать (кнопка "=") значение диафрагмы и чувствительности.

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

Установка программы на компьютер

Реализовано общение с камерой достаточно кривым способом – через запуск программы gphoto2 , которая в свою очередь обращалась к библиотеке Libgphoto2. Я использовал версию программы 2.4.8. Более поздняя 2.4.9 у меня при фокусировке вращает объектив всегда в одну сторону вне зависимости от того, подана команда "ближе" (gphoto2 --set-config manualfocusdrive=2) или "дальше" (gphoto2 --set-config manualfocusdrive=6). Команда предварительного просмотра gphoto2 -- capture-preview у меня работала очень нестабильно в любой версии программы на обоих моих компьютерах, причем проблемы возникали разные. В одном случае ей не нравились системные шрифты, в другом устойчивая работа без зависания была возможна только с увеличенным изображением. К сожалению, в данной редакции программы gphoto2 нельзя включить экранную лупу с компьютера, а можно только кнопкой на камере. С помощью плясок с бубнами мне иногда удавалось заставить команду работать должным образом, но при этом начинали себя вести неадекватно остальные команды, поэтому для операции просмотра я предельно выпотрошил программу preview.c из папки с примерами libgphoto2 и использовал вызов именно ее для этой операции. Для желающих повозиться привожу исходный текст программ, однако предупреждаю, что он может помочь вам в разработке собственной программы, но вряд ли будет сразу работоспособен на вашем компьютере. У меня программа работает стабильно на двух компьютерах: настольном на процессоре Intel Core 2 Duo E8500 3,16 ГГц с ОС Slackware 13.0 и ноутбуке Fujitsu LIFEBOOK P2110 на процессоре Transmeta Cursoe TM5800, 859 МГц с ОС PuppyRus Linux.

Если вы решите экспериментировать с программой, то предварительно на компьютере надо установить libgphoto2 2.4.8 и gphoto2.

Распаковать архив и копировать программу preview.c в папку libgphoto2-2.4.8/examples/, предварительно переименовав оригинальный вариант программы, после этого выполнить make и в скрытой папке libgphoto2-2.4.8/examples/.libs найти файл sample-preview и скопировать его в рабочую папку. На всякий случай в архиве есть бинарный файл, скомпилированный для моей системы, но его его работоспособность на вашей машине не гарантируется и за последствия подобного применения я также не отвечаю. После этого запустить Gambas и открыть в нем исходный код моей программы. В программе есть комментарии, не вошедшие в данную статью, и я надеюсь, они помогут разобраться, как она работает :-) Далее в меню выбрать "Проект/Собрать/Запускаемые/Сделать исполнимый модуль" и сохранить результат в рабочей папке, где находится программа sample-preview. Перейти в рабочую папку и запустить программу.

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

Обработка стопки снимков для увеличения глубины резкости при макросъемке

Объектов, когда данный метод съемки действительно оправдан, не так уж много. Для примера я взял перстень хитрой формы, при съемке которого не может быть реализовано повышение глубины резкости за счет наклона объектива. О съемке с наклоном объектива я писал в статьях: "Дорожная камера", "О попытках максимально использовать возможности оптической системы", "Адаптер ARAX для крепления и наклона объективов", "Чудо механики – объектив PC MICRO-NIKKOR 85 мм 1:2,8 D".

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

фото

Наша задача получить максимально детальное изображение большого формата. Если необходимо получить резкий снимок размером с миниатюру, то и все сложности ни к чему. Можно задиафрагмировать объектив, поставить камеру подальше и потом вырезать из большого кадра фрагмент с перстнем. Как показывает программа расчета глубины резкости, резкое изображение размером 300 пикселей и глубиной резко изображаемого пространства в 3 см может быть получено этой камерой и объективом при съемке с полутора метров при диафрагме f:11. А при диафрагме f:16 можно снимать с расстояния 1,2 м и размер может быть удвоен. Однако дальнейшее уменьшение диафрагмы нам не даст получить более детальную резкую картинку в силу размытия изображения дифракцией. Использование компактной камеры с маленькой матрицей (7х5мм) и объективом, имеющим тот же угол зрения (f=27 мм), позволяет при диафрагме f:5,6 сократить дистанцию съемки до 70 см и таким образом еще в два раза увеличить картинку и преодолеть рубеж в 1000 пикселей по длинной стороне, но мы хотим получить в три раза больше и ради этого все труды.

Для объединения снимков можно не привлекать специализированных программ и все сделать вручную в графическом редакторе. Сперва записать все снимки как слои. Затем их выравнять и подправить масштаб, потом добавить к каждому слою маску и сделать видимыми только резкие участки каждого слоя.

GIMP
Так выглядят слои с масками в графическом редакторе GIMP

фото

Так выглядит конечный результат после сшивки в GIMP. Если щелкнуть мышью по миниатюре, то можно увидеть и оценить снимок размером 2732х2108 пикселей. Результат вполне удовлетворительный, но требует большого внимания при выполнении сшивки, и при детальном рассмотрении можно натйи участки, которые объединены неоптимальным образом.

Процесс можно частично автоматизировать, совместив предварительно снимки в программе для сшивки панорам hugin и получив на выходе стопку уже максимально выравненных снимков.

Можно воспользоваться программой Fotoxx и выбрать в меню объединение глубин резкости (Combine/HDF). Процесс выравнивания в этом случае будет автоматизирован и выполнен весьма качественно.

фото
Процес совмещения двух изображений в программе Fotoxx. Ошибка совмещения отображается красным цветом. По ходу работы программы красные области становятся все меньше и меньше.

Однако программа умеет работать только с двумя кадрами стопки, и нам придется ее последовательно применить 5 раз.

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

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

fotoxx

Для автоматизации именно объединения есть специальные программы, такие как расширения Stack Focuser и Extended Depth of Field для ImageJ, но они в основным заточены для съемки под микроскопом и анализа изображения, где они показывают хороший результат. Кроме того, эти программы могут быть полезны для создания карты глубин. Иногда при микросъемке это единственный способ представить реальную форму объекта. В случае же с перстнем для получения сносного результата снимки надо сперва совместить и масштабировать, а уже потом запускать сшивки стопки. В результате получается очень наглядное изображение для научных исследований, но оно вряд ли подойдет для каталога продуктов. Конечный результат у дополнений получается очень близкий, но у Extended Depth of Field более развитый интерфейс. Причем есть простое меню, представленное на снимке, а есть и профессиональное, с которым я толком не разобрался.

фото

фото
Все резкие детали точно выявлены и на своем месте, а вот в зонах перехода образуется кайма, которую программа не пытается приукрасит - все же она предназначена для науки, а не искусства :-)

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

фото
Так выглядит реконструкция объемного изображения, сделанная по анализу резких участков снимков стопки.

Полученную с помощью этих программ карту глубин можно использовать в редакторе GIMP для объединения двух слоев.

GIMP

Запускаем дополнение "Объединение глубин", в качестве первого изображения берем сфокусированное на передний край, в качестве второго - на дальний край. В качестве карты глубин для первого снимка используем карту глубин (или как она называется в той программе топологию). Для второго снимка используем ее же, но инвертированную.

Все вышеописанные методы оптимизации только облегчают жизнь и редко сразу дают удовлетворительный результат. Программа Combine ZP позволяет в автоматическом режиме получить хороший результат, и правка нужна только, если вашему стремлению к совершенству нет предела :-)

фото

Хотя эта программа и распространяется под лицензией GNU GPL, и написана на C++, существует ее версия только для Windows. У меня эту операционную систему представляет XP на относительно слабом компьютере с одноядерным процессором и тактовой частотой 2,4 ГГц. Поэтому когда я позволил программе оптимизировать все, то машина задумалась аж на 8 часов, правда со стопкой из 10 а не шести вышеприведенных снимков. В результате программа выдала 6 вариантов, совмещенных с помощью разных алгоритмов, и остается только выбрать лучший. Время не экономится, но силы безусловно :-) Впрочем, после более детального ознакомления с программой можно сразу выбрать наиболее перспективный метод и сэкономить время. Обычно достаточно выполнить 2 операции: выравнивание (Align and Balance Used Frames) и сшивка по первому методу (Do Stack). Программа Combine ZP, в отличие от других, при совмещении не только поворачивает и смещает снимки, но и меняет их масштаб, что в результате делает необходимость ручного вмешательства минимальной. В программе встроена возможность редактирования прозрачности отдельных участков используемых слоев, но ее интерфейс оказался для меня весьма неудобным. Поэтому я сохранил подготовленные программой слои и конечный результат в отдельные файлы. А потом в графическом редакторе наложил на конечный результат те слои, для которых результат автоматического совмещения меня не устраивал. Реально из 10 слоев таких оказалось всего два. В целом, результат сразу превосходный, но в некоторых местах возникают артефакты в виде каймы, или некоторые места слишком размыты, и можно найти среди слоев и изображение с более резкими деталями.

Результат объединения программой Combine ZP стопки, полученной перемещением объектива относительно камеры.

Сравнение с результатом объединения стопки, полученной при перемещении камеры, не позволило выявить оптимальный метод. Миниатюры неотличимы по качеству, а большие изображения вы можете попытаться оценить сами. Изображение, полученное фокусировкой перемещением объектива, можно увидеть, щелкнув по миниатюре, а перемещением камеры здесь.

P.S.

Качество при фокусировке перемещением камеры принципиально не отличается от фокусировки перемещением объектива, однако описанная установка позволяет использовать для съемки стопок и не автофокусные объективы и, следовательно, игра стоила свеч.




Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.