河南金城建设工程有限公司网站,竞价排名的定义,企术建站,营销网站开发哪家好相机选型
DIY相机首先是要确定使用的相机型号。兼容树莓派#xff0c;画质好一些的#xff0c;目前主要有两款#xff1a;一是Raspberry Pi Camera Module 3#xff0c;二是Raspberry Pi HQ Camera。
下图是Raspberry Pi Camera Module 3的相关特性。支持自动对焦和HDR等…相机选型
DIY相机首先是要确定使用的相机型号。兼容树莓派画质好一些的目前主要有两款一是Raspberry Pi Camera Module 3二是Raspberry Pi HQ Camera。
下图是Raspberry Pi Camera Module 3的相关特性。支持自动对焦和HDR等特性视场角为75度1200万像素。
Raspberry Pi Camera Module 3使用的是索尼imx708传感器。此款传感器曾搭载在如OPPO Find X2等旗舰手机上。imx708传感器的参数如下表所示
传感器imx708分辨率11.9MP画幅大小1/2.43 (传感器对角尺寸7.4mm)有效像素数4608(H) × 2592(V)单个像素大小1.4μm × 1.4μm接口MIPI CSI-2 Interface快门类型滚动快门帧率2304x1296p56, 2304x1296p30, HDR 1536x864p120输出格式RAW10
其中说一下滚动快门。Rolling Shutter滚动快门是一种相机传感器工作方式与其对立的是 Global Shutter全局快门。
在 Rolling Shutter 中相机传感器会逐行地从顶部到底部逐个曝光就像一个滚动的帘子一样。这意味着在一次曝光过程中不同行的像素会有微小的时间差。
这种方式在拍摄运动速度较慢或相机固定时通常不会出现问题。然而当拍摄快速移动的物体或相机本身在移动时Rolling Shutter 可能会导致图像中出现奇怪的扭曲效果这被称为“滚动快门效应”。
相比之下Global Shutter 会在同一时间瞬间曝光整个图像传感器而不是逐行进行。这意味着在拍摄运动物体或相机移动时Global Shutter 不会导致扭曲效应但相机可能会更昂贵因为实现全局快门技术的传感器通常较复杂。
因此在选择相机时要考虑拍摄条件如果你需要拍摄快速运动的物体可能需要优先选择支持 Global Shutter 的相机。
第二款Raspberry Pi HQ Camera的优点是CMOS与镜头分离可以根据需要搭载不同的镜头比如长焦镜头、变焦镜头等其使用imx477传感器。这款camera的详细信息等我们用时再做详细说明。主要是价格不菲CMOS镜头要小1k。
除了考虑camera还要考虑与树莓派的兼容性。下表是一个不同传感器与树莓派主板和驱动的对应关系。 从表中可以看到imx708传感器只支持libcamera驱动而不是之前的旧的raspicam驱动。使用libcamera驱动意味着我们在安装树莓派系统时对应的Debian version要高于Bullseye例如我用的就是Debian version: 12 (bookworm)系统。
拍照测试
使用bookworm系统的话系统安装完成后libcamera库是直接可以使用的。树莓派也会自动连接camera。但是首先确认/boot/config.txt文件的内容如下面的文件内容所示尤其是camera_auto_detect1项。对于树莓派camera module3来说树莓派是可以自动检测的不需要我们手动指定dtoverlay后续我们用树莓派HQ camera的时候其使用imx477传感器这时候需要我们手动指定一下dtoverlay的型号。
# For more options and information see
# http://rptl.io/configtxt
# Some settings may impact device functionality. See link above for details# Uncomment some or all of these to enable the optional hardware interfaces
#dtparami2c_armon
#dtparami2son
#dtparamspion# Enable audio (loads snd_bcm2835)
dtparamaudioon# Additional overlays and parameters are documented
# /boot/firmware/overlays/README# Automatically load overlays for detected cameras
camera_auto_detect1# Automatically load overlays for detected DSI displays
display_auto_detect1# Automatically load initramfs files, if found
auto_initramfs1# Enable DRM VC4 V3D driver
dtoverlayvc4-kms-v3d
max_framebuffers2# Dont have the firmware create an initial video setting in cmdline.txt.
# Use the kernels default instead.
disable_fw_kms_setup1# Run in 64-bit mode
arm_64bit1# Disable compensation for displays with overscan
disable_overscan1# Run as fast as firmware / board allows
arm_boost1[cm4]
# Enable host mode on the 2711 built-in XHCI USB controller.
# This line should be removed if the legacy DWC2 controller is required
# (e.g. for USB device mode) or if USB support is not required.
otg_mode1[all]
然后我们更新下系统
sudo apt update
sudo apt upgrade预览camera流
直接使用libcamera-hello程序打开摄像头预览
sudo libcamera-hello -t 0-t表示camera流持续多长时间0表示一直持续。
拍摄照片
可以使用libcamera-jpeg命令拍摄图片。
libcamera-jpeg -o test.jpg这个拍摄指令会显示一个5秒左右的预览串口然后拍摄一张全像素的JPEG图像保存为test.jpg。
另外树莓派的libcamera驱动会针对不同的摄像头模块调用一个调谐文件调谐文件中提供了各种参数调用摄像头的时候libcamera会调用调谐文件中的参数结合算法对图像进行处理最终输出成预览画面。由于libcamera驱动只能自动感光芯片信号但是摄像头的最终显示效果还会受整个模块的影响调谐文件的使用就是为了可以灵活处理不同模块的摄像头调整提高图像质量。
在这里我们调用系统中提供的针对imx708的调谐文件。
libcamera-jpeg -o test1.jpg --tuning-file /usr/share/libcamera/ipa/rpi/vc4/imx708.json但是通过使用faststone软件对比两张图片的成像并没有什么差距。调谐文件同样适用于其他的libcamera指令。
还可以指定出图的分辨率以及预览窗口的预览时间。-t 2000指2s的预览时间。
libcamera-jpeg -o test.jpg -t 2000 --width 640 --height 480曝光补偿和曝光增益
树莓派的AEC/AGX算法允许程序指定曝光补偿也就是通过设置EV数值来调整图像的亮度。比如
libcamera-jpeg --ev -0.5 -o darker.jpg
libcamera-jpeg --ev 0 -o normal.jpg
libcamera-jpeg --ev 0.5 -o brighter.jpg我们对如下的名词进行解释
AECAutomatic Exposure Control和 AGXAutomatic Gain Control是图像处理中常用的两种自动控制算法它们通常用于相机或摄像机系统中以调整图像的曝光和增益以确保在不同光照条件下获得合适的图像质量。
AEC自动曝光控制AEC 算法通过调整快门速度曝光时间来控制图像的亮度。在低光条件下它会增加曝光时间以提高亮度而在高光条件下它会减少曝光时间以避免图像过曝。AGX自动增益控制AGX 算法通过调整图像的放大倍数来控制亮度。它可以在光线较暗的情况下增加图像信号的放大程度以提高亮度。
EV代表曝光值Exposure Value它是一个相机设置用于调整照片的曝光水平。EV值的变化会影响相机的快门速度、光圈和ISO等参数从而改变照片的亮度和细节。
EV值是一个以对数形式表示的指标通常以“EV /- 数值”表示例如1 EV 或 -2 EV。EV值的变化一般以1/3或1/2 EV为单位进行调整。
正的EV值表示相机会增加曝光使图像变亮。负的EV值表示相机会减少曝光使图像变暗。
曝光补偿常用于情况复杂、光照条件变化或拍摄者希望在相机自动设置之外进行调整的情况。例如在拍摄对比度很高的场景时你可能会使用曝光补偿来避免过曝或欠曝的情况。
我们上面3张照片通过调整EV值来实现不同的曝光等级。下表是上面3张图片的exif信息。
照片快门ISOnormal.jpg0.025s(1/40)112brighter.jpg0.030s(1/33)130darker.jpg0.017s(1/57)112
通过这3张照片的快门和ISO数据可以看到我们通过调整EV值获得的不同曝光程度的照片是通过调整快门和ISO数据得到的。
我们再来看一下libcamera通过控制增益来实现不同亮度的图片的。
libcamera-jpeg -o normal.jpg -t 2000 --shutter 25000 --gain 0
libcamera-jpeg -o brighter.jpg -t 2000 --shutter 25000 --gain -1
libcamera-jpeg -o darker.jpg -t 2000 --shutter 25000 --gain 1我们通过--gain参数控制曝光增益使用--shutter将快门时间固定在25ms。
照片名图片ISObrighter.jpg1600normal.jpg205darker.jpg112
树莓派的camera module 3设想模组光圈大小是不可调节的快门速度我们也固定为了25ms目前只有ISO是可调节的。可见--gain参数也是通过控制ISO的值来得到不同曝光水平的照片的。
libcamera-still更多的出图控制策略
可以像libcamera-jpeg一样使用
libcamera-still -o test.jpg得到一张图片。与libcamera-jpeg得到的图片基本一致图片占用的存储空间也一致。
libcamera-still可以通过-e参数指定不同的编码器实现不同的格式保存。可以支持png和bmp编码也支持直接不带编码或者任何图像格式地将RGB或者YUV像素的二进制转储保存成文件。如果是直接保存RGB或者YUV数据程序在读取此类文件的时候必须了解文件的像素排列方式。
libcamera-still -e png -o test.png
libcamera-still -e bmp -o test.bmp
libcamera-still -e rgb -o test.data
libcamera-still -e yuv420 -o test_yuv.datapng和jpg是两种常用的格式这里介绍一下他们的区别
PNGPortable Network Graphics和JPEGJoint Photographic Experts Group是两种常见的图像文件格式它们在某些方面有着明显的区别。
压缩算法 PNG使用无损压缩算法保留了所有图像细节不会损失图像质量。这使得PNG格式适用于需要保留高质量细节的场景比如图形设计、线条图像等。JPEG使用有损压缩算法通过消除图像中的一些细节和色彩信息来减小文件大小从而降低了图像质量。这使得JPEG适用于照片等需要较小文件大小的情况。 颜色深度 PNG 支持索引色、灰度、RGB和RGBA等多种颜色模式同时支持16位和8位深度的颜色适用于各种色彩丰富的图像。JPEG 主要用于保存照片通常以8位RGB模式存储。 透明度 PNG 支持完全透明和半透明能够在图像中创建复杂的透明效果适用于图形设计等需要透明背景的场景。JPEG 不支持透明度它只能显示实色背景。 文件大小 JPEG 文件通常比同样分辨率和质量的PNG文件小得多因为它是有损压缩的可以在一定程度上减小文件大小。PNG 文件相对较大因为它是无损压缩的会保留所有的图像细节。 适用场景 PNG 适用于需要保留高质量细节、有透明度要求或者需要无损压缩的图像比如图形设计、图标、线条图像等。JPEG 适用于照片和其他需要较小文件大小的场景。
综上所述选择使用PNG还是JPEG取决于图像的具体用途和要求。如果需要保留高质量细节、支持透明度或者需要无损压缩那么PNG是一个更好的选择。如果主要是保存照片或者需要较小的文件大小那么JPEG可能更适合。
可以看到jpg文件的大小是1.2M但是png文件的大小就到了10.7M。但是从对比图看png相比jpg没有明显的画质优势。 输出RAW图
原始图像Raw image)就是直接图像传感器输出的图像 没有经过任何ISP或者CPU处理。在摄影后期中在摄影的后期中使用后期尤其重要有以下的原因
使用RAW格式图像相比JPEG格式具有一些优点尤其是在后期处理方面 更高的动态范围RAW图像包含了相机传感器捕捉到的原始数据因此它们通常具有比JPEG更高的动态范围。这意味着在后期处理中你可以更好地调整高光和阴影部分以保留更多细节。 更多的色彩深度RAW图像通常以更高的色彩深度比如14位或16位存储相比之下JPEG通常是8位。这使得你在后期处理时可以更精细地调整颜色和色调。 更大的灵活性由于RAW图像未经压缩或经过少量压缩因此你可以在后期处理时进行更大范围的调整例如白平衡、曝光、对比度等。 无损压缩RAW图像通常使用无损压缩这意味着图像不会失去任何细节或质量即使你进行了多次保存。 避免了摄影机的内部处理JPEG图像通常会经过相机内部的处理包括锐化、噪声降低等。使用RAW图像可以避免这些内部处理使你在后期处理时能够更好地控制图像的外观。 更好的白平衡控制RAW图像允许你在后期处理时更精确地调整白平衡而JPEG通常会锁定一种白平衡。
然而使用RAW格式也有一些缺点 文件大小RAW文件通常比JPEG文件大因为它们包含了未经压缩的原始数据。 需要后期处理与JPEG相比RAW图像通常需要更多的后期处理工作因为它们没有经过相机内部的自动处理。 需要专门的软件通常需要专门的软件如Adobe Camera Raw、Lightroom等来处理RAW格式图像。 更大的存储需求由于RAW文件通常较大你可能需要更大的存储空间来保存这些文件。
综上所述如果你在摄影中注重后期处理的灵活性和控制能力使用RAW格式可能是个不错的选择。然而如果你只是想快速拍摄和分享照片JPEG格式可能更为便捷。
对于彩色相机传感器一般来说原始图像的输出格式是Bayer. 注意原始图和我们之前说的位编码的RGB和YUV图像不同RGB和YUV也是经过ISP处理后的图像的。
拍摄一张原始图像的指令
libcamera-still -r -o test.jpg原始图像一般是以DNG Adobe digital Negative) 格式保存的DNG格式可以兼容大部分标准程序 比如dcraw、RawTherapee或者HoneyView. 原始图像会被保存为.dng后缀的相同名字的文件,比如如果运行上面的指令为被另存为test.dng 并同时生成一张jpeg文件。DNG文件中包含了已图像获取有关的元数据 比如白平衡数据ISP颜色矩阵等 下面是用exiftool工具显示的元数据编码信息
---- ExifTool ----
ExifTool Version Number : 12.69
---- File ----
File Name : test.dng
Directory : .
File Size : 24 MB
File Modification Date/Time : 2023:10:29 17:18:0308:00
File Access Date/Time : 2023:10:29 17:18:0308:00
File Creation Date/Time : 2023:10:29 17:18:0308:00
File Permissions : -rw-rw-rw-
File Type : DNG
File Type Extension : dng
MIME Type : image/x-adobe-dng
Exif Byte Order : Little-endian (Intel, II)
---- EXIF ----
Subfile Type : Reduced-resolution image
Image Width : 288
Image Height : 162
Bits Per Sample : 8 8 8
Compression : Uncompressed
Photometric Interpretation : RGB
Make : Raspberry Pi
Camera Model Name : imx708
Strip Offsets : 8
Orientation : Horizontal (normal)
Samples Per Pixel : 3
Strip Byte Counts : 139968
Planar Configuration : Chunky
Software : libcamera-still
Subfile Type : Full-resolution image
Image Width : 4608
Image Height : 2592
Bits Per Sample : 16
Compression : Uncompressed
Photometric Interpretation : Color Filter Array
Strip Offsets : 140624
Samples Per Pixel : 1
Strip Byte Counts : 23887872
Planar Configuration : Chunky
CFA Repeat Pattern Dim : 2 2
CFA Pattern 2 : 2 1 1 0
Black Level Repeat Dim : 2 2
Black Level : 64 64 64 64
White Level : 1023
Compression : Uncompressed
Strip Offsets : 0
Strip Byte Counts : 0
Exposure Time : 1/16
ISO : 400
Date/Time Original : 2023:10:29 17:18:03
Subject Distance : 0.8847590685 m
DNG Version : 1.1.0.0
DNG Backward Version : 1.0.0.0
Unique Camera Model : Raspberry Pi imx708
Color Matrix 1 : 0.9413505197 -0.32803303 -0.09434454143 -0.2564420402 1.072353721 0.1573984027 -0.02698263898 0.1290469915 0.4360769093
As Shot Neutral : 0.4639694691 1 0.5782194734
Calibration Illuminant 1 : D65
---- Composite ----
CFA Pattern : [Blue,Green][Green,Red]
Image Size : 4608x2592
Megapixels : 11.9
Shutter Speed : 1/16
这是关于一个名为 test.dng 的图像文件的 Exif 信息的提取结果。Exif 信息包含了许多有关照片的详细元数据。
以下是对一些关键信息的解释 ExifTool版本信息 ExifTool 版本号12.69 文件信息 文件名test.dng文件大小24 MB文件修改日期2023年10月29日 17:18:03 (UTC8)文件访问日期2023年10月29日 17:18:03 (UTC8)文件创建日期2023年10月29日 17:18:03 (UTC8)文件权限-rw-rw-rw-文件类型DNG (数字负片格式)MIME类型image/x-adobe-dngExif字节顺序小端序 (Intel, II) EXIF信息 Full-resolution image (全分辨率图像) 图像宽度4608 像素图像高度2592 像素每样本位数16 位压缩未压缩光度解释彩色滤波阵列 (Color Filter Array)曝光时间1/16 秒ISO400拍摄时间2023年10月29日 17:18:03主体距离0.8847590685 米DNG版本1.1.0.0相机型号Raspberry Pi imx708 Reduced-resolution image (降低分辨率图像) 图像宽度288 像素图像高度162 像素每样本位数8 位压缩未压缩光度解释RGB相机制造商Raspberry Pi相机型号imx708 … 还有许多其他的Exif信息比如色彩校正矩阵、曝光设置等等 Composite信息 CFA模式Color Filter Array[蓝色绿色][绿色红色]图像尺寸4608x2592 像素百万像素11.9 MP (百万像素)
这份Exif信息提供了关于该图像的详尽信息包括拍摄设备、拍摄条件、图像分辨率等等。
超长曝光
超长曝光一般用在我们拍摄流光快门的场景通过长曝光将一段时间内的景象变化都记录下来。例如下面的场景就是通过30s长曝光实现的。 但是在我们使用的树莓派camera module3中超长曝光是没太有用处的。包括在没有可变光圈的手机专业模式中设置超长曝光也不会有流光快门的效果。因为想要得到流光快门的效果不仅要快门设置的够长光圈还要设置的特别小甚至还要加上ND1000、ND64这样的减光镜以及ISO调到最小才能实现一张流光快门的效果。
这里简单说一下曝光三要素
曝光三要素是指在摄影中控制照片曝光的三个关键因素它们分别是
光圈Aperture 光圈是指相机镜头的光圈大小。它用一个数字表示称为光圈值f。光圈值越小光圈越大相机能够接收到更多光线照片会更亮。光圈值越大光圈越小相机接收到的光线更少照片会更暗。光圈还会影响景深较大的光圈小光圈值会产生较大的背景虚化效果。 快门速度Shutter Speed 快门速度是指相机传感器或胶片暴露于光线的时间长短。快门速度越快相机接收到的光线时间越短照片会变得暗淡但可以冻结运动。快门速度越慢相机接收到的光线时间越长照片会更亮但可能会导致运动模糊。 ISO感光度 ISO值代表了相机传感器对光的敏感程度。较高的ISO值意味着相机在相同光线条件下可以使用更快的快门速度但也可能会引入图像噪点。较低的ISO值会减少噪点但可能需要更慢的快门速度或更大的光圈来保持曝光正常。
这三个要素相互影响称为曝光三角。调整其中一个参数会影响到其他两个。例如如果你增加了光圈值缩小光圈你可以选择更快的快门速度来保持相同的曝光或者降低ISO以减少噪点。
理解和掌握这些曝光三要素可以让你更好地控制照片的曝光水平从而拍摄出更令人满意的照片。
我们在使用微单或单反拍照时有经验的摄影师也都会使用M档手动挡进行拍摄这时候就需要根据场景去采用合适的光圈、快门和ISO大小。比如在拍摄球类运动时由于球的运动速度很快为了保证排出的照片不模糊需要用较高的快门速度例如1/400s的快门速度使用最大光圈保证给足够的进光量例如使用F1.8的大光圈。这时候为了保证曝光水平的正常可以让机器来决定ISO的数值也可以自己指定ISO的数值。
如果使用微单或单反拍摄流光快门的效果常用的参数配置是快门30s光圈F16或镜头支持的最小光圈ISO机器支持的最低添加ND1000或ND64减光镜。
使用手机拍摄流光快门效果时其实不是像单反那样纯光学成像的效果而是算法计算的结果。
因此等同于手机使用树莓派camera module 3时由于光圈大小不可变就算开启了超长曝光也是实现不了流光快门的因为光圈大小太大的话曝光时间太长就会导致进光量过大照片会过曝因此需要后期使用算法实现流光快门的效果。
我们在这里先介绍下libcamera长曝光的API。
如果要拍摄一张超长曝光的图片我们需要禁用AEC/AGC和白平衡否则这些算法会导致图片在收敛的时候多等待很多帧数据。禁用这些算法需要另设置显式值另外, 用户可以通过–immediate设置来跳过预览过程。
libcamera-still -o long_exposure.jpg --shutter 100000000 --gain 1 --awbgains 1,1 --immediate毫无疑问这是一张过曝的照片。
备注几款官方摄像头的最长曝光时间参考表格.
模块最长曝光时间(s)camera module V1(OV5647)6camera module V2(IMX219)11.76camera module V3(IMX708)112HQ(IMX477)670
总结
本篇主要说明了我们使用树莓派diy一个相机时涉及到的相机选型和底层库libcamera的相关基础使用。
libcamera提供的功能远不止此我们使用单反/微单的M档拍摄时可以设置的全部参数都可以通过libcamera库去设置。
但是libcamera只是在终端中使用的指令我们制作一个相机需要有自己的相机app和图库app等这就需要我们在上层语言上进行调用。下一节我们会介绍对libcamera进行封装的picamera2库。