Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何从图像中获取两个关系操作之间的值_Matlab_Wolfram Mathematica_Relationship - Fatal编程技术网

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

Matlab 如何从图像中获取两个关系操作之间的值,matlab,wolfram-mathematica,relationship,Matlab,Wolfram Mathematica,Relationship,我试图从一个图像中获得两个关系操作之间的值 A(34,67,4)是具有给定值的图像。 我需要A的值介于0和16之间(0您想要应用条件吗 (A>=0)&(A<=16) 这将呈现一个值向量,因为它只选择那些满足条件的值,并且因为它们可以出现在矩阵中的任何位置,所以除了向量之外,没有结构可以将它们返回给您 但是,如果要保留矩阵,并重置每个不满足条件的值,则0或NaN(因此剩下的所有元素都满足条件)使用以下命令: B = A; B(A<0 | A>16) = NaN;

我试图从一个图像中获得两个关系操作之间的值

A(34,67,4)
是具有给定值的图像。

我需要
A
的值介于0和16之间(
0您想要应用条件吗

(A>=0)&(A<=16)
这将呈现一个值向量,因为它只选择那些满足条件的值,并且因为它们可以出现在矩阵中的任何位置,所以除了向量之外,没有结构可以将它们返回给您

但是,如果要保留矩阵,并重置每个不满足条件的值,则0或
NaN
(因此剩下的所有元素都满足条件)使用以下命令:

B = A;
B(A<0 | A>16) = NaN;
B=A;
B(A16)=NaN;
如果还希望对这些值(以及仅对这些值,而不是NaN值)应用操作,可以按如下方式执行:

B = A;
select_idx = A>=0 & A<=16;
B(~select_idx) = NaN;
B( select_idx) = arrayfun(@myfun, B(select_idx) );
B=A;

选择_idx=A>=0&A=0&ADo您只想要满足该条件的值吗?或者您想要保留矩阵结构,并将所有不满足该条件的元素设置为0或其他什么?是的,我想要保留矩阵结构以找到满足该条件的值。那么结构中的其他元素将是什么?请看我的解决方案的第二部分,看看这是否适合你的需要谢谢你Gunther Struyf,第二个代码给了我矩阵结构。但是我担心当我使用NaN值的数组(在我们的示例中为B)计算方程时,NaN值是否将返回到实际整数值。根据我的测试,方程的输出仍然保留NaN值。是否有其他方法可以解决此问题?这完全取决于您对值的处理方式:看起来您希望对满足条件的矩阵中的值应用函数。这改变了您对c的问题ourse…旁注:您可以对NaN值应用算术运算,它们只是保持NaN。请检查我编辑的答案以获得另一种方法再次感谢。您正确理解我希望对矩阵中满足此条件(0和16)的所有值应用函数。我问错了。很抱歉。我想问你另一个问题。是否可以从每个图像波段获得0到16范围内的值。我的图像大小是A(35,76,7)。此外,预期输出应与A(7波段)的大小相同.我要问的是,不要在不同的波段上重复同样的过程。你已经试过了吗?因为你会注意到我给出的代码适用于任何维度的矩阵是的,我有。但那是在单波段图像上。刚才我在多波段图像上试过。你是对的,它可以适用于任何维度的矩阵矩阵。一般来说,每次我计算任何维矩阵的算术运算时,为了保持矩阵结构,我应该编写什么样的语法(或代码)。你能给我一些建议吗?
B = A;
B(A<0 | A>16) = 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) );