Как создать непрямоугольную ограничивающую рамку вокруг определенных значений в 2d массиве numpy? - PullRequest
2 голосов
/ 12 октября 2011

У меня есть двумерный массив. Я хочу найти не прямоугольную ограничивающую рамку вокруг определенных значений массива. Прямоугольная ограничивающая рамка уже решена в Вопрос: Как выбрать все расположения уникальных элементов в массиве numpy 2d с ограничивающей рамкой вокруг них?

Давайте рассмотрим следующий пример

array([[1, 1, 2, 2],\
      [0, 1, 0, 1],\
      [3, 0, 1, 4],\
      [0, 3, 1, 1]])

Результат немного сложнее

 For one unique value 1, (0,0),(0,1),(1,1),(1,2),(1,3),(2,2), (3,2),(3,3)

Мы хотим построить индексы таким образом, чтобы нулевые значения в пределах экстремумов рассматривались внутри региона. В этом смысле это скорее проблема сегмента региона с точно таким же значением, за исключением нулей внутри региона. Это определение границы региона.

Следует отметить, что область состоит только из уникального значения и нуля. По построению задачи не может быть никаких неуникальных значений, лежащих друг в друге.

Возможно, это проблема поиска контура в изображении в смысле обработки изображения (я не уверен)

Тот, кого мы находим в этом регионе. Мы хотим найти из множества функций то, что находится в определенных регионах. Например, мы обнаруживаем SIFT. Мы хотим выяснить, какие элементы просеивания лежат в одной уникальной области, не сравнивая их.

Пожалуйста, дайте мне знать для дальнейших разъяснений.

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

Большое спасибо.

1 Ответ

1 голос
/ 12 октября 2011

Вы можете использовать алгоритм сегментации на основе метода разбиения графа .Например, вы можете использовать Random Walker .Но вам придется изменить вес следующим образом.

Для каждого пикселя v_i пусть g_i будет цветом пикселя.В то время как оригинальный алгоритм определяет w_ {ij} как:

w_{ij} = exp{-beta*(g_i - g_j)^2)}

Затем вы должны установить w_{ij}=0, когда g_i==0 или g_j==0.

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