Google Earth Engine中的位運算
按位運算是編程中一個難點,同時也是在我們后續處理影像數據,尤其要使用影像自帶的波段比如QA波段經常會用到的一個東西。通過按位運算我們可以篩選出我們想要的各種質量規格的影像。
數值或字符在內存內都是被存儲為0和1的序列,每個0和1被稱之為1個位,比如說10進制數據2在計算機內被存儲為 0 0 1 0,當我們將內存內的位值改變之后,這個值代表的意義也就變了,比如把2前移動一位, 現在存儲單元里面變成了 0 1 0 0,這個值表示的是十進制的4,這也就是按位操作符的運算原理。
在GEE中以Landsat5,pixel_qa,8bit波段為例
這是GEE提供的官方去雲代碼
1 << 5表示:1零填充左位移,通過從右推入零向左位移,並使最左邊的位脫落,則在8bit表示中數字1變化如下
00 00 00 01 << 00 01 00 00
若pixel_qa表示有雲像元,則bit5為1,即pixel_qa像元值為00 01 00 00,通過bitwiseAnd( )可得到雲像元的掩膜,進而可以進行去雲操作
var cloudMaskL457 = function(image) {
var qa = image.select('pixel_qa');
// If the cloud bit (5) is set and the cloud confidence (7) is high
// or the cloud shadow bit is set (3), then it's a bad pixel.
var cloud = qa.bitwiseAnd(1 << 5)
.and(qa.bitwiseAnd(1 << 7))
.or(qa.bitwiseAnd(1 << 3));
// Remove edge pixels that don't occur in all bands
var mask2 = image.mask().reduce(ee.Reducer.min());
return image.updateMask(cloud.not()).updateMask(mask2);
};
JavaScript 位運算符
運算符 | 名稱 | 描述 |
---|---|---|
& | AND | 如果兩位都是 1 則設置每位為 1 |
| | OR | 如果兩位之一為 1 則設置每位為 1 |
^ | XOR | 如果兩位只有一位為 1 則設置每位為 1 |
~ | NOT | 反轉所有位 |
<< | 零填充左位移 | 通過從右推入零向左位移,並使最左邊的位脫落。 |
>> | 有符號右位移 | 通過從左推入最左位的拷貝來向右位移,並使最右邊的位脫落。 |
>>> | 零填充右位移 | 通過從左推入零來向右位移,並使最右邊的位脫落。 |