SlideShare a Scribd company logo
1 of 22
Download to read offline
OpenCVの
    拡張ユーティリティ関数群
    拡張  ティリティ関数群
        名古屋工業大学 福嶋慶繁
        Twitter:  @fukushima1981
コードダウンロード先:
      http://nma.web.nitech.ac.jp/fukushima/opencv/extra_opencv.html
実装関数,クラスのヘッダ
           実装関数 クラスのヘッダ
• A l i h
  Analysis.hpp
   – 下記全てのインクルードヘッダ
• Timer.h
   – 時間計測用クラス
• draw.h
   – 描
     描画用の関数群
          数群
• imageQuality.h
   – 画質評価用関数群
• plot.h
   – Gnuplotライクなプロッタークラス
• util.h
   – ユーティリティ関数群
逆引き関数,クラスリスト
           逆引き関数 クラスリスト
画像品質
• 画像品質MSEを計算する
    – getMSEY, getMSERGB
•   画像品質PSNRを計算する
    – getPSNRY, getPSNRRGB
•   画像品質SSIMを計算する
    – getSSIMY, getSSIMRGB
•   画像品質DSSIMを計算する
    画像品質     を計算する
    – getDSSIMY, getDSSIMRGB
•   画像のエントロピーを計算する
    – double getEntropy
      double getEntropy
