24 November 2015

Хроники лаборатории: как мы молотый кофе считали софтом для анализа клеточных структур

Open sourcePythonAlgorithmsImage processing


Другие статьи цикла:
Здравствуйте, я Meklon и я кофеин-зависимый
Компот из кофейных сухофруктов. Знакомимся с каскарой — лучшим другом велосипедиста

Продолжаю кофейную тематику, которую я начал еще на geektimes: Здравствуйте, я Meklon и я кофеин-зависимый. Сегодня мы будем творить непотребства с софтом для биоинженерных задач — CellProfiler. Нормальные люди им считают клетки, плазмиды, экспрессию белка и прочие нужные вещи. Мы долбанутые, поэтому будем проводить гранулометрический анализ помола по микрофотографии, бить кофе статическим электричеством и думать, как прицепить к этому безобразию фен. Ну и конечно нам потребуется скотч для получения графена картины распределения частиц.

В целом, компьютерный анализ изображения — штука гибкая и может применяться в совершенно странных задачах. Заодно проверим, можно ли заменить турку колбой с магнитной мешалкой. В конце концов, главный принцип выживания в лаборатории — «Нет кофе — нет работы») Под катом очень много фотографий, но я постарался их ужать до приличных размеров.

Графен и кофе




Основная задача, которую я хотел решить — объективное сравнение качества помола разных кофемолок. По идее, качественный помол отличается идеальной равномерностью. Значит нам нужно посчитать количество частиц на заданной площади и отсортировать их по размерам. Чем больше будет дисперсия — тем хуже качество. Самый простой пример — роторная кофемолка, которая разбивает зерна быстро вращающимися лезвиями. В ее профиле помола одновременно присутствуют и крупные фракции и мелкая пыль. Хорошего эспрессо из такого кофе уже не получится. Проблема связана с неравномерностью пробивания «водяных каналов», через которые проливается кофейная таблетка. Мелкие частицы будут давать горечь из-за переэкстракции, а крупные создадут «обходные пути», что сделает кофе водянистым. В отличие от роторной, кофемолка жернового типа дает более или менее калиброванный вариант с одинаковыми частицами.
Собственно, теперь задача состоит из двух основных пунктов:
  1. Расположить в нормальном распределении частицы на прозрачной подложке, чтобы их можно было сфотографировать микроскопом
  2. Посчитать размеры и количество частиц вручную за пару лет автоматизированным комплексом
  3. Подвести итоги, сделать чашку хорошего эспрессо и тщательно себя похвалить за сообразительность

Когда мы подняли этот вопрос в прошлой теме, sptor и mwizard предложили использовать вибрацию в различных вариантах. Но у этого метода, как и у многих других, есть очень важный недостаток — неравномерность воздействия вибрации на частицы разного размера. Нам надо получить слепок реального усредненного состава, а не создать сортировочный лоток золотодобытчика в миниатюре. Наиболее удачная идея пришла в голову eexo — использовать обычный скотч. Чем именно метод хорош? Дешево, сердито. Просто на первый взгляд. И самое главное — касаясь скотчем молотого кофе вы получаете полный набор частиц в реалистичном распределении. Естественно, что без граблей, электротравм и злодейского смеха во время эксперимента здесь не обошлось…


Результат чуть поближе


Фен против электрофорной машины


image

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

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



Я пытался снять этого уставшего человека, который в очередной раз показывал детям светящиеся газораздрядные трубки, но телефон начинал дико сходить с ума рядом с установкой, выбрасывая аппаратную ошибку камеры, а потом наглухо зависая. Планшет вроде выдержал, но файл слегка побило. Tesla Coil, штука конечно крутая, но проблему мою не решает. Зато на том же столе у них обнаружилась электрофорная машина с лейденскими банками. Именно такой машиной я пользовался еще в школе, чтобы зарядившись как следует бить током одноклассников в коридоре. Учительница физики страшно ругалась и кричала, чтобы я немедленно заземлялся на батарею. В общем, погрузил я один из электродов в кофе и начал вращать рукоятку. Судя по тому, что волосы начали тихо потрескивать — потенциал был набран ощутимый. Но сволочной порошок упорно не желал распушаться. Тут я сделал большую ошибку, решив добавить еще статики. Лейденские банки, которые они использовали были какими-то особо злыми. И очень-очень емкими. Красивая вспышка между моими руками оказалась крайне болезненной. Видимо, народ тщательно доработал конструкцию.

В итоге, от электрофорной машины я тоже отказался и решил сделать снимки как есть. Уже после того, как я отфотграфировал образцы, мне пришла в голову альтернативная идея, но времени на ее реализацию уже не было. Будет настроение — попробуйте. Смысл в том, чтобы одновременно использовать очень горячий воздух, трение и конвекцию. То есть тупо фен и трубу. Насыпаем чайную ложку кофе в трубу, влючаем фен, дожидаемся электризации и опускаем скотч на жестком каркасе внутрь, чтобы он насобирал частичек. Схема ниже:



Микроскоп и CellProfiler




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


Еще фотография


К сожалению, наш микроскоп не поддерживает z-stacking, и в EXIF не пишет достаточно данных, чтобы это сделать в стороннем софте. Поэтому глубина резкости небольшая и собрать из серии четкую картинку не получится.

В принципе, для наших целей нам нет необходимости в идеальной четкости. Поэтому берем объектив 4х и фотографируем наш будущий эспрессо:


Образец от обжарщика, смолотый Mahlkoenig EKK43


Образец из моей домашней кофемолки, смолотый DeLonghi KG89

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

