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

В этой статье постараюсь добиться максимального качества макроснимка от типичного 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 изображения с разной глубиной фокусировки,
«Сырой» кадр.

Обработка.


Заключение

В эксперименте использовался «Цифроскоп» предоставленный компанией Даджет.

Комментарии (30)


  1. ice2heart
    28.04.2015 11:14
    -1

    HDR с цифрового микроскопа?


    1. rechmp
      28.04.2015 12:10
      +5

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


      1. Quiensabe Автор
        28.04.2015 15:44
        +1

        Совершенно верно.

        Косвенное отношение имеет только последний этап. Склейка нескольких фотографий с разным фокусом в одну.
        Если вместо фокуса менять экспозицию кадра — можно было склеить HDR. Только вот особого смысла я в этом не вижу.


  1. unwrecker
    28.04.2015 13:30
    +1

    Купил такой на ebay. Весь линуксовый софт видит в нём максимальное разрешение как 640х480. Может 1600*1280 — тоже интерполяция?


    1. Quiensabe Автор
      28.04.2015 15:47

      В данном случае нет, там честные 1600*1280, т.к. матрица имеет такой размер. Правда частота кадров в этом случае падает до 7,5.
      А вот 2560*2048, которые тоже «поддерживаются» устройством — это интерполяция.


    1. kibergus
      28.04.2015 23:23

      Подозреваю, что после ссылки на aliexpress в предыдущем посте много людей решили купить себе игрушку. Там же дешевле раз в шесть, но с разрешением в 640х480. Есть варианты немного подороже, но уже с сенсором 2.0 мегапикселя и выглядящие один в один с тем микроскопом, что в статье. Но у них тоже реальное разрешение 640х480.


      1. Quiensabe Автор
        28.04.2015 23:53
        +2

        Для интересующихся — сделал сравнение, с помощью микроскопа из статьи.


        Это фрагмент. Слева — кадр 1600*1280. Справа — 640*480.

        Фокус не трогал, вообще ничего кроме разрешения снимка не менял. Для сравнения растянул кадр 640*480 до размеров 1600*1280 в фотошопе и вырезал фрагмент из центра.

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

        Если интересно — полные кадры
        habrastorage.org/files/929/f11/ebd/929f11ebd73f4441acee7a56550dda27.jpg
        habrastorage.org/files/054/5d4/abf/0545d4abf0f14a3a88d95d33fbd17114.jpg


  1. evtomax
    28.04.2015 13:47

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


    1. Quiensabe Автор
      28.04.2015 16:11

      В данном случае шумодава к счастью нет. Есть настройка «резкости», которая усиливает шумы и добавляет контуры всем объектам, но ее можно регулировать.


  1. beliakov
    28.04.2015 14:32

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


    1. Quiensabe Автор
      28.04.2015 16:11

      Не все исходники сохранились, но вот например три серии file.sampo.ru/n6786z
      Если нужно еще — пишите, могу снять интересующий предмет и выложить.


      1. beliakov
        28.04.2015 17:00
        +1

        Попробовал прогнать фотографии сахара через Registax который вообще-то для обработки астрофото. Вроде что-то получилось (кликабельно):

        image

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


        1. Quiensabe Автор
          28.04.2015 17:37
          +1

          Очень любопытно.
          У меня из того исходника получилось 4 изображения (по 100 кадров на каждое).

          Вот два из них


  1. maaGames
    28.04.2015 15:23
    +1

    Спасибо! Как раз жду, когда такой привезут (брал у братского народа с узким прищуром). Теперь знаю, как получить более качественные фото.


    1. Quiensabe Автор
      28.04.2015 15:54

      Поздравляю с покупкой!)
      Советую не мучиться с движущимся предметом, игра по моему не стоит свеч.
      Проще сделать несколько серий кадров немного сдвигая предмет каждый раз. Потом каждую серию — склеить, и собрать всё хотя бы в фотошопе (там есть функция автоподгонки слоев).


      1. maaGames
        28.04.2015 17:22

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


        1. Quiensabe Автор
          28.04.2015 17:39

          Фотка сережки в конце поста именно так и сделана. Только там два кадра сшито с разной глубиной резкости.


  1. elite7
    28.04.2015 19:08

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


    1. Quiensabe Автор
      28.04.2015 19:42
      +1

      Использовалась сторонняя программа — HeliconFocus


      1. elite7
        18.05.2015 11:04

        Спасибо. А вот появился еще вопрос.

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

        А может ли работать панорамная технология для микроскопа?
        Можно ли при большом увеличении 1000x, сделать 100 снимков — 10x10 квадратов и получить одно качественное фото при увеличении 100x?


        1. Quiensabe Автор
          18.05.2015 16:11

          Да, конечно возможно. Я даже собирался показать такой прием в статье, но времени не хватило.

          Правда есть нюансы:

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

          Во вторых — панорамы тут могут быть двух видов: плоские и сферические.

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

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

          Искажения на плоской панораме тем меньше, чем меньше глубина предмета. В идеале, при съемке совершенно плоского предмета — искажения будут отсутствовать вовсе.

          Кроме того, искажения тем меньше, чем больше увеличение. Т.к. становится меньше угол съемки, соответственно лучи все ближе к параллельным.

          На практике, это значит что если мы снимаем с большим увеличением (например с упомянутым 1000x) — все получится. Т.к. будет меньше угол съемки, и глубина резкости. А если снимать объект с небольшим увеличением (скажем 20x) — то нормальной картинки не будет, нужно городить сложную систему с поворотом объекта вокруг фокальной точки.


  1. SKolotienko
    28.04.2015 22:06

    А объектив настолько хорош, что двигая объект перед объективом, происходит только трансформация сдвига/поворота/масштабирования (афинные преобразования)? Никаких там бочек, подушек, различной резкости в разных частях фотографии и прочих прелестей дешевых объективов фотоаппаратов?


    1. Quiensabe Автор
      28.04.2015 23:11
      +1

      Увы — нет.
      Именно поэтому для вычисления коррекции использовался проф. трекер, adobe mocha, который помимо перечисленного умеет «ловить» наклоны и искажения перспективы.
      Кроме того шаговый двигатель поворачивает объект только в пределах трех градусов (туда/обратно). Этого вполне достаточно, а искажения становятся почти незаметны.


  1. egigd
    06.05.2015 05:47
    -1

    Вы меня, конечно, извините, но по-моему заниматься таким — это себя не уважать…
    Куда проще купить за копейки советский микроскоп с набором объективов и присобачить к нему любую старенькую зеркалку или беззеркалку. Сразу получим картинку почти без шумов и куда более высокого разрешения.


    1. Quiensabe Автор
      07.05.2015 03:04
      +1

      Вы меня конечно тоже извините, но по моему так писать/говорить — это других не уважать…

      1. напишите статью как прикрутить зеркалку к старому микроскопу, и мы сравним результат по стоимости, простоте, удобству и соответствию типичным задачам. Обычно простые решения предусматривают как минимум 3D печать, а в моем случае она не нужна (кроме финальной части, которая не обязательна для получения нормальных снимков).

      2. статья написана «Just for Fun», о чем сказано в самом начале. Никто не говорил что это лучший/дешевый/быстрый/качественный метод (но и не отрицал).

      3. не у всех есть зеркалка. И даже беззеркалка, к которой легко, что-то прикрутить.

      4. методика действительно работает в некоторых реальных задачах. К примеру — мой брат начинающий ювелир. Он использует этот микроскоп при работе, но для финальных снимков (показать клиенту) качество слишком низкое. С помощью моей утилитки, он может просто нажать кнопку захвата — программа сама возьмет 100 кадров, склеит, и получит на выходе приличную фотку. Если хочется еще лучше — можно поменять фокус и еще раз нажать. Склейка опять на автомате, но зона резкости больше.
      Обычный микроскоп в данном случае непригоден, у него слишком сильное увеличение. Макрообъектив — дорог, да и у брата даже нет зеркалки куда его можно поставить.

      В общем, это конечно частность, но реальная.
      Реальней чем рассуждения, что ваше решение сходу подойдет всем, а кто так не думает — себя не уважает…


      1. egigd
        07.05.2015 04:07
        +1

        Пластиковая заглушка для байонета (которая как правило снимается с байонета сразу после покупки и никогда больше не устанавливается назад), вырезаем в ней круг по внутреннему диаметру трубы микроскопа, вклеиваем туда трубку, свёрнутую из бумаги. Всё, фотоаппарат можно устанавливать на микроскоп без всякой 3D-печати. О чём тут статью писать?
        А что до «нету», так «Цифроскоп» из этой статьи стоит 4500 рублей. За эти деньги можно купить на барахолках и старый советский микроскоп (1000-1500 рублей) и старенькую цифрозеркалку в хорошем состоянии (3 000 — 4 000 рублей).
        При этом зеркалка в свободное от микроскопии время будет радовать вас обычными снимками.


        1. Quiensabe Автор
          08.05.2015 01:14

          Даже если все так (хотя у меня в городе таких цен нет), вы забываете о:

          1. в этой статье нет никакой привязки к модели микроскопа. Если у вас за 3000 можно купить цифрозеркалку, представляю цены на б/у usb-микроскоп… А уж если в Китае заказать, да еще и на вторичном рынке…

          2. вы описываете одно применение конструкции — фотки микромира, а ведь применений может быть много. К примеру usb-микроскоп из статьи поддерживает увеличение от 20 до 200 раз. Зачем мне 300-кратный микроскоп для съемки ювелирных изделий?
          Это частный случай, но ювелиры и нумизматы — одна из целевых групп подобных устройств. Почему вы считаете их потребности не существенными, если у вас лично таких нет?

          Заметьте я не отрицаю что есть и другие способы. И сразу написал

          Если вам нужна хорошая макрофотография — лучше всего воспользоваться для этого специальной аппаратурой.
          Но если человек уже пользуется usb-микроскопом — почему бы ему не показать как сделать фотографии чуть лучше?


          1. egigd
            08.05.2015 02:30

            А кто сказал про 300х?..
            У меня старый советский школьный микроскоп ШМ-1, купленный когда-то на барахолке вообще рублей за 200-300, и к нему набор объективов с окулярами, дающий увеличение от 26х до 900х.
            Если 26х много, то дешёвая зеркалка с китовым (самым дешёвым, идущим в комплекте) объективом, перевёрнутым задом наперёд (без каких-либо специальных приспособлений) позволяет снимать так:
            Макро
            Кстати, цена в 3000 — это в самой обычной Москве. Вот за такие деньги Nikon D3000: club.foto.ru/secondhand2/lot/sell.php?advert_id=104780


            1. Quiensabe Автор
              08.05.2015 04:59

              Интересно, а на авито «Школьный микроскоп шм-1» — продается почему-то за 5000 р., можете неплохо подзаработать)). И увеличение он поддерживает от 50 до 300x. В то время как usb-микроскоп там же можно купить в 4 раза дешевле…

              Но суть даже не в этом. Я то могу понять, что есть и другие пути, которые в каких-то случаях будут удобнее и/или выгоднее. Но почему вы не можете понять, что могут быть ситуации в которых ваше решение — не идеально? Будь оно идеальным всегда — зачем бы люди вообще покупали usb-микроскопы? А ведь покупают… не странно?

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

              В целом я вашу позицию понял. Дальнейший диалог считаю неконструктивным, так как реально наблюдаю ситуацию которая по вашим словам невозможна. Спорить с реальностью считаю бессмысленным. Убеждать кого-то в интернете — тоже.


  1. maaGames
    09.05.2015 08:22

    Я был слишком жаден и заказал микроскоп с 1000 кратным увеличением. «Работает». Волос на экране получается в руку толщиной. Судя по калибровочной плёнке, 500х точно есть. В кавычках, потому что навести фокус нереально.( Площадь обзора около квадратного миллиметра, фокусное расстояние и того меньше. Наводя фокус на поверхность калибровочного листка, его задняя сторона уже не в фокусе. Всё решают доли миллиметра… С учётом конструкции микроскопа, пользоваться им нереально.
    Так что, если кто-то хочет подобную игрушку себе купить, то лучше остановиться на 100-200 кратном, ими вполне можно что-то снять будет.

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

    2 мегабайта
    Исходная картинка


    Улучшенное изображение из 10 кадров