|
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
|
||||||||||||||||
Группировка точек21.06.2021, 09:11. Показов 13156. Ответов 58
Метки нет (Все метки)
Всем привет!
Есть 3D карта допустим гор, я её обрезаю по высоте и получаю координаты вершин гор. И хочу решить такую задачу. Вход - массив вида:
Все вершины разделены между собой как минимум кругом пустоты радиусом 5-10 точек Мои мысли Запустить цикл по list_coord, и если точка не находится в диапазоне +- 3 то добавляем её в новый массив, в итоге на выходе должен был быть массив с тремя координатами, но что то не получается доделать логику
Не по теме: p.s. формулировки мыслей конечно ужасные если что спрашивайте
0
|
||||||||||||||||
| 21.06.2021, 09:11 | |
|
Ответы с готовыми решениями:
58
|
|
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
|
||||||
| 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
|
||||||
|
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
|
|
| 23.06.2021, 14:03 | |
|
По первому посту - да, все верно.
По поводу DBSCAN - это не совсем то, мне кажется, это более ресурсоемкое решение. может что-то еще есть в networkx. Добавлено через 4 минуты RSAX, для экономии памяти лучше использовать разреженные матрицы, а не полные NxN
0
|
|
|
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
|
||||||
| 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
|
|
|
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
|
|
| 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
|
|
|
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
|
|
| 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
|
|
|
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
|
|
| 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
|
|
|
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
|
|
| 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
|
|||||||||||
|
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
|
||||||
| 06.07.2021, 07:28 | ||||||
|
RSAX, не нужна вам триангуляция 3d.
вот смотрите код:
Далее нерегулярные наборы точек интерполируются в регулярные сетки. z_grid - по сути картинка (осторожно! есть nanы по краям) Ищем максимумы и все. (добавляется один ложный максимум с края связанный с наклоном "стола", который можно отфильтровать) Все просто, главное перейти из наборов точек к регулярной картинке-матрице.
1
|
||||||
| 06.07.2021, 07:28 | |
|
Помогаю со студенческими работами здесь
40
Группировка списка Группировка в Pandas Группировка словаря
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Гайд, как ворваться в вайб-кодинг в мае 2026
Noname2331 17.05.2026
Простите за получившееся полотно текста, я даже не знаю, как его разбить на главы. Тут, что называется, ни добавить ни убавить, одна сцена одним дублем.
На моих глазах недавно случилось чудо. Как. . .
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|