Search code examples
matlabimage-processinggraph-theoryminimum-spanning-tree

how to connect edges to nodes in a image using minimum spanning tree approach


I am doing my project on graph matching in hand written image, i want to represent a given word image in graph, am using the below algorithm

Algorithm:

input: Binary image B, Grid width w, Grid height h
Output: Graph g = (V, E) with nodes V and edges E
1: function Grid(B,w,h)
2: for i ← 1 to number of columns C = Width of B/w do
3: for j ← 1 to number of rows R = Height of B/h do
4: V = V ∪ {(xm, ym) | (xm, ym) is the centre of mass of segment sij}
5: for Each pair of nodes (u, v) ∈ V × V do
6: E = E ∪ (u, v) if associated segments are connected by NNA, MST, or DEL
7: return g

am already find the center of mass using this am plotting the points after plotting the points i do not know how to add the edges to using minimum spanning tree approch

this my code

clc;
clear all;
close all;
X=imread('i2.jpg');
imfinfo('i2.jpg')
figure,imshow(X)

b = imresize(X,[100,100]);
si = size(b,1);
sj = size(b,2);
figure;imshow(b);

% Binarization
th = graythresh(b);
I = im2bw(b,th);

w = 10;
h = 10;
c=si/w;
r=sj/h;
kl=bwmorph(~I,'thin',inf);
figure,imshow(kl)

R(:,:)=kl(:,:);
I=1;
U1=w;
J=1;
U2=h;
E=1;
for i=1:r
  for j=1:c
B(I:U1,J:U2)=R(I:U1,J:U2);
[x,y]=find(B==1);
CX=mean(x);
CY=mean(y);
CXX(E)=CX
CYY(E)=CY
T(I:U1,J:U2)=B(I:U1,J:U2);
J=J+w;
U2=U2+h;
E=E+1;
clear B x y    
    end

I=I+w;
U1=U1+h;
J=1;
U2=h;

end
imshow(R)
hold on

hold on
plot(CYY,CXX,'.c')
hold off
% CXX(isnan(CXX)) = [];
% CYY(isnan(CYY)) = [];

r = imread('empty.jpg');
n = imresize(r,[100,100]);
figure,imshow(n);
hold on

hold on
plot(CYY,CXX,'.k')
hold off

input image expected output

am plotting using the CXX and CYY values i do not know how to add the edges to plotted points using minimum spanning tree approach please give me some code it will help me to complete my project


Solution

  • Hard to tell from your question, but I'm assuming you want to represent a graph where all nodes are at coordinates [CXX,CYY] and the weight matrix is the distance between node i and node j

    You can generate an adjacency matrix with pdist2()

    A = pdist2([CXX,CYY],[CXX,CYY]);
    

    Build a graph based A (note that this graph carries no information about original location, only distances)

    G = graph(A,...);
    

    Determine the MST for G

    T = minspantree(G); 
    

    T.Edges will be a table of nodes i and k that are included in the MST, as well as their distance weight. You can use graph functions to visualize this, although it will only factor distance vectors, not original coordinate locations