画像マトリックスを指定して、合計面積テーブルまたは積分画像を作成しようとしています。それが何であるかわからない人のために、ウィキペディアから:
合計面積テーブル (インテグラル イメージとも呼ばれます) は、グリッドの長方形サブセットの値の合計を迅速かつ効率的に生成するためのデータ構造およびアルゴリズムです。
言い換えれば、イメージ/マトリックス内の任意の長方形領域の値を一定時間で合計するために使用されます。
これを R に実装しようとしていますが、コードの実行に時間がかかりすぎているようです。
このリンクからの疑似コードは次のとおりです。in
は入力行列または画像で、intImg
は返されるものです
i=0 から w の場合 合計←0 j=0 から h の場合 合計 ← 合計 + in[i, j] i = 0 の場合 intImg[i, j] ←合計 そうしないと intImg[i, j] ← intImg[i − 1, j] + 和 終了する場合 終了 終了
そして、ここに私の実装があります
w = ncol(im) h = nrow(im) intImg = c(NA) 長さ (intImg) = w*h for(i in 1:w){ #x 合計 = 0; for(j in 1:h){ #y ind = ((j-1)*w)+ (i-1) + 1 #index 合計 = 合計 + im[ind] もし(私== 1){ intImg[ind] = 合計 }そうしないと{ intImg[ind] = intImg[ind-1]+合計 } } } intImg = マトリックス (intImg, h, w, byrow=T)
入力行列と出力行列の例:
ただし、480x640
マトリックスでは、これには約 4 秒かかります。論文では、それらの次元についてミリ秒単位でかかると説明しています。
ループやインデックス作成で非効率的なことをしていませんか?
C++ で書いて R でラップすることも考えましたが、C++ にはあまり詳しくありません。
ありがとうございました