
前回,openCVの超解像処理を質問させてもらったものです.
今,
http://opencv.jp/opencv2-x-samples/usage_of_spar …
の超解像処理をそのまま実行しています.
前回の質問(http://oshiete.goo.ne.jp/qa/6341130.html)で,1枚の画像を劣化させて複数の画像を作りだして,超解像処理をしていることはわかり,実行できるようになりました.
しかし,実際に行いたいのは,自分が持っている複数の画像を使って超解像処理を実行してみたいのですが,その場合プログラムのどの部分をどのように変えたらいいのでしょうか?
ヒントだけでもいいので,ご面倒かもしれませんが,ご教授お願いします.
No.2ベストアンサー
- 回答日時:
この関数
createDegradedImageandSparseMat32F(Mat& src, Mat& dest, Point2d move, int amp)
の引数ampが画像解像度の倍率を表しています.ampを入力する画像に合わせて倍率を変えてみてください.
ただし,実画像の画像ずれはshiftだけで表現することはかなり難しいです.実際の画像の場合は少なくとも平面の場合,アフィン変換,射影変換でずれを表現しなければ使えないかもしれません.その時は,
createDownsampledMotionandBlurCCDSparseMat32f内の疎行列の定義している部分(287~30行目)を変えてみてください.
No.1
- 回答日時:
このコードの作成者です.
超解像は,
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倍に高解像度化したい
・位置ズレ量は既知
・ブラーカーネルもデフォルトのまま
これらの条件で実行したいと考えているので,お知恵をお借りしたいです.
長文失礼しました.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 簿記検定・漢字検定・秘書検定 簿記3級を勉強しています。 画像の(3)の問題がテキストを見ても理解できなかったのでここで質問させて 1 2023/06/11 21:54
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- Illustrator(イラストレーター) Illustrator アンカーポイント選択について 3 2023/01/30 12:31
- Visual Basic(VBA) Excel VBA 大量のレコードからある列の重複数をカウントする方法?拡張編 7 2022/08/22 13:43
- Excel(エクセル) Excelで2つの条件のうちどちらかにあてはまるときの数式を教えてください。 5 2023/01/19 16:58
- Excel(エクセル) エクセル・スプレッドシートで、一定数を超えたらゼロから再累計する方法 8 2022/05/28 03:52
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- その他(プログラミング・Web制作) pythonのOpenCVを自動インストールするプログラム 1 2022/09/02 08:22
- その他(プログラミング・Web制作) 監視カメラを水平につないでパノラマの映像を作りたい 1 2022/09/06 15:26
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
switch の範囲指定
-
【Excel】特定の文字を含むセル...
-
DoEventsがやはり分からない
-
UMLでの例外処理
-
VB.NET Excelを読み込んでDataT...
-
VBの質問#if 0 then ってどう...
-
EXCEL VBA マクロ 実行する度に...
-
Do~Loopした回数をカウントしたい
-
月度は何て読みますか?
-
VBAでCOPYを繰り返すと、処理が...
-
インタラクティブの反対語は?
-
セックスレスの既婚女性は自慰...
-
COBOLのEVALUATE文について
-
RPGプログラムの*HIVALについて
-
フォーム上のすべてのTextBoxを...
-
findは動くがfindnextがマクロ...
-
vba 空のデータをSplitする時の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
【Excel】特定の文字を含むセル...
-
VBAでループ内で使う変数名を可...
-
メルカリのメルカードで買い物...
-
月度は何て読みますか?
-
UMLでの例外処理
-
EXCEL VBA マクロ 実行する度に...
-
セックスレスの既婚女性は自慰...
-
switch の範囲指定
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
-
Do~Loopした回数をカウントしたい
-
VBの質問#if 0 then ってどう...
-
DoEventsがやはり分からない
-
お家デートをしててハグを長い...
-
findは動くがfindnextがマクロ...
-
リョウ・・・量?料?
-
生活保護受給者は性欲をどんな...
-
iD
おすすめ情報