matlab的循环计算速度

matlab的循环计算速度,matlab,image-processing,matrix,Matlab,Image Processing,Matrix,当我在矩阵中计算时,我遇到了问题。这个问题与计算速度有关 我有一个二值图像(f)的矩阵,我在matlab中通过BWLABLE找到了连接的分量。[L num]=bwlabel(f) 之后,基于一些性质,我找到了一个向量p,其中包含了我需要移除的L的一些值。这是我的代码和解释 function [f,L] = clear_nontext(f,L,nontext) % p is a vector include a lot of value we need to remove p=find(nonte

当我在矩阵中计算时,我遇到了问题。这个问题与计算速度有关

我有一个二值图像(f)的矩阵,我在matlab中通过BWLABLE找到了连接的分量。[L num]=bwlabel(f)

之后,基于一些性质,我找到了一个向量p,其中包含了我需要移除的L的一些值。这是我的代码和解释

function [f,L] = clear_nontext(f,L,nontext)
% p is a vector include a lot of value we need to remove
p=find(nontext(:)~=0);
% example p= [1 2 9 10 100...] that mean we need to find in L matrix where get the value =1,2,9,10,100..] and remove it   
[a b]=size(L);
g=zeros(a,b);
for u=1:length(p)
    for i=1:a
        for j=1:b
        if L(i,j)==p(u)
            g(i,j)=1;
            %L(i,j)=500000;
            f(i,j)=0;
        end
        end
    end
end
end
当我使用这种方法时,程序运行很慢,因为对于一个p值,我们需要再次检查矩阵f(或L)中的所有值。所以我需要另一种方法来加快速度。你能帮我吗


非常感谢

通常,MATLAB执行矩阵运算(或索引运算)的速度比循环快。
您可以尝试以下操作:

g(ismember(L,p)) = 1;
f(ismember(L,p)) = 1;
tic;
g(ismember(L,p)) = 1;
f(ismember(L,p)) = 0;
toc
编辑:
我很好奇,所以我做了一个小测试:

L = round(20*randn(10000,10000));
f = L;
p = 1:5;

[a b]=size(L);
g=zeros(a,b);

tic;
for u=1:length(p)
    for i=1:a
        for j=1:b
            if L(i,j)==p(u)
                g(i,j)=1;
                f(i,j)=0;
            end
        end
    end
end
toc
为此,我得到:

Elapsed time is 38.960842 seconds.
当我尝试以下方法时:

g(ismember(L,p)) = 1;
f(ismember(L,p)) = 1;
tic;
g(ismember(L,p)) = 1;
f(ismember(L,p)) = 0;
toc
我得到


实际上,当我尝试使用我的矩阵时,时间与我的代码相似。因为我的矩阵L是连通分量的矩阵,所以(I,j)和邻域的值是相同的。(i,j)的值在一个区域是唯一的(矩阵L的另一个区域没有类似的值)。我想我们需要另一个基于这个特性的算法。非常感谢?你有什么想法吗?