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

手绘简单黑白图形分类:优化图像预处理与特征提取方法

手绘黑白简单图形分类任务优化方案

任务概况

针对**手绘黑白简单图形(房屋、圆形等)**的分类任务,目前采用SIFT提取特征,结合SVM、AdaBoost、RF等模型,经标准化、类别权重调整(针对"estables"和"evolutivos"类别)后效果未达预期,需优化预处理与特征提取方案。

当前特征提取实现代码

def getData(folder, min_num_descr = 20):
    lista_imagenes = []
    for x in os.listdir(folder):
        path_local = folder + "/" + x
        for j in os.listdir(path_local):
            imagen = cv2.imread(path_local + "/" + j)
            lista_imagenes.append(imagen)
    
    lista_total_kp = []
    lista_total_desc = []
    lista_total_imagen = []

    for i  in range(len(lista_imagenes)):
        sift = cv2.xfeatures2d.SIFT_create()
        kp_1 = sift.detect(lista_imagenes[i], None)
        kp_1, dec_1 = sift.compute(lista_imagenes[i],kp_1)
        lista_total_kp.append(kp_1)
        lista_total_desc.append(dec_1)
        lista_total_imagen.append(i)
    
    lista_desc_numpy = np.array(lista_total_desc)
    lista_desc_real = []
    for i in range(0,len(lista_total_desc)):
        try:
            if lista_total_desc[i].shape[0] >= min_num_descr:
                lista_desc_real.append(lista_total_desc[i][:min_num_descr])
        except:
            continue
            
    return np.array(lista_desc_real)

数据集读取示例:

df_splitted = pd.read_csv("手绘图形特征数据集文件路径").iloc[:,1:]

现存核心问题

  • SIFT特征适配性不足:SIFT针对复杂纹理自然图像设计,对简单手绘图形的形状特征捕捉能力有限
  • 数据集不平衡:虽已调整类别权重,但未从数据根源缓解该问题
  • 预处理缺失针对性:未针对手绘黑白图像的噪声、灰度干扰做专项处理

优化方案

一、针对性图像预处理

先消除手绘图像的干扰因素,提升特征有效性:

  • 二值化处理:将灰度图转为纯黑白二值图,突出图形轮廓,消除灰度渐变干扰
    # 自适应二值化示例
    gray = cv2.cvtColor(imagen, cv2.COLOR_BGR2GRAY)
    binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
    
  • 去噪处理:用中值滤波去除笔误、扫描噪声,同时保留边缘细节
    denoised = cv2.medianBlur(binary, 3)
    
  • 尺寸归一化:将所有图像统一缩放至固定尺寸(如64x64),保持图形比例,空白区域填充黑色,避免尺寸差异导致的特征偏差
  • 轮廓提取:提取图形的轮廓几何特征(面积、周长、近似多边形顶点数、重心坐标等),作为补充特征

二、替换SIFT的特征提取方案

针对简单手绘图形,推荐以下更适配的特征提取方法:

  • ORB特征:开源替代SIFT,速度更快,关键点检测更适配简单形状,代码示例:
    orb = cv2.ORB_create(nfeatures=20)  # 匹配原代码的min_num_descr参数
    kp, desc = orb.detectAndCompute(denoised, None)
    
  • HOG特征:方向梯度直方图,专注捕捉图形的边缘与梯度分布,适合形状类识别
    hog = cv2.HOGDescriptor()
    hog_features = hog.compute(denoised)
    
  • 像素统计特征:直接提取简单统计特征,如黑白像素占比、水平/垂直像素投影直方图、重心坐标等,实现成本低且适配简单图形
  • 轻量级CNN特征:若数据集规模允许,用小型CNN直接学习图像特征,对简单图形分类效果远超传统手工特征,示例结构:
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
    
    model = Sequential([
        Conv2D(16, (3,3), activation='relu', input_shape=(64,64,1)),
        MaxPooling2D(2,2),
        Conv2D(32, (3,3), activation='relu'),
        MaxPooling2D(2,2),
        Flatten(),
        Dense(64, activation='relu'),
        Dense(num_classes, activation='softmax')
    ])
    

三、数据与模型补充优化

  • 数据增强:对训练集做旋转(±15°)、平移、轻微缩放、镜像翻转等操作,缓解类别不平衡,提升模型泛化能力
  • 特征融合:组合多种特征(如HOG+几何特征、CNN特征+手工特征),提升特征表达能力
  • 适配模型选择:尝试XGBoost、LightGBM这类对不平衡数据友好的树模型,或配合SMOTE过采样方法进一步处理类别不平衡问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:24:23