Теперь отдаем изображения на вход специализированого свободного ПО CellProfiler. Переписан на Python, когда-то был надстройкой над MatLAB. Разрабатывается небольшой командой The Broad Institute of MIT and Harvard. Интерфейс совершенно негуманоидный, но позволяет исследователям вроде меня выполнять сложные пакетные обработки и статистический анализ изображений, не имея глубоких знаний в программировании. Все организовано в виде конвейера, когда на вход подается исходное изображение, потом над ним производятся необходимые манипуляции, распознаются, подсчитываются и измеряются нужные объекты, после чего цикл повторяется снова на всем массиве файлов. В результате, тратится определенное время на написание pipeline, зато потом можно скармливать хоть 100 000 изображений и идти пить чай. Процесс распараллеливается соответственно количеству потоков процессора.


Интерфейс программы

Коротко опишу этапы:
  1. Преобразование трех каналов 8-битного sRGB в один, монохромный
  2. Инверсия изображения. Это историческая особенность — программа заточена под распознавание светлых объектов на темном фоне
  3. Пороговая фильтрация для отсечения фона. Использовался глобальный порог, выбранный вручную
  4. Идентификация объектов и их границ. Для сепарации объектов от фона использовался алгоритм Otsu
  5. Измерение параметров объектов — площадь, эксцентриситет, диаметр и прочее
  6. Классификация объектов на 3 условные группы по параметру «площадь»
  7. Сохранение выбранных результатов таблицу и сохранение отдельных промежуточных изображений




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

Распознанные объекты, крупно. Видны дефекты определения границ




После сортировки на мелкие, средние и крупные частицы мы получили следующее распределение для профессиональной и домашней кофемолки, соответственно:




Интерпретировать результаты я не буду, так как изначально образцы не соответствовали требованиям к разделению частиц. Если кому-то интересно повторить, я выложил pipeline для Cellprofiler на Dropbox. Вы можете проверить его самостоятельно. Визуально, помол на профессиональной машине более равномерный, но точнее сказать сложно. Очень высокие требования к образцам для нормальной статистики.

Другие варианты применения


CellProfiler'у глубоко пофиг, что именно рассчитывать. Я вполне успешно пилил пайплайны для анализа каких-то нанокристаллов. Ради интереса даже попробовал посмотреть, как он справится с определением объектов в астрофотографиях. В примере ниже я просто скормил софту фото звездного неба в высоком разрешении и свел все каналы в один монохромный. Теоретически, играясь с фильтрами и порогами интенсивности, можно отделить звезды различных спектральных классов друг от друга. Особенно, если исходники не 8-битные. Программа нативно поддерживает работу с изображениями широкого динамического диапазона.

Исходник, немного пожатый Habrastorage:



А вот честно определенные 34767 звезд с некоторой долей погрешности.



При дальнейшем анализе можно анализировать коэффициент соседства, использовать маски, сортировать по признакам площади, цвета или еще чего-то.

Как сварить кофе в лаборатории


Хорошо подумав с Дианой, мы решили, что пропадать нашему любимому сорту Гватемала Платанийо Ежипто просто так не стоит. Я его дико люблю за насыщенность и полноту в эспрессо, с дразнящими нотами зрелого какао и легкой кислинкой. Один из самых ярких сортов средней степени обжарки, на мой взгляд. Тем более, когда он обжарен несколько дней назад. Но раз уж мы начали тестирование образцов, то решили попробовать альтернативный подход к приготовлению кофе. Будем варить его на прецизионном лабораторном нагревателе с магнитной мешалкой. Главное не получить потом по голове от руководителя лаборатории.

В этом мне поможет Диана in_green_shoes. Она вообще-то лингвист-переводчик, но иногда, когда ее никто не видит, она надевает халат и делает умный вид, играя в ученого.



Вначале набираем деионизированной воды из Milli-Q. По сопротивлению — глухой изолятор с сопротивлением 18.2 MΩ·cm Вода такой чистоты используется для аналитической химии, молекулярной биологии и теперь для варки кофе.

Диана с умным видом разглядывает колбу с водой


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




Точно взвешиваем нужное количество кофе. Точно взвешиваем. Четыре знака после запятой будет достаточно, я думаю. Мы же в лаборатории все-таки.



Высыпаем кофе в колбу и бросаем туда неодимовый магнит в керамической оболочке. В процессе варки он будет вращаться со скоростью около 1000 оборотов в минуту, обеспечивая максимальную экстракцию.




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




Поднятие пены ловим точно так же, как и с классической туркой:



В итоге получаем ожоги из-за того, что забыли о нагревании горла колбы от горячего пара. При следующей попытке используем толстые перчатки и аккуратно разливаем результат по чашкам. Кофе получился ароматным, но очень уж высокоэкстрагированным. Глаза резко открываются и начинаешь бегать как кофеиновая белка. Метод на самом деле из разряда just for fun, но почему бы и не попробовать? Ну и в качестве бонуса я добавлю еще фотографий из этого фотосета)

Мне кажется, кофе на нее как-то странно влияет






P.S. Я все-таки сумел связаться с ребятами из Торрефакто, обещали выкроить время, чтобы ответить на вопросы. У них на самом деле много разной высокотехнологической фигни. Один только фотоколориметр для точного определения цвета зерна чего стоит. Это, например, важный момент при объективной оценке степени обжарки. Если будет интересно — я попробую найти время для того, чтобы рассказать об этих вещах.
Tags:кофекофеинлабораторияненормальные людиграфический анализcomputer visionimage analysiscellprofilerДиана играет в ученогочто курит автордруг-порошок
Hubs: Open source Python Algorithms Image processing
+29
15.5k 80
Comments 45