import numpy as np
import matplotlib.pyplot as plt
def extract_g_channel_info(raw_path, width, height, bit_depth=12, bayer_pattern='RGGB'):
"""
从拜耳阵列RAW图中提取G通道信息
:return: 原始数组、G通道掩码、最大亮度值
"""
# 读取RAW数据并解析为数组
dtype = np.uint16
with open(raw_path, 'rb') as f:
raw_data = f.read()
raw_array = np.frombuffer(raw_data, dtype=dtype).reshape(height, width)
# 修正位深(去除无效高位)
max_value = (1 << bit_depth) - 1
raw_array = np.clip(raw_array, 0, max_value)
# 创建G通道掩码(True表示该位置是G通道)
g_mask = np.zeros((height, width), dtype=bool)
# 根据拜耳阵列模式标记G通道位置
if bayer_pattern == 'RGGB':
# G通道位置:(偶数行, 奇数列) 和 (奇数行, 偶数列)
g_mask[::2, 1::2] = True # 偶数行,奇数列
g_mask[1::2, ::2] = True # 奇数行,偶数列
elif bayer_pattern == 'BGGR':
# G通道位置:(偶数行, 偶数列) 和 (奇数行, 奇数列)
g_mask[::2, ::2] = True
g_mask[1::2, 1::2] = True
elif bayer_pattern == 'GRBG':
# G通道位置:(偶数行, 偶数列) 和 (奇数行, 奇数列)
g_mask[::2, ::2] = True
g_mask[1::2, 1::2] = True
elif bayer_pattern == 'GBRG':
# G通道位置:(偶数行, 奇数列) 和 (奇数行, 偶数列)
g_mask[::2, 1::2] = True
g_mask[1::2, ::2] = True
else:
raise ValueError(f"不支持的拜耳模式:{bayer_pattern}")
# 计算整体G通道平均亮度
all_g_values = raw_array[g_mask]
print(all_g_values)
avg_g_brightness = np.mean(all_g_values)*255 / max_value
return raw_array, g_mask, max_value, avg_g_brightness
def calculate_300x300_g_mean(raw_array, g_mask, center_x, center_y, max_val):
"""
以指定像素为中心,计算300x300区域内G通道的平均值
直接在原始拜耳阵列上操作,避免填充0值的影响
"""
height, width = raw_array.shape
# 计算300x300区域的边界(确保不超出图像范围)
half_size = 150 # 300/2 = 150
start_x = max(0, center_x - half_size)
end_x = min(width, center_x + half_size)
start_y = max(0, center_y - half_size)
end_y = min(height, center_y + half_size)
# 提取区域内的G通道像素
region_mask = g_mask[start_y:end_y, start_x:end_x]
region_g_values = raw_array[start_y:end_y, start_x:end_x][region_mask]
if len(region_g_values) == 0:
return 0, 0, (start_x, end_x, start_y, end_y), 0
# 计算平均值
raw_mean = np.mean(region_g_values)
normalized_mean = raw_mean / max_val
normalized_mean = normalized_mean*255
# 打印详细信息(帮助调试)
print(f"\n300x300区域范围: X[{start_x}:{end_x}], Y[{start_y}:{end_y}]")
print(f"区域大小: {end_y - start_y}x{end_x - start_x}")
print(f"区域内G通道像素总数: {len(region_g_values)} (约占区域的50%)")
print(f"区域内G通道亮度范围: {np.min(region_g_values)} ~ {np.max(region_g_values)}")
print(f"区域内G通道平均亮度(原始值): {raw_mean:.2f}")
print(f"区域内G通道平均亮度(归一化0~1): {normalized_mean:.4f}")
return raw_mean, normalized_mean, (start_x, end_x, start_y, end_y), len(region_g_values)
# 示例使用
if __name__ == "__main__":
raw_path = "D:\\2.raw"
width = 5248 # 图像宽度
height = 5248 # 图像高度
bit_depth = 16 # 位深(16bit)
bayer_pattern = 'RGGB' # 拜耳模式
# 提取G通道信息
raw_array, g_mask, max_val, avg_brightness = extract_g_channel_info(
raw_path, width, height, bit_depth, bayer_pattern
)
# 输出整体结果
print(f"整体G通道平均亮度(原始值):{avg_brightness * max_val:.2f}")
print(f"整体G通道平均亮度(0~1):{avg_brightness:.4f}")
print(f"G通道亮度值范围:0 ~ {max_val}")
# 指定中心像素位置(示例:图像中心)
center_x, center_y = width // 2, height // 2
# 也可以指定其他位置,例如:center_x, center_y = 1000, 1000
print(f"\n计算以({center_x}, {center_y})为中心的300x300区域平均值...")
region_raw_mean, region_norm_mean, region_coords, g_count = calculate_300x300_g_mean(
raw_array, g_mask, center_x, center_y, max_val
)
# 可视化(可选,大图像可能需要较长时间)
if g_count > 0:
start_x, end_x, start_y, end_y = region_coords
# 提取区域数据用于可视化
region_data = raw_array[start_y:end_y, start_x:end_x]
# 为了显示清晰,将G通道像素值放大,非G通道像素设为0
region_visual = np.where(g_mask[start_y:end_y, start_x:end_x], region_data, 0)
plt.figure(figsize=(12, 10))
# 显示整体G通道分布(采样显示,避免内存问题)
plt.subplot(121)
# 对大图像进行下采样显示
step = max(1, width // 1000) # 根据宽度动态调整采样步长
plt.imshow(raw_array[::step, ::step] * g_mask[::step, ::step],
cmap='gray', vmin=0, vmax=max_val)
plt.colorbar(label=f'G通道亮度值(0~{max_val})')
plt.title(f'整体G通道分布(平均:{avg_brightness:.4f})')
plt.axis('off')
# 显示局部300x300区域的G通道分布
plt.subplot(122)
plt.imshow(region_visual, cmap='gray', vmin=0, vmax=max_val)
plt.colorbar(label=f'G通道亮度值(0~{max_val})')
plt.title(f'300x300区域G通道分布(平均:{region_norm_mean:.4f})')
plt.axis('off')
plt.tight_layout()
plt.show()
相关推荐
RAW 图、Bayer 图、JPEG、PNG、BMP、TIFF 图像格式
RAW 格式是一种未经处理、未压缩的图像文件格式,它记录了图像传感器捕捉到的原始数据,包含了从相机传感器上直接获得的每个像素的光电转换值。Bayer 图是基于 Bayer 滤镜阵列采集得到的图像数据格式。在彩色图像传感器中,为了使用单传感器采集彩色信息,通常会在传感器上覆盖一层 Bayer 滤镜,该滤镜由红(R)、绿(G)、蓝(B)三种颜色的滤光片按特定规律排列组成,常见的排列方式是 2x2 的单元(GR、GB;RB)重复排列,其中绿色滤光片的数量是红色和蓝色滤光片的两倍,因为人眼对绿色更敏感。
RAW图像简单可视化以及png、jpg的区别
可视化的图像整体偏绿。
利用opencv将raw转换为rgb
最近工作中碰到将.raw格式文件转换为彩图格式文件。待转换的.raw格式文件不带有图像的宽高等信息,只有图像像素值信息,利用opencv接口无法直接读取。网上查的方法都无法满足我的需求,经过各种尝试终于成功了。因此,将该格式下的raw文件的转换方法总结下,给自己留个笔记,也希望对opencv的初学者有所帮助。 raw数据是大多数相机(单板sensor)的原始图像数据,与像.bmp,.jpg等格式
python中open的“r”和“rb”的区别,encoding
r是读取人工书写的数据,书写的时候是什么样子,读出来就是什么样。 rb是读取二进制文件,非人工书写的数据如.jpeg等这些。 另外encoding可以指定解码格式,utf-8是现在的主流编码方式,如果没有指定encoding 的方式那么根据python版本的不同会有不同的解码方式,Python3中是utf-8,而python2中是ascii。 ...
基于Python的RAW图像分通道处理实战:从RGGB分离到线性调优
本文详细介绍了基于Python的RAW图像分通道处理技术,重点解析了RGGB分通道处理的原理与实战应用。通过搭建Python环境、12bit RAW文件读取技巧、高级分通道处理技术及优化策略,帮助开发者实现从RAW图像分离到线性调优的全流程处理。文章还提供了常见问题排查指南和多帧RAW合成技术,适用于摄影后期、图像处理等领域。
C++实现BMP转RAW
C++实现BMP转RAW 用C++做的第一个项目,把BMP格式图片转换成RAW格式。 要实现该功能,需要分成以下几个步骤:1、搞明白BMP格式和RAW格式图片的数据存储方式;2、用C++实现算法转换,并用MFC做出一个小工具; 一、解析BMP格式 关于BMP格式网上有大把的资料,我也是参考了许多相关文章。以下是部分文章链接 https://blog.youkuaiyun.com/imxiangzi/arti...
【摄像头与成像】长文详解RAW图的来龙去脉
本文承接上一篇《数字成像系统概述》,将继续延伸数字成像系统的相关概念,但在延伸之前需要详细了解作为整个系统输入的Raw图。作者 | Tony编辑 | 言有三本篇文章主要详...
Android Camera RAW 图种类详解
Android Camera RAW 图详解摘要: RAW 图是传感器直接输出的原始图像数据,未经任何 ISP 处理,保留了完整的动态范围和色彩信息。它可分为五大类: 按色彩滤波阵列分:Bayer RAW(标准拜耳)、Quad Bayer RAW(四合一拜耳)、非拜耳和黑白 RAW 按位深分:8-16bit 不同精度格式 按存储格式分:MIPI RAW、DNG 标准和厂商私有格式 按处理阶段分:ISP 前、黑电平校正后等不同处理阶段 RAW 按用途分:相位对焦、人脸检测等专用 RAW 其中,Bayer RA
基于Python的RAW图像分通道处理与RGGB重组实战
本文详细介绍了基于Python的RAW图像分通道处理与RGGB重组实战。通过解析RAW数据的拜耳阵列结构,指导读者使用NumPy等工具分离RGGB通道,应用线性模型进行白平衡、降噪等自定义处理,并最终重组为完整图像。文章提供了从环境搭建、核心代码到高级技巧的全流程指南,帮助开发者深入理解图像传感器底层原理,实现对原始图像数据的精细控制。
汽车诊断服务(UDS——0x11服务解析)
ECU复位服务(0x11)详解:该服务支持硬件/钥匙开关/软件三种复位类型(0x01-0x03),复位前需发送肯定响应。请求格式为11+子功能,响应含51+子功能。典型应用需配合安全访问流程,测试时需监控CAN总线通信及DTC状态。复位后ECU将返回默认会话,期间不处理任何诊断请求。服务在编程会话且安全解锁后执行,硬复位会初始化存储数据。
Spring Boot Swagger未授权访问漏洞:原理、风险与修复方案详解
在微服务架构中,API文档管理是开发与运维的重要环节。Swagger作为RESTful API文档生成与调试的标准化工具,通过OpenAPI规范自动生成交互式接口文档,极大提升了开发效率。然而,其默认配置往往缺乏访问控制,导致文档端点直接暴露,形成未授权访问漏洞。从技术原理看,该漏洞源于Spring Boot等框架集成Swagger时,相关端点未纳入安全框架的拦截范围,攻击者可通过扫描常见路径获取完整的接口定义与数据结构。这不仅会造成敏感信息泄露,更可能成为越权操作、数据篡改等深度攻击的入口点。在工程实践中
Python 将raw图pack成4通道及其逆运算unpack!
一般神经网络处理的数据都是数组,raw图数据读入时是单通道的数组,如(H, W);而基于raw数据的深度学习图像处理基本上都是将raw数据pack成4通道的数组,即每一个通道分别有 R, Gr, Gb, B像素值组成的,形如(4, H / 2, W / 2);然后再送进神经网络进行运算学习的。 下面是将raw数据(H, W),pack成4通道形式(4, H / 2, W / 2)的方法,以及其反向操作的方法。 一、将raw数据才成4通道: def pack_raw(raw): """ :pa
Arcmap计算土方量教程
1. 创建现状TIN 结果数据: 2. 创建设计TIN 结果数据: 注意:现状TIN和设计TIN构建时候的坐标系不同,设置坐标系见最后的注意事项第1点,就是import(导入)那步骤,现状TIN构建时选择高程点数据或者等高线数据,设计TIN构建时候选择洱海面数据 3. TIN转栅格 改成你要存的数据库,注意中间不要有汉字 结果数据(设计TIN转栅格的同理) 4. 裁剪现状TIN转成的栅格 结果数据: 5. 计算土方量 结果数据: ...
opencv3.3 实现raw格式转灰度图或RGB图
.raw格式文件不带有图像的宽高等信息,只有图像像素值信息,利用opencv接口无法直接读取。 raw数据是大多数相机(单板sensor)的原始图像数据,与像.bmp,.jpg等格式的彩图相比,他的图像像素只有单个通道,即r,gr,gb和b中的任意一个(gr和gb可以理解为都是g通道)。因此,将raw数据转换为正常的彩图,就要补充图像像素点缺失的另外两个通道的值,对应的处理算法称为去马赛克(de...
excel wind插件使用_Python和wind的交互—在债券中的应用
个人认为学会了怎么用python和wind交互以及怎么用python处理Excel数据,就基本能替换日常很多琐碎的债券工作,还不用担心Excel某个值改变了导致整个报表都毁了。事实上在python调用wind函数和在Excel中调用函数一样简单,只要会基本的操作就够了。下面详细的介绍如何用python和wind进行交互。首先安装好python+pycharm+wind。因为python...
OpenClaw人人养虾:接入即时通讯平台Zalo
通过 Zalo Official Account(OA,官方账号)API,可以将 OpenClaw 接入 Zalo,实现面向越南用户的自动化客服和互动。
PS打开RAW图并查看像素点灰度值大小
1、PS打开RAW图 根据抓取的RAW图像大小设置好对应的图像尺寸和位数,打开图像。 2、查看raw图的像素点大小 由于抓取的RAW图像一般是单通道图像,故我们进行查看时候显示当前像素点的R、G、B值大小是相同的。 在PS中选择窗口——>信息即可对图像像素点灰度值大小进行查看。 3、对RAW进行简单调制 PS中的选择滤镜——>Camera Raw可以对RAW图像进行简单调整。 ...
第4-4课:状态压缩与动态规划
什么是状态压缩 动态规划问题中重要的一环就是确定状态的定义,在大多数情况下,状态中所包含的信息并不多,比如线性规划问题的状态一般表示为 d[i,j](i 表示状态的位置,j 表示状态的阶段),算法实现时可用二维数组保存计算过程中的状态。但是也有一些问题,它的状态中包含的信息很多,比如它的状态可能是一个集合中各个元素的情况,或者是像铺瓷砖问题这样,是某一行的覆盖状态。如果沿用简单的状态表示方法,则可...
Image Signal Processing(ISP)-第一章-ISP基础以及Raw的读取显示
Image Signal Processing(ISP)-第一章-ISP基础以及Raw的读取显示 前阵子接到任务要学习并软件实现一个ISP,刚拿到任务时既兴奋又担心。兴奋又有很多知识要了解了,担心ISP太过复杂,自己不能胜任这个任务。不管怎么样,还是坚持尝试了近一个月,捣腾出一个小ISP。 从这篇文章开始,我将介绍整个ISP最基础的要求,并介绍如何软件实现这些最基础的要求。因为内容实在太多,此篇 ...
PyRoki:机器人运动学优化库入门教程
PyRoki:模块化机器人运动学优化工具包 本文介绍了PyRoki,一个模块化、可扩展且跨平台的机器人运动学优化工具包。PyRoki通过统一变量和成本函数接口,简化了逆运动学、轨迹优化和运动重定向等任务的实现,支持CPU、GPU和TPU加速。实验表明,PyRoki在批量逆运动学任务中比现有GPU加速库cuRobo快1.4-1.7倍,且收敛误差更低。其模块化设计支持快速集成新成本函数,并通过交互式可视化工具优化参数配置。PyRoki开源发布,为机器人运动优化提供了灵活高效的解决方案。
3D结构光 vs TOF——手机厂商为何选择TOF方案?
3D视觉感知技术路线分析:结构光与TOF对比 3D视觉感知领域存在结构光和TOF两大主流技术。结构光基于三角定位法,精度高(毫米级)但工作距离短(<1.5米),适合人脸识别等近距离场景;TOF通过测量光脉冲飞行时间计算深度,精度中等(厘米级)但工作距离长(0.5-5米+),更适合AR导航等中远距离应用。手机厂商选型时考虑:前置认证选择结构光(如苹果FaceID),后置场景倾向TOF(安卓阵营),因后者更适配全面屏设计、环境适应性强且成本优势明显。两种技术互补共存,共同推动3D感知应用发展。
RAW数据格式解析
RAM数据格式解析 Raw格式是sensor的输出格式,是未经处理过的数据,表示sensor接受 到的各种光的强度。 Raw数据在输出的时候是有一定的顺序的,一般为以下四种: 00: GR/BG 01: RG/GB 10: BG/GR 11: GB/RG 为什么每种情况里有两个G分量呢?这时因为人的眼睛对绿色比较敏感,所以增加了对绿色的采样。其中...
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
RAW、YUV、RGB、JPEG格式简介
文章目录1.RAW与YUV2.rawRGB、RGB和YUV数据格式与转换3.YUV、RGB、RAW DATA、JPEG 4种方式区别3.1 YUV、RGB、RAW DATA、JPEG 定义3.2 为何要拍摄RAW?3.3 JPEG格式有什么优点? 1.RAW与YUV 背景,可感受光强度的传感器可以制造出能拍出黑白照片(是灰度图)的相机。但如果需要彩色图像,这种技术就无能为力了,因为当时的传感器只能感知光的强度,而无法感知颜色,也就是频率或波段。如果想要获得不同波段的光,最直接的做法是加入不同颜色的滤镜,从而
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
论文阅读:Unprocessing Images for Learned Raw Denoising
前言 本文主要是对《Unprocessing Images for Learned Raw Denoising》论文进行部分翻译解读,如果有观点不对或者错误的地方还望谅解并指出。
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
影像原始信息Raw的全方位解析
NA
1451



被折叠的 条评论
为什么被折叠?



