Procesarea imaginilor folosind Python

Într-un articol din ziarul din 1911, care discută despre jurnalism și publicitate și citând editorul de ziar Tess Flanders, apare următoarea expresie:

 Utilizați o imagine. Merită o mie de cuvinte.

O frază similară a apărut, de asemenea, într-o publicitate din 1913 pentru ziarul Piqua Auto Supply House:

O privire este în valoare de o mie de cuvinte.

Nu voi intra profund în problemele istoriei. Această introducere a fost doar pentru a face un pic distractiv, și arată modul în care frazele ne indică importanța imaginilor și modul în care pot într-adevăr încorpora o mulțime de informații în interiorul lor. Sunt sigur că majoritatea dintre noi înțelegem asta, mai ales când observăm cum o imagine poate rămâne în mintea noastră mai mult decât un text pur.

Prin urmare, este fără îndoială faptul că imaginile joacă un rol important în comunicațiile noastre - nu doar imaginile generale, ci și fotografii specializate cum ar fi imagini medicale (de exemplu RMN, ultrasunete etc.).

Putem obține fotografii prin diferite dispozitive de achiziție. De exemplu, imaginile melanomului (cancer de piele) sunt extrase folosind un dermatoscop. Facem fotografii cu noi sau cu prietenii folosind o cameră digitală sau un smartphone. Uneori, totuși, observăm câteva probleme în imaginile noastre, cum ar fi, de exemplu, neclaritatea, care se poate datora dispozitivului de achiziție folosit.

Dar ce să facem în acest caz? Vi s-au trimis câteva imagini medicale pentru a analiza și nu aveți posibilitatea de a relua astfel de imagini. Chiar dacă reintroduceți o imagine, rezoluția pe care o vedeți nu se va schimba și nici alte probleme cu care vă confruntați. Procesarea imaginii intră în joc în astfel de situații.

Mi-a plăcut cum termenul procesarea imaginii a fost definit în Oxford Dictionaries:

Analiza și manipularea unei imagini digitalizate, în special pentru a îmbunătăți calitatea acesteia.

"Imaginea digitalizată" se referă aici la faptul că imaginea este luată în considerare digital, adică este procesat de un computer. 

Obținerea calculatorului în acest joc înseamnă utilizarea unui limbaj de programare. În acest tutorial vă voi arăta cum putem folosi limbajul de programare Python pentru a efectua sarcini de procesare a imaginilor pe o imagine.

scikit-image

Biblioteca pe care o vom folosi pentru a ne îndeplini sarcinile de procesare a imaginilor este scikit-image. Potrivit imaginii scikit-image: procesarea imaginilor în Python:

Scikit-image este o bibliotecă de procesare a imaginilor care implementează algoritmi și utilități pentru utilizarea în aplicații de cercetare, educație și industrie. Acesta este lansat sub licența liberală modificată BSD open source, oferă un API bine documentat în limbajul de programare Python și este dezvoltat de o echipă activă, internațională de colaboratori.

Primul lucru pe care trebuie să-l facem este să instalați scikit-image. Instrucțiunile pentru instalarea bibliotecii pot fi găsite pe pagina de descărcare, iar în acest tutorial vă voi arăta cum să instalați biblioteca pe o mașină Mac OS X, deoarece în acest moment folosesc în scris acest tutorial.

La fel de scikit-image este o bibliotecă externă, primul lucru pe care trebuie să-l facem este instalare acea bibliotecă. Pentru asta, voi folosi pip, care este (bazat pe Wikipedia):

Un sistem de gestionare a pachetelor utilizat pentru instalarea și gestionarea pachetelor software scrise în Python. Multe pachete pot fi găsite în Python Package Index (PyPI).

Puteți urma pașii menționați în Ghidul utilizatorului pentru ambalarea Python pentru instalare țâfnă, dar dacă aveți Python 2.7.9 și mai mare, sau Python 3.4 și mai sus, deja aveți țâfnă!

scikit-image acum poate fi instalat pur și simplu tastând următoarea comandă (în terminalul Mac OS X):

