Как стать автором
Обновить
0

Что можно «выжать» из usb-микроскопа

Время на прочтение6 мин
Количество просмотров31K

Слева — «сырые» кадры с устройства. Справа — обработка.

В этой статье постараюсь добиться максимального качества макроснимка от типичного usb-микроскопа. Такие устройства – не предназначены для получения художественных фотографий. Их задача — позволить быстро и легко рассмотреть мелкие детали предмета. Однако я постараюсь специальными условиями съемки, постобработкой и некоторыми другими способами отчасти нивелировать эти недостатки.

Статья написана «Just for Fun» и по сути является рассказом о пути поиска лучшего результата. Не стоит рассматривать ее как рекомендацию. Если вам нужна хорошая макрофотография — лучше всего воспользоваться для этого специальной аппаратурой.

USB-микроскоп


Все макроснимки в статье сделаны используя USB-микроскоп, предоставленный компанией Даджет (за что им большое спасибо!).

Само по себе устройство микроскопа достаточно типично для устройств этого класса. Web-камера закрепленная на подставке оснащена набором из 8 светодиодов для подсветки снимаемого объекта, и двумя поворотными дисками для регулировки фокуса и степени освещенности.

Микроскоп устанавливается на стол, включается подсветка, и под объектив кладется исследуемый предмет. После чего необходимо навести фокус, и с помощью программы из комплекта поставки — сделать снимок или записать видео. Фотографии сохраняются в формате jpg, а видео в формате avi (без сжатия).

Так как статья об этом устройстве уже публиковалась на geektimes.ru (рекомендую ознакомиться, в статье много классных фотографий и сравнений) то я не буду больше повторяться описывая само устройство и его функционал.

Для целей этой статьи достаточно знания того, что внутри устройство представляет собой web-камеру с дополнительным модулем подсветки и регулировки фокуса. Позволяет в реальном времени просматривать на компьютере изображение с увеличением в 20-200 раз, и имеет разрешение матрицы 1600*1280 пикселей.

Остальные характеристики устройства особого значения не имеют, но я еще скажу о нем несколько слов в конце статьи.

Часть 0. Снимок


Итак, первым делом необходимо получить изображение для обработки. Для этого можно воспользоваться стандартным приложением «MicroCapture» входящим в комплект поставки. Или любым другим, позволяющем захватывать кадры с web-камеры.


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

Все кадры в статье я буду сохранять с разрешением 1600*1280 пикселей, так как это «родное» разрешение камеры. Использовать другое разрешение не имеет смысла, если мы хотим получить максимальное качество фотографий, т.к. алгоритмы интерполяции уничтожат часть информации и затруднят работу с шумами.

Посмотрим полученное изображение в 100% масштабе.


Видно что фотография сильно зашумлена. Начнем.

Часть первая. Динамический шум


Каким образом можно убрать шум с фотографии?
Небольшое отступление для людей далеких от фотографии.
Вся фотография, по сути основана на взаимосвязи трех главных параметров: чувствительности матрицы (ISO=100,200,400,… и т.п.), выдержки (задает время которое свет попадает на матрицу) и диафрагмы (размеру «окна» через которую свет падает на матрицу). Эти три числа определяют сколько света попадет на матрицу, и с какой погрешностью этот свет будет «оцифрован».

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

Чтобы уменьшить шум – нужно понизить ISO (чувствительность), а для этого – либо больше открыть диафрагму, либо увеличить выдержку.
Но тут мы сталкиваемся и техническим ограничением – у данной web-камеры, как и у большинства других – чувствительность матрицы вообще не изменяется. Диафрагма – нерегулируемая, а выдержка – просто регулирует количество света. И именно ее меняет программа подстраиваясь под уровень освещенности.

Можно усилить внешнюю подсветку – но тогда придется сократить выдержку. Можно уменьшить подсветку – тогда выдержка увеличиться. В любом случае, фактическое количество света на матрице будет равным и соответственно шумы будут всегда одинаковыми (в темноте света недостаточно и сигнал с камеры просто умножается на коэффициент усиления, что приводит к еще большим шумам).

