2017-04-20 1 views
0

Ich möchte für ein Bild mit vielen Vorlagen (31 Vorlagen) normalisierte Kreuzkorrelation berechnen. Wenn ich Vorlagen als eine Zelle definieren und i kompilieren:Zelle als ein Eingabeargument für normxcorr2

parfor ii =1 :100 
    T {ii,:}=normxcorr2(template{:} ,image{ii}); 
end 

Es gibt einen Fehler zurück, da die Eingänge von normxcorr2 Zellen nicht sein kann (nur Matrixs). Ich kann natürlich ein for-Schleife wie verwenden:

parfor ii =1 :100 
for j= 25:55 
    % T {ii,j}=normxcorr2(template{j} ,image{ii}); 
end 
end 

jedoch mehr Zeit (wegen der verschachtelten Schleife) macht.

Meine Frage ist, ob es eine Lösung gibt, um eine verschachtelte Schleife nicht zu verwenden.

Antwort

0

vielleicht Ihre Vorlagen in einem Zellenfeld rearanging und dann gelten die normxcorr2 als cellfun können Ihnen helfen:

% generate random image and templates 
image = rand(100); 
% templates of 5X5 
templates = rand(5,5,31); 
% convert templates into cell array 
templates = squeeze(mat2cell(templates,size(templates,1),... 
    size(templates,2),ones(1,size(templates,3)))); 
% apply cellfun 
T = cellfun(@(t) normxcorr2(t ,image),templates,'UniformOutput',0); 

beachten Sie, dass, wenn die Vorlagen nicht Größen in einem Zellenfeld und Vorlage des angegebenen Werte sind nicht gleich (hier 5X5), dann müssen Sie das templates Zell-Array auf eine andere Art und Weise erstellen (immer noch einfach).

+0

vielen Dank! es hat mich inspiriert! – ransa

Verwandte Themen