See In The Dark之RAW图片读取-rawpy

2024-01-27 20:20
文章标签 读取 图片 dark raw see rawpy

本文主要是介绍See In The Dark之RAW图片读取-rawpy,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:处理不同相机的RAW格式图片,并放入卷积运算,输入到see in the dark模型进行夜间识别

1. 保存RAW图片为RGB的JPG格式

import rawpy
import imageio
import numpy as np# .ARW为索尼Sony相机RAW格式
# .CR2为佳能canon相机RAW格式
raw = rawpy.imread('IMG_0001.CR2')# use_camera_wb 是否执行自动白平衡,如果不执行白平衡,一般图像会偏色
# half_size 是否图像减半
# no_auto_bright 不自动调整亮度
# output_bps bit数据, 8或16
img = raw.postprocess(use_camera_wb=True, half_size=False, no_auto_bright=False, output_bps=16)# img = np.float32(img / (2**16-1)*255.0)
# img = np.asarray(img,np.uint8)imageio.imsave('take.jpg', img)

2. bayer阵列解析

拜耳阵列(Bayer pattern)分为GBRG、GRBG、BGGR、RGGB四种模式:
在这里插入图片描述
使用rawpy把不同模式下raw解析为四通道:

import rawpy
import numpy as np
from PIL import Image
import imageio
import exifreaddef gray_ps(rgb):return np.power(np.power(rgb[:, :, 0], 2.2) * 0.2973 + np.power(rgb[:, :, 1], 2.2) * 0.6274+ np.power(rgb[:, :, 2], 2.2) * 0.0753, 1 / 2.2) + 1e-7def do_HDR(x, curve_ratio):gray_scale = np.expand_dims(gray_ps(x), axis=-1)gray_scale_new = np.power(gray_scale, curve_ratio)return np.minimum(x * gray_scale_new / gray_scale, 1.0)def adjust_out_matrix(RAW_path, out=None):raw = open(RAW_path, 'rb')exif_info = exifread.process_file(raw, details=False, strict=True)orientation_str = 'EXIF Orientation'if exif_info.__contains__('Image Orientation'):orientation_str = 'Image Orientation'orientation_info = exif_info[orientation_str].printableif orientation_info == 'Rotated 180':if out is None:return Trueelse:if out.shape[2] == 3:out0 = out[:, :, :1]out1 = out[:, :, 1:2]out2 = out[:, :, 2:3]out = np.concatenate((out2, out1, out0), 2)elif out.shape[2] == 4:out0 = out[:, :, :1]out1 = out[:, :, 1:2]out2 = out[:, :, 2:3]out3 = out[:, :, 3:4]out = np.concatenate((out3, out2, out1, out0), 2)else:raisereturn np.flip(out)elif orientation_info == 'Horizontal (normal)':if out is None:return Falseelse:return outelse:raise# pack Bayer image to 4 channels
def pack_raw(raw_path, white_balance=True, auto_bright=True, HDR=True, save_JPEG=True):raw = rawpy.imread(raw_path)im = raw.raw_image_visible.astype(np.float32)# subtract the black level# 16383(2^14) is the camera's maximal pixel value, you can get it by "np.max(raw.raw_image)" . Ensure full exposure!im = np.maximum(im - raw.black_level_per_channel[0], 0) / (16383 - raw.black_level_per_channel[0])im = np.expand_dims(im, axis=2)H = im.shape[0]W = im.shape[1]if raw.raw_pattern[0, 0] == 0:  # RGGBout = np.concatenate((im[0:H:2, 0:W:2, :],im[0:H:2, 1:W:2, :],im[1:H:2, 1:W:2, :],im[1:H:2, 0:W:2, :]), axis=2)elif raw.raw_pattern[0, 0] == 2:  # BGGRout = np.concatenate((im[1:H:2, 1:W:2, :],im[0:H:2, 1:W:2, :],im[0:H:2, 0:W:2, :],im[1:H:2, 0:W:2, :]), axis=2)elif raw.raw_pattern[0, 0] == 1 and raw.raw_pattern[0, 1] == 0:  # GRBGout = np.concatenate((im[0:H:2, 1:W:2, :],im[0:H:2, 0:W:2, :],im[1:H:2, 0:W:2, :],im[1:H:2, 1:W:2, :]), axis=2)elif raw.raw_pattern[0, 0] == 1 and raw.raw_pattern[0, 1] == 2:  # GBRGout = np.concatenate((im[1:H:2, 0:W:2, :],im[0:H:2, 0:W:2, :],im[0:H:2, 1:W:2, :],im[1:H:2, 1:W:2, :]), axis=2)# 启用白平衡可以防止图片偏蓝或者偏红if white_balance:wb = np.array(raw.camera_whitebalance, np.float32)wb[3] = wb[1]wb = wb / wb[1]out = np.minimum(out * wb, 1.0)if auto_bright:mean_G = (out[:, :, 1].mean() + out[:, :, 3].mean()) / 2.0out = np.minimum(out*0.2/mean_G, 1.0)out = adjust_out_matrix(raw_path, out)# 检测RAW格式解析后的图片是否正常if save_JPEG:out0 = out[:, :, 0:1]out1 = out[:, :, 1:2]out2 = out[:, :, 2:3]out3 = out[:, :, 3:4]out_JPEG = np.concatenate((out0, (out1 + out3) / 2., out2), axis=2)if HDR:out_JPEG = do_HDR(out_JPEG, 0.35)Image.fromarray(np.uint8(out_JPEG * 255)).save('result.jpg')return outif __name__ == '__main__':raw = rawpy.imread('IMG_0001.CR2')np_channel = pack_raw('IMG_0001.CR2', auto_bright=False, HDR=False)img = raw.postprocess(use_camera_wb=True, half_size=False, no_auto_bright=True, output_bps=16)imageio.imsave('rawpy.jpg', img)

