Линеаризация бинарного изображения
От: gok Россия  
Дата: 21.07.05 21:30
Оценка: :)
Есть ли алг-ты для соединения единичек бинарного изображения в полигоны?
Не могу найти на этом сайте. А то свой щас придумаю!
gok
Re: Линеаризация бинарного изображения
От: FreshMeat Россия http://www.rsdn.org
Дата: 22.07.05 07:13
Оценка: 2 (1) +1
Здравствуйте, gok, Вы писали:

gok>Есть ли алг-ты для соединения единичек бинарного изображения в полигоны?

Ты про это
Автор: Кирилл Осенков
Дата: 28.09.03
?
gok>Не могу найти на этом сайте. А то свой щас придумаю!
Придумывай, конечно, потом обсудим
Хорошо там, где мы есть! :)
Re[2]: Линеаризация бинарного изображения
От: gok Россия  
Дата: 22.07.05 17:19
Оценка:
Здравствуйте, FreshMeat, Вы писали:

FM>Ты про это?


Ага, оно. Те же яйца, но под другим соусом (т.е. формулировкой). Спасибо!
gok
Re[2]: Линеаризация бинарного изображения
От: gok Россия  
Дата: 28.07.05 01:13
Оценка:
Здравствуйте, FreshMeat, Вы писали:

FM>Придумывай, конечно, потом обсудим


Мда, покрутился там, ничего не понял. Какие то обходы вширину, вглубину...
Похоже там решают след шаг: как эту ломаную упростить.

Выдал свой, все-таки. Простейший как валенок.
Код (ввиде .м) очень сырой, смотрится ужасно некрасиво, должно быть много ускорений. Например, мона как то разбить область на две половинки, верхняя и нижняя и проходить их раздельно. Иначе каждый пиксель одной половины проверяется 3 раза когда идем по пикселям другой половины.
Проверил на своих изображениях – работает. Может обходить односвязные невупыклыи изображения.
Ограничения: 8-связные пиксели, линия 1 пиксель шириной (иначе вектор может завернуть обратно по той же линии!).
Дальнейшие планы: подключить распознание дырок внутри полигонов (например, на снимке было озеро).

Основная идея: отсортировать по колонкам (например) и искать ближайших соседей (+-1) пикселя в 3х колонках (та же что и для пикселя + 2 прилегающие слева, справа). Нашли – бросаем текущий пиксель на выход, затирая его в исходном массиве, новый берем за текущий. Если нет – если это не конец (+-1 пиксель от начала), то зашли в тупик (см ниже типичный случай): затираем текущий и выбираем предыдущий пиксель из выхода в качестве текущего.
Заодно можно проверять изменения направления пикселя для удаления длинных линейных цепочек, но решил сделать это позже на этапе сглаживания полученного вектора.

Пример исходного массива пикселей и тупика (видны номера шагов):

* 0 0 *            1 0 0 *            
* 0 0 *            2 0 0 *            
0 * * *            0 3 4 5            
0 0 * 0            0 0 6 0

gok
Re[3]: Линеаризация бинарного изображения
От: FreshMeat Россия http://www.rsdn.org
Дата: 28.07.05 07:50
Оценка:
Здравствуйте, gok, Вы писали:

gok>Основная идея: отсортировать по колонкам (например) и искать ближайших соседей (+-1) пикселя в 3х колонках (та же что и для пикселя + 2 прилегающие слева, справа). Нашли – бросаем текущий пиксель на выход, затирая его в исходном массиве, новый берем за текущий.

По какому критерию выбирается следующий пиксел?
Хорошо там, где мы есть! :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.