2016-05-12 13 views
1

イメージデータのx方向またはy方向に沿って累積合計を行いたいとします。 Matlibの "cumsum"のようなDMスクリプトの機能はありますか? ありがとう!例えばDMスクリプトで累積合計機能はありますか?

4×4画素の画素値の画像をx方向に沿って

1 2 3 4 
2 3 4 5 
3 4 5 6 
4 5 6 7 

累積和をもたらすであろう次のとおり

1 1+2=3 1+2+3=6 1+2+3+4=10 
2 5 9 14 
3 7 12 18 
4 9 15 22 
+0

誰もがMatlibと "cumsum"を知っているわけではありませんが、X方向に沿ってY方向に沿って投影された画像の合計が正しいと思いますか? – BmyGuest

+0

申し訳ありませんが、私は自分自身を十分にはっきりさせませんでした。 2D画像の累積の結果は依然として入力画像の同じサイズの画像である。各画素の値は、列/行方向に沿った左/上の全画素の合計である。 – w4m

+1

下記の修正された回答を参照してください。これはあなたが望むことをしますか? – BmyGuest

答えて

1

あり、これを達成するためのdiffernt方法があるが、潜在的に最速最も簡単なのは、画像の「完全にビンニングされた」バージョンを作成することです。あなたは、各ピクセルは左に、そのすべてのピクセルの合計を保持している結果として、2D画像をしたい場合は

image img := GetFrontImage() 
number sizeX, sizeY 
img.GetSize(sizeX, sizeY) 

image vSum = Rebin(img, 1, sizeY) 
image hSum = Rebin(img, sizeX, 1) 
vSum.SetName("vertical sum") 
vSum.ShowImage() 
hSum.SetName("horizontal sum") 
hSum.ShowImage() 

は、あなたがオフセットアップ画像を追加することによってこれを行うことができます。

また
image img := GetFrontImage() 
number sizeX, sizeY 
img.GetSize(sizeX, sizeY) 

image vCumSum := img.ImageClone() 
for(number x = 1; x<sizeX ; x++) 
{ 
    hCumSum += offset(img, -x, 0) 
} 
hCumSum.SetName("horizontal sum (cumulative)") 
hCumSum.ShowImage() 

image img := GetFrontImage() 
image hCumSum := 0 * img.ImageClone() 
hCumSum += img[icol,irow] + hCumSum[ icol - 1, irow ] 
hCumSum.SetName("horizontal sum (cumulative)") 
hCumSum.ShowImage() 
0

のように、組み込み変数を使用して式を作成することができます。投影を行う別の方法は、行列乗算による方法です。 2次元画像に1の1次元行列を掛けると、画像が1次元積分に投影されます。

number d0, d1 
image HProject, VProject, ones, img 
img:=getfrontImage() 
img.getSize(d0,d1) 
ones:=exprSize(1,d0,1) 
HProject=MatrixMultiply(img,ones) 
HProject.rotateLeft() 
HProject.showImage() 
ones:=exprSize(d1,1,1) 
VProject=MatrixMultiply(ones,img) 
VProject.showImage()