Verfasst am: 22.10.2015, 15:14
Titel: knnsearch außerhalb von Schleife?
Hallo,
ich habe folgendes Problem: Ich habe ein 2000 x 2000 pixel großes Bild. Etwa 3000 Pixel haben einen zusätzlichen Wert. Nun will ich für die anderen Pixel ohne Wert eine Interpolation aus den Pixeln mit Wert berechnen.
Dafür suche ich zurzeit für jeden Pixel die nächsten Nachbarn, die einen Wert besitzen. Das dauert aber unglaublich lange, wenn ich für jedes Pixel diese Suche durchführen muss.
Gibt es eine Möglichkeit den kd Baum aufzustellen, bevor ich in die Schleife für jedes Pixel gehe? Sodass ich dann für jedes Pixel nur auf den Baum zugreife und ihn nicht neu erstelle?
Mein Code sieht vereinfach so aus:
Code:
nCols =2000;
nRows =2000;
numberOfNeighbors = 10;
% all pixelindices (linear)
I = 1:nCols*nRows;
X = randi(100,[2,3000]); % pixels that have a data value (for this example just random)
X(3,:) = randi(1000,[1,3000]); % third line gives data for pixels
I2 = sub2ind([nRows,nCols],X(:,2),X(:,1));
I3 = I;
% save pixel indices which need data
I3(I2) = [];
H = zeros(1,nCols*nRows);
H(I2) = X(3,:);
% read image
for pixelind = I3
% KNN [curtestpixelrow,curtestpixelcol] = ind2sub([nRows,nCols],pixelind); %ind2sub goes colwise
curpixelind = [curtestpixelcol,curtestpixelrow]; % swap row and col to fit to image [n,d]=knnsearch(X,curpixelind,'k',numberOfNeighbors,'distance','minkowski','p',5);
neighbors = X(n,:);
% do some more computing... end
es ist ein bisschen komplizierter als ich es hier dargestellt habe. Die Interpolation verwendet zwar die Werte der Nachbarn, gleichzeitig aber auch noch einige andere Parameter, die Farbe der Pixel etc. Deswegen ginge es mir hier schon darum, wie ich den knn schneller machen kann, bzw. auslagern
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.