我正在尝试从图像中获取两个关系操作之间的值。
A(34,67,4)
是具有给定值的图像
我需要A
的值介于0和16之间(0<=A<=16
)。
当我尝试如下操作时,这只给了我0或1(不是A
数组的值)。你能告诉我这是什么问题吗?
B=((A<=0)&(A>=16)+((A>=0)&(A<=16))
答案 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函数。