Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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
如何在python中设置溢出减法以得到零?_Python_Numpy_Image Processing - Fatal编程技术网

如何在python中设置溢出减法以得到零?

如何在python中设置溢出减法以得到零?,python,numpy,image-processing,Python,Numpy,Image Processing,我试图找到与基线特征截然不同的区域 为此,我从基础减去当前图像,f和b是灰度2d图像矩阵 diff=f-b 有些操作会导致溢出,这会导致像素值较高的区域,实际上它们应该设置为零 如果f[x][y]b[x][y],我如何指定操作diff=f-b应为单个像素值生成0?我通过创建自己的函数,在减去每个像素之前对其进行比较,以防止发生任何溢出 def custom_sub(i2,i1): x = len(i1) y = len(i1[0]) o = deepc

我试图找到与基线特征截然不同的区域

为此,我从基础减去当前图像,
f
b
是灰度2d图像矩阵

diff=f-b

有些操作会导致溢出,这会导致像素值较高的区域,实际上它们应该设置为零


如果
f[x][y]
b[x][y]
,我如何指定操作
diff=f-b
应为单个像素值生成0?

我通过创建自己的函数,在减去每个像素之前对其进行比较,以防止发生任何溢出

def custom_sub(i2,i1):      
    x =  len(i1)
    y =  len(i1[0])

    o = deepcopy(i1)

    for ix in range(x):             
            for iy in range(y):
                if i1[ix][iy] > i2[ix][iy]:
                    o[ix][iy] = 0
                else:
                    o[ix][iy] = i2[ix][iy]-i1[ix][iy]
    return o
这是输出,现在只有在火花闪光发生的地方才有明亮的区域


这和我的相似。在我的例子中,减法是使用uint8类型执行的,可以转换为int16。然后可以迭代生成的图片并删除任何负数。

这里有一种在numpy中执行此操作的方法,它不需要强制转换为更大的整数类型:

f - b.clip(None, f)
或者,相当于

f - np.minimum(b, f)

将差值钳制为0将使一个方向上的更改不可见。也许你想要abs(f-b)?我想要,但我想要一个矩阵函数,我不想自己写一个,因为速度可能会很糟糕。事实上,符号差分是正确的方法。Numpy也有一个剪辑功能
np.clip
或类似的东西。将比在所有像素上循环更容易。非常优雅的解决方案!