Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Evolutia procesarii de imagini in Java

Evolutia procesarii de imagini in Java


Procesarile de imagini in Java au fost suportate inca de la prima aparitie, prin intermediul pachetelor java.awt si java.awt.image.

Primele versiuni ale Java AWT API au fost constituite dintr-un pachet de clase utile care urmareau afisarea de imagini aflate in Internet, dar fara nici o functie necesara pentru procesarile de imagini mai complexe. Acest pachet permitea generarea de imagini simple prin desenarea de linii si forme. De asemenea se putea citi un numar foarte mic de formate de fisiere de imagine (doar formatele GIF si JPEG), prin intermediul unui obiect de tip Toolkit din pachetul java.awt. Odata citita, imaginea putea fi doar afisata, deoarece nu prea existau operatori pentru procesarea ei.



Java 2D API extinde pachetul de inceput AWT prin adaugarea unui suport mai ridicat pentru operatii generale de grafica si afisare de imagini. Java 2D a adaugat clase speciale pentru definirea de primitive geometrice, formatarea textelor, definirea fonturilor, spatii de culoare si reprezentare de imagini. Noile clase suporta un set limitat de operatori de procesare de imagini cum ar fi blurr, sharpen, transformari geometrice, imbunatatire de contrast si binarizare. Extensiile Java 2D au fost adaugate la nucleul Java AWT odata cu lansarea platformei J2SE (Java 2 Standard Edition) versiunea 1.2.

Aplicatiile mai pretentioase au nevoie insa de un API de procesare a imaginilor cu facilitati mult mai dezvoltate. Astfel au fost create de catre diverse companii o serie de API-uri de procesare de imagini care au avut un succes destul de remarcabil, dar nici unul dintre acestea nu au fost universal acceptate deoarece au esuat in a se adresa unui segment specific al domeniului procesarilor de imagini sau nu aveau putere in a indeplini anumite nevoi. Astfel multe companii au trebuit sa-si elaboreze propria implementare in incercarea de a indeplinii aceste nevoi.

Experienta acumulata de catre industrie si mediile universitare in crearea unor biblioteci de procesare de imagini, utilitatea acestor biblioteci peste o mare varietate de domenii de aplicabilitate si reactia utilizatorilor la aceste biblioteci a condus la crearea JAI (Java Advanced Imaging) API.

JAI este conceput pentru a suporta procesari de imagini folosind limbajul de programare Java intr-un mod cat mai general posibil, adresandu-se unui domeniu cat mai larg al aplicatiilor de procesare de imagini. In acelasi timp, JAI prezinta un model de programare simplu care poate fi folosit cu usurinta in aplicatii fara a fi nevoie sa se cunoasca toate fazele din constructia API-ului.

JAI extinde mai departe platforma Java (incluzand Java 2D API) permitand astfel ca procesarile de imagini de mare performanta sa fie incorporate in applet-uri si aplicatii Java. JAI este un set de clase care furnizeaza functionalitati legate de procesarea de imagini dincolo de cele obtinute la Java 2D si Java Foundation Classes, dar fiind in acelasi timp compatibil cu aceste API-uri.

JAI implementeaza un set de resurse de baza in procesarea de imagini care includ lucrul cu sectiuni de imagine, regiuni de interes si executie amanata. JAI ofera de asemenea operatori de baza in procesarea de imagini care includ multi operatori punctuali si spatiali obisnuiti, precum si operatori in domeniul frecventa. JAI incapsuleaza formate de date imagine si invocare de metode distanta printr-un obiect imagine reutilizabil, permitand unui fisier imagine, unui obiect imagine de retea, sau unui flux de date in timp real sa poata fi procesate in mod identic.

JAI este proiectat sa satisfaca cerintele oricarei aplicatii de procesare de imagini, acest API fiind foarte extensibil, permitand ca noi operatii sa fie adaugate.

JAI suporta trei modele de procesare de imagini:

Modelul producer/consumer (producator/consumator) de impingere, care este modelul de baza AWT.

Modelul de mod imediat (Java 2D), care este un model AWT mai avansat.

Model de tip pipeline de tragere, care este un model specific JAI.

Urmatorul tabel (Tabelul 1) contureaza cateva trasaturi pentru fiecare dintre aceste modele de procesare a imaginilor.



Modelul de impingere

Modelul de mod imediat

Modelul de tragere

Interfete/clase importante

Image

ImageProducer

ImageConsumer

ImageObserver

(JDK 1.0.X, 1.1.X)

BufferedImage

Raster

BufferedImageOp

RasterOp

(Java 2D API)

RenderableImage

RenderableImageOp

(Java 2D API)

RenderedOp

RenderableOp

TiledImage

(Java Advanced Imaging)

Avantaje

Procesare condusa de disponibilitatea imaginii (de exemplu in retea)

Imagini procesate incremental

Interfata de programare mai simpla

Modelul cel mai des utilizat

Stocheaza/proceseaza doar datele necesare

Permite evaluarea amanata

Dezavantaje

Necesita transferul (dar nu procesarea) imaginilor complete

Interfata de programare complexa

Necesita alocare de memorie a intregii imagini

Necesita procesarea de imagini intregi

Interfata de programare mai complexa

Implementare mai complexa

Tabelul 1. Modele de procesare a imaginilor in Java