[Я сделал это отдельным ответом, потому что подход слишком отличается]
Этот подход применим для рек без ответвлений:
- Извлечение "левой" и "правой" границыв виде последовательностей координат пикселей
- Найти соответствие между пикселями от левой и правой границ (например, при динамическом программировании)
- Определить точки центральной линии как средние точки между двумя соответствующими левой и правой точками
Редактировать:
Под соответствием я подразумеваю последовательность пар пикселей, которая проходит непрерывно вдоль обеих границ, сохраняя расстояние между ними минимальным.«Непрерывно» означает, что мы либо делаем один шаг вдоль обеих границ, либо один шаг вдоль одной из них.
Пример поиска такой последовательности описан здесь: http://en.wikipedia.org/wiki/Levenshtein_distance