•   備考:上記関数の引数は第3引数にマスクを取れる
•   備考:カラー画像の戻り値はcv::Scalarで0:B, 1:G, 2:R, 3:(B+G+R)/3の値が返る
•   バウンディングボックス付きPSNR計算(画像の縁を無視する用,上記バウンディ
     ウンディングボックス付きPSNR計算(画像の縁を無視する用,上記 ウンディ
    ングボックスマスクを作ってPSNRを計算)MSE,SSIM,DSSIMも同様に実装
    – getPSNRYBB, getPSNRRGBBB
逆引き関数,クラスリスト
            逆引き関数 クラスリスト
描画
• 三角形,逆三角形を描画する
    – triangle, triangleinv
•   十
    十×*を描画する
       を描画する
    – drawCross( XCV_DRAWCROSS_PLUS, XCV_DRAWCROSS_TIMES,
      XCV_DRAWCROSS_ASTERRISK)
•   画面全体に十字線(グリッド)を表示する
    – drawGrid
•   2枚の画像を連結する
    – connect( XCV_CONNECT_HORIZON,XCV_CONNECT_VERTICAL)
•   複数枚の画像を連結する
    – connectMulti
•   画像のヒストグラム,累積ヒストグラムを描画する
    – createHistogramGray, createHistogramRGB,
    – createAccHistogramGray, createAccHistogramRGB
          t A Hi t      G         t A Hi t      RGB
•   ボックス型のマスクを生成,セット,追加する
    – createBoxMask, setBoxMask, addBoxMask
逆引き関数,クラスリスト
             逆引き関数 クラスリスト
計算時間計測
• スコープ内の処理が終わるまでの時間を計測し,”hoge” 時間 sec と表示する
    { 
         CalcTime t(“hoge”, TIME_SEC);
                    ( g ,           );
         function();
    }
•   スコープ途中経過の計算結果を表示・取得する
    { 
         CalcTime t(“hoge”, TIME_SEC);
         function1();
         double t1 = t.getTime();
         t.show();
         function2();
         double t2 = t.getTime();
         t.show();
                ()
    }
逆引き関数,クラスリスト
         逆引き関数 クラスリスト
アルファブレンドによる画像の確認用関数
アルフ ブレンドによる画像の確認用関数
  二画像a,bをインタラクティブにαブレンド.
  a,bのチャネル数が違っても可.
  void guiAlphaBlend(const cv::Mat& image1, const cv::Mat& image2,cv::Mat& mask)
  – Ampは合成画像を線形倍する関数 dest = amp*src
  – alphaの式: (1‐α) * image1  + α*image2 = dest
  – Maskが未実装
逆引き関数,クラスリスト
            逆引き関数 クラスリスト
コンソール出力の代わりに画像にprintfする
  ンソ ル出力の代わりに画像に                     fする
ConsoleImage console(Size(640,480));
for(int i=0;i<10;i++)
{
    double val = i*i/100.0;
    console( %03d : %f  i val)
    console("%03d : %f “,i, val)
}
imshow(“console”, console.show);

色付きでコンソール出力
始めの引数に色を指定するだけ!
                                                          出力例
Console(CV_RGB(0,255/(i+1),25.5*i),"%03d : %f",i, val);
逆引き関数,クラスリスト
          逆引き関数 クラスリスト
Sinカーブのグラフをプロットする.
Plot p;
Plot p;
for(int i=‐100;i<100;i++)
{ 
     p add(i/50 0 sin(CV PI*i/50 0) 0);//最後の引数が 何番目のプロットかを表す
     p.add(i/50.0,sin(CV_PI i/50.0),0);//最後の引数が,何番目のプロットかを表す
     p.add(i/50.0,sin(CV_PI*(i+10)/50.0),1);
     p.add(i/50.0,sin(2.0*CV_PI*i/50.0),2);
}
p.plot(“sin”);//引数の名前でグラフを表示して無限ループで待つ.
//次は1本のsinのみ描く
p.clear();//入力した点を全てクリア
   l () //入力した点を全てクリア
p.setKeyName(“sin”,0);//データ0のラベルをsinと名付ける
p.setPlot(0,CV_RGB(255,0,0),XCV_PLOT_ASTERRISK);//赤のアスタリスク*で描画する
for(int i=‐100;i<100;i++)
f (i i 100 i 100 i )
{ 
     p.add(i/50.0,sin(CV_PI*i/50.0),0);
}
逆引き関数,クラスリスト
逆引き関数 クラスリスト
    カーソルの位置とその位置を表すグリッド




                      ラベル




     出力例
Plot画面のキーボードショートカット
 l ()メソ ドで呼び出したグラフ画面で有効なキ ボ ドシ      トカ ト
plot()メソッドで呼び出したグラフ画面で有効なキーボードショートカット
• q:    終了
• ?:    ヘルプ
• m: マウスオーバーの値を表示/非常時切り替え
• k:    ラベルを表示する位置の移動
• x:    xのスタートポイントを0に
• y:    yのスタートポイントを0に
• z:    XYのスタートポイントを0に
• r:    XY座標の設定リセット
• s:    画面を保存
• p:    デ タをgnuplot用に出力.ほぼ同じグラフを書くためのGnuplot用のコマン
        データをgnuplot用に出力.ほぼ同じグラフを書くためのGnuplot用のコマン
        ドも出力する.(gnuplotクラスと連携すると楽)
逆引き関数,クラスリスト
           逆引き関数 クラスリスト
       に  ンドを送り ける
Gnuplotにコマンドを送りつける

Gnuplot gp(“./pgnuplot.exe”);
        gp( ./pgnuplot.exe );
gp.cmd(“plot x”);


Plot.cpp内に眠っています.
imshowAnalysisCompare
•    枚の画像を詳しく比較する
    2枚の画像を詳しく比較する
    imshowと同じ用に使えることを目標に作成.imshowの代わりに
    imshowAnalysisCompare(”ウィンドウの名前”,入力1,入力2)とすれば良いだけ
    類似関数に下記二つ(比較機能を除外)
    類似関数        記       (比較機能を除外)
•   void imshowAnalysis(std::string winname, cv::Mat& src);
•   void imshowAnalysis(std::string winname, std::vector<cv::Mat>& s);
                   y (            g                                 )




                     表示例(imshowAnalysisCompare)
表示切り替えスイッチとalpha
        0 ブレンド は ブレンド値
      sw0:αブレンド:αはαブレンド値
      sw1: src1‐src2:αは関係ない
      sw2: threshold(|src1‐src2|): αは閾値

   分析のレベル:0→3の順に詳細に
   0:画像のみ
   1:画質の評価を追加
   2:XY信号を追加
   2 XY信号を追加
   3:ヒストグラムを追加


      色(0:B, 1:G, 2:R, 3:Y)

クリッピング領域
赤の十字を中心とする緑の領域内の信号が表示される
Sw = 0の時は,src1とsrc2の信号が重ねて表示
Sw = 1,2の時はsrc1‐src2の差分信号が表示
有効マスク割合,NBP使わない画素数
                     Yの情報




                     RGBの情報




BB:バウンディングボックスでマスクを作成
Thresh:差分の閾値でマスクを作成
Level0 SSIMなし, Level1 SSIM有り, Level2 全色計算
Show:マスクを可視化して表示するか否か
Shift y:y軸の上下
Shift y:y軸の上下
Clipy:y軸の拡大縮小
関数リファレンス
• 記入予定.定
• 今はtimerだけ記述
  今はtimerだけ記述.
Timer.h: class CalcTime
                     Timer h: class CalcTime
コンストラクタ
•  CalcTime(char*message="time ", int mode=TIME_MSEC ,bool isShow=true)
      –   message:        表示するメッセージ,
                          表示するメ セ ジ
      –   mode :          計測時間の単位(TIME_NSEC, TIME_MSEC, TIME_SEC, TIME_MIN, TIME_HOUR)
      –   isShow:         デストラクタ時に計算時間を表示する否か
メソッド
•  void start()
   void start()                       計測開始
•  void setMode(int mode)             計測時間の単位を設定
•  void setMessage(char* src)         出力メッセージを設定
•  void restart();                    計測時間を初期化してもう一度スタート
•  double getTime()
   do ble getTime()                   現在の経過時間を取得
•  void show();                       現在の経過時間を取得してコンソール出力
•  void show(char* message);          現在の経過時間を取得し,メッセージの設定してコンソール出力

備考
•  コンストラクタでstart(),デストラクタでshow()メソッドが呼び出されるので,宣言したスコープ内でかかった計算時間を簡単
   に計算可能
仕様例:
下記のように書くと, 関数testに要する計算時間がms単位で出力される.
下記のように書くと 関数t tに要する計算時間が 単位で出力される
    void test()
    {
    CalcTime t(“function”, TIME_MSEC);
    Hogehoge…
    H h
    }
mainに実装されたデモの解説
•   imageQualityTest();
     – 様 な劣化画像を
       様々な劣化画像をPSNR,SSIM,MSEで画質評価する,画質評価関数のテストです.
                             画質評価する 画質評価関数   ト す
•   plotTest();
     – Gnuplotライクなプロッタのテストです.Sinカーブ,直線のプロット例が示されています.
•   consoleTest();
     – 高速な関数だとあっという間に流れてしまうコンソール出力を,代わりにimshowで表示
       する とで見やすくするクラ のテ トです
       することで見やすくするクラスのテストです.median,bilateral filterによるデノイジングの
                                  ,                 よるデ イジングの
       デモを行っています.
•   analysisTest_color_gray();
     – 簡単な分析機能付きimshow関数のテストです 引数に取った画像のヒストグラム 平
       簡単な分析機能付きimshow関数のテストです.引数に取った画像のヒストグラム,平
       均分散,指定された領域の輝度値信号を各チャネルごとに出力します.
•   analysisTest_multipleimage();
     – 上記関数の複数枚入力の拡張です 複数枚の画像入力可能となり また各信号が重
       上記関数の複数枚入力の拡張です.複数枚の画像入力可能となり,また各信号が重
       ねあわされて出力されます.
•   analysisTest_compare();
     – 上記関数のより詳細に比較するための関数のテ ト す ある画像と比較画像を入力
       上記関数のより詳細に比較するための関数のテストです.ある画像と比較画像を入力
       すると,その画像品質の比較,ヒストグラムの比較,信号の比較,差分値の可視化,誤
       差の閾値処理の可視化などが行えます.
Plot表示例
コンソール画像出力表示例
分析比較関数の表示例
開発環境
• WindowsXP
• Visual Studio 2010
  Visual Studio 2010
• OpenCV svn ver 2.32くらい

More Related Content

What's hot

C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみようOsamu Masutani
 
30分で博士号がとれる画像処理講座
30分で博士号がとれる画像処理講座30分で博士号がとれる画像処理講座
30分で博士号がとれる画像処理講座Sakiyama Kei
 
第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)RCCSRENKEI
 
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能MITSUNARI Shigeo
 
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE) GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE) 智啓 出川
 
PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説弘毅 露崎
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Seiya Tokui
 
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算智啓 出川
 
2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第7回 総和計算(Atomic演算)
2015年度先端GPGPUシミュレーション工学特論 第7回 総和計算(Atomic演算)2015年度先端GPGPUシミュレーション工学特論 第7回 総和計算(Atomic演算)
2015年度先端GPGPUシミュレーション工学特論 第7回 総和計算(Atomic演算)智啓 出川
 
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)智啓 出川
 
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust) GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust) 智啓 出川
 
Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能Ryosuke Okuta
 
200625material naruse
200625material naruse200625material naruse
200625material naruseRCCSRENKEI
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜京大 マイコンクラブ
 
[チュートリアル講演]画像データを対象とする情報ハイディング〜JPEG画像を利用したハイディング〜
[チュートリアル講演]画像データを対象とする情報ハイディング〜JPEG画像を利用したハイディング〜[チュートリアル講演]画像データを対象とする情報ハイディング〜JPEG画像を利用したハイディング〜
[チュートリアル講演]画像データを対象とする情報ハイディング〜JPEG画像を利用したハイディング〜Michiharu Niimi
 
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)智啓 出川
 

What's hot (20)

C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみよう
 
30分で博士号がとれる画像処理講座
30分で博士号がとれる画像処理講座30分で博士号がとれる画像処理講座
30分で博士号がとれる画像処理講座
 
