AI-ISP:手机相机是如何将风景变成图片的?

这篇具有很好参考价值的文章主要介绍了AI-ISP:手机相机是如何将风景变成图片的?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AI-ISP:手机相机是如何将风景变成图片的?

前言

  本篇文章只干一件事:AI-ISP:手机相机是如何将风景变成图片的?

1. ISP芯片

  一颗小小的SoC芯片(10mm x 10mm)上集成了一百多亿个晶体管(Kirin 9000有153亿),其集成的各个模块共同支撑手机功能实现,如负责手机应用流畅切换的CPU、支持游戏画面快速加载的GPU,专门负责实现AI运算和AI应用实现的NPU以及手机拍照担当的ISP等等。按照书上的介绍,大致绘制了一块SoC预览图:

AI-ISP:手机相机是如何将风景变成图片的?

  ISP(Image Signal Processor),即图像信号处理器的缩写,主要用来处理前端图像信号,它能够将光信号变成电信号,是图像处理的核心器件。因此其性能会直接影响手机的拍照、摄像效果。
  当打开手机准备拍照时,镜头(Lens)会首先把被摄景物投影在图像传感器(Sensor)上。与此同时,影像处理器(ISP)会通过测光、测距算出合适的参数并指示镜头对焦。随着拍照键的按下,Sensor会完成一次曝光,并通过ISP的处理将其变成图片。大致流程如下:

AI-ISP:手机相机是如何将风景变成图片的?
  所以呢,本篇侧重点在ISP是如何将Sensor的输出数据转换成RGB图像的。

2. Sensor知识

  参考文章:CMOS图像传感器

  CMOS(Complementary Metal Oxide Semiconductor),即互补金属氧化物半导体,是一种可记录光线变化的半导体,主要利用硅和锗做成的半导体,使其在CMOS上共存着N型和P型半导体,这两个互补效应所产生的电流即可被处理芯片记录和解读称图像(数电书中也有介绍)。CMOS图像传感器(CMOS imager Sensor ),简称CIS,即采用CMOS工艺的图像传感器,一种利用光电技术原理所制造的图像传感元件。
  按道理Sensor输出的是RGBraw data,每个像素点都感知RGB 3个分量的数字这样最准确。但是这样需要3套感光板,而且RGB3套数据还需要时间同步和对齐,这样成本高,难度大。所以,实际中通常采用一个叫Bayer色彩滤波阵列(Bayer Color Filter Array, CFA)的滤光板,放在一个感光板上。CFA(Color Filter Array),即彩色滤波列阵,由于CIS本身是无法感受光的波长,也就是不能感知颜色,CFA的作用是为了让CIS能够感受色彩,目前主流采用Bayer阵列,也称RGGB或者RGB Bayer,一般有四种Bayer PatternBGGRGBRGGRBGRGGB。比如下面的BGGR模式:

AI-ISP:手机相机是如何将风景变成图片的?

  像素(Pixel),是图像传感器的最小感光单元,像素阵列排列在一起形成了图像传感器的感光区域。
  像素尺寸(Pixel Size),是指图像传感器单个感光元件的尺寸,一般我们能看到两种表述,比如1.12μm或者1.12μm×1.12μm。像素的尺寸越大,接收光子的数量就越多,同光照条件和曝光时间内产生的电荷也越多。

3. RAW数据

  博主我从手机里导出了.jpg和对应的.dng数据:

AI-ISP:手机相机是如何将风景变成图片的?
  左侧为原始的RAW数据(76.2MB),右侧为手机相机(ISP)自动处理后的RGB数据(4.74MB)
  下面使用库读取RAW数据来看一下详细的信息:

import rawpy


raw_file = '../raws/IMG_20230418_143110.dng'
raw_data = rawpy.imread(raw_file)

# 查看有木有缩略图
try:
    thumb = raw_data.extract_thumb()
except rawpy.LibRawNoThumbnailError:
    print('no thumbnail found')

# 返回给定坐标相对于完整 RAW 大小的颜色索引
color_index = raw_data.raw_color(0, 0)
print(color_index)

# 返回相对于完整RAW图像的给定位置的RAW值
raw_value = raw_data.raw_value(0, 0)
print(raw_value)

# 返回相对于图像可见区域的给定位置的RAW值
raw_value = raw_data.raw_value_visible(0, 0)
print(raw_value)

AI-ISP:手机相机是如何将风景变成图片的?
  根据color_descraw_pattern两个属性可知,此RAW数据的Bayer模式为BGGR,推理如下:

  color_desc值为RGBG,对应索引为0123,而raw_pattern的值为2310,转换为颜色值就是BGGR

  局部放大RAW图像,代码及结果如下:

import rawpy
import matplotlib.pyplot as plt
import seaborn as sns


