Граф майнинг матлаб - PullRequest
       11

Граф майнинг матлаб

1 голос
/ 08 октября 2010

Я написал некоторый код Matlab для анализа изображения, который ищет кластеры в изображении и строит матрицу смежности для этих кластеров, описывая, какие кластеры касаются друг друга в изображении.

Я могу использовать эту смежностьматрица для выведения графа.

Для завершения моего алгоритма мне теперь пришлось бы добывать этот граф для всех узлов максимальной степени 2, где индекс узла либо выше, чем индекс его соседа (когда степень1) или между индексами двух его соседей.

В основном как на изображении здесь:

alt text

Мне нужно сделать это в Matlab, и этоважно знать, что моя попытка доступна в виде матрицы смежности в виде:

1 2 3 4

1 0 0 1 1

2 0 0 0 1

3 1 0 0 1

4 1 1 1 0

Возможно, это довольно просто, но я просто не вижу решения ...

1 Ответ

1 голос
/ 08 октября 2010

Вот моя попытка:

%# adjacency matrix
M = [0 0 1 1; 0 0 0 1; 1 0 0 1; 1 1 1 0];

%# degree == 1
N = find(sum(M,2) == 1);            %# nodes with degree(N)==1
nodes1 = N(N>find(M(N,:)));         %# nodes where its index is higher than that of its neigbor

%# degree == 2
N = find(sum(M,2) == 2);            %# nodes with degree(N)==2
Nb = zeros(numel(N),2);
for i=1:numel(N)
    Nb(i,:) = find( M(N(i),:) );    %# two-neighbors of node N(i)
end
%#Nb = sort(Nb,2);
nodes2 = N(Nb(:,1)<N & N<Nb(:,2));  %# nodes where its index is between indices of its two neighbors

%# combine both results
nodes = unique([nodes1(:);nodes2(:)]);
...