Ich habe ein Bild, auf dem ich 81 * 81 Fenster schieben muss, um den Intensitätsabstand (Unterschied) zwischen Mittelpixel und jedem der anwesenden Pixel zu finden im umgebenden 81 * 81-Fenster muss ich auch die Ortsdistanz herausfinden, dh den Unterschied zwischen den zentralen Pixelkoordinaten und den Koordinaten der Pixel im umgebenden Fenster. Wenn ich for-Schleifen verwende, muss ich 4 verschachtelte For-Schleifen für diese Operation verwenden, die fast einen ganzen Tag für ein einzelnes Bild benötigt. Ich möchte 81 * 81 Intensitätsdifferenzen für jedes Pixel in einem Bild speichern und ebenfalls für die Entfernungsdistanz, die dazu neigt, eine 4D-Variable zu erzeugen. kann jemand mir einen effizienten Weg vorschlagen, dies zu tun. Hier ist, wie ich diesen Code geschrieben habe:Wie beschleunigt man die gleitende Fensterfunktion in Matlab für ein Bild
I = imread('House.tiff');
YCbCr = rgb2ycbcr(I);
YCbCr = double(YCbCr);
YCbCr = imresize(YCbCr,[200 200]);
[m n v] = size(YCbCr);
Y = YCbCr(:,:,1); Cb = YCbCr(:,:,2); Cr =YCbCr(:,:,3);
Y1 = padarray(Y,[20,20]);
Cb1 = padarray(Cb,[20,20]);
Cr1 = padarray(Cr,[20,20]);
window_size = 41;
p = (window_size-1)/2;
Dl = zeros(m,n,41,41); Df = zeros(m,n,41,41);
for x = 1:1:m
for y = 1:1:n
for a = -p:1:p
for b = -p:1:p
Df(x,y,a+p+1,b+p+1)= abs(Y(x,y)-Y1(x+a+p,y+b+p))+ abs(Cb(x,y)- Cb1(x+a+p,y+b+p))+ abs(Cr(x,y)- Cr1(x+a+p,y+b+p));%% intensity distance
Dl(x,y,a+p+1,b+p+1) = max(abs((x+p)-(x+a+p)),abs((y+p)-(y+b+p)));%% location distance
end
end
end
end
Vielen Dank für Ihren Vorschlag ... Ihr Hinweis ist sehr hilfreich ... können Sie mir eine Möglichkeit vorschlagen, alle 81 * 81 Werte für jedes Pixel zu speichern..dadurch, dass jedes Mal, wenn das Fenster verschoben wird, unterschiedliche Werte angezeigt werden. ..thanks noch einmal ... –
Vielen Dank @ 16per9 das funktioniert wirklich gut ..... –
@GauriDeshpande wenn meine Antwort half Ihnen bitte vergessen Sie nicht, es als richtig zu markieren :) danke und viel Glück – 16per9