当前位置: 首页 > news >正文

org.openpnp.vision.pipeline.stages.Normalize

文章目录

  • org.openpnp.vision.pipeline.stages.Normalize
    • 功能
    • 参数
    • 例子 - 灰度图片
      • 效果
    • 例子 - 彩色图片
      • 效果
    • END

org.openpnp.vision.pipeline.stages.Normalize

功能

对图像进行归一化处理,根据图像通道数的不同采取两种策略:

单通道图像(灰度图):调用 OpenCV 的 Core.normalize 进行最小-最大值归一化,将像素值线性映射到 [0, 255] 区间。
效果:
消除雾感:原本对比度低、看起来“发灰”的图像会变得黑白分明。
细节凸显:边缘和纹理变得更清晰。
适用场景:特征提取前的预处理,或者纠正因光线不足导致的画面平淡问题。

多通道图像(彩色图):执行自定义的 RGB Max 归一化。对于每个像素,计算 R、G、B 三个通道值的总和 s。若 s 不为零,则将每个通道值除以 s 再乘以 255,使归一化后的每个通道值介于 0 至 255,且三个通道之和恒为 765。该方法可有效抑制光照不均造成的阴影影响,但会丧失原始色彩饱和度与色度信息。

视觉效果:
阴影消失:无论光照强(像素值高)还是光照弱(像素值低),只要物体表面的颜色反射率不变,归一化后的 RGB 比例 是不变的。深色阴影处的物体与明亮处的物体会呈现出几乎相同的计算结果。

变成“伪彩色”:图像颜色会严重失真,饱和度极高,看上去像霓虹灯效果。所有原本为黑色(0,0,0)或白色(255,255,255)的区域在计算中会变黑或变白,其他颜色则变得非常鲜艳。

因为算法强行将三通道总和固定为 765(即 255*3),它抹去了亮度(Luminance) 信息。
结果:无法再从归一化后的图像中看出物体是暗红色的还是亮红色的,两者看起来都是同一种正红色。

图像类型 处理前问题 处理后效果 代价/副作用
灰度图 对比度低,灰蒙蒙一片 黑白分明,纹理清晰 可能放大噪点
彩色图 光照不均匀,有阴影遮挡 阴影区域与明亮区域特征一致 色彩信息丢失(亮度被剥离)

彩色归一化常用于忽略光照条件,只寻找物体的固有颜色特征,从而让识别算法对灯光变化不敏感。

参数


完全依赖当前工作图像

例子 - 灰度图片

// expenv:msys2-mingw64cd"$(cygpath'D:\3rd\openpnp_prj\openpnp-official\openpnp-test-images\my_test')"python ./gen-pic.py
importcv2importnumpy as np# 创建一个 400x400 的低对比度灰度图# 背景为 120,前景方块分别为 100, 110, 130, 140img=np.full((400,400),120,dtype=np.uint8)# 绘制几个不同灰度的矩形,模拟低对比度内容cv2.rectangle(img,(50,50),(150,150),100, -1)# 深灰cv2.rectangle(img,(160,50),(260,150),110, -1)# 稍深cv2.rectangle(img,(270,50),(370,150),130, -1)# 稍浅cv2.rectangle(img,(110,160),(210,260),140, -1)# 浅灰cv2.rectangle(img,(220,160),(320,260),105, -1)# 略深# 添加一个极暗的小圆点(值 90)和一个极亮的小圆点(值 150),验证映射极值cv2.circle(img,(100,320),20,90, -1)cv2.circle(img,(300,320),20,150, -1)# 写入文字说明cv2.putText(img,"Low Contrast",(20,380), cv2.FONT_HERSHEY_SIMPLEX,0.8,80,2)cv2.imwrite("low_contrast_gray.png", img)print("测试图片已生成: low_contrast_gray.png")print("像素值范围: [90, 150]")
<cv-pipeline><stages><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageRead"name="read"enabled="true"file="D:\3rd\openpnp_prj\openpnp-official\openpnp-test-images\my_test\low_contrast_gray.png"color-space="Bgr"handle-as-captured="false"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ConvertColor"name="gray"enabled="true"conversion="Bgr2Gray"/><cv-stageclass="org.openpnp.vision.pipeline.stages.Normalize"name="norm"enabled="true"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageWrite"name="write"enabled="true"file="normalized_result.png"/></stages></cv-pipeline>

