A képek megtisztítása értékes technika, akár további elemzés céljából, akár egyszerűen azért, hogy fotói a lehető legjobban nézzenek ki.

A képjavítás kulcsfontosságú eszköz a számítógépes látás és képszerkesztő alkalmazások számára. Célja a képek minőségének javítása.

A képminőség javításával jelentősen növelhető a képelemzési és -feldolgozási technikák pontossága és megbízhatósága. Ez különösen fontos az objektumészlelési, -felismerési, -szegmentációs és -követő alkalmazásokban.

A képjavítás segíthet, ha olyan tényezők, mint például a gyenge fényviszonyok, az érzékelő zaja, a mozgási elmosódás vagy az átviteli hibák rontják a képminőséget.

Környezetének beállítása

Kezdje ezzel Python környezet beállítása, majd futtassa a következő terminálparancsot az OpenCV könyvtár telepítéséhez. Az OpenCV-t használja a kezdeti kép betöltésére és feldolgozására, valamint a végső javított kép mentésére.

pip install opencv-python

A két kép megjelenítéséhez a Matplotlib programot fogja használni. Telepítse a következő paranccsal:

pip install matplotlib

Végül telepítse a NumPy-t, amelyet meg fog tenni numerikus műveletekhez használható ideértve a gamma-korrekcióhoz szükséges keresőtáblák létrehozását és a kernel meghatározását a képélesítéshez:

pip install numpy

Miután telepítette ezeket a könyvtárakat a környezetébe, készen áll a kódolás megkezdésére.

A demó teljes forráskódja elérhető a GitHub adattár.

A szükséges könyvtárak importálása

Importálja a környezetébe korábban telepített könyvtárakat:

import cv2
import matplotlib.pyplot mint plt
import zsibbadt mint np

Vegye figyelembe, hogy az OpenCV-t másként kell importálnia cv2. Ez egy általános gyakorlat, amelynek célja a kódkompatibilitás és a többi fejlesztő számára a könnyebb érthetőség biztosítása.

Az eredeti kép betöltése és megjelenítése

Kezdje az eredeti kép betöltésével a cv2.imread funkció. Ez az a bemeneti kép, amelyen a program javítási technikákat hajt végre. Ezután jelenítse meg a megfelelő Matplotlib függvényekkel:

image = cv2.imread("example.jpg")
plt.imshow (cv2.cvtColor (kép, cv2.COLOR_BGR2RGB))
plt.title("Eredeti kép")
plt.show()

Az eredeti kép megjelenítése segít a későbbiekben összehasonlítani a program eredményeit:

A fenti kép a program bemenete lesz.

A képzaj csökkentése

A zajcsökkentés egy olyan technika, amely a kép zajának – véletlenszerű torzításainak – csökkentését célozza. Ez simább kimenetet eredményez. Az OpenCV biztosítja a fastNlMeansDenoisingColored funkciót erre a célra. Nem helyi algoritmust használ a zaj eltávolítására, miközben megőrzi a kép részleteit.

# Képjavítások alkalmazása
# A kép zajtalanítása
denoised_image = cv2.fastNlMeansDenoisingColored (kép, Egyik sem, 10, 10, 7, 21)

A fastNlMeansDenoisingColored A funkció számos paramétert vesz igénybe, beleértve a képet, a szűrő erősségét, a sablonablak méretét és a keresőablak méretét. Különböző értékekkel kísérletezhet a kívánt eredmény elérése érdekében.

Nyújtsa ki a kontrasztot a részletek láthatóságának javítása érdekében

A kontraszt nyújtását normalizálásnak is nevezik. Az intenzitásértékeket egy bizonyos tartományra nyújtja. Ez viszont javítja a kép részleteinek láthatóságát.

Az OpenCV segítségével kontraszt nyújtást alkalmazhat a zajtalanított képen normalizálni funkció:

# Végezzen kontraszt nyújtást
kontrast_stretched_image = cv2.normalize (denoised_image, Egyik sem, 255, 0, cv2.NORM_MINMAX, cv2.CV_8UC1)

Hogyan élesítsük a képet

A képélesítés javítja a kép széleit és részleteit, ezáltal javítja a kép élességét.

# Képélesítés
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
kiélezett_kép = cv2.filter2D(kontraszt_feszített_kép, -1, kernel=kernel)

A fenti kód egy kernelmátrixot hoz létre, amely kiemeli a kép széleit és részleteit. A cv2.filter2D függvény a magot a kontrasztban nyújtott képre alkalmazza, ennek eredményeként élesítve azt.

Állítsa be a fényerőt az expozíció javításához

A fényerő beállítása szabályozza a kép általános fényerejét. Segítségével a kép tetszetős és jól megvilágított.

# Fényerő beállítása
brightness_image = cv2.convertScaleAbs (élesített_kép, alpha=1, béta=5)

A cv2.convertScaleAbs funkció beállítja a kép fényerejét. A alfa paraméter szabályozza a kontrasztot, míg a béta paraméter szabályozza a fényerőt. Növelve a béta érték növeli a kép fényerejét.

Alkalmazzon Gamma-korrekciót a kép világosabbá tételéhez

A kép túl világosnak tűnhet a fényerő-beállítási technika után. A gamma-korrekció beállítja a kép általános fényerejét és kontrasztját. Kijavítja a túl sötétnek vagy túl világosnak tűnő képeket.

# Gamma korrekció
gamma = 1.5
lookup_table = np.array([((i / 255.0) ** gamma) * 255számára én ban ben np.arange(0, 256)]).astype("uint8")
gamma_corrected_image = cv2.LUT(fényerő_kép, keresési_tábla)

A fenti kódrészlet létrehoz egy keresési táblázatot, amely gamma-korrekciós transzformációt alkalmaz a fényerővel beállított képen. A gamma érték szabályozza a beállítást. Használjon 1-nél nagyobb értékeket a kép sötétebbé tételéhez, 1-nél kisebb értékeket pedig világosabbá tételéhez.

A végső javított kép mentése és megjelenítése

A fenti javítási technikák alkalmazása után mentse el a végleges feldolgozott képet egy fájlba.

# Mentse el a végső képet
cv2.imwrite('final_image.jpg', gamma_corrected_image)

Ezután jelenítse meg a program kimenetét a Matplotlib segítségével.

# A végső javított kép megjelenítése
plt.imshow (cv2.cvtColor (gamma_corrected_image, cv2.COLOR_BGR2RGB))
plt.title("Végső javított kép")
plt.show()

A végső javított kép a következő:

A képjavítás jövője

A képjavítás jövője a mesterséges intelligencia területén van. A gépi tanulási algoritmusokat képzik arra, hogy automatikusan képjavító technikákat hajtsanak végre a képeken.

Ezek a programok az egyes képeket egymástól függetlenül kezelik, így a technikák különböző értékeit alkalmazzák a különböző képekhez.