You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从尺寸不一的二维NumPy图像提取固定维度特征向量用于KNN分类

嘿,针对你这个从可变尺寸二值图(星形/五边形)提取固定维度特征做KNN分类的需求,我整理了几个实战中好用的方案,都是圈内常用的思路,你可以按需选择:

核心思路:从可变尺寸二值图中提取固定维度特征

因为你的图像尺寸不一,所以核心要找对缩放/旋转/平移不敏感,或者能通过标准化流程固定维度的特征。以下是具体方案:

方案一:形状统计特征(简单易上手,适合规则形状)

这类特征是从图像的基础属性出发,手动组合成固定维度向量,对星形和五边形这种差异明显的形状区分度足够。常用的特征包括:

  • 面积:图像中前景像素(值为1)的总数
  • 圆形度:衡量形状接近圆形的程度,公式为 4π×面积/(周长²),五边形会比星形更接近圆形
  • 外接矩形宽高比:形状的“扁胖”程度,星形和五边形的比例会有差异
  • 归一化重心:重心相对于外接矩形的位置,消除平移影响

代码实现(用skimage工具包)

import numpy as np
from skimage import measure

def extract_stat_features(image):
    # 计算面积
    area = np.sum(image)
    
    # 计算周长(二值图需转成uint8类型)
    perimeter = measure.perimeter(image.astype(np.uint8))
    
    # 计算圆形度(加小epsilon避免除以0)
    circularity = (4 * np.pi * area) / (perimeter**2 + 1e-8)
    
    # 计算外接矩形及宽高比
    bbox = measure.bounding_box(image)
    height = bbox[3] - bbox[1]
    width = bbox[2] - bbox[0]
    aspect_ratio = width / (height + 1e-8)
    
    # 计算归一化重心
    centroid = measure.centroid(image)
    norm_centroid_y = centroid[0] / height if height != 0 else 0.5
    norm_centroid_x = centroid[1] / width if width != 0 else 0.5
    
    # 返回固定5维特征向量
    return np.array([area, circularity, aspect_ratio, norm_centroid_y, norm_centroid_x])

方案二:Hu不变矩(对缩放/旋转/平移完全免疫)

Hu矩是由图像的二阶、三阶中心矩归一化得到的7个不变量,不管图像怎么缩放、旋转、平移,这7个值都能保持稳定,完美适配你图像尺寸不一的场景,对形状的区分度非常高。

代码实现

from skimage.feature import hu_moments

def extract_hu_features(image):
    # 计算Hu矩,返回7维向量
    hu = hu_moments(image.astype(np.uint8))
    # 对结果取对数,缩小数值范围,提升稳定性
    return np.log(np.abs(hu)).flatten()

方案三:HOG特征+固定尺寸缩放(捕捉细节边缘)

如果想更细致地捕捉形状的边缘纹理,可以先把所有图像缩放到统一尺寸(比如64×64),再提取方向梯度直方图(HOG)特征,这样就能得到固定维度的向量。

代码实现

from skimage.transform import resize
from skimage.feature import hog

def extract_hog_features(image, target_size=(64,64)):
    # 缩放图像到固定尺寸
    resized_img = resize(image, target_size, anti_aliasing=True)
    # 提取HOG特征,参数可根据需求调整
    hog_features = hog(resized_img, orientations=9, pixels_per_cell=(8,8), 
                       cells_per_block=(2,2), visualize=False, feature_vector=True)
    return hog_features

注:64×64尺寸下,HOG特征维度为1764维,维度虽高,但KNN在小样本(各30张)场景下也能正常处理。

KNN分类的后续建议
  • 特征归一化:不管用哪种特征,都要用StandardScaler或MinMaxScaler做归一化——KNN是基于距离的算法,特征尺度差异大会严重影响分类结果。
  • 特征组合:可以把统计特征和Hu矩结合(比如5+7=12维),进一步提升区分度。
  • 调优k值:用交叉验证(比如GridSearchCV)选择最优的k值,避免过拟合或欠拟合。

内容的提问来源于stack exchange,提问作者Visionary Zen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:01:12