第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)
 
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
 
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE) GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
 
PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
 
2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算
 
2015年度先端GPGPUシミュレーション工学特論 第7回 総和計算(Atomic演算)
2015年度先端GPGPUシミュレーション工学特論 第7回 総和計算(Atomic演算)2015年度先端GPGPUシミュレーション工学特論 第7回 総和計算(Atomic演算)
2015年度先端GPGPUシミュレーション工学特論 第7回 総和計算(Atomic演算)
 
optimal Ate pairing
optimal Ate pairingoptimal Ate pairing
optimal Ate pairing
 
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
 
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust) GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
 
Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能
 
200625material naruse
200625material naruse200625material naruse
200625material naruse
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
[チュートリアル講演]画像データを対象とする情報ハイディング〜JPEG画像を利用したハイディング〜
[チュートリアル講演]画像データを対象とする情報ハイディング〜JPEG画像を利用したハイディング〜[チュートリアル講演]画像データを対象とする情報ハイディング〜JPEG画像を利用したハイディング〜
[チュートリアル講演]画像データを対象とする情報ハイディング〜JPEG画像を利用したハイディング〜
 
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)
 
More modern gpu
More modern gpuMore modern gpu
More modern gpu
 
20180728 halide-study
20180728 halide-study20180728 halide-study
20180728 halide-study
 

Viewers also liked

OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた徹 上野山
 
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...Norishige Fukushima
 
コンピューテーショナルフォトグラフィ
コンピューテーショナルフォトグラフィコンピューテーショナルフォトグラフィ
コンピューテーショナルフォトグラフィNorishige Fukushima
 
