2

私が持っている場合:

for i=1:n
    for j=1:m
        if outputImg(i,j) < thresholdLow
            outputImg(i,j) = 0;
        elseif outputImg(i,j)> thresholdHigh
            outputImg(i,j) = 1;
        end
    end
end

さらに悪いことに :

for i=1:n
    for j=1:m
        for k=1:q
                % do something  
        end
    end
end

どうすればこれを別の方法で達成できforますか?

4

3 に答える 3

5

最初のループの代わりに、次のような論理条件を使用できます。

 outputImg(outputImg<thresholdLow)=0;
 outputImg(outputImg>thresholdHigh)=1;

もちろん、論理演算子を使用してそれを取得するための同等の他の多くの方法があります...

2番目のループについては、より具体的にする必要がありますが、論理条件のトリックを理解できたと思います。

于 2013-01-04T20:25:27.397 に答える
1

バイナリ行列を使用する場合:

index_matrix = (outputImg < thresholdLow);

次のホールド:

index_matrix(i,j) == 0 iff outputImg(i,j) < thresholdLow
index_matrix(i,j) == 1 iff outputImg(i,j) > thresholdLow

も参照してください

2番目のループでは、いつでもmatirxoverforループを使用できます

于 2013-01-04T20:31:58.823 に答える
1

一般的な解決策についてはndgrid、2番目のケースで次のように使用できるものを調べてください。

[i j k] = ndgrid(1:n, 1:m, 1:q);
ijk = [i(:) j(:) k(:)];

i次に、、、、jおよびの組み合わせのリストをトラバースできます。kつまりijk、しきい値ステートメントをパラメーター化できます。

于 2013-01-04T20:33:39.910 に答える