Итак. Мы не можем увеличить выдержку средствами камеры, значит остается делать это в обход нее. К примеру, можно сохранить несколько кадров, а потом склеить их в один, найдя среднее арифметическое для каждого пиксела. А еще лучше записать видео, из сотен кадров… Попробуем:



Изображение стало однозначно лучше, практически исчез «мелкий» шум. Но качество по-прежнему оставляет желать лучшего, остались яркие точки (3 из них выделены на рисунке желтыми полосками).



Дело в том, что шум создается случайными отклонениями от цвета который матрица считает «правильным». Но для дешевых матриц которые ставят в web-камеры – это «правильное» значение может быть ошибкой. Иными словами, математическое ожидание отклонений не стремиться к нулю.

Это можно легко увидеть если «склеить» ровную картинку, например, полностью расфокусировав изображение, чтобы не мешали лишние детали.

Один кадр. По клику — оригинал

Среднее из 200 кадров. Яркость увеличена в 2 раза, для наглядности.

Как видим шумы очень значительны. Некоторые пиксели вообще битые, другие образуют полосы и зоны искаженной цветопередачи. Если удаленный шум можно назвать динамическим, то этот – постоянный, или статический. Попробуем снять и его.

Статический шум


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



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

Другое решение – «распределить» влияние каждого пикселя матрицы по нескольким пикселям итогового изображения. Этого можно добиться если смещать снимаемый объект в небольших пределах, а потом «склеить» изображения учитывая смещения. Так чтобы каждая точка объекта представлена была только в одном пикселе совмещенного изображения.

Двигая кусочек ткани руками я получил такое изображение:



Для того чтобы склеить такие кадры – нужно вначале «стабилизировать» изображение, добиться полной неподвижности. Это можно сделать проанализировав движение, например, с помощью OpenCV, но я пошел по более простому пути – выполнив трекинг в сторонней программе.

После трекинга в AE, и «склейки» кадров моей утилитой – получим такой результат.


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

Попробуем определить степень размытости изображения, чтобы исключить из склейки смазанные кадры. Для этого я пошел самым простым путем – вычислял сумму разницы между всеми соседними пикселями изображения. Чем более смазано изображение – тем более близки по цвету соседние пиксели, а значит общая сумма модулей разности – даст некую оценку размытости кадра. График размытости по тестовой выборке будет выглядеть так:



Хорошо видны зоны где я двигал изображение, и оно размазывалось (график в этих местах на несколько кадров опускается вниз). Отсекая смазанные кадры можно немного улучшить картинку, но значительного изменения не будет, движения слишком резкие. Я хотел еще улучшить результат, поэтому пошел дальше.

Автоматизация


Предпосылкой к дальнейшему явилось то, что у меня случайно оказался шаговый двигатель 28BYJ-48. Пусть лучше он двигает объект перед микроскопом. Для теста вполне достаточно сделать простой вращающийся рабочий стол.

Преимущества в отсутствии смазывания, и возни с дрожаниями, уходящим фокусом и т.п. Конечно удобнее всего закрепить двигатель прямо к микроскопу, для чего пришлось распечатать крепление, состоящее из трех фрагментов:



Но даже в таких условиях трекинг далеко не идеальный. При увеличении становится существенным rolling shutter и перспективные искажения, что приводит к искривлению картинки которые невозможно решить трекингом (пришлось переключиться на трекинг в Mocha, но всех проблем это не решило). Отчасти проблемы можно нивелировать если сравнивать все кадры последовательности с первым, и при наличии существенных отклонений — просто не учитывать этот кадр.

Для типичной последовательности график исключений выглядит так:



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

Итогом работы стали изображения:

ткань

сахар и капля варенья

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

Результат:




Все изображения кликабельны.

А вот пример работы на обычном объекте (золотой сережке).

Убран только обычный шум + сшито 2 изображения с разной глубиной фокусировки,
«Сырой» кадр.

Обработка.


Заключение

В эксперименте использовался «Цифроскоп» предоставленный компанией Даджет.
Теги:
Хабы:
Всего голосов 22: ↑21 и ↓1+20
Комментарии30

Публикации

Информация

Сайт
dadget.ru
Дата регистрации
Дата основания
Численность
Неизвестно
Местоположение
Россия

Истории