1

Androidの画像で円を見つけるためにハフ変換を使用しています。ある時点で、スタック オーバーフローが発生します。

12-03 16:18:20.999: I/dalvikvm-heap(21563): Grow heap (frag case) to 29.662MB for 2253716-byte allocation
12-03 16:18:21.014: I/dalvikvm(21563): threadid=11: stack overflow on call to Lorg/DTS/boltSizer/ImageProcessing/hystThresh;.hystConnect:VII
12-03 16:18:21.014: I/dalvikvm(21563):   method requires 44+20+12=76 bytes, fp is 0x5e949338 (56 left)
12-03 16:18:21.014: I/dalvikvm(21563):   expanding stack end (0x5e949300 to 0x5e949000)

エラーがスローされている場所は次のとおりです。

    private void hystConnect(int x, int y) {

        int value = 0;
        for (int x1=x-1;x1<=x+1;x1++) {
            for (int y1=y-1;y1<=y+1;y1++) {
                if ((x1 < width) & (y1 < height) & (x1 >= 0) & (y1 >= 0) & (x1 != x) & (y1 != y)) {
                    value = (input[y1*width+x1])  & 0xff;
                    if (value != 255) {
                        if (value >= lower) {
                            input[y1*width+x1] = 0xffffffff;
                            hystConnect(x1, y1);
                            ran++;

                        } 
                        else {
                            input[y1*width+x1] = 0xff000000;
                        }
                    }
                }
            }
        }

    }   

私はそれが何を意味するかを理解していると思いますが、どうすればこれを回避できますか. 実行中のコードがさらに必要な場合は、質問してください。

4

1 に答える 1

0

これから始めましょう:

Javaスタックサイズを増やす方法は?

Android:コールスタックサイズを増やす

最終的に、これは関数が大量のメモリを消費していることを意味し、より効率的なアルゴリズムを見つける必要があります。O(e^n)これは、関数を投稿して、それを高速化する方法を尋ねた場合と似ています。これがあなたの状況であるなら、あなたは使用するよりスペース効率の良いアルゴリズムを研究したいと思うでしょう。

于 2012-12-03T22:34:10.543 に答える