![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
前のチュートリアル: OpenCVを使った2枚の画像の加算(ブレンディング)
次のチュートリアル: 離散フーリエ変換
| 原著者 | Ana Huamán |
| 互換性 | OpenCV >= 3.0 |
このチュートリアルでは、以下の方法を学ぶ:
よく使われる2つの点処理は、定数による乗算と加算である:
\[g(x) = \alpha f(x) + \beta\]
\(f(x)\) を入力画像のピクセル、\(g(x)\) を出力画像のピクセルと考えることができる。すると、この式はより便利に次のように書ける:
\[g(i,j) = \alpha \cdot f(i,j) + \beta\]
ここで \(i\) と \(j\) は、ピクセルがi 行目、j 列目に位置することを示す。
cv::Mat::zeros が image.size() と image.type() に基づく Matlab スタイルのゼロ初期化子を返すことがわかる
以下に注意すること(C++ コードのみ):
ここで cv::Mat::convertTo は実質的に *new_image = a*image + beta* を実行する。しかし、ここでは各ピクセルへのアクセス方法を示したかった。いずれにせよ、両方の方法は同じ結果を与えるが、convertTo の方がより最適化されており、はるかに高速に動作する。
この段落では、これまで学んだことを実践し、画像の明るさとコントラストを調整して露出不足の画像を補正する。また、画像の明るさを補正する別の手法であるガンマ補正についても見ていく。
\(\beta\) の値を増加(/減少)させると、すべてのピクセルに一定の値が加算(/減算)される。[0 ; 255] の範囲外のピクセル値は飽和(saturate)する(すなわち、255(/0)より大きい(/小さい)ピクセル値は 255(/0)にクランプされる)。
ヒストグラムは、各カラーレベルについて、そのカラーレベルを持つピクセルの数を表す。暗い画像では低いカラー値を持つピクセルが多くなり、その結果、ヒストグラムは左側にピークを示す。一定のバイアスを加算すると、すべてのピクセルに一定のバイアスを加算したことになるため、ヒストグラムは右側にシフトする。
\(\alpha\) パラメータはレベルの広がり方を変化させる。\( \alpha < 1 \) の場合、カラーレベルは圧縮され、結果としてコントラストの低い画像になる。
これらのヒストグラムは Gimp ソフトウェアの明るさ・コントラストツールを使って取得したものである点に注意。明るさツールは \(\beta\) バイアスパラメータと同一であるはずだが、コントラストツールは \(\alpha\) ゲインとは異なるように見え、Gimp では出力範囲が中央に揃えられているようである(前のヒストグラムで気づけるように)。
\(\beta\) バイアスを調整すると明るさは改善するが、同時にコントラストが低下するため、画像にわずかなベールがかかったように見えることがある。この効果を弱めるために \(\alpha\) ゲインを使用できるが、飽和のために、元々明るかった領域では細部の一部が失われる。
ガンマ補正は、入力値とマッピングされた出力値の間の非線形変換を用いて画像の明るさを補正するために使用できる:
\[O = \left( \frac{I}{255} \right)^{\gamma} \times 255\]
この関係は非線形であるため、その効果はすべてのピクセルで同じにはならず、各ピクセルの元の値に依存する。
\( \gamma < 1 \) の場合、元々暗かった領域がより明るくなり、ヒストグラムは右側にシフトする。一方、\( \gamma > 1 \) の場合は逆になる。
次の画像は \( \alpha = 1.3 \) と \( \beta = 40 \) で補正したものである。
全体的な明るさは改善されたが、使用した実装の数値的な飽和(写真におけるハイライトのクリッピング)のために、雲が大きく飽和していることに気づくだろう。
次の画像は \( \gamma = 0.4 \) で補正したものである。
ガンマ補正はマッピングが非線形であり、前の手法のような数値的飽和が起こり得ないため、飽和効果が少なくなる傾向がある。
前の図は3枚の画像のヒストグラムを比較したものである(3つのヒストグラムの間で y 軸の範囲は同じではない)。元の画像では、ほとんどのピクセル値がヒストグラムの下部にあることに気づくだろう。\( \alpha \), \( \beta \) 補正の後では、飽和による 255 での大きなピークと右側へのシフトが観察できる。ガンマ補正の後では、ヒストグラムは右側にシフトするが、暗い領域のピクセルの方が明るい領域のピクセルよりも大きくシフトしている(ガンマ曲線の図を参照)。
このチュートリアルでは、画像のコントラストと明るさを調整する2つの簡単な手法を見てきた。これらは基本的な手法であり、ラスターグラフィックスエディタの代替として使用することを意図したものではない!
ガンマ補正のコード:
計算の性能を向上させるためにルックアップテーブルが使用されている。256個の値を一度だけ計算すればよいためである。