Matlab: Como vetorizar um loop aninhado em um conjunto 2D de vetores
Eu tenho uma função da seguinte forma:
function Out = DecideIfAPixelIsWithinAnEllipsoidalClass(pixel,means,VarianceCovarianceMatrix)
ellipsoid = (pixel-means)'*(VarianceCovarianceMatrix^(-1))*(pixel-means);
if ellipsoid <= 1
Out = 1;
else
Out = 0;
end
end
Eu estou fazendo processos de sensoriamento remoto com matlab e eu quero classificar um LandSatTM imagens.Esta imagem tem 7 bandas e é 2048 * 2048.Então eu os armazenei em 3 dimentinal 2048 * 2048 * 7 matrix.in esta função significa é um 7 * 1 matriz calculada anteriormente usando a amostra da classe em uma função chamada ExtractStatisticalParameters e VarianceCovarianceMatrix é uma matriz 7 * 7, de fato, você vê que:
ellipsoid = (pixel-means)'*(VarianceCovarianceMatrix^(-1))*(pixel-means);
é a equação de um elipsóide.Meu problema é que cada vez que você pode passar um único pixel (é um vetor 7 * 1, onde cada linha é o valor do pixel em uma banda separada) para esta função, então eu preciso escrever um loop como este:
for k1=1:2048
for k2=1:2048
pixel(:,1)=image(k1,k2,:);
Out = DecideIfAPixelIsWithinAnEllipsoidalClass(pixel,means,VarianceCovarianceMatrix);
end
end
e você sabe que vai demorar muito tempo e energia do sistema.Você pode me sugerir uma maneira de reduzir a pressão aplicada no sistema?