raw_file = '../raws/IMG_20230418_143110.dng'
raw_data = rawpy.imread(raw_file)

# plt.imshow(raw_data.raw_image_visible)
sns.heatmap(raw_data.raw_image_visible[:10, :10], cmap=plt.cm.binary)
# plt.savefig('../raws/ori_raw_10x10.png')
plt.show()

AI-ISP:手机相机是如何将风景变成图片的?
  以下是rawpy.RawPy对象的所有属性,更详细的可以参考官方的文档:

属性 含义
black_level_per_channel 每通道黑电平校正
camera_white_level_per_channel 从原始文件元数据读取的每通道饱和度,没有就是None
camera_whitebalance 白平衡系数
color_desc 编号从 03 的颜色(RGBG、RGBE、GMCY or GBTG)的字符串说明。需要注意的是,相同的字母可能表示不同的颜色
color_matrix 颜色矩阵,从某些相机的文件中读取,为其他相机计算。颜色矩阵的shape[3, 4]
daylight_whitebalance 日光的白平衡系数(daylight balance)。从文件中读取,或根据文件数据计算, 或取自硬编码常量
num_colors 颜色数量。 请注意,例如,对于RGBG,这可能是3或4,具体取决于相机型号, 因为有些人使用两种不同的绿色
raw_colors RAW 图像中每个像素的颜色索引数组。 相当于为每个像素调用 raw_color(y, x)
raw_colors_visible raw_colors,但是没有margin
raw_image RAW图像,包括margin,对于Bayer 图像,将返回 2D ndarray。 对于Foveon和其他RGB类型的图像,将返回3D ndarray。 请注意,可能有 4 个颜色通道,其中第 4 个通道可以是0
raw_image_visible raw_image,但是没有margin
raw_pattern Bayer阵列的模式
raw_type 返回RAW数据的类型,比如RawType.Flat
rgb_xyz_matrix 相机 RGB - XYZ 转换矩阵。 此矩阵是常数(不同型号不同),RGB 相机的最后一行为零,不同颜色型号(比如CMYG 等)的最后一行为非零,转换矩阵的shape[4, 3]
sizes 返回RAW图像和后处理(postprocessed)图像的信息,包含在rawpy.ImageSizes对象中
tone_curve 相机色调曲线,从尼康,索尼和其他一些相机的文件中读取。长度为65536
white_level 原始像素值被认为饱和的级别

4. ISP Pipeline

  看了相关的参考资料,这里的情况很复杂,内容太多太多啦,博主我就简单的梳理了以下,仅供参考:

AI-ISP:手机相机是如何将风景变成图片的?
  这里根据网上的一些博客做了整理:
  1. BLC(Black Level Correction)
  黑电平校正,由于Sensor漏电流存在,把镜头放入一个全黑的环境,Sensor输出的原始数据不为0,而我们希望全黑时原始数据为0
  2. LSC(Lens Shade Correction)
  镜头阴影校正,由于随着视场角慢慢增大,能够通过照相机镜头的斜光束将慢慢减少,导致Senor捕获的图像中间亮度高,周围边缘亮度低。
  3. BPC(Bad Point Correction)
  坏点校正,也叫Defect Pixel Correction(DPC),由于Sensor是物理器件,有坏点是难以避免的;而且使用时间长了坏点会越来越多。通过在全黑环境下观察输出的彩点和亮点,或在白色物体下观察输出的彩点和黑点,就可以看到无规律的散落在各处的坏点。
  4. Demosaic
  去马赛克,对空白部分进行线性插值,也叫颜色插值,使其具有颜色(就是每个像素点具有三种颜色)。
  5. DR(Denoise)
  去除噪声,具体也有很多中,比如2DNR3DNR等,Senor的感光器件包含模拟部分,所以信号中的噪声很难避免,ADC器件本身也会引入噪声。另外,当光线较暗时,整个系统需要将信号放大,这样噪声也跟着放大。
  6. AWB(Automatic White Balance)
  自动白平衡,人类的视觉系统有一定的颜色恒常性特点,不会受到光源颜色的影响。实际生活中,不论是晴天、阴天、室内白炽灯或日光灯下,人们所看到的白色物体总是是白色的,这就是视觉修正的结果。人脑对物体的颜色有一定先验知识,可识别物体并且更正这种色差。但是Sensor不具备这样的特点,比如一张白纸,在不同光线下,Sensor输出的是不同颜色,在低色温下偏黄,在高色温下偏蓝。如白炽灯照明下拍出的照片易偏黄;而在户外日光充足则拍摄出来景物也会偏蓝。我们就需要,让不同色温光线条件下白色物体,Sensor的输出都转换为更接近白色。
  7. CCM(Color Correction Matrix)
  颜色校正,Sensor图像传感器获取的图像,与人们期望的颜色有距离,必须矫正。AWB已经将白色校准了,CCM就是用来校准除白色以外其他颜色的准确度的。
  8. RGB Gamma
  Gamma校正,人眼不同于摄像机,接收光子来感知光线。比如:在一间小黑屋中每增加一盏灯,摄像机都能线性增加亮度。但是人眼在黑暗时增加一盏灯时感受明显,往后随着灯的个数增长人眼并不会有明显感受。(人眼非线性)
  9. CSC(Color Space Conversion)
  色彩空间转换,在YUV 色彩空间上进行彩色噪声去除、 边缘增强等更方便,且YUV存储和传输时更省带宽。比如,RGBToYUV
  10. HDR(High-Dynamic Range)
  高动态范围,自然界的中光强度很宽,而人眼对高亮,极暗环境的细节分辨能力相对较窄,而摄像头记录的范围更窄,真正的HDR技术就是记录视觉范围内高亮,极暗环境的中的细节分辨率。为保证人眼看到的世界和显示器或者摄像头采集的图像的亮度范围相差无几,甚至更好,需要通过tone mapping,将暗处和亮出细节再现。这是一种纯粹为了视觉感受而进行的处理,并非真正的HDR。简而言之,宽动态技术可以使场景中特别亮的区域和特别暗的区域在最终成像中同时看清楚。
  11. Color denoise / Sharpness
  锐化,主要是对YUV降噪处理,同时为了消除降噪过程中对图像细节的损失,需要对图像进行锐化处理,还原图像的相关细节。因为在YUV色彩空间,这些处理更方便。
  12. AEC(Automatic Exposure Control)
  自动曝光,不同场景下,光照的强度有着很大的差别。人眼有着自适应的能力因此可以很快的调整,使自己可以感应到合适的亮度,而图像传感器却不具有这种自适应能力,因此必须使用自动曝光功能来确保拍摄的照片获得准确的曝光从而具有合适的亮度。

  篇幅有限,下面就仅看一下Demosaic是如何进行操作的。正如上述所说,再具体一点,就是将无颜色的RAW图像转为RGB三通道的彩色图像,示例图如下:

