Данный код создает программу для анализа концентрации аналита (в частности, гистамина или глифосата) по флуоресцентным изображениям тест-полосок с использованием библиотек компьютерного зрения и машинного обучения. Программа автоматически создаст необходимые директории и проведет вас через процесс калибровки и анализа. Вот что делает программа:
- Позволяет выбрать область интереса (ROI) на тест-полоске.
- Выполняет предварительную обработку изображений.
- Извлекает интенсивность флуоресценции, анализируя яркость и насыщенность.
- Строит калибровочную кривую на основе образцов с известными концентрациями.
- Предсказывает концентрацию аналита для новых образцов.
- Визуализирует результаты анализа, включая:
- Исходное изображение
- Выделенную область интереса
- Гистограмму яркости
- Калибровочную кривую с отметкой текущего образца.
Для использования программы вам потребуется:
- Набор калибровочных изображений с известными концентрациями.
- Изображения исследуемых образцов.
- Библиотеки Python:
OpenCV,NumPy,Matplotlibиscikit-learn.
Особенности.
- Линейная зависимость в логарифмических координатах: калибровочная кривая строится как зависимость интенсивности флуоресценции от десятичного логарифма концентрации (lg₁₀(концентрации)). Используется простая линейная модель вместо полиномиальной.
- Концентрации преобразуются в логарифмические значения перед построением модели. Проверяется, что все концентрации положительные (для возможности логарифмирования)
- Сохраняются коэффициенты линейной регрессии (наклон и пересечение).
- Предсказания концентрации. Для этого используется обратное преобразование: сначала вычисляется lg(концентрации), затем восстанавливается реальная концентрация через потенцирование (
$10^x$ ). - Графики строятся в координатах "интенсивность от log₁₀(концентрации)". На графиках отображается уравнение линии и значение R². Форматирование вывода концентрации в научной нотации.
- В результатах и на графиках отображаются как сама концентрация, так и её логарифм.
- Присутствуют проверки корректности данных (положительные концентрации, ненулевой наклон). Этот подход соответствует распространённому методу калибровки в аналитической химии, где часто наблюдается линейная зависимость сигнала от логарифма концентрации.
- Концентрации калибровочных растворов автоматически извлекаются из имён файлов, поэтому при сохранении фотографий тест-полосок их имена должны соответствовать концентрациям раствора аналита, нанесенных на них. Поддерживаются различные форматы имен: conc_1.23.jpg, 1.23-conc.jpg, просто 1.23.jpg и т.д.
- Возможно сохранение/загрузка калибровочных данных для повторного использования (сохраняется в файле `calibration_data.npy).
- Реализовано автоматическое сохранение графиков калибровки и результатов анализа.
- Все результаты записываются в текстовый файл analysis_results.txt для удобного доступа.
- Организация работы с файлами:
- Создается директория для результатов анализа.
- Графики сохраняются с высоким разрешением (300 dpi).
- Программа проверяет наличие сохраненной калибровки и предлагает её использовать.
Установка программы.
- Скачайте и установите Python с сайта https://www.python.org/downloads/. При установке обязательно отметьте флажком "Add Python to PATH".
- Установите необходимые библиотеки. Если вы работаете на Windows, откройте консоль (клавиши Win+R, введите cmd и нажмите ввод), наберите:
pip install Opencv-python
pip install numpy
pip install matplotlib
pip install scikit-learn
Скачайте и запустите файл fluorescence-analysis.py, следуйте подсказкам.
Анализ кода Fluorescence-Analysis.py
- Импорт библиотек
Код начинается с импорта необходимых библиотек:
- cv2 (OpenCV) - для обработки изображений
- numpy - для работы с числовыми массивами
- matplotlib.pyplot - для визуализации данных
- sklearn.linear_model - для построения линейной регрессии
- sklearn.metrics - для оценки качества модели
- os - для работы с файловой системой
- math - для математических операций
- re - для работы с регулярными выражениями
- Класс FluorescenceAnalyzer
- Основной функционал заключен в классе FluorescenceAnalyzer, который предоставляет методы для:
2.1 Инициализация объекта
- Инициализирует объект с пустыми атрибутами для калибровочной кривой, модели, координат ROI (области интереса) и коэффициента детерминации (R²)
2.2 Выбор области интереса (ROI)
- Метод select_roi позволяет пользователю выбрать 4 точки на изображении для определения области интереса
- Использует matplotlib для отображения изображения и получения координат выбранных точек
2.3 Предобработка изображения
- Метод preprocess_image загружает изображение и применяет маску ROI
- Если ROI не выбран, использует всё изображение
2.4 Извлечение интенсивности флуоресценции
- Метод extract_fluorescence_intensity анализирует изображение для определения интенсивности флуоресценции
- Преобразует изображение в цветовое пространство HSV
- Рассчитывает комбинированную метрику на основе средней яркости (канал V) и насыщенности (канал S)
2.5 Извлечение концентрации из имени файла
- Метод extract_concentration_from_filename извлекает числовое значение концентрации из имени файла
- Поддерживает различные форматы записи концентрации в имени файла
2.6 Построение калибровочной прямой
- Метод build_calibration_curve строит линейную калибровочную прямую на основе известных концентраций и измеренных интенсивностей
- Преобразует концентрации в логарифмическую шкалу (по основанию 10)
- Создает модель линейной регрессии для зависимости интенсивности от логарифма концентрации
- Вычисляет коэффициент детерминации R²
2.7 Предсказание концентрации
- Метод predict_concentration использует калибровочную кривую для предсказания концентрации по измеренной интенсивности
- Применяет обратную формулу регрессии и обратное логарифмирование
2.8 Визуализация калибровочной кривой
- Метод visualize_calibration_curve создает график калибровочной прямой
- Отображает исходные точки и линию регрессии
- Показывает уравнение линии и коэффициент R²
2.9 Анализ изображения образца
- Метод analyze_sample_image выполняет полный анализ изображения с визуализацией
- Создает визуализацию с 4 панелями: - Исходное изображение - Область интереса (ROI) - Гистограмма яркости - Калибровочная прямая с отмеченным результатом анализа (зеленая точка)
2.10 Сохранение и загрузка калибровки
- Методы save_calibration и load_calibration позволяют сохранять и загружать данные калибровки
- Функция main()
Демонстрирует использование класса FluorescenceAnalyzer:
- Создает объект анализатора
- Проверяет наличие директорий с калибровочными изображениями и образцами
- Проверяет наличие сохраненной калибровки
- Если нет сохраненной калибровки или пользователь хочет создать новую:
- Собирает список калибровочных изображений
- Предлагает пользователю выбрать ROI
- Строит калибровочную кривую
- Визуализирует и сохраняет калибровочную кривую
- Сохраняет данные калибровки
- Собирает список образцов для анализа
- Анализирует каждый образец и сохраняет результаты
- Выводит итоговые результаты и сохраняет их в текстовый файл
- Блок запуска Запускает функцию main() при непосредственном запуске скрипта.