ndimage.maximum_filter未按预期输出:首元素应为np.inf却得到0
问题原因及解决方法
你的问题出在图像数组的类型与填充值np.inf的类型不匹配:
你创建的image是默认的整数类型(如int64),而np.inf属于浮点数类型。当ndimage.maximum_filter用cval=np.inf填充边界时,numpy会强制将浮点数的inf转换为整数类型——但整数无法表示无穷大,最终会被转为0。这就导致第一个位置计算最大值时,参与比较的是转换后的0和原数组索引1的0,结果自然是0而非预期的inf。
修正代码
只需将图像数组转换为浮点数类型即可:
import numpy as np from scipy import ndimage # 显式指定数组为浮点数类型 image = np.array([1,0,6,1,8,9,6,4], dtype=np.float64) neigh = np.array([1,0,1]) # 建议转为numpy数组,避免潜在类型问题 filtered_image = ndimage.maximum_filter(image, footprint=neigh, mode='constant', cval=np.inf) print(f"filtered_image: {filtered_image}")
修正后结果
运行上述代码会得到符合预期的输出:
filtered_image: [inf 6. 1. 8. 9. 8. 9. 6.]
内容的提问来源于stack exchange,提问作者Boubaker
相关产品推荐
相关产品推荐