效果

在归一化之前,灰度原图必须经过ConvertColor转成灰度图才行,否则没效果和负效果。


Normalize之前,从背景到前景的灰度值阶梯递增为5.
Normalize之后,背景和前景的灰度值至少差20. 为后续的findXX提供了良好条件。

例子 - 彩色图片

<cv-pipeline><stages><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageRead"name="read"enabled="true"file="D:\3rd\openpnp_prj\openpnp-official\openpnp-test-images\my_test\color_shadow_v2.png"color-space="Bgr"handle-as-captured="false"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ConvertColor"name="0"enabled="true"conversion="Bgr2HsvFull"/><cv-stageclass="org.openpnp.vision.pipeline.stages.Normalize"name="norm"enabled="true"/></stages></cv-pipeline>

效果

彩色原图在归一化之前,必须ConvertColor转成Bgr2XXfull,才有好的效果。

END

http://www.jsqmd.com/news/669081/

相关文章:

  • 锁相环调频系统避坑指南:VCO中心频率不稳、环路失锁怎么办?
  • Elasticsearch 磁盘水位阈值设置:最合理配置 + 生产实战
  • XFS大硬盘+NFS共享踩坑记:一个fsid=0参数如何避免‘Stale file handle’
  • 别再到处找资源了!一份网盘搞定Keil MDK ARM+C51双环境搭建(含STM32F1/F4芯片包)
  • 如何实现超低延迟音频采集:OBS-ASIO插件完整配置指南
  • 拒绝 API 延迟!侠客工坊如何基于端侧 SLM 重构移动端“数字员工”的视觉操作架构
  • 2026年梧州市代运营引流获客:定义、流程与团队选择标准百科解读
  • TCC分布式事务代码
  • C语言:数组名的理解(size of 和strlen示例)
  • vector模拟实现
  • 保姆级教程:用华为ENSP模拟器搞定企业级有线无线网络(含S5700/AC6605配置)
  • Python学习-数据结构与算法02
  • API的基础讲解
  • CTF SHOW WEB 4(无法查看源代码)
  • 【仅限首批200名AI架构师】:获取AGI融合系统故障诊断矩阵(含17类典型冲突模式+动态权重调优公式)
  • 抓包方案分享
  • 手把手教你:在UVM验证环境中安全使用disable fork管理并发线程
  • 当代码几乎免费时,程序员还剩下什么?
  • 基于springboot的加油站销售积分管理系统的设计与实
  • AI Agent的感知世界:多模态输入处理
  • AGI与机器人结合不是“加法”,而是“范式熔断”——SITS2026提出全新评估矩阵(含6维动态权重算法)
  • 手把手教你用CAPL脚本监控CANoe环境变量变化,实现自动化测试联动
  • C语言分支循环语句:第二篇:循环语句
  • 世界模型是人机环境系统智能的子集吗?
  • HC32F460驱动ILI9341并口屏:从SPI到16位并口的提速实战与emWin移植避坑
  • AGI游戏智能落地失败率高达67%?SITS2026专家团复盘11个真实项目,提炼出2个关键决策阈值与1个不可逆拐点
  • Netty 编解码器学习记:从粘包拆包到自定义协议
  • JAVA语法合集之(六):活用数组
  • 2026年评价高的天津预应力混凝土屋面板品牌厂家推荐 - 品牌宣传支持者
  • 数据结构面试题避坑指南:别再被这些‘送分题’骗了(附详细解析)