コンピュテーショナルフォトグラフティの基礎
コンピュテーショナルフォトグラフティの基礎コンピュテーショナルフォトグラフティの基礎
コンピュテーショナルフォトグラフティの基礎Norishige Fukushima
 
Popcntによるハミング距離計算
Popcntによるハミング距離計算Popcntによるハミング距離計算
Popcntによるハミング距離計算Norishige Fukushima
 
ガイデットフィルタとその周辺
ガイデットフィルタとその周辺ガイデットフィルタとその周辺
ガイデットフィルタとその周辺Norishige Fukushima
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...Norishige Fukushima
 
複数台のKinectV2の使い方
複数台のKinectV2の使い方複数台のKinectV2の使い方
複数台のKinectV2の使い方Norishige Fukushima
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 

Viewers also liked (14)

Libjpeg turboの使い方
Libjpeg turboの使い方Libjpeg turboの使い方
Libjpeg turboの使い方
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
 
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...
 
WebP入門
WebP入門WebP入門
WebP入門
 
コンピューテーショナルフォトグラフィ
コンピューテーショナルフォトグラフィコンピューテーショナルフォトグラフィ
コンピューテーショナルフォトグラフィ
 
コンピュテーショナルフォトグラフティの基礎
コンピュテーショナルフォトグラフティの基礎コンピュテーショナルフォトグラフティの基礎
コンピュテーショナルフォトグラフティの基礎
 
Popcntによるハミング距離計算
Popcntによるハミング距離計算Popcntによるハミング距離計算
Popcntによるハミング距離計算
 
ガイデットフィルタとその周辺
ガイデットフィルタとその周辺ガイデットフィルタとその周辺
ガイデットフィルタとその周辺
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...
 
OpenCVの基礎
OpenCVの基礎OpenCVの基礎
OpenCVの基礎
 
複数台のKinectV2の使い方
複数台のKinectV2の使い方複数台のKinectV2の使い方
複数台のKinectV2の使い方
 
OpenCV 3.0 on iOS
OpenCV 3.0 on iOSOpenCV 3.0 on iOS
OpenCV 3.0 on iOS
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 

Similar to OpenCVの拡張ユーティリティ関数群

Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriYuta Okamoto
 
Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用nmaro
 
Or seminar2011final
Or seminar2011finalOr seminar2011final
Or seminar2011finalMikio Kubo
 
さらに一歩踏み込んだCSS3の使い方!コツとポイントを理解して 楽しくサイトを彩る方法
さらに一歩踏み込んだCSS3の使い方!コツとポイントを理解して 楽しくサイトを彩る方法さらに一歩踏み込んだCSS3の使い方!コツとポイントを理解して 楽しくサイトを彩る方法
さらに一歩踏み込んだCSS3の使い方!コツとポイントを理解して 楽しくサイトを彩る方法rie nabesaka
 
3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!vi-iv
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!Yuichi Higuchi
 
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!notargs
 
静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3yaju88
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 Nobuaki Oshiro
 
第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016kyoto university
 
画像認識で物を見分ける
画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分けるKazuaki Tanida
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep LearningSatoshi imai
 
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz実務者のためのかんたんScalaz
実務者のためのかんたんScalazTomoharu ASAMI
 

Similar to OpenCVの拡張ユーティリティ関数群 (20)

Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
 
Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用
 
Gurobi python
Gurobi pythonGurobi python
Gurobi python
 
Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
 
Or seminar2011final
Or seminar2011finalOr seminar2011final
Or seminar2011final
 
さらに一歩踏み込んだCSS3の使い方!コツとポイントを理解して 楽しくサイトを彩る方法
さらに一歩踏み込んだCSS3の使い方!コツとポイントを理解して 楽しくサイトを彩る方法さらに一歩踏み込んだCSS3の使い方!コツとポイントを理解して 楽しくサイトを彩る方法
さらに一歩踏み込んだCSS3の使い方!コツとポイントを理解して 楽しくサイトを彩る方法
 
