eddy_em: (Default)
2012-01-26 11:00 am

Поиск изофот. Часть 2: более-менее правильный подход

Понадобилось мне однажды вычисление изофот (линий равной интенсивности на изображениях), однако, готовых библиотек я не нашел, а копаться в чужом коде (например, в тех же Octave или Iraf) очень не хотелось. В качестве простейшего алгоритма я нашел метод шагающих квадратов. Однако, этот метод сильно снижает пространственное разрешение при вычислении узлов изофот, поэтому я решил его немного видоизменить и сделать квадраты перекрывающимися.
Первая реализация (кстати, довольно быстрая) была неудачной: т.к. я строил маску, общую для всех уровней, а для конкретного уровня пересчитывал отдельно, в точках, через которые проходит несколько изолиний, получились разрывы. Ковыряния в коде приводили к все большему и большему числу взаимных блокировок и флагов, поэтому я решил пойти в ущерб производительности и вычислять маски отдельно для каждого уровня интенсивности.

подробности )
eddy_em: (Default)
2011-11-20 03:31 pm

Поиск изофот. Часть 1: неправильный подход

Разрабатывая свой велосипед, о котором уже неоднократно писал, я наткнулся на необходимость поиска изофот с представлением их для начала хотя бы в виде ломаных (потом можно будет и сглаживание добавить). И вот здесь-то у меня возникли затруднения. Есть множество программ, реализующих поиск и даже сглаживание изофот, но вот внятного изложения алгоритма, реализующего это, на просторах интернета я не нашел. Ковыряться в исходниках GPL-программ, строящих изофоты, мне не хотелось (на это ушло бы гораздо больше времени), поэтому я решил для начала попробовать сделать свою реализацию метода шагающих квадратов. Использовать "классический" алгоритм я не захотел, т.к. он приводит к уменьшению количества найденных узлов (все-таки, я собираюсь использовать именно этот вариант, проводя сетку 2х2 пикселя, но об этом - в следующей публикации). Итак, у меня "родился" свой, неправильный метод.
Как делать не надо ) Планирую: провести работу над ошибками и, если ничего не получится, переделать методику (т.е. сделать ячейки маски непересекающимися или даже вообще использовать классический - медленный - алгоритм).

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