デジタル画像の霧除去方法のレビュー

自分のブログの記事で、ここも投稿します。
ブログの方が読みやすいと思います。

site: http://kura.gq/image-processing/image-defogging-review/82/03/

デジタル画像の霧を除去するのは画像処理の重要な一分野です。新興分野として、近年、画像の霧を除くアルゴリズムはよく発展してきた。この記事は、画像の霧除去についての内容を簡単に紹介してみます。

画像の霧除去（image defogging）とは
霧のない画像を取得するため、霧画像から霧を除去します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351977/b37bd5ef-30d2-c806-38af-3f831fe150d8.png)


霧を除去する原理
いい天気で、空気中の粒子が小さいので、光の伝播は妨げられません。しかし、霧がある場合で、光の波長より長い空気中の粒子は光の伝播を妨げられます。一方では、撮影中の物体によって反射された光の一部が空気中の粒子によって散乱されます。 一方では、環境光は空気中の粒子によって散乱され、カメラのセンサーに入ります。このように、画像のイメージングは霧の影響を受けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351977/50504320-b611-2c73-b9b4-23e0b8d58f97.png)


反射光については、以下の結論があります。

(E_{d}left( d,lambda right) = E_{0}left( lambda right) e^{-beta left( lambda right) d})

ここでdは物体からセンサーまでの距離、(lambda)は光の波長、(beta left( lambda right))は全散乱係数、(E_{0})は物体の表面で反射した光の強度、(E_{d}left( d,lambda right))はセンサーに届く光の強度です。

環境光については、以下の結論があります。

(E_{a}left( d,lambda right) = E_{infty }left( lambda right)left(1 – e^{-beta left( lambda right) d}right))

センサーが受け取る光は上記の2つの部分の和です。

(E_{a}left( d,lambda right) = E_{0}left( lambda right) e^{-beta left( lambda right) d} + E_{infty }left( lambda right)left(1 – e^{-beta left( lambda right) d}right))

つまり、画像の霧除去の仕事は、センサーが受ける霧ある画像の(E_{a}left( d,lambda right))から元の画像の(E_{0})推定することです。

霧を除去する方法
１．画像強調に基づく方法
画像強調ベースの方法は、上記の画像劣化過程を考慮していないが、ただ画像強調技術を使用して霧画像を調整して画像霧除去の効果を達成しています。

ヒストグラム平坦化
画像のヒストグラムは、画像の輝度と各輝度値の現れる頻度を表した図です。ヒストグラム平坦化とは、画像の輝度がほぼ均等に分布するため、各ピクルスの輝度値が新しい輝度値にマッピングします。

霧のある画像の場合は、普通の画像より白いピクルスが多くなります。ヒストグラムに反映されると、輝度値が高いピクルスが増えます。ヒストグラム平坦化の技術を使用すると、霧の白を除去できます。

ヒストグラム平坦化のアルゴリズムに基づいて、適応ヒストグラム平坦化およびCLAHE（コントラストに制限を付けた適応ヒストグラム均等化）などのアルゴリズムがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351977/34bfda6d-96c0-100e-b910-bf39e85833b7.png)


左：元の画像、中：ヒストグラム平坦化、右：CLAHE

コントラスト強化
コントラストとは、画像の明るい部分と暗い部分の差です。 霧のある場合は、コントラストは普通より小さくなる傾向があります。これに基づいて、画像の霧を除去するために画像のコントラストを強化することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351977/b782e9b5-26b6-f1a9-9d16-2e64485457f2.png)


左：元の画像、中：コントラスト強化、右： 適応コントラスト強化

retinex画像強調
Retinex画像強調アルゴリズムは、強い画像強調アルゴリズムです。 このアルゴリズムは画像の「照明 – 反射」モデルに基づいています。これは、画像が照明光と反射光の2つの部分から構成されてあります。照明成分は霧のある環境光です。反射成分は被写体の性質によって決定されます。

(ileft( x,yright)=eleft( x,yright) rleft( x,yright))

