%A *算法中用于评估的临时矩阵

时间:2018-10-27 08:49:22

标签: matlab

这个临时矩阵是用Matlab编写的,任何人都可以给我一些解释吗?。

%Temporary matrix for evaluation
EE=E;

n_neighbour_high=1;

for i=1:x_size
    for j=1:y_size

        %Check neighbours
        k=i-1:i;
        l=j-1:j;

        %If neighbours within the grid
        if min(k)>0 && min(l)>0 && max(k)<=x_size && max(l)<=y_size

            %If among all the neighbours there enough high elemets, all the block is high
            if sum(sum(double(EE(l,k)>0)))>=n_neighbour_high               
                E(l,k)=elev;                
            end
        end
    end
end

1 个答案:

答案 0 :(得分:0)

让我们分解一下:

for i=1:x_size
    for j=1:y_size

表示您正在遍历2D矩阵的每个元素。

    %Check neighbours
    k=i-1:i;
    l=j-1:j;

这里您要定义称为kl的新变量,它们基本上是ij之前的数字,直到i和{{1} }。 假设j将使i = 2成为具有值k的向量。如果[1 2]将为i,则k将为3,依此类推...始终是[2 3]之前的数字和数字i or j

i or j

这里,您只是在检查索引是否有效(在1和2d数组大小范围内)(顺便说一下,其中一些检查是不必要的) 对于在 %If neighbours within the grid if min(k)>0 && min(l)>0 && max(k)<=x_size && max(l)<=y_size 中的值将获得i or j = 1的情况下k or l而言,这是避免问题的必要方法。

[0 1]

在这里,您从大小为(2x2)的EE( %If among all the neighbours there enough high elemets, all the block is high if sum(sum(double(EE(l,k)>0)))>=n_neighbour_high E(l,k)=elev; end )中提取一个子2d矩阵,并且您要计算这4个元素中有多少个大于0和(EE(l,k))。

sum(sum(double(EE(l,k)>0)))

如果元素数量更大,则阈值 E(l,k)=elev; 升高n_neighbour_high``you are saving the value of E`。

我认为这确实可以帮助您学习使用调试器(单击Matlab编辑器中的行号,以便获得一个小红点) have a look at this