以参考数组为基准重塑并填充二维数组技术问题
二值图像分割预测数组与真值尺寸匹配方案
问题出在哪
- MaxMinScaler根本不是干这个的:它是用来做特征值范围缩放的(比如把数据映射到0-1区间),和数组的尺寸调整完全没关系,所以用它处理后数组形状肯定不变,纯属用错工具。
- numpy reshape用不了很正常:reshape只能改变数组的维度排列,不能增减元素数量。你的预测数组有1181840个元素,真值只有1141413个,元素数不一样,自然没法reshape。
正确做法:用图像插值缩放
因为是二值图像(只有0和1),得用能保留二值特性的插值方法,优先选最近邻插值,避免出现中间值。下面给两种常用实现方式:
方式1:OpenCV实现
import cv2 import numpy as np # 目标尺寸就是真值数组的形状 target_h, target_w = T_array.shape # OpenCV的resize要求输出尺寸是(宽, 高),注意顺序 P_array_resized = cv2.resize(P_array, (target_w, target_h), interpolation=cv2.INTER_NEAREST) # 检查结果形状 print(P_array_resized.shape) # 应该输出(791, 1443)
方式2:scikit-image实现
from skimage.transform import resize import numpy as np # order=0对应最近邻插值,preserve_range=True保持原数值范围,anti_aliasing=False避免模糊 P_array_resized = resize( P_array, output_shape=T_array.shape, order=0, preserve_range=True, anti_aliasing=False ).astype(np.float64) # 验证形状和二值特性 print(P_array_resized.shape) print(np.unique(P_array_resized)) # 输出应该是[0. 1.]
关键提醒
- 别用双线性之类的插值方法,会产生0和1之间的数值,破坏二值图像的特性。
- 缩放后可以用
np.array_equal(np.unique(P_array_resized), [0., 1.])确认是否保持了二值状态。
内容的提问来源于stack exchange,提问作者marco cappellazzo
相关产品推荐
相关产品推荐

