news 2026/4/20 2:52:15

org.openpnp.vision.pipeline.stages.Normalize

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 2:48:14

智能客服的终局:从关键词匹配到能够处理复杂售后的全能 Agent

智能客服的终局&#xff1a;从关键词匹配到处理百万级SKU复杂售后的全能Agent架构实战 副标题&#xff1a;基于 LangGraph 向量知识库RAG Chain-of-Thought拆解 动态工具链调度的电商全链路售后 Agent 落地指南第一部分&#xff1a;引言与基础 1. 引言&#xff1a;为什么智能…

作者头像 李华
网站建设 2026/4/20 2:42:49

别再只盯着5G了!从BBU、RRU到AAU,一文看懂你家附近基站到底长啥样

从铁塔到芯片&#xff1a;解码现代基站的技术演进与视觉识别指南 每天通勤路上&#xff0c;那座耸立在写字楼顶端的灰色铁塔总是格外醒目——它顶部排列着几排白色长方形面板&#xff0c;侧面挂着几个金属盒子&#xff0c;底部延伸出密密麻麻的线缆。这些看似简单的装置&#x…

作者头像 李华
网站建设 2026/4/20 2:40:16

如何让导航栏的下落动画效果更慢?

通过调整 CSS 动画的持续时间&#xff08;如将 0.2s 改为 0.6s 或更长&#xff09;&#xff0c;即可平滑控制 Bootstrap 导航栏下落动画的速度&#xff0c;同时需配合 transform 与 opacity 实现更自然的过渡效果。 通过调整 css 动画的持续时间&#xff08;如将 0.2s 改为…

作者头像 李华
网站建设 2026/4/20 2:36:24

世界模型是人机环境系统智能的子集吗?

AI科学的“世界模型”与智能领域里的“人机环境系统智能”&#xff0c;虽然在各自的语言体系里自说自话&#xff0c;但本质上都在描述同一个“从看懂世界到改变世界”的闭环。1、世界模型 (从AI的工程视角)表征 (Representation)&#xff1a; 把高维的原始数据&#xff08;图像…

作者头像 李华
网站建设 2026/4/20 2:36:21

Pixel Mind Decoder 在C++项目中的集成:高性能情绪分析模块开发

Pixel Mind Decoder 在C项目中的集成&#xff1a;高性能情绪分析模块开发 1. 为什么要在C项目中集成情绪分析&#xff1f; 在开发高性能C应用时&#xff0c;我们常常需要处理复杂的用户交互场景。比如在游戏开发中&#xff0c;NPC如何根据玩家对话做出智能反应&#xff1f;或…

作者头像 李华