Cunoștințe, prelegere, operații de bază ale procesării imaginilor

2.4. Operatorul Sobelja

Operatorul Sobel este un operator diferențial discret care calculează valori aproximative ale derivatelor de comenzi diferite pentru funcția luminozității pixelilor [1]. Cel mai frecvent exemplu de utilizare practică este definirea marginilor (marginilor) obiectelor din imagine, adică puncte de schimbări ascuțite în luminozitate.

Acest operator se bazează pe convoluția unei imagini cu filtre întregi. În cel mai simplu caz, operatorul este construit prin calcularea convoluțiilor imaginii originale cu kernelul u. furnizarea calculului primelor instrumente derivate în direcții:

Acest operator este utilizat pentru a aproxima gradientul funcției de intensitate a pixelilor. Utilizarea operatorului face posibilă determinarea valorii aproximative a primului derivat parțial al modificării intensității în direcția orizontală, în direcția verticală. Pe baza acestor informații, puteți calcula amploarea gradientului pentru un pixel cu coordonate conform formulei. De asemenea, utilizând datele obținute, puteți determina direcția gradientului ca.

Biblioteca OpenCV susține calculul derivatelor 1, 2, 3 și mixte ale funcției de intensitate a pixelilor utilizând operatorul Sobel extins [7]. Mai jos este un prototip al funcției software corespunzătoare.

Să enumerăm parametrii de intrare ai funcției Sobel.

  • src este imaginea originală.
  • dst este imaginea care rezultă.
  • ddepth - adâncimea imaginii rezultate.
  • xorder este ordinea derivatului de-a lungul axei Ox.
  • yorder este ordinea derivatului de-a lungul axei Oy.
  • ksize este mărimea kernelului operator Sobel extins. Este nevoie de una dintre valorile 1, 3, 5 sau 7. În toate cazurile, kernelul are dimensiunea kSize x kSize. cu excepția situației în care kSize = 1. Cu kSize = 1, kernel-urile au o dimensiune de 3x1 sau 1x3, în esență fiind folosit un filtru Gaussian. Această valoare poate fi utilizată numai atunci când se calculează primul și al doilea derivat parțial de-a lungul axelor Ox și Oy. Implicit, kernel-ul are o dimensiune de 3x3. Rețineți că valoarea suplimentară a parametrului kSize = CV_SCHARR = -1 este furnizată suplimentar. care corespunde unui nucleu 3x3 al filtrului Scharr și poate oferi estimări mai precise ale derivaților în comparație cu operatorul Sobel:
  • scara este un parametru opțional care specifică factorul de scalare pentru valorile calculate ale derivatelor. În mod prestabilit, scalarea nu se aplică.
  • delta - un parametru opțional al variației intensității, este adăugat înainte de stocarea rezultatului în matricea dst.
  • borderType - parametru care definește metoda de adăugare a frontierei.
  • Iată un exemplu de selectare a marginilor dintr-o imagine, prin aplicarea operatorilor orizontali și verticali Sobel și prin media înclinării obținute de-a lungul direcțiilor. Rețineți că filtrul Gaussian (GaussianBlur) este aplicat mai întâi pentru a elimina zgomotul din imaginea originală și imaginea rezultată este convertită în tonuri de gri (cvtColor). Ca urmare a utilizării operatorului Sobel, sunt obținute imagini ale căror adâncime diferă de adâncimea imaginii originale, astfel încât, înainte de a continua operațiile, matricile convertite sunt convertite în număr întreg pe 8 biți (convertScaleAbs).

    Mai jos, în figură (Figura 7.7) este afișat rezultatul executării programului dat pe imaginea de test (Figura 7.2 din stânga).

    Cunoștințe, prelegere, operații de bază ale procesării imaginilor


    Fig. 7.7. Rezultatul aplicării operatorului Sobel în direcțiile orizontale și verticale, valoarea medie a proiecțiilor

    Evident, utilizarea operatorului orizontal Sobel face posibilă distingerea distinctă a nervurilor verticale, iar a celor verticale cu coaste orizontale. Un amestec al acestor gradienți cu coeficienți de greutate egali cu 0,5 asigură o aproximare a valorii de gradient. Pentru a face acest lucru, utilizați apelul funcției addWeighted.

    Rețineți că biblioteca OpenCV conține funcția getDerivKernels. care vă permite să obțineți kernel-ul pentru a calcula un anumit derivat parțial cu o anumită deschidere. O descriere detaliată a parametrilor acestei funcții poate fi găsită în documentație [7].