Использование OpenCV для анализа данных с белковых гелей - PullRequest
5 голосов
/ 27 июня 2011

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

Для тех, кто не знаком, смеси денатурированных белков (в основном, молекулы сделаны законченными прямыми) загружаются в каждый столбец, и с помощью электричества белки протягиваются через гель (потому что белки являются полярными молекулами) , Конечные столбцы каждой стороны этого изображения http://i52.tinypic.com/205cyrl.gif - это место, где вы размещаете смесь белков с известными весами (поэтому, если у вас 4 разных веса, полоса сверху - это самый большой вес, а вес / размер белок уменьшается с дальнейшим движением вниз). Можно ли что-то подобное проанализировать с помощью OpenCV? Данное изображение является действительно чистым гелем, они часто могут стать очень грязными (см. Изображения Google). Я подумал, что если бы я позволил пользователю ввести количество столбцов, столбцы которых содержат известные маркеры веса и их фактический вес, а также снабдил настраиваемый прямоугольник размером по краям геля, что, возможно, будет возможно сканировать и извлечь данные из изображений этих гелей? Я пролистал учебник по OpenCV, но не увидел ни одного очевидного и надежного способа подойти к этому. Есть идеи? Может быть, лучше подойдет другая библиотека?

1 Ответ

5 голосов
/ 27 июня 2011

Я полагаю, что вы можете сделать это, используя OpenCV

Мой подход - разделение по цвету. А затем считая отдельные компоненты.

В больших шагах ваше приложение будет выполнять следующие шаги:

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

  2. Создайте второе изображение в градациях серого, в котором каждый пиксель содержит значение в диапазоне [0,255], которое показывает, насколько хорошо цвет исходной точки соответствует целевому цвету (в случае это изображение оттенок синего) В одном из своих экспериментов я использовал концепцию нечетких множеств и альфа-срезов для выделения объектов определенного цвета. Треугольная функция членства дала мне довольно хорошие результаты. Это просто означало, что я определил треугольные функции для всех трех цветовых каналов RGB и суммировал их результат для каждого цвета, указанного в качестве входного. Если значения цвета были близки к центрам треугольников, то у меня было сильное сходство. Кроме того, контролируя ширину треугольников, вы можете определить допуск совпадений. (другой вариант - использовать трапециевидные функции принадлежности)

  3. В этот момент у вас есть изображение в градациях серого, где фон (гель) черный, а белки серые / белые. Если вы хотите убрать шум, используйте морфологические операторы (стр. 127), которые разрушают и расширяют (cvErode и cvDelate в openCV).

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

  5. Имея все координаты ограничительных рамок, вы можете применять свои собственные алгоритмы, чтобы извлекать любые данные, которые вы пожелаете

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

Что касается Android: я не разрабатывал для мобильных платформ, но я знаю, что вы можете создавать приложения C ++ для этих устройств - прочитал несколько вопросов относительно iPhone и openCV - так что я думаю, что ваше приложение будет портативным, или по крайней мере, часть обработки изображения (графический интерфейс может быть слишком специфичным для платформы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...