|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
||||||||||||||||
Группировка точек21.06.2021, 09:11. Показов 12859. Ответов 58
Метки нет (Все метки)
Всем привет!
Есть 3D карта допустим гор, я её обрезаю по высоте и получаю координаты вершин гор. И хочу решить такую задачу. Вход - массив вида:
Все вершины разделены между собой как минимум кругом пустоты радиусом 5-10 точек Мои мысли Запустить цикл по list_coord, и если точка не находится в диапазоне +- 3 то добавляем её в новый массив, в итоге на выходе должен был быть массив с тремя координатами, но что то не получается доделать логику
Не по теме: p.s. формулировки мыслей конечно ужасные если что спрашивайте
0
|
||||||||||||||||
| 21.06.2021, 09:11 | |
|
Ответы с готовыми решениями:
58
|
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
||||||
| 23.06.2021, 13:17 | ||||||
Сообщение было отмечено u235 как решение
Решение
RSAX, нет, тут сетка нерегулярная. Нужна триангуляция.
Добавлено через 5 часов 44 минуты RSAX, Вот код, который строит триангулированые сетки по вашим данным: Кликните здесь для просмотра всего текста
Дальше осталось прикрутить что-то типа: scipy.sparse.csgraph.connected_component s() для вычисления числа кластеров. Не по теме: p.s. Как снять отметку "решение"? случайно нажал..
1
|
||||||
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
|
| 23.06.2021, 13:30 [ТС] | |
|
Не по теме: u235, ваш ответ близок к решению, пусть остаётся отметка) Спасибо большое за код, уже час искал ответ!
0
|
|
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
|
| 23.06.2021, 13:34 [ТС] | |
|
u235, из скрина №1 3D получилось вот такое, я правильно понял что это некий перевод из 3D в 2D и связывание точек в треугольники с условием что связанная точка лежит в радиусе 0.02?
0
|
|
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
||||||
| 23.06.2021, 13:59 [ТС] | ||||||
|
u235, а DBSCAN хорошая идея использовать? В scipy.sparse.csgraph.connected_component s() я что передаю, точки triang.x и .y или triang.triangles?
Тут просто массив NxN размера должен быть как я понимаю
0
|
||||||
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
|
| 23.06.2021, 14:03 | |
|
По первому посту - да, все верно.
По поводу DBSCAN - это не совсем то, мне кажется, это более ресурсоемкое решение. может что-то еще есть в networkx. Добавлено через 4 минуты RSAX, для экономии памяти лучше использовать разреженные матрицы, а не полные NxN
0
|
|
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
||||||
| 24.06.2021, 08:24 | ||||||
|
RSAX, вот что получилось:
Кликните здесь для просмотра всего текста
1
|
||||||
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
|
| 25.06.2021, 10:44 [ТС] | |
|
u235, Такой ещё вопрос, просто алгоритм интересен, без кода, что я могу сделать с исходным массивом облака точек, чтобы хоть как то разграничить объекты и подготовить их к кластеризации?
На скринах площадь 70х50см, на ней лежат допустим яблоки, использовать визуализацию нельзя, поэтому opencv вряд ли поможет
0
|
|
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
|
| 25.06.2021, 10:48 [ТС] | |
|
По оси Z просто отрезать не получается так чтобы остались только верхушки объектов, потому что если камера наклонена хоть на 1 см отрезается слишком много у объектов по краям
0
|
|
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
|
| 25.06.2021, 11:12 | |
|
RSAX, я бы перевел сначала все на регулярную сетку, т.е. получил картинку. Отфильтровал шумы и выполнил поиск локальных максимумов cv2.minMaxLoc() или что-то подобное. OpenCV прекрасно работает и без визуализации, например, у меня на телефоне из консоли Termux.
Если надо будет разделять уже бинаризированные объекты, то есть Watershed segmentation см. https://scikit-image.org/docs/... tershed-py Если надо выровнять "освещение", то см. функцию imclearborder из Matlab/Octave (использует морфологию, можно сделать аналог в OpenCV) , нужно просто поделить изображение на оценку фона (размытое изображение или после imclearborder)
2
|
|
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
|
| 25.06.2021, 14:18 [ТС] | |
|
u235, а я вот чего придумал, а если брать максимум массива, делать запись - кластер 1, далее удалять все точки вокруг него в радиусе который мне нужен и снова искать максимум?
0
|
|
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
|
| 25.06.2021, 17:05 | |
|
RSAX, да, можно и так. Можно просто поиск локальных максимумов в numpy/scipy
Добавлено через 1 час 27 минут См. функции scipy.signal.find_peaks и scipy.signal.argrelmax для поиска локальных максимумов.
1
|
|
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
||||||
| 02.07.2021, 11:16 [ТС] | ||||||
|
u235, Можешь глянуть если есть время иерархическую кластеризацию, вот такой вот код, работает почти в 10 раз быстрее
0
|
||||||
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
|
| 02.07.2021, 11:30 [ТС] | |
|
Осталась наверное последняя проблема разделить вот такой 1 объект на 3
0
|
|
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
|
| 02.07.2021, 15:06 | |
|
RSAX, вот пример сегментации. https://scikit-image.org/docs/... tershed-py
Но если бы вы нашли локальные максимумы, подобная сегментация возможно и не потребовалась бы.
0
|
|
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
|
| 02.07.2021, 16:05 [ТС] | |
|
u235, утром смотрел данный пример(даже вкладка открыта XD), но так и не понял как туда 2D массив закинуть, вместо np.logical_or(mask_circle1, mask_circle2), что за тип ему нужен
0
|
|
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
|
| 02.07.2021, 17:08 | |
|
RSAX, тип логический: np.bool там где области - true, где пусто - false
Ну и сетка регулярная (надеюсь вы это сделали?), по сути на входе черно-белая картинка.
0
|
|
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
|
| 05.07.2021, 08:45 [ТС] | |
|
u235, Ну вот, у меня такая сетка сейчас, я правильно понимаю что мне надо создать массив условно 1280х720, создать его со значениями [0, 0], далее создать переменную типа bool_arr = [i != 0 for i in frame], на выходе получу массив np.bool и дальше нужно его засунуть в image = np.logical_or(bool_arr)?
0
|
|
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
|||||||
| 05.07.2021, 14:30 [ТС] | |||||||
Добавлено через 27 минут А по поводу локальных максимумов, предлагаете что нибудь такое использовать? На моих данные не особо корректно работает, параметры естественно менял
Думаю локальный максимум не сможет подойти, т.к. объекты могут различаться почти в 2 раза, и два маленьких не смогут быть распознаны из за ограничения радиуса поиска максимума
0
|
|||||||
|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
|||||||||||
| 05.07.2021, 15:43 [ТС] | |||||||||||
|
u235, Ещё я использовал триангуляцию не на 2D а на 3D, и тут она получше работает, думаю есть шансы на поиск лок макс, надо только понять как отбросить лишнее
0
|
|||||||||||
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
||||||
| 06.07.2021, 07:28 | ||||||
|
RSAX, не нужна вам триангуляция 3d.
вот смотрите код:
Далее нерегулярные наборы точек интерполируются в регулярные сетки. z_grid - по сути картинка (осторожно! есть nanы по краям) Ищем максимумы и все. (добавляется один ложный максимум с края связанный с наклоном "стола", который можно отфильтровать) Все просто, главное перейти из наборов точек к регулярной картинке-матрице.
1
|
||||||
| 06.07.2021, 07:28 | |
|
Помогаю со студенческими работами здесь
40
Группировка списка Группировка в Pandas Группировка словаря
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
в-строка - входное арифметическое выражение в инфиксной(обычной). . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|