5.10. Operasi bitwise¶
Operasi aritmatika pada halaman sebelumnya bekerja pada nilai piksel -- kecerahan integer atau kata warna yang dikemas. Operasi bitwise bekerja satu tingkat lebih rendah, pada bit individual di dalam nilai tersebut. Untuk citra biner, di mana setiap piksel hanya satu bit, operasi bitwise adalah aritmatika alaminya.
5.10.1. Keluarga bitwise¶
Kelas Image mengekspos kumpulan lengkap operasi bitwise dua-input:
b_and()-- AND bitwise.b_or()-- OR bitwise.b_xor()-- XOR eksklusif bitwise.b_nand()-- NOT-AND.b_nor()-- NOT-OR.b_xnor()-- NOT-XOR.
Setiap operasi berjalan per-bit pada setiap byte buffer kedua citra. Pada citra biner, di mana setiap byte menyimpan delapan piksel, operasi berjalan pada delapan piksel per byte yang diproses. Pada citra skala abu-abu atau warna, operasi berjalan pada setiap bit dari setiap saluran.
Atas: tabel kebenaran AND, OR, dan XOR -- semantik tingkat bit dari setiap operasi. Bawah: dua citra biner A dan B dan hasil dari A.b_and(B), di mana hasilnya hanya menjaga posisi yang aktif pada kedua input.¶
5.10.2. Menggabungkan mask¶
Penggunaan paling umum dari operasi ini adalah menggabungkan mask. Mask adalah citra biner yang menyatakan, posisi demi posisi, apakah suatu kondisi terpenuhi. Dua mask yang menggambarkan kondisi berbeda digabungkan menjadi mask tunggal yang menggambarkan kondisi gabungan melalui salah satu operasi bitwise:
b_and() menghasilkan mask yang posisinya aktif hanya ketika kedua mask input aktif pada posisi tersebut -- "and" alami dari dua kondisi. Menggabungkan mask latar depan dengan output dari pass ambang batas melalui b_and membatasi kecocokan ambang batas ke latar depan.
b_or() menghasilkan mask yang posisinya aktif kapan pun salah satu mask input aktif -- "or" alami. Melakukan OR pada dua output yang telah di-threshold menghasilkan mask tunggal yang mencakup apa pun yang cocok dengan salah satu dari dua rentang warna.
b_xor() menghasilkan mask yang posisinya aktif kapan pun tepat satu mask input aktif. Berguna untuk mendeteksi posisi di mana dua mask tidak sepakat -- posisi di mana output ambang batas berubah antara dua bingkai, selisih simetris antara dua mask referensi, dan sejenisnya.
Varian yang dinegasikan -- b_nand(), b_nor(), b_xnor() -- menghasilkan komplemen dari padanan yang tidak dinegasikan. Berguna ketika cara alami untuk menggambarkan kondisi adalah "tidak keduanya" atau "bukan keduanya" -- tidak umum, tetapi perlu diketahui keberadaannya agar negasi tidak harus disusun dengan mengikuti AND dengan invert() yang terpisah.
5.10.3. Operasi bitwise pada citra non-biner¶
Operasi bitwise juga berjalan pada citra skala abu-abu dan warna. Operasi ini paling berguna di sana ketika citra menyimpan konten mirip-biner -- bingkai skala abu-abu yang pikselnya semua 0 atau 255, bingkai RGB565 dengan hanya piksel hitam penuh dan putih penuh -- di mana AND, OR, dan XOR memberikan kombinasi yang sama seperti pada citra biner sejati. Untuk citra yang mencakup rentang nilai penuh, operasi aritmatika pada halaman sebelumnya biasanya lebih sesuai.