画像から 2 つの関係演算間の値を取得しようとしています。
A(34,67,4)
指定された値を持つイメージです。0 から 16 まで
の値が必要です( )。A
0<=A<=16
次のようにしようとしたとき、これは0または1(A
配列の値ではない)を与えました。何が問題なのか教えていただけますか?
B=((A<=0)&(A>=16)+((A>=0)&(A<=16))
画像から 2 つの関係演算間の値を取得しようとしています。
A(34,67,4)
指定された値を持つイメージです。0 から 16 まで
の値が必要です( )。A
0<=A<=16
次のようにしようとしたとき、これは0または1(A
配列の値ではない)を与えました。何が問題なのか教えていただけますか?
B=((A<=0)&(A>=16)+((A>=0)&(A<=16))
条件を適用したい
(A>=0)&(A<=16)
行列の論理インデックスとしてA
:
B = A(A>=0 & A<=16);
これは、条件を満たす値のみを選択するため、値のベクトルをレンダリングします。また、それらの値はマトリックス内のどこにでも発生する可能性があるため、それらを返す構造はありませんが、ベクトルになります。
ただし、マトリックスを保持し、条件を満たさないすべての値をリセットする場合は、0またはNaN
(残っているものはすべて、条件を満たすすべての要素です)、次を使用します:
B = A;
B(A<0 | A>16) = NaN;
これらの値 (および NaN ではなく、これらの値のみ) にも演算を適用する場合は、次のように実行できます。
B = A;
select_idx = A>=0 & A<=16;
B(~select_idx) = NaN;
B( select_idx) = arrayfun(@myfun, B(select_idx) );
例えば:
A = rand(10)*30-5
B = A;
select_idx = A>=0 & A<=16;
B(~select_idx) = NaN;
B( select_idx) = arrayfun(@floor, B(select_idx) );
0 ~ 16 の範囲外のすべての値を NaN に設定し、範囲内のすべての値にフロア関数を適用します。