2016-11-24 3 views
-1

Я использую Python 2.7 и я случайным образом области в OpenCV, что в конце выглядеть в Numpy массиве:Есть ли способ «пометить» смежные элементы в массиве numpy с тем же элементом?

0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 1 1 0 0 
    0 0 0 0 0 0 0 0 0 0 1 1 0 0 
    0 0 0 0 0 0 0 0 0 0 0 1 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 1 1 1 0 0 0 0 0 0 
    0 0 0 0 0 1 1 1 0 0 0 0 0 0 
    0 0 0 0 0 1 1 0 0 0 0 0 0 0 
    0 0 0 0 0 1 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 

Я на самом деле работать с большими матрицами и может генерировать до 5 областей. То, что я хочу сделать, это прочитать сгенерированную матрицу и «группа» область, чтобы сформировать вторую матрицу, которая выглядит следующим образом:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 1 1 0 0 
    0 0 0 0 0 0 0 0 0 0 1 1 0 0 
    0 0 0 0 0 0 0 0 0 0 0 1 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 2 2 2 0 0 0 0 0 0 
    0 0 0 0 0 2 2 2 0 0 0 0 0 0 
    0 0 0 0 0 2 2 0 0 0 0 0 0 0 
    0 0 0 0 0 2 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 

Так, если в конце у меня есть матрица с 5 пронумерованных точками. Я довольно новичок в python, но почему-то я думаю, что это может быть простым быстрым способом сделать это. Я надеюсь, что кто-то может мне помочь.

+2

Извините, это не бесплатный сервис написания кода, вы должны показать свои усилия и код. Это говорит о том, что я не думаю, что есть «простой» способ решить эту проблему («легко» является полностью субъективным), но я бы предложил вам изучить глубокий поиск или поиск по ширине для поиска ваших групп 1 на 1 ... Это также можно решить с помощью теории графов, идентифицируя связанные компоненты вашего графика. – Julien

+0

@Julien Bernu Возможно, я ошибаюсь здесь, но похоже, что он просит скорее направление, чем бесплатный код. Вам действительно нужно показать свои усилия, чтобы изобретать колесо, даже если вы подозреваете (и это правильно), это уже придумано? – Headcrab

+0

@ Headcrab Да, это тонкая линия ... С видом на то, что я не знал, что это «колесо» уже существует, можно утверждать, что вам нужно проявить хотя бы немного усилий, несмотря ни на что: либо усилие в пытаясь изобрести колесо, или усилие при взгляде на него, если кто-то его уже изобрел. – Julien

ответ

4

scipy.ndimage.label в SciPy делает именно это

Вам нужно определить структуру, которая определяет, какие элементы принадлежат к группе, например:

structure = [[1,1,1],[1,1,1],[1,1,1]] 

, если вы хотите, чтобы найти элементы, которые находятся в окрестностях включая диагонали, или

structure = [[0,1,0],[1,1,1],[0,1,0]] 

, если вам нужны только левые/правые/верхние/нижние части одной точки. Обратите внимание, что функция возвращает два значения, первый - ваш запрошенный массив, а второй - количество найденных «меток».

В этом контексте вы можете найти некоторые другие функции в scipy.ndimage.measurements.

Смежные вопросы