Python: найти наибольшее значение в окрестности в трехмерном массиве (стек изображений) - PullRequest
0 голосов
/ 25 февраля 2019

Я использую алгоритм сопоставления шаблонов для обнаружения экземпляров данного объекта на целевом изображении.Алгоритм создает тепловую карту, которая выглядит следующим образом:

enter image description here

До сих пор я использовал skimage.feature.peak_local_max, чтобы найти локальные пики в тепловой карте, которая работала хорошо.

Теперь я хочу запустить сопоставление шаблона для различных поворотов шаблона, что даст мне несколько тепловых карт.Например:

enter image description here

Я сложил эти изображения друг на друга, чтобы создать трехмерный массив, и теперь я хочу найти самые высокие значения вместный район .Например, окрестность определяется шириной и высотой 15 пикселей (но включает все повороты).

Трехмерный массив имеет форму (высота, ширина, вращение) .Ось z соответствует повороту шаблона.

РЕДАКТИРОВАТЬ: Я сам нашел решение (с полезными комментариями от markuscosinus ) и опубликую этоздесь, в случае, если у кого-то есть такая же проблема:

Я посмотрел на реализацию scipy.ndimage.filters.maximum_filter (которую можно найти здесь . Я немного дернул код, чтобы работать с моей формой данных и использовалfootprint = np.ones((size_neighborhood, size_neighborhood, nr_rotations)).

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я сам нашел решение (с полезными комментариями от markuscosinus ) и опубликую это здесь на случай, если у кого-то возникнет такая же проблема:

Я посмотрел на реализацию scipy.ndimage.filters.maximum_filter (который можно найти здесь . Я немного дернул код для работы с моей формой данных и использовал footprint = np.ones((size_neighborhood, size_neighborhood, nr_rotations)).

0 голосов
/ 25 февраля 2019

Одним из способов достижения этого является следующее:

  1. Найти локальные максимумы для каждого поворота, используя skimage.feature.peak_local_max
  2. Для каждого максимума m в (x,y,z), найденного вШаг 1 Проверьте, были ли найдены другие в окрестности.Проще всего было бы проверить куб соседства с углами (x-n,y-n,y-n) и (x+n,y+n,y+n), где n - размер окрестности.Если в округе есть несколько мест, оставьте только самые большие.

Я знаю, это не очень приятно с точки зрения эффективности, но в случае, если у вас нет слишком большого или слишком большого количества снимков, это должнополучить работу :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...