0

正方形 (mxn 次元) ではない画像があります。また、その次元は底が 2 ではありません (つまり、m not = 2^k & n not = 2^k)。以下を使用して、画像をより大きな正方形 (2 の次の累乗) に配置することで、これに対処しました。

int width = (int)Math.ceil(Math.pow(2, Math.log(img.width)/Math.log(2)));
int height = (int)Math.ceil(Math.pow(2, Math.log(img.height)/Math.log(2)));

どちらが最大の次元になるかに応じて、正方形を最大次元で描画するように設定します。つまり、次のようになります。

if (img.width > img.height) {
    // draw width * width square
}

if (img.height > img.width) {
    // draw height * height square
}

問題:

四分木は、すべての非画像ノードをツリーに格納しているため、完全に異なって見えます。これは明らかに想定される画像データ (最小/最大深度) とツリー全体の形状そのものに影響を与えます。私の質問は、これを効率的な方法で行っていますか?もしそうなら、画像に属さないデータを保存しないようにするにはどうすればよいですか? 正方形ではない画像を描画するのが最善の方法ではない場合、誰かが私を正しい方向に向けることができますか? Google のすべての記事は、私の目的には深すぎるようです。

4

2 に答える 2

0

おそらく、ツリーを (概念的な) 個々のピクセルで終了させる代わりに、p ピクセル x o ピクセルの小さなブロックを格納できます。一部の pxo では、側面ごとのブロック数が 2 のべき乗になります。これにより、構造に別の概念を導入することを犠牲にして、ツリーが適切に動作します。

于 2011-02-17T18:44:13.903 に答える
0

四分木の良いところは、同じデータの大きなチャンクを保存できることです。余分な空白の画像データは、全体的なストレージ サイズに少しだけ追加されるはずです。画像の実際の元の寸法を格納するデータ構造に、少し情報を追加することをお勧めします。四分木を逆シリアル化する場合、実際の寸法に基づいて余分な部分を「切り取って」オリジナルを作成できます。

于 2011-02-17T16:19:11.980 に答える