U235
Вот только чем labelling поможет для нахождения ближайших соседей?
У меня в классе InfluenceMap для каждого пикселя хранится следующая информация:
1. Номер соединенного компонента, в зоне влияния которго находится данный пиксель. (4 байта)
2. Вектор от данного пиксела до ближайшего пикселя соединенного компонента. (2x2 байта)
3. Квадрат расстояния до ближайшего пикселя соединенного компонента. (4 байта)
Ну а кроме этого я держу вспомогательный массив, где для каждого компонента хранятся его характеристики, например колличество пикселей.
В принципе квадрат расстояния можно было бы исключить, потому как его можно вычислить из вектора. Он хранится для ускорения постороения этой карты влияний, которая по сути дела есть ни что иное, как диаграмма Вороного.
Строится эта карта влияния методом vector propagation.
Ну а наличие соседних объектов я проверяю так:
Пробегаю по карте влияний, и если два соседних пиксела находятся в разных зонах влияния, то из двух векторов получаю расстояние между влияющими объектами. Потом исходя из размеров компонентов, вычисляю порог расстояния, и если реальное расстояние меньше порога, тогда объект помечается как не мусор.
Вот только чем labelling поможет для нахождения ближайших соседей?
У меня в классе InfluenceMap для каждого пикселя хранится следующая информация:
1. Номер соединенного компонента, в зоне влияния которго находится данный пиксель. (4 байта)
2. Вектор от данного пиксела до ближайшего пикселя соединенного компонента. (2x2 байта)
3. Квадрат расстояния до ближайшего пикселя соединенного компонента. (4 байта)
Ну а кроме этого я держу вспомогательный массив, где для каждого компонента хранятся его характеристики, например колличество пикселей.
В принципе квадрат расстояния можно было бы исключить, потому как его можно вычислить из вектора. Он хранится для ускорения постороения этой карты влияний, которая по сути дела есть ни что иное, как диаграмма Вороного.
Строится эта карта влияния методом vector propagation.
Ну а наличие соседних объектов я проверяю так:
Пробегаю по карте влияний, и если два соседних пиксела находятся в разных зонах влияния, то из двух векторов получаю расстояние между влияющими объектами. Потом исходя из размеров компонентов, вычисляю порог расстояния, и если реальное расстояние меньше порога, тогда объект помечается как не мусор.