Подсчет клеток и подсчет флуоресценции в Python

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

http://blogs.mathworks.com/steve/2006/06/02/cell-segmentation/

Кроме того, если я беру несколько изображений в разных флуоресцентных каналах (после окрашивания клеток некоторым антителом/создателем), как я могу автоматически количественно определять долю клеток, положительную для каждого маркера? Кто-нибудь сделал что-то подобное в Python? Или есть ли в Python библиотека, которая может быть использована для этого?

Ответы

Ответ 2

Вы можете сделать это в Python, используя библиотеку OpenCV.

В частности, вас будут интересовать следующие функции:

  • растяжение гистограммы (cv.EqualizeHist). Это отсутствует из текущего API Python, но если вы загружаете последнюю версию SVN OpenCV, вы можете ее использовать. Эта часть предназначена только для отображения, не требуется для получения того же результата.
  • порог изображения
  • морфологические операции, такие как erode (также расширяются, открываются, закрываются и т.д.)
  • определить контур blob в двоичном изображении с помощью cv.FindContours - см. этот вопрос. Он использует C, а не Python, но API-интерфейсы практически одинаковы, поэтому вы можете многому научиться там.
  • сегментация водораздела (используйте cv.Watershed - it существует, но по какой-то причине я не могу найти его в руководстве)

С учетом этого здесь я хотел бы использовать OpenCV для получения тех же результатов, что и в статье matlab:

  • Порог изображения с использованием эмпирически определенного порога (или метода Ohtsu)
  • Примените дилатацию к изображению, чтобы заполнить пробелы. По желанию, размытие изображения перед предыдущим шагом порога - это также приведет к удалению небольших "отверстий"
  • Определение контуров с помощью cv.FindContours
  • Необязательно нарисовать контуры
  • Используя информацию о блобе, проведите по каждому блоблю по тексту оригинал и добавьте отдельный порог для каждого блоба для разделения ядер ячеек (это то, что делает их операция imextendedmax)
  • Необязательно, краска в ядрах
  • Применить преобразование водораздела

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

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

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

Ответ 3

Вы также можете найти эту библиотеку полезной:

https://github.com/luispedro/pymorph/

Мне было легче перемещаться с помощью библиотеки OpenCV.

Ответ 4

И просто добавить еще одно: cellprofiler.org(программное обеспечение для анализа изображений с открытым исходным кодом на питоне)