In een krantenartikel uit 1911 over journalistiek en publiciteit, en citaat van de krantenredacteur Tess Flanders, verscheen de volgende uitdrukking:
Gebruik een foto. Het is meer dan duizend woorden waard.
Een soortgelijke uitdrukking verscheen ook in een krantenadvertentie uit 1913 voor het Piqua Auto Supply House:
Eén blik is meer dan duizend woorden waard.
Ik ga niet diep ingaan op geschiedenisaangelegenheden. Deze introductie was gewoon om het een beetje leuk te maken, en laat zien hoe de frasen ons een indicatie geven van het belang van foto's en hoe ze echt een heleboel informatie erin kunnen verankeren. Ik weet zeker dat de meesten van ons zich dat realiseren, vooral wanneer we opmerken hoe een foto in onze gedachten meer kan zijn dan alleen pure tekst.
Het is dus geen twijfel dat foto's een belangrijke rol spelen in onze communicatie - niet alleen algemene foto's, maar ook gespecialiseerde foto's zoals medische beelden (bijvoorbeeld MRI, echografie, etc.).
We kunnen foto's verkrijgen via verschillende acquisitie-apparaten. Bijvoorbeeld, melanoom (huidkanker) beelden worden opgehaald met behulp van een dermatoscoop. We nemen foto's van onszelf of vrienden met behulp van een digitale camera of een smartphone. Soms merken we echter enkele problemen op in onze foto's, zoals vervaging bijvoorbeeld, wat te wijten kan zijn aan het gebruikte acquisitie-apparaat.
Maar wat te doen in dit geval? Je hebt een aantal medische afbeeldingen verzonden om te analyseren en je hebt niet de keuze om dergelijke afbeeldingen opnieuw te maken. Zelfs als u een afbeelding opnieuw hebt overgenomen, verandert de resolutie die u ziet niet, noch andere problemen waarmee u geconfronteerd wordt. Afbeelding verwerken komt in dergelijke situaties om de hoek kijken.
Ik vond de term leuk afbeelding verwerken werd gedefinieerd in Oxford Dictionaries:
De analyse en manipulatie van een gedigitaliseerd beeld, vooral om de kwaliteit ervan te verbeteren.
"Gedigitaliseerde afbeelding" verwijst hier naar het feit dat de afbeelding wordt beschouwd digitaal, dat is het wordt verwerkt door een computer.
De computer in dit spel krijgen betekent een programmeertaal gebruiken. In deze tutorial zal ik je laten zien hoe we de programmeertaal Python kunnen gebruiken om beeldverwerkingstaken uit te voeren op een afbeelding.
De bibliotheek die we gaan gebruiken om onze beeldverwerkingstaken uit te voeren is scikit-image
. Volgens de paper scikit-image: beeldverwerking in Python:
scikit-image is een beeldverwerkingsbibliotheek die algoritmen en hulpprogramma's implementeert voor gebruik in onderzoeks-, onderwijs- en bedrijfstoepassingen. Het is vrijgegeven onder de liberale gemodificeerde BSD open source-licentie, biedt een goed gedocumenteerde API in de Python-programmeertaal en is ontwikkeld door een actief, internationaal team van medewerkers..
Het eerste dat we moeten doen is installeren scikit-image
. Instructies voor het installeren van de bibliotheek zijn te vinden op de downloadpagina en in deze tutorial zal ik je laten zien hoe je de bibliotheek op een Mac OS X-computer kunt installeren, want dit is wat ik momenteel gebruik bij het schrijven van deze tutorial.
Zoals scikit-image
is een externe bibliotheek, het eerste dat we moeten doen is installeren die bibliotheek. Daarvoor zal ik pip gebruiken, dat is (op basis van Wikipedia):
Een pakketbeheersysteem dat wordt gebruikt voor het installeren en beheren van softwarepakketten die zijn geschreven in Python. Veel pakketten zijn te vinden in de Python Package Index (PyPI).
U kunt de stappen beschreven in de Python Packaging User Guide volgen voor installatie Pip
, maar als je dat hebt gedaan Python 2.7.9
en hoger, of Python 3.4
en hoger, heb je al Pip
!
scikit-image
nu kan eenvoudig worden geïnstalleerd door het volgende commando te typen (in Mac OS X's Terminal):
pip install -U scikit-image
We hebben nu de bibliotheek geïnstalleerd en klaar voor wat plezier bij het verwerken van afbeeldingen!
De testafbeelding die we in deze zelfstudie zullen gebruiken, is baboon.png. Ga je gang en download het, of gebruik gewoon de afbeelding van je keuze. De afbeelding ziet er als volgt uit:
Soms moeten we de afmetingen van een afbeelding weten (meer hierover in de filtersectie). Om de afmetingen van onze afbeelding te controleren, kunnen we de guess_spatial_dimensions ()
methode, als volgt:
van skimage import io, color img = io.imread ('baboon.png') dimensions = color.guess_spatial_dimensions (img) print afmetingen
De uitvoer van het bovenstaande script is 3
, wat betekent dat we een afbeelding hebben die bestaat uit drie ruimtelijke dimensies.
Uit het bovenstaande gedeelte hebben we gemerkt dat onze afbeelding een 3D-arrayafbeelding is (in RGBA-formaat met de vorm (..., ..., 4)
). Hoe wist ik dat het in RGBA-formaat is? U kunt eenvoudig het volgende doen:
importeer skimage.io als io van skimage.color import rgb2gray img = io.imread ('baboon.png') print img.shape
In dit geval krijgt u deze uitvoer: (512, 512, 4)
.
In dit gedeelte willen we de afbeelding met de originele gekleurde baboon.png converteren naar een 2D-afbeelding in grijstinten (zwart en wit). Dit kan eenvoudig worden gedaan met behulp van het volgende script:
import skimage.io als io van skimage.color import rgb2gray img = io.imread ('baboon.png') img_grayscale = rgb2gray (img)
Laten we doorgaan en de nieuwe afbeelding (grijswaarden) in een bestand opslaan. Dit kan gedaan worden met behulp van de imsave ()
functie, als volgt (merk op dat de nieuwe afbeelding in het bestand staat baviaan-gs.png
):
io.imsave ( 'baviaan-gs.png', img_grayscale)
Om de afmetingen van de afbeelding te controleren, kunnen we het script in het vorige gedeelte gebruiken, in welk geval u het zou krijgen 2
teruggekeerd. Of je kunt gebruiken img_grayscale.shape
, wat resulteert in 512x512
. Dus we hebben nu een 2D-afbeelding.
Voeg het volgende toe aan het einde van het script om de nieuwe afbeelding in grijstinten weer te geven:
show_grayscale = io.imshow (img_grayscale) io.show ()
Het resultaat ziet er als volgt uit:
Bij beeldverwerking, filtering wordt uitgevoerd om enkele verbeteringen aan te brengen in de afbeelding. Over het algemeen omvat filteren de volgende bewerkingen: randverbetering, verscherping en vloeiend maken.
In dit gedeelte laat ik je zien hoe we het Sobel-filter op onze afbeelding kunnen toepassen en hoe de uitvoer eruit ziet na het uitvoeren van een dergelijke bewerking. Ik ga het voorbeeld gebruiken dat wordt getoond op de voorpagina van de scikit-image-website, maar toegepast op onze afbeelding.
Het script voor het toepassen van het Sobel-filter op onze afbeelding ziet er als volgt uit:
uit skimage-importgegevens, io, filters img = io.imread ('baboon.png') edges = filters.sobel (img) io.imshow (randen) io.show ()
Als u het script uitvoert, ziet u dan eventuele problemen? Ja, we kunnen de bewerking niet toepassen, omdat de afbeelding een 2D-afbeelding moet zijn. Dus in plaats van gebruiken baboon.png
, we moeten onze 2D-afbeelding gebruiken, baviaan-gs.png
. De uitvoer van deze bewerking ziet er als volgt uit:
Er zijn veel bewerkingen voor beeldverwerking en de scikit-image
De Python-bibliotheek biedt ons veel interessante bewerkingen die we kunnen uitvoeren op onze afbeeldingen. U kunt meer beeldverwerkingsbewerkingen zien met deze bibliotheek op de scikit-image-website.
Leer Python met onze complete python-handleiding, of je nu net begint of dat je een ervaren coder bent die op zoek is naar nieuwe vaardigheden.