Допустим, у меня есть массив аккумуляторов 2D в Java int[][] array
. Массив может выглядеть так:
(оси x и z представляют индексы в массиве, ось y представляет значения - это изображения int[56][56]
со значениями от 0 до 4500)
или
Что мне нужно сделать, так это найти пики в массиве - есть 2 пика в первом и 8 пиков во втором массиве. Эти пики всегда «очевидны» (между пиками всегда есть промежуток), но они не должны быть похожими, как на этих изображениях, они могут быть более или менее случайными - эти изображения не основаны на реальных данных, только образцы , Реальный массив может иметь размер примерно 5000x5000 с пиками от тысяч до нескольких сотен тысяч ... Алгоритм должен быть универсальным, я не знаю, насколько большим может быть массив или пики, я также не знаю, сколько там пиков являются. Но я знаю какой-то порог - пики не могут быть меньше заданного значения.
Проблема в том, что один пик может состоять из нескольких меньших пиков поблизости (первое изображение), высота может быть совершенно случайной, а также размер может значительно отличаться в пределах одного массива (размер - я имею в виду количество единиц, которое требуется в массиве - один пик может состоять из 6 единиц, а другой из 90). Он также должен быть быстрым (все выполняется за 1 итерацию), массив может быть очень большим.
Любая помощь приветствуется - я не жду от вас кода, просто правильная идея :) Спасибо!
edit: Вы спрашивали о домене - но это довольно сложно и imho не может помочь с проблемой. На самом деле это массив ArrayLists с трехмерными точками, например ArrayList [] [], а рассматриваемое значение - это размер ArrayList. Каждый пик содержит точки, которые принадлежат одному кластеру (в данном случае плоскости) - этот массив является результатом алгоритма, который сегментирует облако точек. Мне нужно найти самое высокое значение в пике, чтобы я мог подогнать точки от «самого большого» массива к плоскости, вычислить некоторые параметры из него и затем правильно сгруппировать большинство точек из пика.