1

我正在尝试从图像中获取两个关系操作之间的值。

A(34,67,4)是具有给定值的图像。
我需要A0 到 16 ( 0<=A<=16) 之间的值。

当我尝试按以下方式进行操作时,这只是给了我 0 或 1(不是A数组的值)。你能告诉我问题是什么吗?

B=((A<=0)&(A>=16)+((A>=0)&(A<=16))
4

1 回答 1

0

你想应用条件

(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 函数应用于范围内的所有值。

于 2012-10-30T17:08:17.723 回答