如何从图像中获取两个关系操作之间的值

时间:2012-10-30 17:05:18

标签: matlab wolfram-mathematica relationship

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

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

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

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

1 个答案:

答案 0 :(得分:0)

您想要应用条件

(A>=0)&(A<=16)

作为矩阵A上的logical indexing

B = A(A>=0 & A<=16);

这将为您呈现值的向量,因为它只选择那些满足您条件的值,并且因为它们可以出现在矩阵中的任何位置,所以没有结构可以将它们返回给您但是在向量中。

如果你想保留矩阵,并重置每个不满足条件的值0或NaN(所以剩下的就是满足条件的所有元素)使用以下内容: / p>

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函数。