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.