我正在尝试从图像中获取两个关系操作之间的值。
A(34,67,4)
是具有给定值的图像。
我需要A
0 到 16 ( 0<=A<=16
) 之间的值。
当我尝试按以下方式进行操作时,这只是给了我 0 或 1(不是A
数组的值)。你能告诉我问题是什么吗?
B=((A<=0)&(A>=16)+((A>=0)&(A<=16))
我正在尝试从图像中获取两个关系操作之间的值。
A(34,67,4)
是具有给定值的图像。
我需要A
0 到 16 ( 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,并将 floor 函数应用于范围内的所有值。