C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 25 を表示中)
■11081 / )  VB.NET)四次元配列を用いての2点間距離計測
□投稿者/ Flowen (1回)-(2007/12/06(Thu) 16:08:33)

分類:[.NET 全般] 

VB.NET2003を使い始めてまだ3ヶ月です。
文脈がわかりづらいかもしれませんが、何卒お願いします。

今回お尋ねしたいのは、4次元配列の宣言時にオーバーフローすることです。

VB.NET2003を用いて、ダーツなどに使われる的の円の検出を、ハフ変換で行っています。
一般的なハフ変換は要素を抽出して・・・という方法がありますが、今回は2点間の距離を求める方法で行います。
理論としては、ある画素p1と、別の画素p2との距離を計測し、距離が等しい点の数を集計して、
もっとも点の数が多かった距離と点をそれぞれ求める円の半径、中心点とする方法を用いています。

今回躓いて悩んでいるのが、2点間の距離を記録しておく領域についてです。
以下、2点間の距離を求めているプログラムを載せます。
---------------------------------------------------------------------------------

            Dim maxX = Edgebmp.Width - 1 'X座標の最大値
            Dim maxY = Edgebmp.Height - 1  'Y座標の最大値
      Dim D(maxX,maxY,maxX,maxY) As Double '----ここでオーバーフローエラーが発生----'

            '2点間の距離を四次元配列に保存
            For x As Integer = 0 To maxX
                For y As Integer = 0 To maxY
                    For i As Integer = 0 To maxX
                        For j As Integer = 0 To maxY
                          D(x,y,i,j)=Math.Sqrt(Math.Pow(x - i, 2) + Math.Pow(y - j, 2))
                        Next j
                    Next i
                Next y
            Next x
---補足------------------------------------------------------------------
EdgebmpとはBitmapで宣言した、Form上のPictureboxの画像を取り込んだものです。
D( A , B , C , D )について、
Aには求める円の仮定中心点x軸座標(プログラムで言えば、変数 x
Bには求める円の仮定中心点y軸座標(プログラムで言えば、変数 y
Cには求める円の仮定中心点x軸座標(プログラムで言えば、変数 i
Dには求める円の仮定中心点y軸座標(プログラムで言えば、変数 j
------------------------------------------------------------------------
四次元配列Dの宣言時、maxXとmaxYの大きさは画像に依存しますが、
画像の大きさが小さいものならばエラーがないときもあり、処理ができます。できないときもあります。
画像が大きいものはほとんど処理が通りません。

エラーメッセージは
「'System.OutOfMemoryException'のハンドルされていない例外が.exeで発生しました」
となります。

四次元の配列領域がでかすぎるのかと思い、条件わけをするなどして減らしたりしましたがうまくいきません。
エラーを出さずに処理を行う方法、または四次元に代わる方法をご教授いただけないでしょうか?

稚拙な文章で申し訳ないですが、よろしくお願いいたします


返信 編集キー/


管理者用

- Child Tree -