1

画像データの x または y 方向に沿って累積合計を実行したいと思います。Matlib の「cumsum」のような DM スクリプトに関数はありますか? ありがとう!

たとえば、4x4 ピクセルの画像の場合、ピクセル値は次のとおりです。

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

x 方向に沿った累積合計は次のようになります。

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 
4

3 に答える 3

1

これを実現するにはさまざまな方法がありますが、おそらく最速で最も簡単な方法は、画像の「完全にビニングされた」バージョンを作成することです。

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()

結果として 2D 画像が必要な場合は、各ピクセルが左側のすべてのピクセルの合計を保持している場合、オフセット画像を合計することでこれを行うことができます。

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()

GMS 3.4 は、速度が最適化された専用のコマンドも提供します。

RealImage Project( BasicImage img, Number axis )
RealImage Project( BasicImage img, Number axis, Boolean rescale )
void Project( BasicImage img, BasicImage dst, Number axis )
void Project( BasicImage img, BasicImage dst, Number axis, Boolean rescale )
于 2016-05-12T15:23:38.670 に答える
0

射影を行うもう 1 つの方法は、行列の乗算です。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()
于 2016-05-31T22:39:40.717 に答える