图像特征工程需紧扣下游任务需求,关键技巧包括:HSV/LAB颜色空间转换提升光照鲁棒性;梯度与灰度共生矩阵提取纹理细节;椭圆拟合与Hu矩描述形状;自适应阈值与LBP应对局部光照变化。

图像特征工程不是调几个库就完事,关键在理解每一步对后续任务(比如分类、检测)的实际影响。下面这些技巧,都是实际项目里反复验证过、见效快又不容易踩坑的。
颜色空间转换:别只盯着RGB
RGB对光照敏感,做分割或聚类容易翻车。试试HSV或LAB——前者把亮度和色度拆开,后者更接近人眼感知。
- 用cv2.cvtColor(img, cv2.COLOR_BGR2HSV)转HSV,然后对H(色相)通道做直方图均衡,能稳定识别红色水果、交通灯等目标
- LAB空间里L是亮度,A/B是色彩分量;做肤色检测时,只在A-B平面上聚类,比在RGB里跑kmeans收敛更快、结果更干净
梯度与纹理特征:不靠深度学习也能抓细节
边缘、方向、粗糙度这些信息,传统方法照样能提得准。
- Sobel或Scharr算子提取x/y方向梯度后,算梯度幅值和方向角,再做方向直方图(HOG雏形),对文字区域定位很稳
- 用skimage.feature.greycomatrix算灰度共生矩阵,导出对比度、相关性、能量、同质性四个统计量——医疗影像里区分良恶性结节,这几个数字比原始像素管用得多
形状描述子:让轮廓自己说话
二值图里抠出目标后,光存mask太浪费。用数学描述代替像素,省空间还抗缩放。
立即学习“Python免费学习笔记(深入)”;
- 轮廓拟合椭圆,拿到长轴/短轴比、旋转角度、离心率——工业质检中判断螺丝是否歪斜,三个数就够了
- 用cv2.matchShapes比对两个轮廓的Hu矩,数值越小越相似;识别手写数字0和8这种易混形状,比模板匹配鲁棒
自适应局部特征:应对光照不均的实用招
全局阈值在阴影/反光区域常失效,局部策略更接地气。
- cv2.adaptiveThreshold用均值或高斯加权法动态算阈值块,扫描文档去阴影、车牌字符增强都靠它
- 结合局部二值模式(LBP):每个像素用邻域8点与中心比较生成8位二进制码,再统计直方图——人脸活体检测里防照片攻击,LBP特征+简单SVM就能跑通
基本上就这些。不复杂但容易忽略:所有特征都要和你的下游任务对齐——分类重判别性,检测重定位能力,分割重边界连续性。动手前先问一句:我提这个特征,到底想告诉模型什么?