AI-ISP: 携帯電話のカメラはどのようにして風景を写真に変えるのでしょうか?

ここに画像の説明を挿入

序文

  この記事が伝えることはただ 1 つだけです。AI-ISP携帯電話のカメラはどのようにして風景を写真に変えるのでしょうか?

1.ISPチップ

  小さなSoCチップ(10mm x 10mm)には 100 億個以上のトランジスタが集積されており(Kirin 9000有153亿)、その統合モジュールは、携帯電話アプリケーションのスムーズな切り替え、ゲームCPU画面の高速読み込みのサポートGPUAI計算やAIアプリケーションの実現に特化した機能など、携帯電話の機能の実現を共同でサポートします。NPU携帯電話などでの写真撮影も可能ですISPこの本の紹介によると、SoCプレビューは大まかに描かれています。

ここに画像の説明を挿入

  ISP(Image Signal Processor)Image Signal Processorの略で、主にフロントエンド画像信号の処理に使用され、光信号を電気信号に変換することができ、画像処理の中核となるデバイスです。したがって、そのパフォーマンスは携帯電話のカメラとビデオの効果に直接影響します。
  写真を撮るために携帯電話の電源がオンになると、レンズは(Lens)まず被写体をイメージ センサーに投影します(Sensor)同時に、画像プロセッサは(ISP)測光と距離測定を通じて適切なパラメータを計算し、レンズに焦点を合わせるように指示します。カメラボタンを押すとSensor露光が完了し、ISP高度な処理を経て写真となります。一般的なプロセスは次のとおりです。

ここに画像の説明を挿入
  そこで、この記事では出力データを画像に変換するISP方法に焦点を当てますSensorRGB

2. センサーの知識

  参考記事:CMOSイメージセンサー

  CMOS(Complementary Metal Oxide Semiconductor), つまり、相補型金属酸化物半導体は、光の変化を記録できる半導体の一種です。主にシリコンとゲルマニウムで作られた半導体を使用して、 2種類の半導体CMOSと共存させます。これら2つの相補効果によって生成される電流は、処理されたチップは画像を記録し、解釈します(デジタルブックでも紹介されています)。イメージセンサー は光電技術の原理を利用して製造された撮像素子であり、イメージセンサー利用技術と呼ばれます。yesを出力するのが   合理的であり、各ピクセルは最も正確なコンポーネント番号を認識します。しかし、これには感光板のセットが必要であり、データのセットにも時間の同期と位置合わせが必要であり、コストがかかり困難です。したがって、実際には、通常、カラーフィルタアレイと呼ばれるフィルタ板が使用され、これが感光板上に配置される。、つまりカラーフィルターアレイは、光自体の波長を認識できない、つまり認識できないためですたとえば次のパターンです。NPCMOS(CMOS imager Sensor )CISCMOS
SensorRGBraw dataRGB 33RGB3Bayer(Bayer Color Filter Array, CFA)CFA(Color Filter Array)CISCFACISBayerRGGBRGB BayerBayer PatternBGGRGBRGGRBGRGGBBGGR

ここに画像の説明を挿入

  ピクセルは(Pixel)イメージセンサーの最小の感光単位であり、ピクセルのアレイが一緒に配置されてイメージセンサーの感光領域を形成します。
  画素サイズとはイメージセンサーの受光素子1つの大きさを指し、一般的にはや など(Pixel Size)の2つの表現が見られますピクセルのサイズが大きいほど、受け取る光子の数が多くなり、同じ照明条件と露光時間の下で生成される電荷​​も多くなります。1.12μm1.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_descraw_patternの 2 つの属性   によると、RAWこのデータのモードBayerは でありBGGR、その理由は次のとおりです。

  color_desc値はRGBG、対応するインデックスは0123raw_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画像を含むmarginBayer画像の場合は返されます2D ndarrayFoveonおよびその他のタイプの画像の場合RGB、 は を返します3D ndarray4カラー チャネルが存在する可能性が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 色になります)。ノイズ除去、具体的には、など   が多くありますが、受光素子にはアナログ部分が含まれているため、信号に含まれるノイズを避けるのが難しく、素子自体にもノイズが混入してしまいます。さらに、光が低い場合にはシステム全体で信号を増幅する必要があるため、ノイズも増幅されます。   自動ホワイト バランス。人間の視覚システムには特定の色の恒常性特性があり、光源の色の影響を受けません。実生活では、晴れていても、曇っていても、屋内の白熱灯や蛍光灯であっても、人々が見る白い物体は常に白色ですが、これは視力矯正の結果です。人間の脳は物体の色について一定の事前知識を持っており、物体を識別して色の違いを補正することができます。しかし、白い紙を別の光の下で見ると、そのような特性はありません。SensorSensor00
  2. LSC(Lens Shade Correction)
Senor
  3. BPC(Bad Point Correction)
Defect Pixel Correction(DPC)Sensor
  4. Demosaic

  5. DR(Denoise)
2DNR3DNRSenorADC
  6. AWB(Automatic White Balance)
SensorSensor出力は異なる色になり、色温度が低いと黄色っぽくなり、色温度が高いと青っぽくなります。たとえば、白熱灯の下で撮影した写真は黄色がかった色になる傾向がありますが、十分な日光が当たる屋外ではシーンも青くなります。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 ISPIntel Labs の「Learning to see in the dark」
論文   では、すべての機能がニューラル ネットワーク全体を通じて実現できることが提案されました。本稿では、グラフから入力し、出力または画像化します。今のところ、ニューラルネットワーク全体で完結するISP製品は聞いたことがありません。2018ISPRAWRGBYUV

ここに画像の説明を挿入
  Aixin ではPipeline、重要なモジュールのみが最適化され、全体的な効果を最大限に高めるために、限られたコンピューティング能力が、人間の目に最も見える最も重要な機能 (ノイズ除去、ノイズ除去およびそのような機能など)にAI集中されます。AI ISPHDR3DNRtone mappingdemosaicAIAI ISP

ここに画像の説明を挿入
  Aixin の全体には、他の従来のチップとまったく同じではない専用の設計ISPがありコンピューティング ユニットを強調することに加えて、さらに大きなもの、およびストリーム処理用のものあり、処理操作により、画像処理の計算能力が向上します。ISPNPUNPUNPUPre-ProcessPost-ProcessShared MemoryAI ISPCVAI

  参考記事:AIビジョンチップ乾物共有:AI ISPの技術原理の詳細説明([https://zhuanlan.zhihu.com/p/467137601](AIビジョンチップ乾物共有:AI ISPの技術原則の詳細説明) AI ISP の技術原則))

結論

  ブログの内容は継続充電中も随時更新・補足していきますので、間違い等がございましたら編集者に個人的に突っ込んでいただければ幸いです!一緒に前進していきましょう、ありがとうございます♪(・ω・)ノ

おすすめ

転載: blog.csdn.net/qq_42730750/article/details/130224132