ビットマスクおよびマスク配列を処理するためのユーティリティ関数¶
これは一般的な使用です bit fields 例えば、単一のビットは、データ状態を特徴付けるために、いくつかの属性の整数変数を表す。例えば、ハッブル宇宙望遠鏡(HST)は、HST画像のデータ品質(DQ)を特徴付けるためにビットドメインアレイを使用する。例えば、以下のDQフィールド値を参照してください WFPC2 image data (see Table 3.3) そして WFC3 image data (see Table 3.3) それがそうです。ご覧のように様々な ビットマーク. この2つの楽器は大体違うからです
ビットフィールドは、緊密にカプセル化されたビットフラグのセットと考えることができる。Vbl.使用 masking 個々のビットの状態を“チェック”することができる.
ビットフィールド配列に対して実行される一般的な動作の1つは、例えばブール値をブール値にすることによって、ブーリアンマスクに変換することである。 True
(ブールマスクでは)非ゼロ値ビット領域(少なくとも1ビットが設定されたビット領域)に対応する要素まで 1
)または一般的に True
その対応するビットフィールドまでは 特定フィールド. (設定を)に設定する 1
)である。ビットフィールドのこのようなより複雑な分析は使用することができる ビットマスク そして先に述べた覆面行動。
♪the bitmask
モジュールは、ビット領域配列(すなわち、DQ配列)のブーリアンマスクへの変換を容易にする2つの関数を提供する。 bitfield_to_boolean_mask
入力ビット領域配列は、入力ビットマスク(または単一のビットフラグリスト)を使用してブールマスクに変換される interpret_bit_flags
ビットマスクは、単一のビットフラグの入力リストから作成される。
ブールマスクの作成¶
概要¶
bitfield_to_boolean_mask
デフォルトの場合、少なくとも1ビット開いているすべての入力ビット領域が“悪い”データ(すなわち画素)に対応すると仮定し、それらをブール値に変換する。 True
出力ブールマスクでは(そうでなければ出力ブールマスク値は False
)。
一般に、特定のアルゴリズムおよび場合には、いくつかのビットフラグは無視することができる。 bitfield_to_boolean_mask
以下の条件を満たすビットフラグリストを受け取る: デフォルトの場合は無視しなければならない ブーリアンマスクを作成する際の入力ビットフィールドに。
Fundamentally, by default, bitfield_to_boolean_mask
performs the following operation:
(1) boolean_mask = (bitfield & ~bit_mask) != 0
(ここだ) &
順番です。 and
同時に…。 ~
順番です。 not
操作する。)前の式では bit_mask
ビットフィールド内で無視される必要がある各ビットフラグから生成されるビットマスクである。
例を引く¶
位字段 |
ビットマスク |
~(ビットマスク) |
ビットドメイン&~(ビットマスク) |
ブールマスク |
---|---|---|---|---|
11011001(217) |
01010000(80) |
10101111(175) |
1000 1001(137.) |
本当です。 |
11011001(217) |
10101111(175) |
01010000(80) |
01010000(80) |
本当です。 |
00001001(9) |
01001001(73) |
10110110(182) |
0(0) |
誤り. |
00001001(9) |
0(0) |
1111111(255) |
00001001(9) |
本当です。 |
00001001(9) |
1111111(255) |
0(0) |
0(0) |
誤り. |
位置標識を指す¶
bitfield_to_boolean_mask
整数ビットマスクまたはビットフラグリストを受け入れる。ビットフラグリストは、ビットマスクに統合され、Pythonリストとして提供されます。 整数ビットフラグ値 コンマとして分離する(または +
分離)整数ビットフラグ値のリスト。第1の例におけるビットマスク Table 1 それがそうです。このような場合には ignore_flags
設定することができます
整数値ビットマスク80
単一の非ゼロ値を示すPythonリスト ビットフラグ値:
[16, 64]
A string of comma-separated bit flag values or mnemonic names:
'16,64'
,'CR,WARM'
A string of
+
-separated bit flag values or mnemonic names:'16+64'
,'CR+WARM'
例を引く¶
位置マークを指すには、以下の操作を実行してください。
>>> from astropy.nddata import bitmask
>>> import numpy as np
>>> bitmask.bitfield_to_boolean_mask(217, ignore_flags=80)
array(True...)
>>> bitmask.bitfield_to_boolean_mask(217, ignore_flags='16,64')
array(True...)
>>> bitmask.bitfield_to_boolean_mask(217, ignore_flags=[16, 64])
array(True...)
>>> bitmask.bitfield_to_boolean_mask(9, ignore_flags=[1, 8, 64])
array(False...)
>>> bitmask.bitfield_to_boolean_mask([9, 10, 73, 217], ignore_flags='1,8,64')
array([False, True, False, True]...)
出力マスクのタイプを指定することもできる:
>>> bitmask.bitfield_to_boolean_mask([9, 10, 73, 217], ignore_flags='1,8,64', dtype=np.uint8)
array([0, 1, 0, 1], dtype=uint8)
助記ビット·フラグ名リストを使用するためには、マッピング、すなわちマッピングを提供する必要がある BitFlagNameMap
これは、フラグ名を所定のフラグ値にマッピングするために使用されてもよい。一般に、これらの地図は、特定の機器をサポートする第三者ソフトウェアパッケージによって提供されるべきである。マッピング内の各ビットフラグはまた、フラグ値の後に文字列注釈を含むことができる。以下の例では、簡単なマスクマップを定義する。
>>> from astropy.nddata.bitmask import BitFlagNameMap
>>> class ST_DQ(BitFlagNameMap):
... CR = 1
... CLOUDY = 4
... RAINY = 8, 'Dome closed'
... HOT = 32
... DEAD = 64
>>> bitmask.bitfield_to_boolean_mask([9, 10, 73, 217], ignore_flags='CR,RAINY,DEAD',
... dtype=np.uint8, flag_name_map=ST_DQ)
array([0, 1, 0, 1], dtype=uint8)
ビット·フラグを使用した名前マッピング¶
作成中の助記ビットフラグ名の使用を可能にするために ブル型. マスクは,ビットフラグ名マッピングを用いる.これらのマッピングは、対応する整数値への助記ビットフラグ名のサイズを区別しない変換を実行する。
ビットフラグ名マッピングは BitFlagNameMap
2つの方法で構成したり直接サブクラス化したりすることができます BitFlagNameMap
例えば、
>>> from astropy.nddata.bitmask import BitFlagNameMap
>>> class ST_DQ(BitFlagNameMap):
... CR = 1
... CLOUDY = 4
... RAINY = 8
...
>>> class ST_CAM1_DQ(ST_DQ):
... HOT = 16
... DEAD = 32
または使用する extend_bit_flag_map
類工場:
>>> from astropy.nddata.bitmask import extend_bit_flag_map
>>> ST_DQ = extend_bit_flag_map('ST_DQ', CR=1, CLOUDY=4, RAINY=8)
>>> ST_CAM1_DQ = extend_bit_flag_map('ST_CAM1_DQ', ST_DQ, HOT=16, DEAD=32)
注釈
ビットフラグ値は、2の累乗の整数でなければならない。
構築されると,マッピングのビットフラグ値は修正,削除,追加できない.上に示した2つの方法のうちの1つのサブクラス化を使用することによって、または以下の形態のタプルリストを追加することによって、地図にフラグを追加することしかできない ('NAME', value)
クラス全員に。これは、元の地図に基づくサブクラスを作成しますが、付加的なマークを含む新しい地図クラスを作成します。
>>> ST_CAM1_DQ = ST_DQ + [('HOT', 16), ('DEAD', 32)]
上述したサブクラス化またはクラス工場例と同じマッピングが生成される。
ビットフラグ名マッピングを作成した後、以下のようにビットフラグ値にアクセスすることができます case-insensitive 辞書のクラス属性またはキー:
>>> ST_CAM1_DQ.cloudy
4
>>> ST_CAM1_DQ['Rainy']
8
ブーリアンマスクを作成するための式を修正する¶
bitfield_to_boolean_mask
ブーリアンマスクを作成するための式を修正するために使用することができるいくつかのパラメータが提供される。
逆位相マスク¶
時々、より便利なのは、それらのビットマーク、これらのビットマークを指定することができます。 考えなければならない ブールマスクを作成する際には,他のすべてのフラグを無視すべきである.
例を引く¶
はい。 bitfield_to_boolean_mask
specifying bit flags that must be considered when creating the boolean mask can be accomplished by setting the parameter flip_bits
to True
. This effectively modifies equation (1) 致す:
(2) boolean_mask = (bitfield & bit_mask) != 0
そのためというよりは
>>> bitmask.bitfield_to_boolean_mask([9, 10, 73, 217], ignore_flags=[1, 8, 64])
array([False, True, False, True]...)
以下と同様の結果が得られます。
>>> bitmask.bitfield_to_boolean_mask(
... [9, 10, 73, 217], ignore_flags=[2, 4, 16, 32, 128], flip_bits=True
... )
array([False, True, False, True]...)
しかし注意してください ignore_flags
コンマで区切られたビットフラグ値リストです flip_bits
設定できません True
あるいは…。 False
それがそうです。逆に,コンマで区切られたビットフラグ値の文字列リストからなるビットマスクのビットを反転させるためには,前に単一を加えることができる. ~
リストにあります
>>> bitmask.bitfield_to_boolean_mask([9, 10, 73, 217], ignore_flags='~2+4+16+32+128')
array([False, True, False, True]...)
反転ブーリアンマスク¶
他の場合、逆マスクが得られ、マスクにマークされたデータが変換されることがより便利である可能性がある。 False
ではなく True
:
(3) boolean_mask = (bitfield & ~bit_mask) == 0
これは変更することで good_mask_value
パラメータはそのデフォルト値から (False
)から True
それがそうです。
例を引く¶
反転マスクを取得し,そのマスクにマークされたデータを変換する. False
ではなく True
:
>>> bitmask.bitfield_to_boolean_mask([9, 10, 73, 217], ignore_flags=[1, 8, 64],
... good_mask_value=True)
array([ True, False, True, False]...)