Čiščenje slik je dragocena tehnika, ne glede na to, ali gre za nadaljnjo analizo ali preprosto za to, da vaše fotografije izgledajo kar najbolje.
Izboljšanje slike je ključno orodje za računalniški vid in aplikacije za urejanje slik. Njegov namen je izboljšati kakovost slik.
Z izboljšanjem kakovosti slike je mogoče bistveno izboljšati natančnost in zanesljivost tehnike analize in obdelave slike. To je še posebej pomembno pri aplikacijah za odkrivanje, prepoznavanje, segmentacijo in sledenje.
Izboljšava slike lahko pomaga, ko dejavniki, kot so slabe svetlobe, šum senzorja, zamegljenost gibanja ali napake pri prenosu, ogrozijo kakovost slike.
Nastavitev vašega okolja
Začni z nastavitev okolja Python, nato zaženite naslednji terminalski ukaz za namestitev knjižnice OpenCV. Uporabili boste OpenCV za nalaganje in obdelavo začetne slike ter za shranjevanje končne izboljšane slike.
pip namestite opencv-python
Za prikaz dveh slik boste uporabili Matplotlib. Namestite ga s tem ukazom:
pip namestite matplotlib
Nazadnje namestite NumPy, ki ga boste uporabite za numerične operacije vključno z ustvarjanjem iskalnih tabel za korekcijo gama in definiranjem jedra za izostritev slike:
pip namestite numpy
Ko namestite te knjižnice v svoje okolje, ste pripravljeni na začetek kodiranja.
Celotna izvorna koda za to predstavitev je na voljo v a Repozitorij GitHub.
Uvoz potrebnih knjižnic
Uvozite knjižnice, ki ste jih predhodno namestili v svoje okolje:
uvoz cv2
uvoz matplotlib.pyplot kot plt
uvoz numpy kot np
Upoštevajte, da morate OpenCV uvoziti kot cv2. To je standardna praksa, katere cilj je zagotoviti združljivost kode in enostavnost razumevanja za druge razvijalce.
Nalaganje in prikaz izvirne slike
Začnite z nalaganjem izvirne slike z uporabo cv2.imread funkcijo. To je vhodna slika, na kateri bo vaš program izvajal tehnike izboljšave. Nato ga prikažite z ustreznimi funkcijami Matplotlib:
slika = cv2.imread('example.jpg')
plt.imshow (cv2.cvtColor (slika, cv2.COLOR_BGR2RGB))
plt.title('Izvirna slika')
plt.show()
Prikaz izvirne slike vam bo pomagal pozneje primerjati rezultate programa:
Zgornja slika bo vhod programa.
Zmanjšanje šuma na sliki
Odpravljanje šumov je tehnika, katere namen je zmanjšati šum – naključna popačenja – na sliki. Posledica tega je bolj gladek izpis. OpenCV zagotavlja fastNlMeansDenoisingColored funkcijo za ta namen. Uporablja algoritem nelokalnih sredstev za odstranjevanje šuma ob ohranjanju podrobnosti slike.
# Uporabite izboljšave slike
# Zmanjšajte šum slike
denoised_image = cv2.fastNlMeansDenoisingColored (slika, Noben, 10, 10, 7, 21)
The fastNlMeansDenoisingColored funkcija zavzame več parametrov, vključno s sliko, močjo filtra, velikostjo okna predloge in velikostjo iskalnega okna. Lahko eksperimentirate z različnimi vrednostmi, da dobite želene rezultate.
Raztegnite kontrast za izboljšanje vidnosti podrobnosti
Raztezanje kontrasta je znano tudi kot normalizacija. Razteza vrednosti intenzivnosti, da segajo v določen obseg. To pa izboljša vidnost podrobnosti na sliki.
Z OpenCV-jem lahko uporabite raztezanje kontrasta na sliki z odpravljenim šumom normalizirati funkcija:
# Izvedite kontrastno raztezanje
kontrastna_raztegnjena_slika = cv2.normalize (odstranjena_slika, Noben, 255, 0, cv2.NORM_MINMAX, cv2.CV_8UC1)
Kako izostriti sliko
Izostritev slike izboljša robove in podrobnosti slike, kar pomaga izboljšati ostrino slike.
# Izostritev slike
jedro = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
izostrena_slika = cv2.filter2D(kontrastna_raztegnjena_slika, -1, jedro=jedro)
Zgornja koda ustvari matriko jedra, ki poudari robove in podrobnosti na sliki. The cv2.filter2D funkcija uporabi jedro na kontrastno raztegnjeni sliki in jo posledično izostri.
Prilagodite svetlost, da izboljšate osvetlitev
Prilagoditev svetlosti nadzira celotno svetlost slike. Pomaga narediti sliko vizualno privlačno in dobro izpostavljeno.
# Prilagoditev svetlosti
svetlost_slika = cv2.convertScaleAbs (izostrena_slika, alfa=1, beta=5)
The cv2.convertScaleAbs funkcija prilagodi svetlost slike. The alfa parameter nadzoruje kontrast, medtem ko beta parameter nadzoruje svetlost. Povečanje beta vrednost poveča svetlost slike.
Uporabite popravek gama, da osvetlite sliko
Slika se lahko zdi presvetla po tehniki prilagajanja svetlosti. Korekcija gama prilagodi splošno svetlost in kontrast slike. Popravlja slike, ki so videti pretemne ali presvetle.
# Popravek gama
gama = 1.5
lookup_table = np.array([((i / 255.0) ** gama) * 255za jaz v np.arange(0, 256)]).astype("uint8")
gama_popravljena_slika = cv2.LUT(svetlost_slika, iskalna_tabela)
Zgornji delček kode ustvari iskalno tabelo, ki uporabi transformacijo korekcije gama za sliko, prilagojeno svetlosti. The gama vrednost nadzira prilagoditev. Uporabite vrednosti, večje od 1, da bo slika temnejša, in vrednosti, manjše od 1, da bo svetlejša.
Shranjevanje in prikaz končne izboljšane slike
Ko uporabite zgornje tehnike izboljšave, shranite končno obdelano sliko v datoteko.
# Shranite končno sliko
cv2.imwrite('končna_slika.jpg', gama_corrected_image)
Nato prikažite izhod programa z Matplotlib.
# Prikažite končno izboljšano sliko
plt.imshow (cv2.cvtColor (gamma_corrected_image, cv2.COLOR_BGR2RGB))
plt.title('Končna izboljšana slika')
plt.show()
Končna izboljšana slika je naslednja:
Prihodnost izboljšave slike
Prihodnost izboljšave slike je na področju umetne inteligence. Algoritmi strojnega učenja se usposabljajo za samodejno izvajanje tehnik izboljšave slike na slikah.
Ti programi obravnavajo vsako sliko neodvisno, zato uporabljajo različne vrednosti tehnik za različne slike.