|
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