3 заметки с тегом

ошибки

Недостаток вычисления определителя целоисчисленных матриц на Питоне

Целоисчисленная матрица — это матрица, все элементы которой являются целыми числами.

Определитель целоисчисленной матрицы — тоже целое число. (Очевидно же.)

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

Очевидно, что если множество возможных элементов матриц конечно, то и число возможных богемных матриц заданного размера тоже конечно.

Пусть мы ищем среди всех богемных матриц только те, определитель которых равен нулю. Ищем при помощи кода на Питоне. Определитель матрицы вычисляем так:

dt = np.linalg.det( a )

И вот тут возможна ошибка.

Если мы будем выбирать матрицы по условию dt==0, то получим неверный результат.

Using that test (dt==0) Python got the right number of [...] matrices when mdim=2 or mdim=3, but the test dt==0 failed a few times when mdim=4, and (after a long time computing) reported 15,015,617 singular matrices; the true number is 15,099,201. This is because np.linalg.det is computing the determinant from a numerical factoring (which introduces rational numbers and rounding error) and the roundoff error means that sometimes a zero determinant was not being reported as precisely zero.

Правильный результат получится если мы используем условие dt<0.5.

https://computational-discovery-on-jupyter.github.io/Computational-Discovery-on-Jupyter/Contents/bohemian-matrices.html#table-of-results

Провал первой попытки прослеживания путей перемещения протист

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


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

В первой заметке объяснил, как с помощью ffmpeg осветлить видео снятое на фотоаппарат, соединенный с микроскопом.

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

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




Для решения задачи использую Трекмейт (TrackMate).

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


Мои попытки научить Трекмейт проследить траектории микроорганизмов провалились.




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

Пробовал пороговую сегментацию (tresholding detector) и методы сегментации по инвариантным точкам (invariant feature detectors): LoG (Laplassian of Gaussian, Лапласиан Гаусиана :), DoG (differences of Gaussians, разница Гаусианов), Hessian (детектор Гессе).

Пороговая сегментация нашла всего один объект, а алгоритмы сегментации по инвариантным точкам приняли за объект каждое пятнышко.

Детектор Гессе приметил каждое пятнышко

Другие доступные методы сегментации не попробовал.




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

Однако их траектории проследить не удалось.

Трекинг построил слишком короткие пути и не все относятся к протистам.

Много коротких, частично некорректных треков — это провал




Cделал следующие выводы:

  1. Необходимо хотя бы в общих чертах понимать, как работают алгоритмы сегментации и трекинга, как на них влияют параметры и когда их стоит применять, а когда нет.
  2. Качество видеоизображений следует еще более улучшить: повысить контраст между подвижными организмами и статичным фоном, фон сгладить или вообще удалить.
  3. Желательно автоматически создать маску, на которой организмы будут отмечены цветом, а фон будет белым.
  4. Следует попробовать иные способы сегментации или другие программы выделения треков.

Об этом расскажу в другой раз.




Всем прочитавшим — Лаплассиана Гауссинана :)

Ошибки программирования. Забыл про юникод

В коде повторяю одни и те же ошибки. Из-за них ничего не работает. Вот одна.

При сравнении строк без учета регистра забыл, что у меня юникод.

if (strtolower($input_name) == $name) { ... }

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

А правильно использовать mb_strtolower.

if (mb_strtolower($input_name) == $name) { ... }

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

Успехов.