如何在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
或类似的东西。将比在所有像素上循环更容易。非常优雅的解决方案!