3

私は画像処理アプリケーションに取り組んでおり、特定のウィンドウからランダムなサブウィンドウを生成したいという問題があります。たとえば、5x5 (ピクセル) ウィンドウが与えられた場合、指定された幅と高さで x、y の指定された場所にサブウィンドウを生成したいと思います。現在、サブウィンドウの幅と高さは常に互いに等しいと想定しても問題ありません。ただし、元のウィンドウにはこの制約がありません。

現在、元のウィンドウの内側に収まることがわかっているサブウィンドウのランダムな幅/高さを生成しています。次に、そのサブウィンドウが元のウィンドウ内に収まるようにする有効な x、y 座標を生成します。現在のアプローチの問題点は、ウィンドウが小さいほど多く発生する可能性が高いという事実を考慮していないことです。サブウィンドウの幅/高さのランダムな寸法を選択することで、幅と高さの分布が均一であると想定していますが、実際にはそうではありません。

たとえば、5x5 のウィンドウがあるとします。可能な 1x1 サブウィンドウは 25 個、2x2 ウィンドウは 16 個、3x3 ウィンドウは 9 個、4x4 ウィンドウは 4 個、5x5 ウィンドウは 1 個です。したがって、確率が約 0.45 (25/(25+16+9+4+1)) の 1x1 ウィンドウ、確率が約 0.29 の 2x2 ウィンドウなどを選択する必要があります。

可能なすべてのウィンドウをブルート フォースで評価し、リストから 1 つを選択するだけで、適切なディストリビューションからそのような許容可能なサブウィンドウをすばやく生成する方法はわかりませんが、これを行うためのよりスマートなアプローチがあると確信しています。どこから始めればよいかわかりません。

ありがとう!

4

2 に答える 2

3

n∙nウィンドウの場合、サイズm∙mの(n-m+1)²サブウィンドウがあります。

一般に、x∙yウィンドウの場合、サイズm∙mの(x-m+1)(y-m+1)サブウィンドウがあります。

推奨されるアルゴリズム:

  • mについて、サブウィンドウの数を計算します。これらの値の配列を作成します。
  • 配列内の値を合計し、この範囲内で均一に分散された整数を生成します
  • この整数を関連するサブウィンドウ サイズにマップします (値マップまたは範囲マップを使用)

編集:

実際にはもっとうまくやれます。

  • 幅 x の 1 つのサブウィンドウ、幅(x-1) の 2 つのサブウィンドウ、...、幅(x-(x-1)) のxサブウィンドウがあります。合計で、(1+2+3+...+x)= x(x+1)/2の幅/水平位置の可能なオプションがあります。
  • 範囲[1, x(x+1)/2]の一様分布整数rを生成します。
  • 次の式を使用して幅を決定します: w= x-floor( sqrt(2r-1.75)-0.5 )

高さについても同じです。

于 2012-12-04T16:58:07.663 に答える
1

私のシミュレーションはそれが近いものであり、おそらく欠陥が何であるかを解明できることを示しているので、これは正しくありませんが、ここに置きます。修正できない場合は削除します:


1) Generate an Px discretely uninform on 1 to X
2) Generate a Py discretely uniform on 1 to Y
3) let Rx = X - Px + 1, let Ry = Y - Py + 1
4) Let A = Rx * Ry - the remaining area we can fill
5) Generate S discretely uniform on 1:min(Rx,Ry)

(Px,Py), (Px+S,Py),(Px,Py+S),(Px+S,Py+S) would define the coordinates of the region

基本的に、サブリージョンの左上隅を選択し、サブリージョンがRx、Ryの位置から始まる場合は、許可ベールの正方形のサブリージョンのサイズをランダムに選択します。サブリージョンサイズの分布は適切に減少する形をしていますが、急すぎます(5x5の100,000回の反復)。

1 2 3 4 5
0.60427 0.24523 0.10356 0.03875 0.00819
于 2012-12-04T19:28:13.020 に答える