ここで、(ileft( x,yright))はセンサーの受ける画像、(eleft( x,yright))は照明成分、(rleft( x,yright))は反射部分です。

対数演算を使えば、照明成分と反射成分の積を二つの和になります。それによって照明成分と反射成分を抽出しやすくなっています。

(ln ileft( x,yright) =ln eleft( x,yright) + ln rleft( x,yright))

反射成分には霧のある環境光の情報がいないので、反射成分を抽出すれば画像の霧を除去することができます。ほとんどの場合に、照明成分は低周波であり、反射成分は高周波であるので、フーリエ変換して、フィルタを使って、照明成分と反射成分が抽出されることができます。

retinexモデルに基づいて、MSR(Multi-Scale Retinex)やMSRCR(Multi-Scale Retinex with Color Restoration)などアルゴリズムがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351977/25ab8a5e-edbc-d9d0-7730-8b5fb13db93a.png)


1行目：元の画像、2行目：SSR(Single Scale Retinex)、3行目：MSR、4行目：MSRCR。（色偏差があります）

２．物理モデルに基づく方法
物理モデルに基づいて方法は、上記の画像劣化過程に基づいて、物理の知識を使って、画像の霧を除去します。具体的に､霧のある画像(E_{a}left( d,lambda right))がある場合、環境光の(beta left( lambda right))を推定することにより、霧の少ない画像(E_{0}left( lambda right))が得られます。

(E_{a}left( d,lambda right) = E_{0}left( lambda right) e^{-beta left( lambda right) d} + E_{infty }left( lambda right)left(1 – e^{-beta left( lambda right) d}right))

赤・黄・青の3つのチャンネルに対して3つの方程式がありますが、未知の変数は4つあります。 そして、この方程式を解くために何かの事前知識を仮定しなければならないようです。

最暗チャンネル優先に基づいて
最暗チャンネル優先(Dark channel prior)とは、自然の画像の多くは、RGBの三つのチャンネルの中、少なくとも一つチャンネルが０に近い値になります。このチャンネルは最暗チャンネルです。しかし、霧のある場合は、霧のあるので最暗チャンネルの値が０にならないことがあります。これに基づいて、(beta left( lambda right))を推定して、霧のない画像を復元することができます。最暗チャンネル優先アルゴリズムに基づいて、多くの改良されたアルゴリズムが提案されてきたあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351977/ef6a04c6-6a57-30ce-aa01-7c95770cbf42.png)

左：元の画像、中：最暗チャンネル画像、右：処理した画像

灰色世界アルゴリズム
灰色世界アルゴリズムは、灰色世界仮説に基づいています。これは、多くの画像では、RGBの三つのチャンネルが同じ値になる傾向があると仮定しています。霧のある場合は、環境光が灰色世界仮説を破壊します。そして、灰色世界仮説を満たさなければならないという条件の下では、環境光の影響を除去することができ、霧のない画像の色を得ることができます。

灰色世界アルゴリズムのみを使って、画像は色偏差があります。だから、様々な方法を用いて、加重合計が行われるほうが良いです。 例えば、RenらのGFNアルゴリズムは、灰色世界アルゴリズム、コントラスト強調およびガンマ補正の結果を加重合計して、霧のない画像を得れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351977/57ec3b5f-086c-9d98-25f5-20a098df43ed.png)

左：元の画像、右：GFN処理した画像

Tips
霧除去の研究の中、たくさんの霧のある画像と霧のない画像を得るのは簡単じゃなくて、データベースの入手方法はとても重要です。多くの場合、NYU Depth datasetを使います。このデータセットは被写体との距離があるので、上記の画像劣化の方程式を使って、霧のある画像が得られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351977/ac42fd27-0cc4-e452-d1e0-56ba8ff8abc0.png)

NYU Depth dataset

だから、霧のある画像から被写体との距離が推定されることはできます。

最後に
こちらまでご覧いただきありがとうございます！

間違っている点や日本語使う問題などあればコメント頂けると嬉しいです。 

よろしくお願いします！