5.12. Pragul binar¶
Multe fluxuri de procesare a imaginii se reduc la o întrebare despre fiecare pixel: este această luminozitate în intervalul care înseamnă „prim-plan”? Este această culoare suficient de apropiată de roșu pentru a fi marcatorul pe care aplicația îl urmărește? Face acest pixel parte din mulțimea de candidați pe care ar trebui să o examineze etapa următoare a fluxului? Aplicarea pragului este operația care transformă aceste întrebări într-un răspuns binar în fiecare poziție – activat dacă pixelul corespunde, dezactivat dacă nu – și reduce întreaga imagine la o mască asupra căreia poate lucra restul fluxului.
5.12.1. Metoda binary¶
Metoda binary() rulează acea clasificare pe fiecare pixel într-un singur apel. Primește o listă de intervale de prag – condițiile pe care un pixel le poate îndeplini pentru a conta ca „activat” – și rescrie imaginea astfel încât fiecare pixel care a corespuns cel puțin unuia dintre intervale este setat la valoarea maximă a formatului, iar fiecare pixel care nu a corespuns este setat la zero. Rezultatul este masca binară pe care restul fluxului o poate folosi direct.
În forma cea mai simplă, lista de praguri are un singur interval, iar apelul returnează o mască a pixelilor din acel interval:
img.binary([(120, 255)])
Forma de listă este cea care face binary puternic. Un flux care vrea să urmărească doi marcatori colorați, sau un interval de luminozitate plus un vârf izolat de saturație, transmite ambele intervale în aceeași listă și obține o singură mască de ieșire care acoperă toate corespondențele.
Aplicarea pragului transformă o imagine cu valori continue într-o mască binară: fiecare pixel din interiorul intervalului de prag devine valoarea maximă a formatului, fiecare pixel din afară devine zero.¶
5.12.2. Tuplul în tonuri de gri¶
Pentru o imagine în tonuri de gri, fiecare intrare din lista de praguri este un tuplu cu două elemente (lo, hi) care descrie un interval de luminozitate inclusiv. Pixelii cu valori între lo și hi (inclusiv) corespund; tot ce este în afara acelui interval nu corespunde. Tiparele naturale sunt simple:
(0, 60)corespunde pixelilor întunecați – tot ce este de la negru până la gri închis.(180, 255)corespunde pixelilor luminoși – tot ce este de la gri deschis până la alb.(100, 160)corespunde pixelilor gri-mediu – o bandă din mijlocul intervalului de luminozitate.
Ordinea celor două valori din interiorul unui tuplu nu contează; metoda le interschimbă intern dacă lo este mai mare decât hi, așa că (60, 0) funcționează la fel ca (0, 60).
5.12.3. Tuplul LAB pentru culoare¶
Pentru o imagine RGB565, fiecare intrare este un tuplu cu șase elemente (l_lo, l_hi, a_lo, a_hi, b_lo, b_hi) care descrie un interval inclusiv în spațiul de culoare LAB mai degrabă decât direct în roșu, verde și albastru. Pragurile sunt L (luminozitate), A (axa cromatică verde-roșu) și B (axa cromatică albastru-galben), fiecare comparată cu valoarea pixelului pe acel canal.
Motivul pentru a trece prin LAB în loc de a aplica pragul direct pe RGB este proprietatea în jurul căreia a fost conceput spațiul de culoare LAB: LAB separă luminozitatea de cromă. Doi pixeli care arată aceeași culoare dar la luminozități diferite ajung la valori L diferite, dar la valori A și B aproximativ egale. Acea separare permite intervalelor de prag să descrie o culoare prin poziția sa pe axele A și B și să lase intervalul L complet deschis pentru a accepta acea culoare la orice luminozitate, de la umbră până la lumină puternică. Un prag bazat pe RGB nu poate face asta – orice modificare a iluminării deplasează toate cele trei valori R, G, B deodată, iar un sistem de urmărire construit pe praguri RGB se prăbușește prima dată când un nor trece prin fața soarelui.
Tiparul practic: alege intervalele A și B care descriu culoarea pe care aplicația o urmărește și lasă intervalul L larg – adesea (0, 100) pentru a accepta orice luminozitate – cu excepția cazului în care aplicația dorește în mod specific să aplice pragul atât pe luminozitate cât și pe culoare.
Pentru tupluri cu mai puțin de șase valori, componentele lipsă au ca valoare implicită intervalul maxim (nicio constrângere pe acea axă). Un tuplu cu două elemente (l_lo, l_hi) într-o listă de praguri RGB565 aplică prin urmare pragul doar pe luminozitate și corespunde oricărei culori.
Notă
Un interval L cu adevărat complet deschis are o capcană la capătul de jos. Pe măsură ce luminozitatea scade spre zero, fiecare culoare converge spre negru, valorile A și B prăbușindu-se spre zero și devenind dominate de zgomot – așa că pixelii întunecați pot devia în intervalele A și B și pot fi urmăriți ca fiind culoarea-țintă. Dacă regiunile negre ale scenei apar ca potriviri, mărește l_lo până când acestea dispar.
5.12.4. Indicatori¶
Trei argumente cu cuvânt-cheie controlează ieșirea:
invert=Trueinversează rezultatul. Fiecare pixel care ar fi corespuns devine zero, iar fiecare pixel care ar fi fost zero devine valoarea maximă. Util când modul natural de a descrie prim-planul este prin ceea ce nu este.zero=Trueschimbă modul de operare: pixelii care corespund sunt setați la zero, iar pixelii care nu corespund își păstrează valorile originale. Folosește-l când scopul este să ștergi pixelii care corespund din imagine în loc să reduci imaginea la o mască binară a acestora.to_bitmap=Truereturnează rezultatul ca imagineBINARYîn loc să suprascrie formatul existent al sursei. Rezultatul de un bit per pixel este ceea ce acceptă direct argumentele de mască ulterioare, iar conversia economisește adesea presiunea de memorie a transportării unei măști în format complet.
Masca și ROI urmează aceeași convenție ca restul interfeței: un dreptunghi roi restrânge operația la o subzonă, o imagine mask o restrânge la un tipar arbitrar de poziții.
5.12.5. Implicit, pe loc¶
La fel ca operațiile aritmetice, binary rulează implicit pe loc: pixelii imaginii sursă sunt suprascriși cu ieșirea binară, iar valorile originale dispar după apel. Forma to_bitmap=True este alternativa atunci când sursa trebuie păstrată și ieșirea trebuie să fie o imagine BINARY proaspăt alocată. Forma copy=True este de asemenea acceptată pentru un rezultat în același format pe un tampon nou.