Color Transfer の実装

今回は画像処理のアルゴリズムの中でも結果が面白く,かつ実装が簡単なColor Transferを紹介します.

Color Transferは一言で言えば,例示ベースの色調変換法です.入力としては「色を変えたい画像」(目的画像)と「こういう風な色にしたいと思う画像」(例示画像)を与えます.

その2つの画像をlab (論文の色変換を見たところCIE Labとは異なるもののようです) という色の表し方を使って表現し,色ヒストグラムを作ります.

目的画像の色ヒストグラムの平均と分散が,例示画像のそれと同じになるように色変換を行うと,結果の画像が得られます.詳しいアルゴリズムは下記のリンクにある論文を参照してください.

Color transfer between images [Reinhard 2001]

Color Transferはアルゴリズムは単純なのですが,色空間を変換するところで,やや面倒な行列演算をしなくてはならないので,以下に示すコードでは色変換のコードを単純にするためにColor3dというクラスを使っています.

基本的なコードの流れはmain.cppだけを見れば分かるようにしたつもりですが,もし分かりづらい部分があれば,Color3dクラスの方も参照してください.

もちろんコメントを下さっても結構です.

コード一覧 (リンクをクリックすると該当のコードに飛びます)


結果画像

元画像01
SONY DSC

参照画像01
reference01

結果画像01
output01

 
 

元画像02
target02

参照画像02
reference02

結果画像02
output02


Color3d.h

3次元の色表現を扱いやすくするためのクラスです.機能は少なめですが,おいおい増やしていく予定?こちらはヘッダファイルです.

 
Color3d.cpp

こちらはColor3d.hの実装を書いたcppファイルです.

 
main.cpp

最後にColor Transferの処理が書いてあるmainのcppファイルです.


今回の記事はここまでです.

最後までお読みいただきありがとうございました.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください