5.12. Binarni prag¶
Mnogi cjevovodi za obradu slika svode se na pitanje o svakom pikselu: nalazi li se ova svjetlina unutar raspona koji znači „prednji plan”? Je li ova boja dovoljno bliska crvenoj da bude oznaka koju aplikacija prati? Je li ovaj piksel dio skupa kandidata na koji bi sljedeća faza cjevovoda trebala gledati? Primjena praga je operacija koja te upite pretvara u binarni odgovor na svakom položaju – uključeno ako se piksel podudara, isključeno ako se ne podudara – i svodi cijelu sliku na masku s kojom ostatak cjevovoda može raditi.
5.12.1. Metoda binary¶
Metoda binary() izvodi tu klasifikaciju na svakom pikselu u jednom pozivu. Uzima popis raspona pragova – uvjete koje piksel može zadovoljiti da bi se računao kao „uključen” – i prepisuje sliku tako da se svaki piksel koji se podudarao s barem jednim od raspona postavlja na maksimalnu vrijednost formata, a svaki koji se nije podudarao postavlja na nulu. Rezultat je binarna maska koju ostatak cjevovoda može izravno koristiti.
U najjednostavnijem obliku, popis pragova ima jedan raspon i poziv vraća masku piksela u tom rasponu:
img.binary([(120, 255)])
Oblik s popisom je ono što binary čini moćnim. Cjevovod koji želi pratiti dvije obojene oznake, ili raspon svjetline plus izolirani vrhunac zasićenja, prosljeđuje oba raspona u istom popisu i dobiva jednu izlaznu masku koja pokriva sva podudaranja.
Primjena praga pretvara sliku neprekinutih vrijednosti u binarnu masku: svaki piksel unutar raspona praga postaje maksimalna vrijednost formata, a svaki piksel izvan raspona postaje nula.¶
5.12.2. Tuple za sive tonove¶
Za sliku u sivim tonovima, svaki unos u popisu pragova je dvoelementni tuple (lo, hi) koji opisuje uključivi raspon svjetline. Pikseli s vrijednostima između lo i hi (uključivo) podudaraju se; sve izvan tog raspona ne podudara se. Prirodni obrasci su jednostavni:
(0, 60)podudara se s tamnim pikselima – sve od crne do duboko sive.(180, 255)podudara se sa svijetlim pikselima – sve od svijetlosive do bijele.(100, 160)podudara se sa srednje sivim pikselima – pojas u sredini raspona svjetline.
Redoslijed dviju vrijednosti unutar tuplea nije važan; metoda ih interno zamjenjuje ako je lo veći od hi, pa (60, 0) radi isto kao (0, 60).
5.12.3. LAB tuple za boju¶
Za sliku RGB565, svaki unos je šesteroelementni tuple (l_lo, l_hi, a_lo, a_hi, b_lo, b_hi) koji opisuje uključivi raspon u LAB prostoru boja, a ne izravno u crvenoj, zelenoj i plavoj. Pragovi su L (svjetlina), A (kromatska os od zelene do crvene) i B (kromatska os od plave do žute), pri čemu se svaki uspoređuje s vrijednošću piksela u tom kanalu.
Razlog za prolazak kroz LAB umjesto izravne primjene praga na RGB je svojstvo oko kojeg je LAB prostor boja osmišljen: LAB odvaja svjetlinu od krome. Dva piksela koji prikazuju istu boju, ali pri različitim svjetlinama, završavaju s različitim L vrijednostima, ali s otprilike istim A i B vrijednostima. To odvajanje omogućuje rasponima pragova da opišu boju prema njezinu položaju na A i B osima i ostave L raspon širom otvorenim kako bi prihvatili tu boju pri svakoj svjetlini od sjene do svjetla. Prag temeljen na RGB to ne može – svaka promjena osvjetljenja pomiče sve tri vrijednosti R, G, B odjednom, a pratitelj izgrađen na RGB pragovima raspada se prvi put kada oblak prijeđe preko sunca.
Praktični obrazac: odaberite A i B raspone koji opisuju boju koju aplikacija prati i ostavite L raspon širokim – često (0, 100) da prihvati bilo koju svjetlinu – osim ako aplikacija posebno želi primijeniti prag na svjetlinu uz boju.
Za tupleove s manje od šest vrijednosti, komponente koje nedostaju zadano poprimaju maksimalni raspon (nema ograničenja na toj osi). Dvoelementni tuple (l_lo, l_hi) u popisu pragova RGB565 stoga primjenjuje prag samo na svjetlinu i podudara se sa svakom bojom.
Napomena
Doista širom otvoren L raspon ima zamku na donjem kraju. Kako svjetlina pada prema nuli, svaka boja konvergira prema crnoj, pri čemu se A i B vrijednosti urušavaju prema nuli i postaju kojima dominira šum – pa tamni pikseli mogu odlutati u A i B raspone i biti praćeni kao ciljana boja. Ako se crna područja scene osvijetle kao podudaranja, povisite l_lo dok ne ispadnu.
5.12.4. Zastavice¶
Tri ključna argumenta upravljaju izlazom:
invert=Trueizvrće rezultat. Svaki piksel koji bi se bio podudario postaje nula, a svaki piksel koji bi bio nula postaje maksimalna vrijednost. Korisno kada je prirodan način opisivanja prednjeg plana onim što nije.zero=Truemijenja način rada: podudarajući pikseli postaju nula, a nepodudarajući pikseli zadržavaju svoje izvorne vrijednosti. Koristite ovo kada je cilj izbrisati podudarajuće piksele iz slike umjesto svođenja slike na njihovu binarnu masku.to_bitmap=Truevraća rezultat kao slikuBINARYumjesto prepisivanja postojećeg formata izvora. Rezultat od jednog bita po pikselu je ono što kasniji argumenti maske izravno prihvaćaju, a pretvorba često štedi pritisak na memoriju od nošenja maske u punom formatu.
Maska i ROI slijede istu konvenciju kao i ostatak sučelja: pravokutnik roi ograničava operaciju na podpodručje, a slika mask ograničava je na proizvoljan uzorak položaja.
5.12.5. Na mjestu prema zadanim postavkama¶
Kao i aritmetičke operacije, binary se prema zadanim postavkama izvodi na mjestu: pikseli izvorne slike prepisuju se binarnim izlazom, a izvorne vrijednosti nestaju nakon poziva. Oblik to_bitmap=True je alternativa kada se izvor mora sačuvati, a izlaz bi trebao biti svježe dodijeljena slika BINARY. Oblik copy=True također je prihvaćen za rezultat istog formata na novom međuspremniku.