Vår uppfattning av omvärlden sker i hög grad genom synen. Människor har förmågan att identifiera föremål, bedöma avstånd och till och med uppskatta ytstruktur enbart genom att betrakta bilder.
Trots att seendet framstår som en naturlig och okomplicerad process, visar det sig vara en komplex utmaning att programmera datorer till att efterlikna detta. Lyckligtvis har olika algoritmer utvecklats för att hjälpa datorer att hantera denna till synes svåra uppgift inom bildbehandling. Dessa algoritmer har omsatts till kod och paketerats som mjukvarubibliotek, vilka vi ska utforska i denna artikel.
Vad innebär bildbehandling?
Bildbehandling är ett område inom datorseende som fokuserar på de operationer som utförs på bilder för att förbereda dem för användning inom maskininlärning och artificiell intelligens. Det är en viktig process för att upptäcka och identifiera objekt i bilder. Detta har många användningsområden, bland annat självkörande bilar, robotteknik, och klassificering av bilder för att identifiera t.ex. olämpligt innehåll.
Användningsområden för bildbehandling
Bildbehandling används inom en mängd olika områden. Här är några av de vanligaste och mest användbara tillämpningarna:
- Medicinsk avbildning och diagnostik, där AI kan analysera skanningar för att hjälpa till med diagnos.
- Säkerhet genom biometriska system och övervakning.
- Robotik, för att bygga robotar med förmågan att ”se” sin omgivning, inklusive självkörande fordon.
- Augmented reality (förstärkt verklighet), t.ex. filter. Bildbehandling används för att identifiera objekt och tillämpa effekter på dem.
- Trafikanalys för att läsa registreringsskyltar, vilket kan användas för att identifiera trafikbrott.
Det finns en variation av algoritmer som används inom bildbehandling. Exempel på dessa är morfologisk dilatation och erosion, Gauss-filtrering, Fourier-transform, kantdetektering och wavelet-bildbehandling.
Utan tillgång till mjukvarubibliotek skulle man behöva implementera dessa algoritmer från grunden. Som tur är finns det färdiga bibliotek som redan implementerar nödvändiga funktioner. Nedan följer en genomgång av några av de mest använda biblioteken.
OpenCV
OpenCV är ett av de mest populära biblioteken för bildbehandling. Det används för att implementera algoritmer för datorseende samt utföra maskininlärning och bildbehandling. Biblioteket är gratis att använda och har öppen källkod. Det är dessutom mångsidigt då det är kompatibelt med flera olika programmeringsspråk såsom Python, C++ och Java.
Biblioteket har en stor mängd färdiga funktioner och algoritmer som kan användas för bildbehandling. Det inkluderar t.ex. kantdetektering, funktionsextraktion, transformationer, rotationer, storleksändring och förbättring.
Scikit-image
Scikit-image är ett användarvänligt och effektivt bibliotek för bildbehandling. Det hanterar in- och utmatning av bilder, transformationer, filtrering, segmentering, extraktion av funktioner, bildåterställning och geometriska förändringar.
Det integreras smidigt med andra vetenskapliga bibliotek och gör det enkelt att manipulera och förbättra bilder för olika ändamål, från grundläggande operationer som storleksförändring till mer avancerade uppgifter som objektigenkänning och bildrestaurering.
SimpleITK
SimpleITK är en förenklad version av ITK (Insight Toolkit), som är ett plattformsoberoende bibliotek med öppen källkod för bildanalys. SimpleITK stöder läsning och skrivning av bilder i över 20 olika bildformat.
Utöver Python fungerar det med programmeringsspråk som R, Java, Ruy, Lua, C++ och C#. Det erbjuder ett brett utbud av funktioner för bildbearbetning.
En av styrkorna med SimpleITK är dess förmåga att hantera 2D-, 3D-, 4D- och 5D-bilder. Det har också stöd för parallellbearbetning, vilket kan öka hastigheten på beräkningarna.
SciPy
SciPy är relaterat till det populära numeriska analysbiblioteket NumPy. SciPy används för vetenskapliga beräkningar medan NumPy används för numeriska. Då SciPy använder NumPy i grunden är det snabbt och effektivt.
Det stöder även arbete med flerdimensionella bilder. Biblioteket innehåller funktioner för filtrering, morfologi, objektmätning och B-spline-interpolering.
Pillow
Pillow är en vidareutveckling av Python Imaging Library (PIL). PIL var ett bibliotek för bildbehandling i Python, men det var endast kompatibelt med Python2 och utvecklingen upphörde 2011.
Pillow är en vidareutveckling av detta projekt. Det stödjer läsning av bilder från olika filformat till sin egen interna representation. Pillows interna metoder gör det möjligt att manipulera bilder effektivt och ger användbara bildbehandlingsfunktioner. Det stöder även snabb dataåtkomst och operationer som rotationer och storleksändringar.
pgmagick
pgmagick är ett Python-bibliotek med öppen källkod skapat av Hideo Huttori. Det fungerar som ett gränssnitt till GraphicsMagick, en samling verktyg och bibliotek för att läsa, skriva och manipulera bilder.
Biblioteket stödjer över 88 olika bildformat och har många funktioner för att t.ex. ändra bildstorlek, skärpa eller göra bilder suddiga, upptäcka kanter, rotera, solarisera och jämföra bilder. Det kan också användas för att skapa GIF-filer, rita text och konvertera bilder mellan olika format.
Sammanfattning
Även om den här listan inte är komplett, är ovanstående bibliotek några av de mest populära inom bildbehandling. De har använts av många människor och organisationer för att bygga system för objektidentifiering, segmentering och analys.
Dessa har visat sig vara mycket användbara inom områden som artificiell intelligens och robotteknik. Ett alternativ till bibliotek är att använda API:er för bildanalys.