2

私は、各画像のビットマスクとして長い値を使用し、ピクセルが除外されていない場合は各ビットを1に設定し(ほとんどの場合は透過的)、それ以外の場合は0に設定する画像衝突メカニズムに取り組んでいます。ビットマスクを1と0としてテキストファイルに書き込むテストメソッドを作成しました。理論的には、画像は行ごとに読み取られるため、1と0は画像自体に似ているはずです。

それは本当に私が得たものではありません。ビット割り当てコードまたは印刷コードに問題がありますか?それともそのように見えるはずですか?

画像解析

    int[] data = ColorUtils.getImageData(img);
    bounds = new Rectangle(img.getWidth(), img.getHeight());
    int wt = (int) bounds.getWidth();
    int ht = (int) bounds.getHeight();
    bitmasks = new long[ht];
    for(int y = 0; y < ht; y++) {
        long bitmask = 0;
        for(int x = 0; x < wt; x++) {
            if(data[x + y * wt] != excludedColor)
                bitmask = (bitmask << 1) + 1;
            else
                bitmask = bitmask << 1;
        }
        bitmasks[y] = bitmask;
    }

ファイル印刷

    PrintWriter pw =  null;
    try {
        pw = new PrintWriter(new File("/home/brian/Desktop/imageModel.txt"));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        return;
    }
    for(int y = 0; y < bounds.getHeight(); y++) {
        long bitmask = bitmasks[y];
        for(int x = 0; x < bounds.getWidth(); x++) {
            pw.print(String.valueOf((bitmask >> (x + y * (int) bounds.getWidth())) & 1));
        }
        pw.println();
        pw.println();
    }
    pw.close();

画像:

解析中のテスト画像

作成されたテキストファイル: 表示

4

1 に答える 1

1

画像の解析は、実際には行全体をオーバーフローせずにlongに格納できると仮定すると(また、すべてのチャネルを正しく考慮してデータを処理していると仮定すると、コードでは間違っています)、ほとんど問題ないように見えます。しかし、「ファイル印刷」では、それがどのように正しいのかわかりません。行ごとに1つ格納bitmaskしているので、インデックスを付けることができればbitmask[width - 1]、特定の行の最初の列bitmask[width - 2]、2番目の列...bitmask[0]を表し、その行の最後の列を表します。したがって、開梱段階で2つのことを修正する必要があります。1)x=width-1から0までのループ。2)次に、を実行して解凍し((mask >> x) & 1)ます。

画像のサイズを50x50に変更し、アルファ値<= 2が背景を表すことを考慮した後、次のように取得します。

00000000000000000111111111111111000000000000000000
00000000000000011111111111111111110000000000000000
00000000000001111111111111111111111100000000000000
00000000000011111111111111111111111111000000000000
00000000001111111111111111111111111111100000000000
00000000011111111111111111111111111111110000000000
00000000111111111111111111111111111111111000000000
00000001111111111111111111111111111111111100000000
00000011111111111111111111111111111111111110000000
00000011111111111111111111111111111111111111000000
00000111111111111111111111111111111111111111000000
00001111111111111111111111111111111111111111100000
00001111111111111111111111111111111111111111100000
00011111111111111111111111111111111111111111110000
00011111111111111111111111111111111111111111110000
00111111111111111111111111111111111111111111111000
00111111111111111111111111111111111111111111111000
00111111111111111111111111111111111111111111111000
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
01111111111111111111111111111111111111111111111100
00111111111111111111111111111111111111111111111100
00111111111111111111111111111111111111111111111000
00111111111111111111111111111111111111111111111000
00011111111111111111111111111111111111111111111000
00011111111111111111111111111111111111111111110000
00011111111111111111111111111111111111111111110000
00001111111111111111111111111111111111111111100000
00000111111111111111111111111111111111111111100000
00000111111111111111111111111111111111111111000000
00000011111111111111111111111111111111111110000000
00000001111111111111111111111111111111111100000000
00000001111111111111111111111111111111111100000000
00000000111111111111111111111111111111111000000000
00000000011111111111111111111111111111110000000000
00000000000111111111111111111111111111000000000000
00000000000011111111111111111111111110000000000000
00000000000000111111111111111111111000000000000000
00000000000000001111111111111111100000000000000000
00000000000000000011111111111110000000000000000000
于 2013-01-19T23:46:46.267 に答える