ビットリバースとビットリバーススワップ
2 Lの長さのシーケンスがあるとします。 また、このシーケンスの各要素のインデックスは0、1、2、...、2 L -1です。 バイナリ表現では、インデックスは(b L-1 b L-2 ... b 1 b 0 ) 2のようになります。 このインデックスの逆ビットは(b 0 b 1 ... b L-2 b L-1 ) 2のようになります。
たとえば、シーケンスa、b、c、d、e、f、g、hが与えられたとします。 このシーケンスのインデックス
番号があります:0、1、2、3、4、5、6、7。 またはバイナリ表現:0b000、0b001、0b010、0b011、0b100、0b101、0b110、0b111。 まず、2進数の最大長(L = 3)を考慮して、各番号のビットを逆順に並べ替える必要があります:0b000、0b100、0b010、0b110、0b001、0b101、0b011、0b111(10進数:0、4、2、6、1、1 5、3、7)。次に、元のシーケンスの要素は、取得したインデックスに従って再配置されます:a、e、c、g、b、f、d、h。 したがって、シーケンスはビット反転順序で再配置されました。 将来的には、隣接ペアae、cg、bf、dhが元のシーケンスの異なる半分に位置する要素で構成されていることに注意してください。
2次元画像を変換する必要がある場合は、各ピクセルの両方の座標のビットを再配置するだけです。
繰り返しになりますが、ビット反転置換は、2の累乗に正確に等しい長さのシーケンス(つまり、4、8、16、32など)でのみ実行できることに注意してください。 )
理論から実践に移ります。
グローバルはローカルになり、ローカルはグローバルになりますか?
1.元の画像は512x512ピクセルです。
2.実験のために、背景は、最小ピッチで市松模様の2色のセルで塗りつぶされています
3.画像ピクセルNo. 2のビット反転順列(エンコード)
すぐに印象的なのは、チェスの背景の最大のステップです。 そして、黒い点からわかるように、文字「A」は画像全体ににじみました。 ご覧になると、4ピクセルの正方形は、元の画像の各4分の1ピクセルに対応し、かなり混chaとした順序になっています。 シーケンスのビット反転置換の同じ動作が最初に説明されました。
大まかに言えば、画像ピクセルのビット反転置換により、大きな要素は小さくなり、小さく大きくなると結論付けることができます。 しかし、これは常にそうではありません。 たとえば、 Morse-Thueシーケンスは、いくつが再配列しないか、常にそれ自体になります。 これは、このシーケンスの要素を計算するときに、インデックスのバイナリ表現の単位の合計が使用され、ビットの反転が単位の合計に影響しないためです。
ここで、エンコードされたイメージNo. 3のビット反転順列を作成すると、元のイメージNo. 2が得られます。 ビットが逆順であるインデックスビットの逆順は、元のビット順のインデックスを与えます。
擬似ホログラフィー
ホログラフィの特性の1つは、ホログラムの一部が破損すると、その中に画像全体が表示されることです。 ここではほとんど同じですが、ピースの長さは2の累乗に等しく、ピースのサイズの倍数の位置から開始する必要があります。
4.エンコードされたイメージNo. 3のすべての8x8正方形のビット反転順列
5.エンコードされた画像のサイズが32×32のすべての正方形のビット反転順列3
正方形のサイズも正方形の位置も、元の画像の輪郭「A」に影響を与えないことは注目に値します。 当然、各正方形の解像度は元の画像の解像度よりも低くなります。
ダメージ
実験[ 1、2、3 ]と同様に、画像領域を削除する実験を実行します。
6.エンコードされた画像No. 3の大部分が塗りつぶされます(言い換えると、低周波ノイズが画像に追加されます)
7.損傷した画像のビット反転順列6
低周波ノイズがどのように高周波ノイズに変換されたかがわかります。
8.復元されたイメージ7の32x32の拡大フラグメント
ノイズが混入した場所のチェスのセルを見ることができます。
9.破損した画像No. 6のすべての32x32正方形のビット反転順列
「A」の形状が最小の断片からどのように復元されるかは非常に顕著です。
実用化
この置換は、ビット反転インターリービングと呼ばれる通信で使用されます。メッセージ文字の置換により、隣接するすべての文字を分散できます。 次に、エンコードされたメッセージの送信中に連続する複数の文字が消えた場合(バーストエラー)、復元されたメッセージには、メッセージ全体に散在する単一文字の損失が含まれます。 一部のエラー修正アルゴリズムは、連続する複数のエラーよりも単一のエラーをより適切に修正することを考慮すると、これにより、より簡単に元の情報を復元できます。 実際には、メッセージ2 Lのサイズはあまり便利ではないため、いわゆる 剪定されたビット反転インターリーブ 。
まとめ
ご覧のとおり、ビット反転順列を使用すると、2つのホログラフィックプロパティが満たされます。
- 有効なピースのセットから任意のピースの低解像度でイメージを復元します。
- エンコードされた画像の大部分が欠落している場合、元の画像の輪郭を復元します。
これらの特性は、低周波画像で特に顕著に現れます。
もちろん、さまざまな種類の画像、ノイズ、損傷を含む多くの例を挙げることができますが、ビット反転画像の並べ替えは、追加情報を追加しない単なるピクセルの並べ替えです。 エンコードされた画像で失われるピクセル数と同じ数のピクセルが再構築された画像で失われます。 一般的に、どのような種類のピクセルがノイズになるかは不明です。
実装
誰でも自分で実験できます。 このために、Pythonスクリプト( GitHub 、 DropBox )を投稿しました。