避免在MATLAB中循环缓慢



我正在尝试避免MATLAB中的循环缓慢。我有RGB图像,我正在尝试手动计算Mahalanobis距离。这是有关Mahalanobis距离函数的示例代码,可用于循环:

H = 10;
W = 20;
im = rand(H,W,3);
Mean = rand(1,3);
SigmaInv = rand(3,3);   
[size1, size2, size3] = size(im);
imDistance = zeros(size1,size2);
for i = 1:size1
    for j = 1:size2
        x(:,:) = (im(i,j,:));
        x1 = transpose(x);
        imDistance(i,j) = sqrt((x1-Mean)*SigmaInv*transpose(x1-Mean));
    end
end

IM维度为[HXWX3],平均尺寸为[1x3],signainv [3x3],输出IMDISTANCE应为[HXW]。我认为,如果我使用BSXFUN并输入功能,则该代码会更快,但我不知道如何实现它。感谢提前的帮助。

使用reshape函数非常简单:

H = 10;
W = 20;
im = rand(H,W,3);
Mean = rand(1,3);
SigmaInv = rand(3,3);   
[size1, size2, size3] = size(im);
sm = SigmaInv * transpose(Mean);
im_flat = reshape(im,size1*size2,3);
calc = sqrt((im_flat - Mean) * sm);
imDistance = reshape(calc,size1,size2);

最新更新