AI-ISP:手机相机是如何将风景变成图片的?
  代码实现如下:

import rawpy
import cv2
import numpy as np
import matplotlib.pyplot as plt


raw_file = '../raws/IMG_20230418_143110.dng'
raw_data = rawpy.imread(raw_file)
# rawpy内置VNG-Demosaic算法
rgb_data = raw_data.postprocess(demosaic_algorithm=rawpy.DemosaicAlgorithm(1))
# print(rgb_data.shape)
plt.imshow(rgb_data)
plt.savefig('../raws/isp_rgb.png')


with rawpy.imread(raw_file) as raw:
    bayer_img = raw.raw_image.copy()
bayer_img = np.uint8(bayer_img)		# uint16 --> uint8
# opencv内置VNG-Demosaic算法
rgb_img = cv2.demosaicing(bayer_img, cv2.COLOR_BAYER_BG2RGB_VNG)
# print(rgb_img.shape)
plt.imshow(rgb_data)
plt.savefig('../raws/isp_rgb_cv2.png')

  效果如下:

AI-ISP:手机相机是如何将风景变成图片的?

AI-ISP:手机相机是如何将风景变成图片的?

  参考博客如下:
  1. ISP全流程简介:https://www.ngui.cc/article/show-954304.html
  2. 我收藏的几篇知乎文章:https://www.zhihu.com/collection/865188946

5. AI-ISP

  AI ISP是最近几年才出来的一个新的技术概念,当面对越来越高的场景复杂度和特殊的图像质量要求时,传统ISP正面临了参数库逐渐庞大、调试困难、开发周期逐步拉长等挑战。以AI技术为辅助,通过机器学习的方法来强化ISP的功能就成为技术发展的重要方向,由此诞生了AI ISP
  在2018年,英特尔实验室的《Learning to see in the dark》论文中提出,可以通过整个神经网络来实现ISP的全部功能。在这篇论文中,通过一个RAW图进入,然后输出RGB或者YUV图像。到目前为止,还没有听说哪家的ISP产品是由整个神经网络完成的。

AI-ISP:手机相机是如何将风景变成图片的?
  在爱芯的Pipeline中,只将其中重要的模块进行AI化,将有限的算力集中于整个AI ISP中,最关键、人眼最可知的这些功能中,比如像HDR、去噪的3DNRtone mapping,还有demosaic这样的功能中进行AI化,以实现整个AI ISP的最佳效果。

