Ich erstelle eine Adjazenzliste basierend auf der Intensitätsdifferenz der Pixel in einem Bild. Der Snippet-Code in Matlab ist wie folgt:Wie verschachtelte For-Schleifen in Matlab zu vermeiden?
m=1;
len = size(cur_label, 1);
for j=1:len
for k=1:len
if(k~=j) % avoiding diagonal elements
intensity_diff = abs(indx_intensity(j)-indx_intensity(k)); %intensity defference of two pixels.
if intensity_diff<=10 % difference thresholded by 10
adj_list(m, 1) = j; % storing the vertices of the edge
adj_list(m, 2) = k;
m = m+1;
end
end
end
end
y = sparse(adj_list(:,1),adj_list(:,2),1); % creating a sparse matrix from the adjacency list
Wie kann ich diese fiesen verschachtelte for-Schleifen zu vermeiden? Wenn die Bildgröße groß ist, dann funktioniert es genauso wie ein Desaster. Wenn jemand eine Lösung hat, wäre es eine große Hilfe für mich. Grüße Ratna
hallo und willkommen .... ersten standart anwser für diese Art von Problem wäre [Vektorisierung] (http://ch.mathworks.com/ Hilfe/Matlab/Matlab_Prog/Vectorization.html) (ein paar [Tricks] (http://www-h.eng.cam.ac.uk/help/tpl/programs/Matlab/tricks.html)) –
Können Sie präzisieren Was sind "cur_label" und "indx_intensity"? Ist es immer ein quadratisches Bild der Größe 'len' von' len'? – Ratbert
cur_label ist ein Vektor (angenommen 120x1, bedeutet, dass es 120 Pixel oder Vertices für die Adjazenzmatrix gibt) ein Cluster aus einem Bild. Und indx_intensity sind die Grauwerte dieser Pixel (120 Grauwerte). Da es 120 Vertices gibt, wird die Adjazenzmatrix eine Größe von 120 × 120 haben. –