web-dev-qa-db-ja.com

ホワイトバランスアルゴリズム

画像処理を行っていますが、CPUの計算時間の点でそれほど集中的ではない自動ホワイトバランスアルゴリズムが必要です。何かお勧めですか?

編集:そして、それが効率に関連している場合、私はそれをJavaに実装し、整数の配列としてカラー画像を使用します。

25
Charles Ma

比較的単純なアルゴリズムは、画面上の最も明るいピクセルと最も暗いピクセルの色相(HSVまたはHSL)を平均化することです。ピンチでは、最も明るいピクセルのみを使用してください。最も明るい部分と最も暗い部分の色相があまりにも異なる場合は、明るいピクセルを使用します。暗い部分が黒に近い場合は、明るいピクセルを使用します。

なぜ暗いピクセルを見てさえ?時々、暗闇は黒に近くなく、周囲の光や霧、もやを暗示します。

これは、Photoshopのヘビーユーザーである場合に役立ちます。写真のハイライトは、オブジェクトの基になる色とは無関係(または弱い関連)です。画像が過度に露出されてすべてがCCDを圧倒していない限り、これらは光の色かぶりの最良の表現です。

次に、すべてのピクセルの色相を調整します。

HSVからHSVへの高速関数とHSVからRGBへの関数が必要です。 (ただし、LUTまたは線形補間を使用したピクセル補正のためにRGBで作業できる場合もあります)。

あなたは平均的なピクセルカラーや最も人気のあるカラーで行きたくありません。その方法は狂気です。

最も明るい色(および最も暗い色)をすばやく見つけるには、RGBで作業できますが、緑、赤、青の乗数が必要です。 RGBモニターでは、255緑は255赤よりも明るく、255青は255青よりも明るいです。以前は頭に良い乗数がありましたが、悲しいかな、私の記憶から逃れました。あなたはおそらく彼らのためにググることができます。

これは、ハイライトのない画像では失敗します。たとえば、マット塗装の壁。しかし、それについて何ができるかわかりません。


この単純なアルゴリズムには、多くの改善点があります。複数の明るいピクセルを平均化したり、画像をグリッド化したり、各セルから明るいピクセルと暗いピクセルを取得したりできます。アルゴリズムを実装すると、いくつかの明らかな微調整が見つかります。

21
Nosredna

GIMPは明らかに自動ホワイトバランスに非常にシンプルなアルゴリズムを使用しています。 http://docs.gimp.org/en/gimp-layer-white-balance.html

ホワイトバランスコマンドは、赤、緑、青のチャネルを個別にストレッチすることにより、アクティブなレイヤーの色を自動的に調整します。これを行うために、イメージのピクセルの0.05%だけが使用する赤、緑、青のヒストグラムの両端のピクセルカラーを破棄し、残りの範囲を可能な限り拡大します。その結果、ヒストグラムの外側のエッジ(ほこりなど)でまれにしか発生しないピクセルカラーは、ストレッチコントラストと比較して、ヒストグラムのストレッチに使用される最小値と最大値に悪影響を与えません。ただし、「ストレッチコントラスト」と同様に、結果の画像に色相のシフトがある場合があります。

この作品を実装する最初の試みはほとんどの写真でうまくいくようですが、他の写真にはアーティファクトがあるか、赤、緑、青のいずれかが多すぎるようです。

21
Charles Ma

@Charles MaはGimpホワイトバランスアルゴリズムの使用を提案しています。 pythonおよびnumpyでは、次のようになります。

# white balance for every channel independently
def wb(channel, perc = 0.05):
    mi, ma = (np.percentile(channel, perc), np.percentile(channel,100.0-perc))
    channel = np.uint8(np.clip((channel-mi)*255.0/(ma-mi), 0, 255))
    return channel

image = cv2.imread("foo.jpg", 1) # load color
imWB  = np.dstack([wb(channel, 0.05) for channel in cv2.split(img)] )

高速でシンプルで、かなりまともな結果を提供します

6
DomTomCat

ホワイトバランスアルゴリズムは難しいです。デジタルカメラでさえ、フラッシュが使用されたかどうかや光のレベルなど、写真に関する多くの追加情報を知っていても、たまに間違いを犯します。

手始めに、赤、緑、青の平均をとり、それをホワイトバランスポイントとして使用します。制限を設定します-タングステン、蛍光灯、および日光の範囲内に留まります。完璧ではありませんが、間違っている場合は、理由を説明するのは比較的簡単です。

3
Matthias Wandel

最近公開されたアルゴリズムの1つに色分布アルゴリズムがあります。これは次の場所にあります http://www.comp.nus.edu.sg/~brown/pdf/ColorConstancyJOSAv10.pdf 論文にはMatlabソースコードへの参照( http://www.comp.nus.edu.sg/~whitebal/illuminant/files/illuminantEstimator.m )。これは簡単にプログラムできる単純なアルゴリズムであり、結果は非常に高速であることを示しています。

追加の高速かつ正確なホワイトバランシング(色の恒常性)アルゴリズムが必要な場合は、次のサイトを確認してください: http://www.fer.unizg.hr/ipg/resources/color_constancy/

あなたが探しているものであるかもしれないそれぞれのソースコード化されたいくつかのアルゴリズムがあります。

3
nbanic