AI-ISP:手机相机是如何将风景变成图片的?
  在爱芯的整个ISP中,有一个专门为了ISP设计的NPU,这个NPU和传统其他芯片中的NPU并不完全一样,除了强调计算单元之外,还有Pre-ProcessPost-Process和一个更大的Shared Memory,以及一些针对AI ISP的流式处理和CV的处理操作,可以使其算力在AI的图像处理中能够有更好的提升。

  参考文章:AI视觉芯片干货分享:深度讲解AI ISP的技术原理([https://zhuanlan.zhihu.com/p/467137601](AI视觉芯片干货分享:深度讲解AI ISP的技术原理))

结束语

  持续充电中,博客内容也在不断更新补充中,如有错误,欢迎来私戳小编哦!共同进步,感谢Thanks♪(・ω・)ノ文章来源地址https://www.toymoban.com/news/detail-422951.html

到了这里,关于AI-ISP:手机相机是如何将风景变成图片的?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记录--用js如何实现将手机号中间的几位数字变成****

    这个功能其实很常见,比如我们微信的账号安全里面显示的手机号、掘金的账号设置里面显示的手机号、支付宝里面的证件号码、各大银行的App卡号.....还有很多有关系到我们私密的地方,在此就不一一例举了,看似简单的功能,我们该如何实现呢? 其实实现的方法有很多,

    2024年02月08日
    浏览(42)
  • 工业相机相关概念词介绍:ISP算法、线阵相机、常用术语

    ISP基本框架及算法介绍 相机的常用设置 50个常用术语 关于立体视觉相关算法,可参考我的专栏:https://blog.csdn.net/yohnyang/category_11720857.html ISP(Image Signal Processor),即图像处理,主要作用是对前端图像传感器输出的信号做后期处理,主要功能有线性纠正、噪声去除、坏点去除、

    2024年02月02日
    浏览(38)
  • 相机图像质量研究(2)ISP专用平台调优介绍

    相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成像的影响--景深 相机图像质量研究(6)常

    2024年02月16日
    浏览(42)
  • uniapp如何调用手机相机进行拍照

    uniapp调用手机拍照的方法,我所用到的两种方法列举在下方 方法一:使用uni.chooseImage 方式二:使用plus.camera.getCamera

    2024年02月11日
    浏览(48)
  • 【AI绘画/作图】风景背景类关键词模板参考

    因为ds官网被墙,所以翻了IDE的源码整理了下stablestudio里的官方模板,顺便每个模板生成了一份…不知道怎么写的可以参考 Stunning sunset over a futuristic city, with towering skyscrapers and flying vehicles, golden hour lighting and dramatic clouds, high detail, moody atmosphere 令人惊叹的日落在未来的城

    2024年04月10日
    浏览(60)
  • RK3588s imx415相机适配及ISP调优系列(三)--- RKISP调试环境配置

    经过上篇的相机配置后,两个mipi相机已经可以正常出图了。其实对于rk系列如何配置mipi相机,网上已有不少相关资料均可参考借鉴。 RK3588s imx415相机适配及ISP调优系列(一) RK3588s imx415相机适配及ISP调优系列(二)— mipi相机适配 那么接下来讲讲怎么做ISP图像调优。Sony IMX

    2024年02月11日
    浏览(251)
  • 风景ai绘画工具有哪些?这几款神器轻松搞定

      在这个数字化的时代,人工智能衍生出的软件已经见怪不怪了。其中在音乐、视频、绘画等领域,都能利用ai来进行深度学习处理,以快速便捷的形式诞生出新的作品出来。那些笔画流畅,颜色自然的山水画,背后可能并不是真人作画,更有可能是ai学习出来的作品。那么你

    2024年02月11日
    浏览(42)
  • 第二百三十二回 如何通过相机获取图片文件

    我们在上一章回中介绍了\\\"如何混合选择多个图片和视频文件\\\"相关的内容,本章回中将介绍 如何通过相机获取图片文件 .闲话休提,让我们一起Talk Flutter吧。 我们在前面章回中介绍的选择图片或者视频文件的方式都是通过文件窗口进行的,本章回中将介绍如何通过相机获取图

    2024年02月20日
    浏览(56)
  • 手机镜头,噪声建模,ISP,ISO与analog gain

    最近在做夜景去噪声的low level工作,相关工作可以说是非常的难以及boring。因为这种low level你必须往上层,往底层走,甚至说需要了解ISP相关的知识;因此这段时间对于相关知识进行了大量的学习与了解。 1、ISO 曝光量以E表示,计算单位就是勒克斯·秒(lux*s)。若要取得一

    2024年02月12日
    浏览(44)
  • 让手机变成电脑摄像头

             现在很多电脑都是不带摄像头的,因为用的频率也不高,但是不高不代表完全不用,有的时候我们还是要用到这玩意儿儿,怎么办呢,我们可以让手机变成电脑摄像头来用        首先,我们下载DroidCam电脑客户端和手机APP,可以通过东哥的阿里网盘下载  阿里云盘

    2024年02月12日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包