Filtrarea și conversia fotografiilor digitale

Java: Articole Filtrarea și conversia fotografiilor digitale

O imagine de testare poate fi găsită în "Modelarea fotografiilor digitale cu ConvolveOp". De asemenea, puteți face fotografia aici. În exemplele de cod de mai jos, fotografia se numește test.jpg. Imaginea trebuie să fie în același director în care să verificați exemplele.







În primul rând, vom crea o bază pentru aceste exemple. Următorul program, ExampleFramework (exemplu de bază), este același ca în exemplu în ConvolveOp. Pe lângă exemplele de cod din sfaturile anterioare, ExampleFramework folosește un JFrame care conține o imagine și utilizează JSlider. Cu toate acestea, pentru a facilita înțelegerea diferitelor filtre și transformări, în locul codului referitor la efecte speciale, au fost plasate funcții de acces rapid. Pentru consistență, imaginea în cauză va fi tratată ca filtre filtrată (filtrat) dacă se aplică filtre sau transformări.

Să folosim transformările afine în primul exemplu pentru a mări și micșora imaginea. Poate doriți să vă referiți la numărul "Înțelegerea transformărilor afine" pentru unele detalii matematice ale acestor transformări. Veți crea transformări afine și veți trece două argumente. Apoi, veți crea o imagine nouă de la cea veche cu ajutorul AffineTransformOp, pe care deja l-ați creat. În sfârșit, spuneți obiectului ExampleFramework să actualizați imaginea pe ecran. Iată codul care reprezintă acești pași:

Primul argument determină tipul de afinitate pe care l-ați creat. În acest caz, creați scalarea prin trimiterea la funcția getScaleInstance () și trimiteți parametrii orizontali și verticali. Al doilea argument definește tipul de interpolare. În acest caz, utilizați tipul TYPE_BILINEAR (tip bilinear), care consideră valoarea fiecărui pixel drept media pixelilor vecini. O altă alegere poate fi TYPE_NEAREST_NEIGHBOR (cel mai apropiat tip de vecin) care introduce cea mai apropiată valoare a pixelilor. Experimentați cu fiecare tip de interpolare în acest exemplu. Rețineți că TYPE_BILINEAR este ușor mai lent, dar oferă o calitate mai bună a imaginii. Deși TYPE_NEAREST_NEIGHBOR este mai sensibil, imaginea devine rapidă când este mărită.







Compilați și executați următorul program, ScaleExample.java, pentru a vedea această conversie în acțiune.

O altă transformare afină este o rotație în jurul unui punct fix. Puteți calcula centrul imaginii. Apoi puteți trimite aceste informații împreună cu numărul la care doriți să rotiți imaginea, funcția getRotateInstance (). Ca și în exemplul anterior, puteți să înlocuiți TYPE_BILINEAR cu TYPE_NEAREST_NEIGHBOR și să comparați rezultatele. Iată modificările pentru rotație.

RescaleOp () este inițializată cu primul parametru - setul de multiplicatori. Dacă doriți să reprezentați imaginea originală, multiplicatorul trebuie să fie 1. Pentru a lumina imaginea, valoarea trebuie să fie mai mare decât una și pentru o umbrire mai mică decât 1. De asemenea, puteți utiliza al doilea argument pentru a determina decalajul. Această valoare se va adăuga după cum urmează:

Experimentați cu diferite valori de schimbare în următorul program, LinearBrightness.java (luminozitate liniară).

Compilați și rulați LookupExample (căutare probă). Rețineți că luminozitatea este foarte diferită de cea care a fost atunci când LinearBrightness (luminare liniară). Dacă doriți să urmăriți pixelii care se modifică pe măsură ce mutați glisorul, le puteți selecta cu funcția setBrightnessFactor ():

În ultimul exemplu, puteți utiliza ColorConvertOp pentru a reda imaginea alb-negru:

Puteți aplica mai mult de o transformare. Apoi, puteți folosi filtrele din exemplul LookupExample pentru imaginea alb-negru, așa cum se arată în următorul program, GrayExample (exemplu gri).

Începând cu aceste exemple de bază, puteți experimenta, combina și extinde, ceea ce va face filtre sofisticate și interesante pentru imaginile digitale.

Pentru mai multe informații despre imagini, consultați: "Crearea imaginilor"


Avertizare. mysql_connect () [function.mysql-connect]: Nu se poate conecta la serverul MySQL local prin socket '/tmp/mysql.sock' (2), în /pub/home/javaport/javaportal/books/show2b.php pe linia 11

Avertizare. mysql_db_query () [function.mysql-db-interogare]: Nu se poate conecta la serverul MySQL local prin socket '/tmp/mysql.sock' (2), în /pub/home/javaport/javaportal/books/show2b.php pe linia 19

Avertizare. mysql_db_query () [function.mysql-db-interogare]: Un link către serverul nu a putut fi stabilită în /pub/home/javaport/javaportal/books/show2b.php pe linia 19

Avertizare. mysql_fetch_array (): argumentul furnizat nu este valid Resource Resource MySQL în /pub/home/javaport/javaportal/books/show2b.php on line 30
Aflați la ce vă gândiți cu adevărat acum.


[a apărut o eroare în timpul procesării acestei directive]


Avertizare. mysql_connect () [function.mysql-connect]: Nu se poate conecta la serverul MySQL local prin socket '/tmp/mysql.sock' (2), în /pub/home/javaport/javaportal/news/worldnews.php pe linia 91

Avertizare. mysql_db_query () [function.mysql-db-interogare]: Nu se poate conecta la serverul MySQL local prin socket '/tmp/mysql.sock' (2), în /pub/home/javaport/javaportal/news/worldnews.php pe linia 93

Avertizare. mysql_db_query () [function.mysql-db-interogare]: Un link către serverul nu a putut fi stabilită în /pub/home/javaport/javaportal/news/worldnews.php pe linia 93

Avertizare. mysql_fetch_array (): argumentul furnizat nu este valabil MySQL Resource în /pub/home/javaport/javaportal/news/worldnews.php on line 95







Trimiteți-le prietenilor: