At rydde op i billeder er en værdifuld teknik, uanset om det er til yderligere analyse eller blot for at få dine billeder til at se bedst muligt ud.
Billedforbedring er et afgørende værktøj til computersyn og billedredigeringsapplikationer. Det har til formål at forbedre kvaliteten af billeder.
Ved at forbedre billedkvaliteten kan nøjagtigheden og pålideligheden af billedanalyse- og billedbehandlingsteknikker forbedres betydeligt. Dette er især vigtigt i objektdetektering, -genkendelse, segmentering og sporingsapplikationer.
Billedforbedring kan hjælpe, når faktorer som dårlige lysforhold, sensorstøj, bevægelsessløring eller transmissionsfejl har kompromitteret billedkvaliteten.
Opsætning af dit miljø
Start med opsætning af et Python-miljø, kør derefter følgende terminalkommando for at installere OpenCV-biblioteket. Du skal bruge OpenCV til at indlæse og behandle det oprindelige billede og til at gemme det endelige forbedrede billede.
pip installer opencv-python
Du skal bruge Matplotlib til at vise de to billeder. Installer det ved hjælp af denne kommando:
pip installer matplotlib
Til sidst skal du installere NumPy, som du vil bruges til numeriske operationer herunder oprettelse af opslagstabeller til gammakorrektion og definering af kernen til billedskarphed:
pip install numpy
Når du har installeret disse biblioteker i dit miljø, er du klar til at begynde at kode.
Den fulde kildekode til denne demo er tilgængelig i en GitHub-depot.
Import af de nødvendige biblioteker
Importer de biblioteker, du tidligere har installeret i dit miljø:
importere cv2
importere matplotlib.pyplot som plt
importere nusset som np
Bemærk, at du skal importere OpenCV som cv2. Dette er en standardpraksis, der sigter mod at sikre kodekompatibilitet og nem forståelse for andre udviklere.
Indlæsning og visning af det originale billede
Start med at indlæse det originale billede ved hjælp af cv2.imread fungere. Dette er inputbilledet, som dit program vil udføre forbedringsteknikker på. Vis det derefter ved hjælp af de relevante Matplotlib-funktioner:
billede = cv2.imread('eksempel.jpg')
plt.imshow (cv2.cvtColor (billede, cv2.COLOR_BGR2RGB))
plt.title('Original billede')
plt.show()
Visning af det originale billede vil hjælpe dig med at sammenligne resultaterne af programmet senere:
Ovenstående billede vil være input til programmet.
Reduktion af støj i billedet
Denoising er en teknik, der har til formål at reducere støj - tilfældige forvrængninger - i billedet. Dette resulterer i et mere jævnt output. OpenCV giver hurtigNlBetyderLedendeFarvet funktion til dette formål. Den bruger en ikke-lokal algoritme til at fjerne støj og samtidig bevare billeddetaljerne.
# Anvend billedforbedringer
# Deoise billedet
denoised_image = cv2.fastNlMeansDenoisingColored (billede, Ingen, 10, 10, 7, 21)
Det hurtigNlBetyderLedendeFarvet funktionen tager flere parametre, herunder billedet, filterstyrke, skabelonvinduesstørrelse og søgevinduesstørrelse. Du kan eksperimentere med forskellige værdier for at få de ønskede resultater.
Stræk kontrasten for at forbedre detaljens synlighed
Kontraststrækning er også kendt som normalisering. Det strækker intensitetsværdierne til at spænde over et bestemt område. Dette forbedrer igen synligheden af detaljerne i billedet.
Du kan anvende kontraststrækning på det støjbeskyttede billede ved hjælp af OpenCV'er normalisere fungere:
# Udfør kontraststræk
contrast_stretched_image = cv2.normalize (denoised_image, Ingen, 255, 0, cv2.NORM_MINMAX, cv2.CV_8UC1)
Sådan skærpes billedet
Billedskarphed forbedrer billedets kanter og detaljer og hjælper med at forbedre billedets sprødhed.
# Billedskærpning
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
sharpened_image = cv2.filter2D(contrast_stretched_image, -1, kerne=kerne)
Ovenstående kode skaber en kernematrix, der understreger kanterne og detaljerne i billedet. Det cv2.filter2D funktionen anvender kernen på det kontrast-strakte billede, hvilket gør det skarpere.
Juster lysstyrken for at forbedre eksponeringen
Lysstyrkejustering styrer den overordnede lysstyrke af et billede. Det hjælper med at gøre billedet visuelt tiltalende og godt eksponeret.
# Justering af lysstyrke
brightness_image = cv2.convertScaleAbs (sharpened_image, alpha=1, beta=5)
Det cv2.convertScaleAbs funktion justerer billedets lysstyrke. Det alfa parameter styrer kontrasten, mens beta parameter styrer lysstyrken. Forøgelse af beta værdi øger billedets lysstyrke.
Anvend gammakorrektion for at gøre billedet lysere
Et billede kan se for lyst ud efter teknikken til justering af lysstyrken. Gammakorrektion justerer den generelle lysstyrke og kontrast i et billede. Den korrigerer billeder, der virker for mørke eller for lyse.
# Gamma-korrektion
gamma = 1.5
opslagstabel = np.array([((i / 255.0) ** gamma) * 255til jeg i np.arange(0, 256)]).astype("uint8")
gamma_korrigeret_billede = cv2.LUT(lysstyrke_billede, opslagstabel)
Ovenstående kodestykke opretter en opslagstabel, der anvender gammakorrektionstransformation til det lysstyrkejusterede billede. Det gamma værdi styrer justeringen. Brug værdier større end 1 for at gøre billedet mørkere, og værdier mindre end 1 for at gøre det lysere.
Lagring og visning af det endelige forbedrede billede
Når du har anvendt ovenstående forbedringsteknikker, skal du gemme det endelige behandlede billede i en fil.
# Gem endeligt billede
cv2.imwrite('final_image.jpg', gamma_korrigeret_billede)
Vis derefter outputtet af programmet ved hjælp af Matplotlib.
# Vis det endelige forbedrede billede
plt.imshow (cv2.cvtColor (gamma_corrected_image, cv2.COLOR_BGR2RGB))
plt.title('Endelig forbedret billede')
plt.show()
Det endelige forbedrede billede er som følger:
Fremtiden for billedforbedring
Fremtiden for billedforbedring er inden for kunstig intelligens. Maskinlæringsalgoritmer trænes til automatisk at udføre billedforbedringsteknikker på billeder.
Disse programmer behandler hvert billede uafhængigt, så de anvender forskellige værdier af teknikkerne til forskellige billeder.