2013-10-08 55 views
1

我一直用CT图像的分割和地方走了过来这个公式:A = A〜= 0是做什么的,我该如何指定它?

A = A〜= 0

在我的情况是从0到255数值的一个巨大的矩阵。如果我使用A = A〜= 0,其中A是我的矩阵,我是否得到所有0到0(假)的值,其余的是1(真)。那么这个公式如何表达:“值不等于0?”。还有另外一个问题,如果我之前写的是真的,可以将公式转换成几个数字,例如“值是否等于0,1,2,3,4,5,”。 ..,50?”

希望我的问题是可以理解的,有人可以帮助我。

谢谢!

回答

3

~=是“不等于”运算符。

因此,表达式A ~= 0返回一个逻辑矩阵,其中A(i,j)为非零(且在所有其他条目中为零)的条目“1”。

结果被分配回A,所以你得到一种掩码:A(i,j)== 1如果A在此时具有非零值。

+1

有问题的操作通过线性索引来执行,所以'A'不需要像你的例子那样是一个2-D矩阵。 'A'可能是一个矢量(在Matlab中也被认为是一个矩阵),一个N-D数组或一个空数组。另外,如果'A'是某种形式的空数组,例如'[]',则'A'本身被返回 - 而不是'0'('false')或'1'('true') - 某事时刻注意。 – horchler

+0

@horchler:+1。感谢您的详细信息。我不想打扰N-D阵列的新手,但当然你是对的。随意编辑答案。 – nimrodm

0

对于~=你的理解是正确的,你会为0和1的所有不等于0

关于你提到的第二个问题得到0,有一个矩阵

B = [0:50]; % or whatever elements in it;

然后使用arrayfun命令

A=arrayfun(@(x)(ismember(x,B)),A);

请在命令窗口输入:help arrayfunhelp ismember以获取详细信息。

基本上它使用匿名函数搜索BA中每个元素的存在。

2

你的第一个问题是answered by @nimrodm,但是对于第二部分你有两种不同的方法。如果要排除像[0, 50]指定的时间间隔的所有号码,你可以使用

A = (A<0) | (A>50); 

如果要检查一些特定的值,也就是说,{0, 5, 11, 50}可以使用ismember

A = ~ismember(A, [0, 5, 11, 50]); 
相关问题