Image 为什么imsubtract()的输出是双精度的?
当我遇到这个错误时,我正在对图像进行形态学操作: 函数imlincomb期望其数组输入参数(A1、A2、…)为 上同一节课 它在Image 为什么imsubtract()的输出是双精度的?,image,matlab,Image,Matlab,当我遇到这个错误时,我正在对图像进行形态学操作: 函数imlincomb期望其数组输入参数(A1、A2、…)为 上同一节课 它在imsubtract()函数中给出,其中一个输入是另一个减法的输出。我查看了Matlab文档,找到了关于Z=imsubtract(X,Y):(重点是我的) 返回的数组Z与X具有相同的大小和类别,除非X是逻辑的,在这种情况下Z是双精度的。 为什么在逻辑输入X的情况下,输出应该是双倍的 这毫无意义。特别是,当两个输入参数都是逻辑参数并且考虑到此函数主要(如果不总是)用于图像
imsubtract()
函数中给出,其中一个输入是另一个减法的输出。我查看了Matlab文档,找到了关于Z=imsubtract(X,Y)
:(重点是我的)
返回的数组Z与X具有相同的大小和类别,除非X是逻辑的,在这种情况下Z是双精度的。
为什么在逻辑输入X的情况下,输出应该是双倍的
这毫无意义。特别是,当两个输入参数都是逻辑参数并且考虑到此函数主要(如果不总是)用于图像时。有3个可能的值(布尔值只能捕获2个值):
0(真-真,假-假)
1(真-假)
-1(假-真)
>> imsubtract([true,true,false,false],[true,false,true,false])
ans =
0 1 -1 0
如果您希望某些内容能够进行进一步的逻辑处理,请调用boolean:
>> boolean(imsubtract([true,true,false,false],[true,false,true,false]))
ans =
0 1 1 0
所以基本上你是说双输出是因为负值吗?@Mahm00d我是说你需要3个状态的事实排除了布尔输出。他们选择了双人。但是您必须决定如何处理
true-false
和false-true
。matlab的做法是,它保留期望值(true=1,false=0),而不丢失信息(如果它们在false-true
的情况下为true,您将无法区分false-true
和true-false
)我的问题是为什么false-true
不应该是false
(因此不需要第三种状态)? 这在处理图像时很有意义,有趣的是,在uint8
的情况下,Matlab的这个函数示例清楚地说明:“减去两个uint8数组。请注意,负结果四舍五入为0。”如果false-true
为false,则您特别查找的是案例true-false=true,其他一切都是假的
,您可以按x-y>0