Matlab: Jak wektoryzować zagnieżdżoną pętlę nad zestawem wektorów 2D
Mam funkcję w następującej formie:
function Out = DecideIfAPixelIsWithinAnEllipsoidalClass(pixel,means,VarianceCovarianceMatrix)
ellipsoid = (pixel-means)'*(VarianceCovarianceMatrix^(-1))*(pixel-means);
if ellipsoid <= 1
Out = 1;
else
Out = 0;
end
end
Robię procesy teledetekcji za pomocą matlab i chcę sklasyfikować obrazy LandSatTM. Ten obraz ma 7 pasm i wynosi 2048 * 2048. Tak więc zapisałem je w macierzy 3-wymiarowej 2048 * 2048 * 7. Ta funkcja oznacza 7 * 1 macierz obliczona wcześniej przy użyciu próbki klasy w funkcji o nazwie ExtractStatisticalParameters i VarianceCovarianceMatrix jest macierzą 7 * 7, w rzeczywistości widać, że:
ellipsoid = (pixel-means)'*(VarianceCovarianceMatrix^(-1))*(pixel-means);
jest równaniem elipsoidy.Mój problem polega na tym, że za każdym razem możesz przekazać pojedynczy piksel (jest to wektor 7 * 1, gdzie każdy rząd jest wartością piksela w oddzielnym paśmie) do tej funkcji, więc muszę napisać pętla w ten sposób:
for k1=1:2048
for k2=1:2048
pixel(:,1)=image(k1,k2,:);
Out = DecideIfAPixelIsWithinAnEllipsoidalClass(pixel,means,VarianceCovarianceMatrix);
end
end
i wiesz, że zajmie to dużo czasu i energii systemu. Czy możesz zaproponować mi sposób na zmniejszenie nacisku na system?