boost tour 1.48.0 all
boost tour 1.48.0 allboost tour 1.48.0 all
boost tour 1.48.0 all
 
Boost Tour 1.50.0 All
Boost Tour 1.50.0 AllBoost Tour 1.50.0 All
Boost Tour 1.50.0 All
 
3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!
 
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016
 
画像認識で物を見分ける
画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分ける
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
 
Enshu7
Enshu7Enshu7
Enshu7
 

Recently uploaded

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Recently uploaded (8)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

OpenCVの拡張ユーティリティ関数群

  • 1. OpenCVの 拡張ユーティリティ関数群 拡張 ティリティ関数群 名古屋工業大学 福嶋慶繁 Twitter:  @fukushima1981 コードダウンロード先: http://nma.web.nitech.ac.jp/fukushima/opencv/extra_opencv.html
  • 2. 実装関数,クラスのヘッダ 実装関数 クラスのヘッダ • A l i h Analysis.hpp – 下記全てのインクルードヘッダ • Timer.h – 時間計測用クラス • draw.h – 描 描画用の関数群 数群 • imageQuality.h – 画質評価用関数群 • plot.h – Gnuplotライクなプロッタークラス • util.h – ユーティリティ関数群
  • 3. 逆引き関数,クラスリスト 逆引き関数 クラスリスト 画像品質 • 画像品質MSEを計算する – getMSEY, getMSERGB • 画像品質PSNRを計算する – getPSNRY, getPSNRRGB • 画像品質SSIMを計算する – getSSIMY, getSSIMRGB • 画像品質DSSIMを計算する 画像品質 を計算する – getDSSIMY, getDSSIMRGB • 画像のエントロピーを計算する – double getEntropy double getEntropy • 備考:上記関数の引数は第3引数にマスクを取れる • 備考:カラー画像の戻り値はcv::Scalarで0:B, 1:G, 2:R, 3:(B+G+R)/3の値が返る • バウンディングボックス付きPSNR計算(画像の縁を無視する用,上記バウンディ ウンディングボックス付きPSNR計算(画像の縁を無視する用,上記 ウンディ ングボックスマスクを作ってPSNRを計算)MSE,SSIM,DSSIMも同様に実装 – getPSNRYBB, getPSNRRGBBB
  • 4. 逆引き関数,クラスリスト 逆引き関数 クラスリスト 描画 • 三角形,逆三角形を描画する – triangle, triangleinv • 十 十×*を描画する を描画する – drawCross( XCV_DRAWCROSS_PLUS, XCV_DRAWCROSS_TIMES, XCV_DRAWCROSS_ASTERRISK) • 画面全体に十字線(グリッド)を表示する – drawGrid • 2枚の画像を連結する – connect( XCV_CONNECT_HORIZON,XCV_CONNECT_VERTICAL) • 複数枚の画像を連結する – connectMulti • 画像のヒストグラム,累積ヒストグラムを描画する – createHistogramGray, createHistogramRGB, – createAccHistogramGray, createAccHistogramRGB t A Hi t G t A Hi t RGB • ボックス型のマスクを生成,セット,追加する – createBoxMask, setBoxMask, addBoxMask
  • 5. 逆引き関数,クラスリスト 逆引き関数 クラスリスト 計算時間計測 • スコープ内の処理が終わるまでの時間を計測し,”hoge” 時間 sec と表示する {  CalcTime t(“hoge”, TIME_SEC); ( g , ); function(); } • スコープ途中経過の計算結果を表示・取得する {  CalcTime t(“hoge”, TIME_SEC); function1(); double t1 = t.getTime(); t.show(); function2(); double t2 = t.getTime(); t.show(); () }
  • 6. 逆引き関数,クラスリスト 逆引き関数 クラスリスト アルファブレンドによる画像の確認用関数 アルフ ブレンドによる画像の確認用関数 二画像a,bをインタラクティブにαブレンド. a,bのチャネル数が違っても可. void guiAlphaBlend(const cv::Mat& image1, const cv::Mat& image2,cv::Mat& mask) – Ampは合成画像を線形倍する関数 dest = amp*src – alphaの式: (1‐α) * image1  + α*image2 = dest – Maskが未実装
  • 7. 逆引き関数,クラスリスト 逆引き関数 クラスリスト コンソール出力の代わりに画像にprintfする ンソ ル出力の代わりに画像に fする ConsoleImage console(Size(640,480)); for(int i=0;i<10;i++) { double val = i*i/100.0; console( %03d : %f  i val) console("%03d : %f “,i, val) } imshow(“console”, console.show); 色付きでコンソール出力 始めの引数に色を指定するだけ! 出力例 Console(CV_RGB(0,255/(i+1),25.5*i),"%03d : %f",i, val);
  • 8. 逆引き関数,クラスリスト 逆引き関数 クラスリスト Sinカーブのグラフをプロットする. Plot p; Plot p; for(int i=‐100;i<100;i++) {  p add(i/50 0 sin(CV PI*i/50 0) 0);//最後の引数が 何番目のプロットかを表す p.add(i/50.0,sin(CV_PI i/50.0),0);//最後の引数が,何番目のプロットかを表す p.add(i/50.0,sin(CV_PI*(i+10)/50.0),1); p.add(i/50.0,sin(2.0*CV_PI*i/50.0),2); } p.plot(“sin”);//引数の名前でグラフを表示して無限ループで待つ. //次は1本のsinのみ描く p.clear();//入力した点を全てクリア l () //入力した点を全てクリア p.setKeyName(“sin”,0);//データ0のラベルをsinと名付ける p.setPlot(0,CV_RGB(255,0,0),XCV_PLOT_ASTERRISK);//赤のアスタリスク*で描画する for(int i=‐100;i<100;i++) f (i i 100 i 100 i ) {  p.add(i/50.0,sin(CV_PI*i/50.0),0); }
  • 9. 逆引き関数,クラスリスト 逆引き関数 クラスリスト カーソルの位置とその位置を表すグリッド ラベル 出力例
  • 10. Plot画面のキーボードショートカット l ()メソ ドで呼び出したグラフ画面で有効なキ ボ ドシ トカ ト plot()メソッドで呼び出したグラフ画面で有効なキーボードショートカット • q: 終了 • ?: ヘルプ • m: マウスオーバーの値を表示/非常時切り替え • k: ラベルを表示する位置の移動 • x: xのスタートポイントを0に • y: yのスタートポイントを0に • z: XYのスタートポイントを0に • r: XY座標の設定リセット • s: 画面を保存 • p: デ タをgnuplot用に出力.ほぼ同じグラフを書くためのGnuplot用のコマン データをgnuplot用に出力.ほぼ同じグラフを書くためのGnuplot用のコマン ドも出力する.(gnuplotクラスと連携すると楽)
  • 11. 逆引き関数,クラスリスト 逆引き関数 クラスリスト に ンドを送り ける Gnuplotにコマンドを送りつける Gnuplot gp(“./pgnuplot.exe”); gp( ./pgnuplot.exe ); gp.cmd(“plot x”); Plot.cpp内に眠っています.
  • 12. imshowAnalysisCompare • 枚の画像を詳しく比較する 2枚の画像を詳しく比較する imshowと同じ用に使えることを目標に作成.imshowの代わりに imshowAnalysisCompare(”ウィンドウの名前”,入力1,入力2)とすれば良いだけ 類似関数に下記二つ(比較機能を除外) 類似関数 記 (比較機能を除外) • void imshowAnalysis(std::string winname, cv::Mat& src); • void imshowAnalysis(std::string winname, std::vector<cv::Mat>& s); y ( g ) 表示例(imshowAnalysisCompare)
  • 13. 表示切り替えスイッチとalpha 0 ブレンド は ブレンド値 sw0:αブレンド:αはαブレンド値 sw1: src1‐src2:αは関係ない sw2: threshold(|src1‐src2|): αは閾値 分析のレベル:0→3の順に詳細に 0:画像のみ 1:画質の評価を追加 2:XY信号を追加 2 XY信号を追加 3:ヒストグラムを追加 色(0:B, 1:G, 2:R, 3:Y) クリッピング領域 赤の十字を中心とする緑の領域内の信号が表示される Sw = 0の時は,src1とsrc2の信号が重ねて表示 Sw = 1,2の時はsrc1‐src2の差分信号が表示
  • 14. 有効マスク割合,NBP使わない画素数 Yの情報 RGBの情報 BB:バウンディングボックスでマスクを作成 Thresh:差分の閾値でマスクを作成 Level0 SSIMなし, Level1 SSIM有り, Level2 全色計算 Show:マスクを可視化して表示するか否か
  • 17. Timer.h: class CalcTime Timer h: class CalcTime コンストラクタ • CalcTime(char*message="time ", int mode=TIME_MSEC ,bool isShow=true) – message: 表示するメッセージ, 表示するメ セ ジ – mode : 計測時間の単位(TIME_NSEC, TIME_MSEC, TIME_SEC, TIME_MIN, TIME_HOUR) – isShow: デストラクタ時に計算時間を表示する否か メソッド • void start() void start() 計測開始 • void setMode(int mode) 計測時間の単位を設定 • void setMessage(char* src) 出力メッセージを設定 • void restart(); 計測時間を初期化してもう一度スタート • double getTime() do ble getTime() 現在の経過時間を取得 • void show(); 現在の経過時間を取得してコンソール出力 • void show(char* message); 現在の経過時間を取得し,メッセージの設定してコンソール出力 備考 • コンストラクタでstart(),デストラクタでshow()メソッドが呼び出されるので,宣言したスコープ内でかかった計算時間を簡単 に計算可能 仕様例: 下記のように書くと, 関数testに要する計算時間がms単位で出力される. 下記のように書くと 関数t tに要する計算時間が 単位で出力される void test() { CalcTime t(“function”, TIME_MSEC); Hogehoge… H h }
  • 18. mainに実装されたデモの解説 • imageQualityTest(); – 様 な劣化画像を 様々な劣化画像をPSNR,SSIM,MSEで画質評価する,画質評価関数のテストです. 画質評価する 画質評価関数 ト す • plotTest(); – Gnuplotライクなプロッタのテストです.Sinカーブ,直線のプロット例が示されています. • consoleTest(); – 高速な関数だとあっという間に流れてしまうコンソール出力を,代わりにimshowで表示 する とで見やすくするクラ のテ トです することで見やすくするクラスのテストです.median,bilateral filterによるデノイジングの , よるデ イジングの デモを行っています. • analysisTest_color_gray(); – 簡単な分析機能付きimshow関数のテストです 引数に取った画像のヒストグラム 平 簡単な分析機能付きimshow関数のテストです.引数に取った画像のヒストグラム,平 均分散,指定された領域の輝度値信号を各チャネルごとに出力します. • analysisTest_multipleimage(); – 上記関数の複数枚入力の拡張です 複数枚の画像入力可能となり また各信号が重 上記関数の複数枚入力の拡張です.複数枚の画像入力可能となり,また各信号が重 ねあわされて出力されます. • analysisTest_compare(); – 上記関数のより詳細に比較するための関数のテ ト す ある画像と比較画像を入力 上記関数のより詳細に比較するための関数のテストです.ある画像と比較画像を入力 すると,その画像品質の比較,ヒストグラムの比較,信号の比較,差分値の可視化,誤 差の閾値処理の可視化などが行えます.
  • 22. 開発環境 • WindowsXP • Visual Studio 2010 Visual Studio 2010 • OpenCV svn ver 2.32くらい