OpenCVで超解像度画像を作成する

f:id:whoopsidaisies:20140307131230p:plain

OpenCVのSuperResolutionクラス

OpenCVの2.4.5あたりからSuperResolutionクラスという超解像度処理を行うモジュールが追加されたので,それを使う.

現在Nugetでインストール可能なOpenCVのバージョンは2.4.7なのでSuperResolutionクラスが使用可能である.プロジェクトの右クリックメニューから「Nugetパッケージの管理」をクリックし,出てきたダイアログで「OpenCV」を検索しインストールする.

f:id:whoopsidaisies:20131203002213p:plain

ソースコード

以下が,超解像度処理を行うプログラムのソース.アルゴリズムとかパラメータの詳細はここを参照.

#include <opencv2/opencv.hpp>
#include <opencv2/superres/superres.hpp>

void main()
{
	using namespace cv;
	using namespace cv::superres;

        // 超解像度処理用クラスの生成
	Ptr<SuperResolution> superResolution = createSuperResolution_BTVL1();
        // 入力ソースを動画ファイルに設定する
	superResolution->setInput(createFrameSource_Video("douga.mp4"));
        // 超解像処理のパラメータ設定(デフォルトのままだとものすごく時間がかかる)
	superResolution->set("scale", 2);
	superResolution->set("temporalAreaRadius", 1);
	superResolution->set("iterations", 2);

	while (waitKey(1) == -1)
	{
                // 高解像度化された画像を取得して表示する
		Mat frame;
		superResolution->nextFrame(frame);
		imshow("Super Resolution", frame);
	}
}

だいぶ重い処理らしく,リアルタイムとはいかない.入力画像のサイズもかなり小さめでないとフリーズしてるのかと思うくらい時間がかかるので注意.

結果

以下,元画像と高解像度化後の画像の比較動画.


OpenCVで超解像度処理 - YouTube