pip instalare -U scikit-imagine

Acum avem biblioteca instalată și pregătită pentru o distracție de procesare a imaginii!

Imaginea testului pe care o vom folosi în acest tutorial este baboon.png. Continuați și descărcați-o sau pur și simplu utilizați imaginea la alegere. Imaginea arată după cum urmează:

Dimensiunile unei imagini

Uneori trebuie să cunoaștem dimensiunile unei imagini (mai multe despre aceasta în secțiunea de filtrare). Pentru a verifica dimensiunile imaginii noastre, putem folosi guess_spatial_dimensions () , după cum urmează:

de la importul skimage io, culoare img = io.imread ('baboon.png') dimensiuni = color.guess_spatial_dimensions (img) dimensiuni de imprimare

Rezultatul scriptului de mai sus este 3, ceea ce înseamnă că avem o imagine compusă din trei dimensiuni spațiale.

Culoare pentru tonuri de gri

Din secțiunea de mai sus, am observat că imaginea noastră este o imagine 3D array (în format RGBA cu forma (..., ..., 4)). De unde știam că este în format RGBA? Puteți face următoarele:

import skimage.io ca io de la skimage.color import rgb2gray img = io.imread ('baboon.png') print img.shape

În acest caz, veți obține această ieșire: (512, 512, 4).

În această secțiune, dorim să convertim imaginea originală colorată baboon.png într-o imagine 2D în nuanțe de gri (alb-negru). Acest lucru se poate face simplu folosind următorul script:

import skimage.io ca io de la skimage.color import rgb2gray img = io.imread ('baboon.png') img_grayscale = rgb2gray (img)

Să mergem mai departe și să salvăm imaginea nouă (în nuanțe de gri) într-un fișier. Acest lucru se poate face folosind imsave () funcția, după cum urmează (observați că noua imagine este în fișier babuin-gs.png):

io.imsave ( 'babuin-gs.png', img_grayscale)

Pentru a verifica dimensiunile imaginii, putem folosi scriptul din secțiunea anterioară, caz în care veți obține 2 întors. Sau puteți folosi img_grayscale.shape, care are ca rezultat 512x512. Deci, acum avem o imagine 2D.

Pentru a afișa noua imagine în tonuri de gri, adăugați următoarele la sfârșitul scriptului:

show_grayscale = io.imshow (img_grayscale) io.show ()

Rezultatul arată astfel: 

Aplicarea unui filtru la o imagine

În procesarea imaginilor, filtrare este efectuată pentru a face unele îmbunătățiri în imagine. În general, filtrarea cuprinde următoarele operații: îmbunătățirea marginilor, ascuțirea și netezirea.

În această secțiune, vă voi arăta cum putem aplica filtrul Sobel pe imaginea noastră și să vedem cum arată rezultatul după efectuarea unei astfel de operații. Voi folosi exemplul afișat pe prima pagină a site-ului Web de știri, dar aplicat pe imaginea noastră.

Scriptul pentru aplicarea filtrului Sobel pe imaginea noastră arată după cum urmează:

din importul datelor de scanare, io, filtrele img = io.imread ('baboon.png') marginile = filters.sobel (img) io.imshow (margini) io.show

Dacă rulați scenariul, ați observat probleme? Da, nu am putut aplica operația deoarece imaginea trebuie să fie o imagine 2D. Deci, în loc de a folosi baboon.png, trebuie să folosim imaginea noastră 2D, babuin-gs.png. Rezultatul acestei operațiuni arată după cum urmează:

Concluzie

Există multe operațiuni de procesare a imaginilor și scikit-image Biblioteca Python ne oferă multe operații interesante pe care le putem efectua pe imaginile noastre. Puteți vedea mai multe operații de procesare a imaginilor utilizând această bibliotecă pe site-ul web de știri.

Aflați Python

Aflați Python cu ghidul nostru complet de instrucțiuni Python, indiferent dacă sunteți doar începători sau sunteți un coder experimentat în căutarea unor noi abilități.

Cod