ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

彩色图像分析在工业视觉中是一个“该用才用”的工具

彩色图像分析在工业视觉中是一个“该用才用”的工具 彩色图像分析在工业视觉中是一个“该用才用”的工具。绝大多数测量和定位任务用灰度图就能完成但当颜色本身是检测目标时彩色分析就不可替代了。什么时候必须用彩色灰度图把颜色信息压缩成了亮度。如果两个物体的颜色不同但亮度相近灰度图里它们看起来一样彩色图才能区分。典型必须用彩色的场景线序检测线束中红、蓝、黄线的排列顺序颜色就是检测目标颜色分选LED 灯珠的色温分级、塑料粒子的颜色分拣印刷品色差包装印刷的颜色一致性检测食品分拣水果成熟度、烘焙程度判断标记识别不同颜色的标签、标记点区分颜色空间RGB 不是最佳选择RGB 是最直观的颜色表示但它有一个致命问题三个通道高度相关。光照强度一变R、G、B 三个值同时变化你很难把“颜色变化”和“亮度变化”分开。HSV 是工业视觉中最常用的颜色空间因为它把颜色信息解耦了HHue色相颜色的种类红、绿、蓝0-360°SSaturation饱和度颜色的纯度0 是灰色1 是纯色VValue明度颜色的亮度HSV 的核心优势是H 通道对光照变化不敏感。只要色相不变光照强一点弱一点H 值基本稳定。这让颜色检测在光照波动时更鲁棒。// OpenCV: BGR → HSVMathsvnewMat();Cv2.CvtColor(bgr,hsv,ColorConversionCodes.BGR2HSV);// 提取 H 通道做颜色分析Mat[]channelsCv2.Split(hsv);Mathuechannels[0];颜色分割用 inRange 做阈值灰度图用一个阈值就能分割彩色图需要三个通道同时限定范围。OpenCV 的InRange正是干这个的。// 检测红色区域红色在 HSV 中跨越 0° 和 180°需要两段Matmask1newMat(),mask2newMat(),redMasknewMat();Cv2.InRange(hsv,newScalar(0,100,100),newScalar(10,255,255),mask1);Cv2.InRange(hsv,newScalar(170,100,100),newScalar(180,255,255),mask2);Cv2.BitwiseOr(mask1,mask2,redMask);// 对 mask 做形态学清理和 Blob 分析Cv2.MorphologyEx(redMask,redMask,MorphTypes.Open,kernel);Cv2.FindContours(redMask,outvarcontours,out_,RetrievalModes.External,ContourApproximationModes.ApproxSimple);关键点红色的 H 值在 HSV 中位于 0° 附近和 180° 附近两段因为色相是环形的必须用两个范围合并否则会漏掉一部分红色。颜色分类从像素到类别分割出颜色区域后需要判断它属于哪个颜色类别。最简单的方法是计算区域内的平均 HSV 值然后与预定义的颜色中心比较。// 计算红色区域的平均 HSVScalarmeanHsvCv2.Mean(hsv,redMask);doubleavgHuemeanHsv.Val0;// 平均色相// 判断颜色类别stringcolorName;if(avgHue15||avgHue170)colorName红;elseif(avgHue45)colorName橙/黄;elseif(avgHue75)colorName绿;elseif(avgHue130)colorName蓝;elsecolorName紫;更鲁棒的方法是在 Lab 颜色空间计算色差ΔE。Lab 空间的设计目标就是“人眼感知均匀”——两个颜色的 ΔE 越小人眼看越接近。工业色差检测常用 ΔE 2 作为“肉眼不可分辨”的阈值。光照是彩色分析的最大敌人彩色分析比灰度分析更怕光照变化。同一个红色物体在暖光和冷光下拍出来R 和 B 的值会明显不同。工程上的应对策略固定光源色温使用同色温的光源避免混用暖光和冷光白平衡校准拍摄前用白纸做白平衡让白色物体在图像中呈现为 RGB 等值优先用 H 通道H 通道对光照强度不敏感是颜色检测的首选建立颜色参考在视野中放置标准色卡每次检测前校准颜色基准一句话总结彩色图像分析的核心是用 HSV 解耦颜色和亮度用 InRange 做颜色分割用 Blob 分析定位颜色区域。它的适用场景很明确当颜色本身就是检测目标时。对于测量、定位、缺陷检测等不依赖颜色的任务灰度图仍然是更简单、更快速、更稳定的选择。
返回列表