記事ディレクトリ
序文
この記事が伝えることはただ 1 つだけです。AI-ISP
携帯電話のカメラはどのようにして風景を写真に変えるのでしょうか?
1.ISPチップ
小さなSoC
チップ(10mm x 10mm)
には 100 億個以上のトランジスタが集積されており(Kirin 9000有153亿)
、その統合モジュールは、携帯電話アプリケーションのスムーズな切り替え、ゲームCPU
画面の高速読み込みのサポートGPU
、AI
計算やAI
アプリケーションの実現に特化した機能など、携帯電話の機能の実現を共同でサポートします。NPU
携帯電話などでの写真撮影も可能ですISP
。この本の紹介によると、SoC
プレビューは大まかに描かれています。
ISP(Image Signal Processor)
Image Signal Processorの略で、主にフロントエンド画像信号の処理に使用され、光信号を電気信号に変換することができ、画像処理の中核となるデバイスです。したがって、そのパフォーマンスは携帯電話のカメラとビデオの効果に直接影響します。
写真を撮るために携帯電話の電源がオンになると、レンズは(Lens)
まず被写体をイメージ センサーに投影します(Sensor)
。同時に、画像プロセッサは(ISP)
測光と距離測定を通じて適切なパラメータを計算し、レンズに焦点を合わせるように指示します。カメラボタンを押すとSensor
露光が完了し、ISP
高度な処理を経て写真となります。一般的なプロセスは次のとおりです。
そこで、この記事では出力データを画像に変換するISP
方法に焦点を当てます。Sensor
RGB
2. センサーの知識
参考記事:CMOSイメージセンサー
CMOS(Complementary Metal Oxide Semiconductor)
, つまり、相補型金属酸化物半導体は、光の変化を記録できる半導体の一種です。主にシリコンとゲルマニウムで作られた半導体を使用して、 2種類の半導体CMOS
と共存させます。これら2つの相補効果によって生成される電流は、処理されたチップは画像を記録し、解釈します(デジタルブックでも紹介されています)。イメージセンサー は、光電技術の原理を利用して製造された撮像素子であり、イメージセンサー利用技術と呼ばれます。yesを出力するのが 合理的であり、各ピクセルは最も正確なコンポーネント番号を認識します。しかし、これには感光板のセットが必要であり、データのセットにも時間の同期と位置合わせが必要であり、コストがかかり困難です。したがって、実際には、通常、カラーフィルタアレイと呼ばれるフィルタ板が使用され、これが感光板上に配置される。、つまりカラーフィルターアレイは、光自体の波長を認識できない、つまり色を認識できないためです。たとえば次のパターンです。N
P
CMOS
(CMOS imager Sensor )
CIS
CMOS
Sensor
RGB
raw data
RGB
3
3
RGB
3
Bayer
(Bayer Color Filter Array, CFA)
CFA(Color Filter Array)
CIS
CFA
CIS
Bayer
RGGB
RGB Bayer
Bayer Pattern
BGGR
GBRG
GRBG
RGGB
BGGR
ピクセルは
(Pixel)
イメージセンサーの最小の感光単位であり、ピクセルのアレイが一緒に配置されてイメージセンサーの感光領域を形成します。
画素サイズとはイメージセンサーの受光素子1つの大きさを指し、一般的にはや など(Pixel Size)
の2つの表現が見られます。ピクセルのサイズが大きいほど、受け取る光子の数が多くなり、同じ照明条件と露光時間の下で生成される電荷も多くなります。1.12μm
1.12μm×1.12μm
3.RAWデータ
ブロガーとして、私は携帯電話から.jpg
対応するデータをエクスポートしました。.dng
左側がオリジナル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)
color_desc
とraw_pattern
の 2 つの属性 によると、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()
以下はrawpy.RawPy
オブジェクトのすべてのプロパティです。詳細については、公式ドキュメントを参照してください。
属性 | 意味 |
---|---|
black_level_per_channel |
チャンネルごとの黒レベル補正 |
camera_white_level_per_channel |
生のファイルメタデータから読み取られるチャネルごとの彩度(存在しない場合)None |
camera_whitebalance |
ホワイトバランス係数 |
color_desc |
0 から までの番号が付けられた3 色の説明文字列(RGBG、RGBE、GMCY or GBTG) 。同じ文字でも異なる色を示す場合があることに注意してください |
color_matrix |
カラー マトリックス。一部のカメラではファイルから読み取られ、他のカメラでは計算されます。カラーマトリックスshape は、[3, 4] |
daylight_whitebalance |
昼光のホワイトバランス係数(daylight balance) 。ファイルから読み取るか、ファイルデータから計算するか、ハードコーディングされた定数から取得する |
num_colors |
色の数。たとえば、RGBG の場合、人によっては 2 つの異なる緑の色合いを使用するため、カメラのモデルに応じてこれが 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 |
カメラのトーン カーブ。Nikon、Sony、その他のカメラのファイルから読み取られます。長さは65536 |
white_level |
生のピクセル値が飽和しているとみなされるレベル |
4. ISP パイプライン
関連する参考資料を読んだところ、この状況は非常に複雑であり、内容が多すぎるため、参考までに、ブロガーとして簡単に以下のように整理しました。
以下はインターネット上のいくつかのブログに基づいたアレンジメントです。黒レベル補正は、漏れ電流の存在
1.
BLC(Black Level Correction)
により、レンズを完全に黒い環境に置き、出力された元のデータはそうではなく、元のデータがそのときであることを願っています。完全に真っ黒です。 レンズシェーディング補正。視野が徐々に広がると、カメラレンズを通過できる斜光線が徐々に減少するため、撮影された画像は中央部が高輝度で、周辺部が低輝度になります。 デッドポイント補正とも呼ばれ、物理的なデバイスであるためデッドポイントの存在は避けられず、長期間使用するとデッドポイントの数が増加します。真っ暗な環境で出力カラードットとブライトドットを観察したり、白い物体の下で出力カラードットとブラックドットを観察すると、ドット抜けが不規則に点在しているのがわかります。 デモザイクでは、色補間とも呼ばれる空白部分に線形補間が実行され、色が付きます (つまり、各ピクセルが 3 色になります)。ノイズ除去、具体的には、など が多くありますが、受光素子にはアナログ部分が含まれているため、信号に含まれるノイズを避けるのが難しく、素子自体にもノイズが混入してしまいます。さらに、光が低い場合にはシステム全体で信号を増幅する必要があるため、ノイズも増幅されます。 自動ホワイト バランス。人間の視覚システムには特定の色の恒常性特性があり、光源の色の影響を受けません。実生活では、晴れていても、曇っていても、屋内の白熱灯や蛍光灯であっても、人々が見る白い物体は常に白色ですが、これは視力矯正の結果です。人間の脳は物体の色について一定の事前知識を持っており、物体を識別して色の違いを補正することができます。しかし、白い紙を別の光の下で見ると、そのような特性はありません。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)
2DNR
3DNR
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
画像を 3 チャンネルのカラー画像に変換することでありRGB
、画像の例は次のとおりです。
コードは次のように実装されます。
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')
効果は次のとおりです。
参考ブログは以下のとおりです。
1. ISP の全プロセスの紹介: https://www.ngui.cc/article/show-954304.html
2. 私が収集した Zhihu の記事のいくつか: https://www.zhihu .com/collection/865188946
5.AI-ISP
AI ISP
近年になって登場した新しい技術コンセプトですが、ますます複雑になるシーンや特別な画質要件に直面すると、Tradition はパラメータ ライブラリがますます大規模になり、デバッグが困難になり、開発サイクルが徐々に長くなるという課題に直面していますISP
。テクノロジーの助けを借りてAI
、機械学習手法によって強化された機能がISP
テクノロジー開発の重要な方向となり、このようにして誕生しましたAI ISP
。Intel Labs の「Learning to see in the dark」
論文 では、すべての機能がニューラル ネットワーク全体を通じて実現できることが提案されました。本稿では、グラフから入力し、出力または画像化します。今のところ、ニューラルネットワーク全体で完結するISP製品は聞いたことがありません。2018
ISP
RAW
RGB
YUV
Aixin ではPipeline
、重要なモジュールのみが最適化され、全体的な効果を最大限に高めるために、限られたコンピューティング能力が、人間の目に最も見える最も重要な機能 (ノイズ除去、ノイズ除去、およびそのような機能など)にAI
集中されます。AI ISP
HDR
3DNR
tone mapping
demosaic
AI
AI ISP
Aixin の全体には、他の従来のチップとまったく同じではない専用の設計ISP
があり、コンピューティング ユニットを強調することに加えて、さらに大きなもの、およびストリーム処理用のものもあり、処理操作により、画像処理の計算能力が向上します。ISP
NPU
NPU
NPU
Pre-Process
Post-Process
Shared Memory
AI ISP
CV
AI
参考記事:AIビジョンチップ乾物共有:AI ISPの技術原理の詳細説明([https://zhuanlan.zhihu.com/p/467137601](AIビジョンチップ乾物共有:AI ISPの技術原則の詳細説明) AI ISP の技術原則))
結論
ブログの内容は継続充電中も随時更新・補足していきますので、間違い等がございましたら編集者に個人的に突っ込んでいただければ幸いです!一緒に前進していきましょう、ありがとうございます♪(・ω・)ノ