3. 苹果相机iphone 13 pro max 的RAW图片

	raw = rawpy.imread("IMG_0001.DNG")im = raw.raw_image_visible.astype(np.float32)  # (h, w, c) = (h, w, 4)# 手机竖直拍摄需要加上下面两行,横向拍摄不需要if vertical:out = np.swapaxes(im,1,0)		# (h w) axis change 20220808out = out[:,::-1,:]   			# Horizontal mirror 20220810

4. 小米12pro 的RAW图片

def pack_raw(raw):#pack Bayer image to 4 channelsim = raw.raw_image_visible.astype(np.float32)im = np.maximum(im - 63,0)/ (255 - 63) #subtract the black levelim = np.expand_dims(im,axis=2)img_shape = im.shapeH = img_shape[0]W = img_shape[1]out = np.concatenate((im[0:H:2,0:W:2,:],im[0:H:2,1:W:2,:],im[1:H:2,1:W:2,:],im[1:H:2,0:W:2,:]), axis=2)# 手机竖直拍摄需要加上下面两行,横向拍摄不需要if vertical:out = np.swapaxes(out,1,0)    # (h w) axis change 20220808out = out[:,::-1,:]           # Horizontal mirror 20220810print("pack_raw out.shape: ", out.shape)return outraw = rawpy.imread("IMG_0001.DNG")
im = raw.raw_image_visible.astype(np.float32)  # (h, w)
input_images = np.expand_dims(pack_raw(raw),axis=0)

这篇关于See In The Dark之RAW图片读取-rawpy的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/651376

相关文章

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

研究人员在RSA大会上演示利用恶意JPEG图片入侵企业内网

安全研究人员Marcus Murray在正在旧金山举行的RSA大会上公布了一种利用恶意JPEG图片入侵企业网络内部Windows服务器的新方法。  攻击流程及漏洞分析 最近,安全专家兼渗透测试员Marcus Murray发现了一种利用恶意JPEG图片来攻击Windows服务器的新方法,利用该方法还可以在目标网络中进行特权提升。几天前,在旧金山举行的RSA大会上,该Marcus现场展示了攻击流程,

恶意PNG:隐藏在图片中的“恶魔”

&lt;img src=&quot;https://i-blog.csdnimg.cn/blog_migrate/bffb187dc3546c6c5c6b8aa18b34b962.jpeg&quot; title=&quot;214201hhuuhubsuyuukbfy_meitu_1_meitu_2.jpg&quot;/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;

PHP抓取网站图片脚本

方法一: <?phpheader("Content-type:image/jpeg"); class download_image{function read_url($str) { $file=fopen($str,"r");$result = ''; while(!feof($file)) { $result.=fgets($file,9999); } fclose($file); re

(入门篇)JavaScript 网页设计案例浅析-简单的交互式图片轮播

网页设计已经成为了每个前端开发者的必备技能,而 JavaScript 作为前端三大基础之一,更是为网页赋予了互动性和动态效果。本篇文章将通过一个简单的 JavaScript 案例,带你了解网页设计中的一些常见技巧和技术原理。今天就说一说一个常见的图片轮播效果。相信大家在各类电商网站、个人博客或者展示页面中,都看到过这种轮播图。它的核心功能是展示多张图片,并且用户可以通过点击按钮,左右切换图片。

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在