Att städa upp bilder är en värdefull teknik, oavsett om det är för ytterligare analys eller helt enkelt för att få dina bilder att se så bra ut som möjligt.

Bildförbättring är ett avgörande verktyg för datorseende och bildredigeringsapplikationer. Det syftar till att förbättra kvaliteten på bilder.

Genom att förbättra bildkvaliteten kan noggrannheten och tillförlitligheten hos bildanalys- och bearbetningstekniker förbättras avsevärt. Detta är särskilt viktigt i tillämpningar för detektering, igenkänning, segmentering och spårning av objekt.

Bildförbättring kan hjälpa till när faktorer som svagt ljus, sensorbrus, rörelseoskärpa eller överföringsfel har äventyrat bildkvaliteten.

Ställa in din miljö

Börja med ställa in en Python-miljö, kör sedan följande terminalkommando för att installera OpenCV-biblioteket. Du kommer att använda OpenCV för att ladda och bearbeta den ursprungliga bilden och för att spara den slutliga förbättrade bilden.

pip installera opencv-python

Du använder Matplotlib för att visa de två bilderna. Installera det med detta kommando:

instagram viewer
pip installera matplotlib

Slutligen, installera NumPy, vilket du kommer att göra användas för numeriska operationer inklusive att skapa uppslagstabeller för gammakorrigering och definiera kärnan för bildskärpa:

pip installera numpy

När du har installerat dessa bibliotek i din miljö är du redo att börja koda.

Den fullständiga källkoden för denna demo finns tillgänglig i en GitHub-förråd.

Importera de nödvändiga biblioteken

Importera de bibliotek du tidigare installerat i din miljö:

importera cv2
importera matplotlib.pyplot som plt
importera numpy som np

Observera att du bör importera OpenCV som cv2. Detta är en standardpraxis som syftar till att säkerställa kodkompatibilitet och enkel förståelse för andra utvecklare.

Ladda och visa originalbilden

Börja med att ladda originalbilden med hjälp av cv2.imread fungera. Detta är indatabilden som ditt program kommer att utföra förbättringstekniker på. Visa det sedan med lämpliga Matplotlib-funktioner:

bild = cv2.imread("exempel.jpg")
plt.imshow (cv2.cvtColor (bild, cv2.COLOR_BGR2RGB))
plt.title("Originalbild")
plt.show()

Att visa originalbilden hjälper dig att jämföra programmets resultat senare:

Ovanstående bild kommer att vara ingången till programmet.

Reducerar brus i bilden

Denoising är en teknik som syftar till att minska brus – slumpmässiga förvrängningar – i bilden. Detta resulterar i en jämnare utgång. OpenCV tillhandahåller fastNlMeansDenoisingColored funktion för detta ändamål. Den använder en icke-lokal algoritm för att ta bort brus samtidigt som bilddetaljerna bevaras.

# Använd bildförbättringar
# Förbättra bilden
denoised_image = cv2.fastNlMeansDenoisingColored (bild, Ingen, 10, 10, 7, 21)

De fastNlMeansDenoisingColored funktionen tar flera parametrar, inklusive bild, filterstyrka, mallfönsterstorlek och sökfönsterstorlek. Du kan experimentera med olika värden för att få önskat resultat.

Stretch kontrast för att förbättra detaljsynlighet

Kontraststräckning kallas även normalisering. Den sträcker ut intensitetsvärdena för att spänna över ett visst intervall. Detta förbättrar i sin tur synligheten för detaljerna i bilden.

Du kan applicera kontraststräckning på den brustna bilden med OpenCV: s normalisera fungera:

# Utför kontraststräckning
contrast_stretched_image = cv2.normalize (denoised_image, Ingen, 255, 0, cv2.NORM_MINMAX, cv2.CV_8UC1)

Hur man skärper bilden

Bildskärpa förbättrar kanterna och detaljerna i bilden, vilket hjälper till att förbättra bildens skarphet.

# Bildskärpa
kärna = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
sharpened_image = cv2.filter2D(contrast_stretched_image, -1, kärna=kärna)

Ovanstående kod skapar en kärnmatris som framhäver kanterna och detaljerna i bilden. De cv2.filter2D funktionen tillämpar kärnan på den kontraststräckta bilden, vilket gör den skarpare.

Justera ljusstyrkan för att förbättra exponeringen

Justering av ljusstyrkan styr den övergripande ljusstyrkan för en bild. Det hjälper till att göra bilden visuellt tilltalande och välexponerad.

# Justering av ljusstyrka
brightness_image = cv2.convertScaleAbs (sharpened_image, alpha=1, beta=5)

De cv2.convertScaleAbs funktionen justerar bildens ljusstyrka. De alfa parametern styr kontrasten, medan beta parametern styr ljusstyrkan. Att öka beta värde förbättrar bildens ljusstyrka.

Använd gammakorrigering för att göra bilden ljusare

En bild kan verka för ljus efter tekniken för justering av ljusstyrkan. Gammakorrigering justerar den övergripande ljusstyrkan och kontrasten för en bild. Den korrigerar bilder som ser för mörka eller för ljusa ut.

# Gammakorrigering
gamma = 1.5
lookup_table = np.array([((i / 255.0) ** gamma) * 255för i i np.arange(0, 256)]).astype("uint8")
gamma_corrected_image = cv2.LUT(brightness_image, lookup_table)

Ovanstående kodavsnitt skapar en uppslagstabell som tillämpar gammakorrigeringstransformation på den ljusstyrkejusterade bilden. De gamma värde styr justeringen. Använd värden större än 1 för att göra bilden mörkare och värden mindre än 1 för att göra den ljusare.

Spara och visa den slutliga förbättrade bilden

När du har tillämpat ovanstående förbättringstekniker sparar du den slutliga bearbetade bilden i en fil.

# Spara den slutliga bilden
cv2.imwrite('final_image.jpg', gamma_korrigerad_bild)

Visa sedan utdata från programmet med Matplotlib.

# Visa den slutliga förbättrade bilden
plt.imshow (cv2.cvtColor (gamma_corrected_image, cv2.COLOR_BGR2RGB))
plt.title("Slutlig förbättrad bild")
plt.show()

Den slutliga förbättrade bilden är som följer:

Framtiden för bildförbättring

Framtiden för bildförbättring ligger inom området artificiell intelligens. Maskininlärningsalgoritmer tränas för att automatiskt utföra bildförbättringstekniker på bilder.

Dessa program behandlar varje bild oberoende, så de tillämpar olika värden av teknikerna för olika bilder.