dポイントプレゼントキャンペーン実施中!

前回,openCVの超解像処理を質問させてもらったものです.

今,
http://opencv.jp/opencv2-x-samples/usage_of_spar …
の超解像処理をそのまま実行しています.

前回の質問(http://oshiete.goo.ne.jp/qa/6341130.html)で,1枚の画像を劣化させて複数の画像を作りだして,超解像処理をしていることはわかり,実行できるようになりました.

しかし,実際に行いたいのは,自分が持っている複数の画像を使って超解像処理を実行してみたいのですが,その場合プログラムのどの部分をどのように変えたらいいのでしょうか?

ヒントだけでもいいので,ご面倒かもしれませんが,ご教授お願いします.

A 回答 (2件)

この関数


createDegradedImageandSparseMat32F(Mat& src, Mat& dest, Point2d move, int amp)
の引数ampが画像解像度の倍率を表しています.ampを入力する画像に合わせて倍率を変えてみてください.

ただし,実画像の画像ずれはshiftだけで表現することはかなり難しいです.実際の画像の場合は少なくとも平面の場合,アフィン変換,射影変換でずれを表現しなければ使えないかもしれません.その時は,
createDownsampledMotionandBlurCCDSparseMat32f内の疎行列の定義している部分(287~30行目)を変えてみてください.
    • good
    • 0
この回答へのお礼

何度も本当にありがとうございました.

ご意見を参考にさせていただいて,頑張ってみます.
本当にありがとうございました.

お礼日時:2010/11/25 21:43

このコードの作成者です.


超解像は,
1.位置合わせ
2.ブラーカーネル(ぼけ関数)の推定
3.例外除去(お好みで)
4.超解像(このデモで行っている処理)
をする必要があり,このデモでは位置合わせが既知,ブラーカーネルも既知(一定)でイレギュラー値は存在しないと仮定して問題を解いています.

実際のアプリケーションのように使うには,まず位置合わせの後,ぼけ関数推定をしたのち,イレギュラーにならない部分を推定するという作業が必要になります.

もしこのソースをもとにするなら,
位置合わせ結果とボケ関数推定結果を入力する部分を(イレギュラーっぽいものは0でマスクするなど例外処理もできるとなお良い)
createDownsampledMotionandBlurCCDSparseMat32f
に追加追加し,スパース行列を正しく入力してあげることが出来れば他はあまり変更せずに動作すると思います.

参考URL:http://opencv.jp/opencv2-x-samples/usage_of_spar …

この回答への補足

早速の解答ありがとうございます.
解答者様のおかげで多少つかめてきました.
そこで,60~72行目を以下のように変更してみました.
入力画像を2倍に高解像度化しようとしています(つまり,rfactor = 2 としている).画像の位置ズレ量は別のプログラムで推定したという前提で,ブラーカーネルもいじってません.

//(1) generate degraded images and degrading matrices for super resolution
for(int i=0;i<image_count;i++)
{
cout<<i<<endl;

    // shift[i]には,別プログラムで求めたサブピクセルレベルの位置ズレ量
    // が入る
move[i].x = shift[i].x;
move[i].y = shift[i].y;

if(i==0)// fix first image
{
move[i].x=0;
move[i].y=0;
}
Mat imtemp(image.rows,image.cols,CV_8UC3);
char file[30]
sprintf( file, "img%d", i);
degimage[i] = imread(file);

このようにすると,326行目の
dvec.reshape(3,dest.rows).convertTo(dest,CV_8UC3);
でエラーが発生してしまいます.
おそらく,imtempの行列サイズを変更したからだと思うのですが,解像度を向上させる場合はこのように変更しなければいけないのではないのですか?

とりあえず,
・入力画像を2倍に高解像度化したい
・位置ズレ量は既知
・ブラーカーネルもデフォルトのまま
これらの条件で実行したいと考えているので,お知恵をお借りしたいです.

長文失礼しました.

補足日時:2010/11/25 18:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A