2013-06-28 46 views
-1

我正在做的一些图像形态学运算,当我得到这个错误:为什么imsubtract()的输出是double?

Function imlincomb expected its array input arguments (A1, A2, ...) to have the same class.

有人在imsubtract()功能,其中一个输入是另一个减法的输出给出。我检查了Matlab的文档,发现这个解释Z = imsubtract(X,Y):(重点是我的)

The array returned, Z, has the same size and class as X unless X is logical, in which case Z is double.

为什么要在逻辑输入X的情况下,输出是?!

它没有任何意义。特别是,当2个输入参数都是逻辑并且考虑到这个函数大多(如果不是总是)用于图像。

+0

为什么反对票? – Mahm00d

回答

3

有3个可能的值(和布尔只能捕获2个值):

  • 0 (true-true, false-false)
  • 1 (true-false)
  • -1 (false-true)

地看到,尝试:

>> imsubtract([true,true,false,false],[true,false,true,false]) 

ans = 

    0  1 -1  0 

如果你想要的东西经得起进一步的逻辑处理,调用布尔:

>> boolean(imsubtract([true,true,false,false],[true,false,true,false])) 

ans = 

    0  1  1  0 
+0

所以基本上你说* double *输出是因为负值? – Mahm00d

+0

@ Mahm00d即时通讯说,你需要3个状态的事实排除了一个布尔输出。他们选择了双。但是你必须决定如何处理'真假'和'假真'。 matlab实现它的方式,它保留了期望值(true = 1,false = 0)而不会丢失信息(如果它们在“false-true”的情况下是正确的,那么您将无法区分“false-true”从“真假”) – SheetJS

+0

我的问题是为什么'假真'不应该'假'(因此不需要第三国)?这对处理图像很有意义,有趣的是,在'uint8'的情况下,Matlab的这个函数的例子明确指出:“减去两个uint8数组,注意负数结果取整为0”。 – Mahm00d