静止画像を入力し、ヘイズを除去した画像を出力するプログラム。He[^he]の手法をベースに実装している。
入力画像 | 出力画像 |
---|---|
Dockerコンテナ上での実行を想定している。以降、その構成と環境構築方法を述べる。
Dockerfileのあるルートディレクトリで以下のコマンドを実行し、Dockerイメージをビルドする。バージョン名は何でも問題ないが、使用するソフトのバージョンに応じて適宜変更することが望ましい。ここで指定したdehazing-sample:v0.1
がタグを含んだDockerイメージ名となり、以降の操作で必要となる。
$ docker build -t dehazing-sample:v0.1 .
次に、下記のコマンドを実行してDockerコンテナを起動する。ここでは、現在のディレクトリをDockerコンテナ上の/app/dehazing-sample
ディレクトリにマウントしている。マウント元ディレクトリやマウント先ディレクトリは適宜変更して良いが、本プログラムをマウントする必要がある点に注意。--name
オプションでDockerコンテナ名をdehazing-sample-v0.1
と指定している。
$ docker run --gpus all -itd -v $PWD:/app/dehazing-sample --name dehazing-sample-v0.1 dehazing-sample:v0.1
これ以降、プログラムのビルドや実行はDockerコンテナ上で行うが、その前に下記のコマンドを実行して起動済みのDockerコンテナに入る。
$ docker exec -it dehazing-sample-v0.1 bash
なお、docker run
コマンドにより起動済みのDockerコンテナを開始/終了する際は下記のコマンドを実行する。
$ docker start dehazing-sample-v0.1
$ docker stop dehazing-sample-v0.1
$ mkdir build
$ cd build
$ cmake ..
$ make
なお、tests
ディレクトリ以下にあるテストプログラムを実行する場合は、cmakeを実行する際cmake ..
の代わりにcmake -DBUILD_TESTS ..
を実行する。
プログラムをビルドすると、実行ファイルbuild/samples/main_dehazing
が生成されるので、こちらを実行する。このとき、ディレクトリ構成は以下の通り仮定する。dataset/input
ディレクトリには入力画像が格納されており、dataset/output
ディレクトリは出力画像を生成するために用意した空のディレクトリである。
dehazing-sample
├── build
│ └── samples
│ └── main_dehazing
├── dataset
│ ├── input
│ │ ├── 0001.png
│ │ ├── 0002.png
│ │ └── ...
│ └── output
├── include
├── README.md
├── samples
├── src
└── tests
└── data
└── parameters.json
プログラムの実行には、第1引数には入力画像を配置したディレクトリを、第2引数には出力画像を生成する先のディレクトリを指定する。第3引数にはパラメータを設定したJSONファイルへのパスを指定する。なお、第2引数で指定する出力先ディレクトリが存在しない場合は自動でディレクトリが生成される。
$ cd build
$ ./samples/main_dehazing ../dataset/input ../dataset/output ../tests/data/parameters.json
なお、parameters.json
は以下の形式でパラメータを指定する。指定例はtests/data/parameters.jsonに配置している。
{
"candidateAreaRate": 0.001,
"darkChannelNeighborRadius": 15,
"minTransmission": 0.1,
"omega": 0.95,
"guidedFilterRadius": 30,
"guidedFilterEps": 30
}
キー | 備考 |
---|---|
candidateAreaRate | 環境光推定時に探索する領域の割合 |
darkChannelNeighborRadius | Dark channel画像生成時のモルフォロジー演算の半径 |
minTransmission | 透過率の下限値 |
omega | 透過率計算時、透過率が小さくなりすぎないようにする係数 |
guidedFilterRadius | 透過率マップの平滑化に用いるGuided filterのフィルタサイズ |
guidedFilterEps | 透過率マップの平滑化度合い |
[^he]: K. He, J. Sun, and X. Tang, “Single image haze removal using dark channel prior,” IEEE Trans. Pattern Anal. Mach. Intell., vol. 33, no. 12, pp. 2341–2353, 2011.