5.10. Bitové operace¶
Aritmetické operace z předchozí stránky pracují s hodnotami pixelů – celočíselnými jasy nebo zabalenými barevnými slovy. Bitové operace pracují o úroveň níže, na jednotlivých bitech uvnitř těchto hodnot. Pro binární obrazy, kde je každý pixel pouze jeden bit, jsou bitové operace přirozenou aritmetikou.
5.10.1. Rodina bitových operací¶
Třída Image zpřístupňuje úplnou sadu bitových operací se dvěma vstupy:
b_and()– bitové AND.b_or()– bitové OR.b_xor()– bitové exkluzivní OR.b_nand()– NOT-AND.b_nor()– NOT-OR.b_xnor()– NOT-XOR.
Každá operuje po bitech na každém bajtu bufferů obou obrazů. Na binárním obraze, kde každý bajt drží osm pixelů, operace běží na osmi pixelech na zpracovaný bajt. Na obraze ve stupních šedi nebo barevném běží na každém bitu každého kanálu.
Nahoře: pravdivostní tabulky AND, OR a XOR – bitová sémantika každé operace. Dole: dva binární obrazy A a B a výsledek A.b_and(B), kde výsledek ponechává jen ty pozice, které byly zapnuté v obou vstupech.¶
5.10.2. Kombinování masek¶
Naprosto nejčastějším použitím těchto operací je kombinování masek. Maska je binární obraz, který říká, pozici po pozici, zda je splněna nějaká podmínka. Dvě masky popisující různé podmínky se zkombinují do jediné masky popisující složenou podmínku prostřednictvím jedné z bitových operací:
b_and() vytvoří masku, jejíž pozice jsou zapnuté jen tehdy, když byly na dané pozici zapnuté obě vstupní masky – přirozené „a“ dvou podmínek. Kombinace masky popředí s výstupem prahování pomocí b_and omezí shody prahu na popředí.
b_or() vytvoří masku, jejíž pozice jsou zapnuté, kdykoli byla zapnutá kterákoli vstupní maska – přirozené „nebo“. Operace OR dvou prahovaných výstupů dohromady vytvoří jedinou masku pokrývající cokoli, co odpovídalo kterémukoli ze dvou rozsahů barev.
b_xor() vytvoří masku, jejíž pozice jsou zapnuté, kdykoli byla zapnutá právě jedna vstupní maska. Užitečné pro detekci pozic, kde se dvě masky neshodují – pozice, kde se výstup prahování změnil mezi dvěma snímky, symetrický rozdíl mezi dvěma referenčními maskami, něco takového.
Negované varianty – b_nand(), b_nor(), b_xnor() – vytvářejí doplněk svých nenegovaných protějšků. Jsou užitečné, když je přirozený způsob, jak popsat podmínku, „ani jedno z těchto“ nebo „ne obojí“ – ne časté, ale stojí za to vědět, že existují, aby se negace nemusela skládat tak, že po AND následuje samostatný invert().
5.10.3. Bitové operace na nebinárních obrazech¶
Bitové operace běží také na obrazech ve stupních šedi a barevných. Tam jsou nejužitečnější, když obraz drží binárně podobný obsah – snímek ve stupních šedi, jehož pixely jsou všechny 0 nebo 255, snímek RGB565 pouze s plně černými a plně bílými pixely – kde AND, OR a XOR dávají stejné kombinace jako na skutečném binárním obraze. Pro obrazy pokrývající celý rozsah hodnot jsou aritmetické operace z předchozí stránky obvykle vhodnější.