MENAMPILKAN CITRA
1.1 Pendahuluan
NetBean disini hanya digunakan untuk editor bahasa pemrograman java untuk
pengolahan citra digital, yang akan dibahas hanya untuk mencakup pengolahan citra digital
dan hal yang berhubungan dengan pengolahan cita digital yaitu menampilkan cita, mengolah
citra, membaca citra, membentuk citra, menyimpan citra dan implementasi metode-metode
yang telah dipelajari pada saat teori . Langkah-langkahnya sebagai berikut:
1
1. Buka aplikasi Netbeans
Langkah pertama adalah menjalankan NetBean dengan cara double click icon
NetBean yang ada pada dekstop atau dari start menu, hingga muncul spash screen NetBean
seperti terlihat pada gambar 1.1 berikut.
Setelah muncul jendela NetBean maka buat projek baru dengan cara klik fileNew
Project seperti terlihat pada gambar 1.2.
Ganti nama projek,folder penyimpanan dari projek tersebut dan finish, seperti terlihat
pada gambar 1.4 berikut.
Gambar 1.4 Name and Location
Dari gambar diatas dapat dilihat nama project adalah guicitra dan projek location
Z:\materi kuliah\bahan ajar s1\buku, anda dapat mengubah sesuai keinginan anda,
setelah pilih finish maka akan muncul jendela kerja seperti terlihat pada gambar 1.5
berikut:
Gambar 1.6 adalah ilustrasi dari cara membuat Jpanel Form baru yaitu Klik kanan pada
source package –Guicitra New JPanel Form dan beri nama tampilcitra, seperti pada
gambar 1.7 berikut:
Gambar 1.8 menunjukan tampilan design dari tampilcitra.java, untuk mengisi code program
maka pilih source lalu ketik program dibawah ini dan sesuaikan dengan code yang sudah ada
tidak perlu dihapus.
JFrame adalah salah satu class dalam java yang dapat digunakan untuk membuat frame
sebagai top-level container. Top-level container adalah container dasar di mana komponen
swing lainnya diletakkan. Komponen lain yang dimaksudkan antara lain: button, textField,
label, dll. Jadi frame di java identik dengan istilah form dalam visual basic. Cara untuk
membuatnya sama dengan proses sebelumnya hanya saja memilih Jframe Form pada menu
New seperti terlihat pada gambar 1.9.
Gambar 1.9 Membuat Jframe Form
Langkah selanjutnya adalah klik dan tarik tampilcitra.java kedalam frame yang digunakan
untuk menampilkan citra, dan Menu Bar sebagai menu pada aplikasi yang akan dibuat,
seperti terlihat pada gambar 1.10.
Langkah selanjutnya ada memasukan kode untuk mengambil dan menampilkan citra pada
form yang dibuat caraya adalah klik kanan pada menu Get ImageEventMouse
mouseClicked, seperti terlihat pada gambar dibawah, cara ini berlaku untuk event atau
komponen lain yang diinginkan seperti terlihat pada gambar 1.11.
Gambar 1.11 Event Mouse
Lalu ketik didalam blok private void jMenu1MouseClicked list program berikut dan
pastikan variable filegambar harus didefenisikan terlebih dahulu didalam class tampilutama
);
public String getExtension(java.io.File f)
{ String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
} else {
return false;
}
} return false;
}
}
if (chooser.showDialog(this,"Cari citra") ==
javax.swing.JFileChooser.APPROVE_OPTION)
{
java.io.File file = chooser.getSelectedFile();
filegambar=(file + "");
}
//load gambar
String fileName = filegambar;
try
{
java.awt.image.BufferedImage buffImageLoaded =
javax.imageio.ImageIO.read(new java.io.File(fileName));
tampilcitra1.setBuffImage(buffImageLoaded);
}catch (Exception e)
{
javax.swing.JOptionPane.showMessageDialog(this,"File tidak ditemukan");
}
Untuk melihat hasil klik run atau tekan f5 maka akan tampil sepeti gambar 1.12 berikut:
Gambar 1.12 Tampilan Awal
pilih Getimage maka akan tapil dialog untuk mencari file seperti gambar 1.13 berikut:
Pilih cari citra maka gambar akan tampil pada form tampilutama seperti terlihat pada gambar
1.14 berikut.
Gambar 1.15 Hasil
1.4 Tugas
PEMBENTUKAN CITRA
2.1 Pendahuluan
Citra merupakan sebuah gambar dua dimensi, yang didapat dari hasil capture sebuah
kamera atau menggambar. Sebuah citra dapat didefinisikan sebagai fungsi dua dimensi f(x,y),
dimana x dan y adalah koordinat spasial, dan amplitudo dari f pada sembarang pasangan
koordinat (x,y) disebut intensitas atau grayscale level (level keabuan) dari citra pada titik
tersebut. Ketika x,y dan nilai intensitas dari f adalah semua terbatas, Discrate quantities, oleh
karena itu citra tersebut dinamakan digital image (citra digital), citra digital dapat ditulis
dalam bentuk matrik seperti terlihat pada gambar 2.1 berikut.
Untuk lebih mengenali citra, berikut contoh program untuk membuat citra warna hitam
dari matriks 200 x 300 yang seluruh matrik memiliki nilai 0. Langkah-langkahnya adalah
tambah java class dan berinama dengan test warna. Seperti terlihat pada gambar berikut 2.2
dan 2.3 berikut:
catch(Exception e){}}
Lalu buat Jframe form baru dengan nama tampilwarna, adapun desiannya seperti gambar 2.4.
Form di atas terdiri dari beberapa komponen objek, untuk menjelaskannya dapat dilihat pada
tabel 2.1 berikut:
Klik kanan pada button1 pilih eventsActionactionPerformed seperti terlihat pada gambar
2.5 berikut.
B
BufferedImage a;
a=testwarna.black();
try
{
tampilcitra1.setBuffImage(a);
}catch (Exception e)
{
javax.swing.JOptionPane.showMessageDialog(this,"salah");
}
Sehingga dihasilkan seperti berikut:
Keterangan Program:
int red=0;
int green=0;
int blue=0;
bagian kode diatas adalah untuk memberi nilai 0 pada variable red,green dan blue yang akan
diset pada matriks 200 x 300, matriks 200 x 300 yang menampung nilai tersebut dapat dilihat
pada potongan program berikut BufferedImage image1 = new BufferedImage(200, 300,
BufferedImage.TYPE_INT_RGB);, image1 merupakan variable yang bertipe data
BufferedImage untuk menampung citra yang akan dibuat.
Potongan program diatas adalah untuk mengeset nilai red,green,blue yang bernilai 0 yang
akan dikonversikan menjadi warna hitam pada variable image1.
ImageIO.write(image1, "jpg", new File("black.jpg")); baris program berikut untuk membuat file
bertipe jpg dengan nama black.jpg dari hasil citra yang ditampung pada variable image1.
return image; digunakan untuk mengembalikan nilai pada variable yang memanggil method
ini, jadi keluaran dari program ini adalah berbentuk file dan nilai yang dikembalikan pada
pemanggilnya sehingga variable pemanggil dapat ditampilkan pada tampilcitra1. Adapun
kode program pada pemanggilan hanya untuk memanggil fungsi/method black pada class
testwarna.
BufferedImage a; inisialisasi variable a agas dapat menampung array citra,
a=testwarna.black(); variable a menampung hasil pemanggilan dari fungsi/method black pada
class testwarna. tampilcitra1.setBuffImage(a); digunakan untuk menampilkan citra pada
form.
else
{
red[i][j]=0;
green[i][j]=0;
blue[i][j]=255;
}
Color c = new Color(red[i][j], green[i][j], blue[i][j]);
image1.setRGB(i, j, c.getRGB());
}
}
image=image1;
ImageIO.write(image1, "jpg", new File("rgb.jpg"));
}
catch(Exception e){
return image;
}
Panggil program diatas dari jButton2 yang diberinama RGB, pemanggilan dilakukan
sama dengan saat memanggil fungsi black hanya saya perbedaan terletak pada baris untuk
nilai variable a yaitu a=testwarna.rgb(); sehingga saat diclik menghasilkan gambar 2.7
berikut:
Gambar 2.7 Hasil Pemanggilan RGB
Citra grey adalah citra yang bergerak dari hitam keputih, yang memiliki warna
sebanya 256 yang bergerak dari 0 sampai 255, berikut adalah fungsi untuk melihat
pergerakan warna greylevel.
try {
int width = image.getWidth()-1;
int height = image.getHeight()-1;
int b=grey;
return image;
} catch (Exception e) {}
return null;
}
Lalu panggil fungsi diatas, klik kanan pada jSlider1eventchangestateChanged seperti
pada gambar berikut:
BufferedImage a;
a=testwarna.greylevel(tampilcitra1.getBuffImage(),jSlider1.getValue());
try
{
tampilcitra1.setBuffImage(a);
}catch (Exception e)
{
javax.swing.JOptionPane.showMessageDialog(this,"salah");
}
Pergerakan nilai RGB citra yang dimaksud adalah bagai mana membuat citra tampak
berubah warna jika digeser nilai red, green dan blue, hingga dapat memahami konsep citra
RGB, konsepnya sama dengan greylevel hanya saja greylevel hanya memiliki satu warna
yang bergerak dari 0 sampai 255, sedangkan RGB memiliki tiga warna hingga didapatkan
256 x 256 x 256 kombinasi warna. Berikut kode programnya:
try {
int width = image.getWidth()-1;
int height = image.getHeight()-1;
for(int i=0; i<height; i++)
{ for(int j=0; j<width; j++){
}
return image;
} catch (Exception e) {}
return null;
}
Panggil kode di atas pada jSlider1 hingga dihasilkan seperti terlihat pada gambar:
Merah
2.6 Tugas
1. Buatlah citra berwarna putih dari matriks 300 x 500 yang berisikan nilai 255
2. Buatlah citra RGB dari matriks hingga hasilnya seperti gambar berikut:
3. lengkapi program sebelumnya sehingga pergerakan warna tidak hanya merah saja akan
tetapi tambah scroll untuk pergeseran green dan blue juga.
BAB III
3.1 Pendahuluan
Tujuan utama penigkatan kualitas citra adalah citra hasil transformasi menjadi lebih
baik dari citra sebelumnya. Ciri-ciri operasinya yaitu memanipulasi parameter-parameter
yang ada pada citra seperti biner, Grayscale, Brightness dan kontras , pada bab ini kita akan
mengimplementasikannya dalam pemrograman java.
Konversi RGB ke GreyScale seperti yang telah dijelaskan pada saat teori yaitu
merubah citra warna menjadi citra Greyscale dengan mengambil nilai rata-rata dari rgb
dijadika satu intensitas warna saja. Berikut adalah langkah-langkahnya:
Tambah java class seperti terlihat pada gambar 2.1 dan beri nama dengan
imageenhacement.
package Guicitra;
import java.awt.*;
import java.awt.image.BufferedImage;
public class imageenhacement {
BufferedImage image;
public static BufferedImage GrayScale1 (BufferedImage image)
{ try {
int width = image.getWidth()-1;
int height = image.getHeight()-1;
for(int i=0; i<height; i++){
for(int j=0; j<width; j++){
Color c = new Color(image.getRGB(j, i));
int red = (int)(c.getRed() * 0.299);
int green = (int)(c.getGreen() * 0.587);
int blue = (int)(c.getBlue() *0.114);
Color newColor = new Color(red+green+blue,
red+green+blue,red+green+blue);
image.setRGB(j,i,newColor.getRGB());
}
}
return image;
} catch (Exception e) {}
return null;
}
3.4 Brightness
Brightness adalah kecerahan citra, dengan kata lain penambahan intensitas citra jika
penambahan dengan nilai positif maka citra akan semakin terang, namun jika ditambah
dengan nilai negatif maka citra akan semakin gelap. Perubahan dari gelap ke terang atau
sebaliknya dikatakan brightness.
try {
int width = image.getWidth()-1;
int height = image.getHeight()-1;
int b=50;
for(int i=0; i<height; i++)
{ for(int j=0; j<width; j+
+){
Color c = new Color(image.getRGB(j, i));
int red = (int)(c.getRed() +b);
int green = (int)(c.getGreen() +b);
int blue = (int)(c.getBlue() +b);
if (red>255) red=255;
if (green>255) green=255;
if (blue>255) blue=255;
Color newColor = new Color(red,
green,blue);
image.setRGB(j,i,newColor.getRGB());
}
}
return image;
} catch (Exception e) {}
return null;
}
Keterangan:
Keterangan ini tidak menjelaskan semua kode program, namun yang dijelaskan
adalah dianggap perlu, dan harus diingat kembali bahwa pemrograman java adalah case
sensitive artinya huruf besar dan kecil dibedakan:
BufferedImage image;
int width;
int height;
potongan list program diatas adalah mendeklarasikan variable atribut dari class
imageenhacement yang dapat digunakan pada seluruh method yang ada di dalamnya, image
bertipe data BufferedImage artinya image adalah variable yang menampung citra yang
berisikan array dari elemen picture (pixel), sedangkan width dan height adalah variable yang
bertipe data integer untuk menampung lebar dan tinggi dari citra.
Color c = new Color(image.getRGB(j, i)); adalah deklarasi objek c sebagai Color dari
image.getRGB(j, i), image sebelumnya adalah inputan citra dan .getRGB(j, i) adalah untuk
mengambil RGB pada variable image pada posisi j,i.
int red = (int)(c.getRed() * 0.299); red adalah variable yang menampung color(warna) dari
warna red c.getRed() sedangkan pengalinya 0.299 proses untuk menjadikan grayscale sesuai
format yang dilakukan pada matlab, jika mengikut dari buku panduan teori adalah 0.33.
List program diatas tidaklah menghasilkan apapun tanpa dipanggil atau digunakan,
lankah selanjutnya kita akan menambahkan menu pada tampilutama.java untuk memanggil
class dan method yang kita buat diatas, caranya adalah sebagai berikut:
Klik kanan pada menu prosesAdd From PaletteMenu Item seperti terlihat pada gambar
3.2:
Berinama menu sesuai yang dinginkan , lalu input program panggil pada events
actionPerforment seperti terlihat pada gambar dibawah 3.3.
Gambar 3.3 Action Performed
BufferedImage a;
a=imageenhacement.GrayScale1(tampilcitra1.getBuffImage());
try
{
tampilcitra1.setBuffImage(a);
}catch (Exception e)
{
javax.swing.JOptionPane.showMessageDialog(this,"salah");
Hasil dari pemanggilan Method Grayscale1 pada class imageenhacement dapat dilihat pada
gambar 3.4a dan 3.4b.
1. Buat Menu Item untuk memanggil method Biner dan Brightness dan bagaimana
hasilnya
2. Buat Method untuk proses kontras dan buat menu untuk memanggilnya.
3. Buat method untuk operasi ligaritmik dan operasi power-low
BAB IV
4.1 Pendahuluan
Perbaikan citra sedikit berbeda dengan peningkatan kualitas citra. Ciri-ciri operasi
perbaikan citra yaitu tujuannya memperbaiki citra yang terdegradasi atau cacat akibat terkena
noise pada saat pengiriman atau pengambilan citra. Adakalanya gangguan atau noise sengaja
ditimbulkan pada citra dengan tujuan untuk menguji metode perbaikan citra yang terbaik,
namun pada dasarnya gangguan pada citra terjadi tanpa disengaja. Oleh sebab itu pada
pengolahan citra terdapat spesifikasi ilmu berdasarkan tujuannya, salah satunya perbaikan
citra.
Banyak metode yang dikembangkan untuk restorasi citra seperti jaringan syaraf
tiruan, namun yang akan dibahas pada bab ini adalah menggunakan filter yang biasa
digunakan oleh kalangan pemula antara lain filter rata-rata, median, minimum, maksimum
dan filter gaussian.
Filter Rata-rata atau mean filtering, sesuai dengan namanya filter ini akan mengganti
nilai intensitas sebuah piksel dengan rerata nilai piksel tetangganya dan piksel itu sendiri,
filter rata-rata(mean filter) sering digunakan untuk smooting atau reduksi noise.
}
}
for(int i=0; i<height; i++)
{ for(int j=0; j<width; j+
+){
red=red1[j][i];
green=green1[j][i];
blue=blue1[j][i];
if (red>255)
{
red=255;
}
if (green>255)
{
green=255;
}
if (blue>255)
{
blue=255;
}
Filter Minimum atau low pass filter adalah meloloskan nilai intensitas piksel terkecil.
Filter minimum ini kebalikan dari filter maksimum, Nilai intensitas piksel yang berada
ditengah maks akan digantikan dengan nilai intensitas terkecil piksel-piksel tetangganya.
}
}
}
else
{
Color c = new Color(image.getRGB(j, i));
red = (int)(c.getRed());
green = (int)(c.getGreen());
blue = (int)(c.getBlue());
}
red1[j][i]=(int)(red);
green1[j][i]=(int)(green);
blue1[j][i]=(int)(blue);
}
}
for(int i=0; i<height; i++)
{ for(int j=0; j<width; j+
+){
red=red1[j][i];
green=green1[j][i];
blue=blue1[j][i];
// System.out.println(String.valueOf(red));
if (red>255)
{
red=255;
}
if (green>255)
{
green=255;
}
if (blue>255)
{
blue=255;
}
Keterangan
for(int x=i-1;x<=i+1;x++)
{
for (int y=j-1;y<=j+1;y++)
{
Blok perulangan diatas menunjukan bahwa filter yang dirancang adalah 3 x 3, jika
menggunakan filter 5 x 5 akan berubah menjadi seperti berikut:
for(int x=i-2;x<=i+2;x++)
{
for (int y=j-2;y<=j+2;y++)
{
Jika i=3, maka perulangan x=3-2 sampai 3+2 atau dari 1 sampai 5, menunjukan berulang
sampai 5 kali.
4.4 Tugas
TRANSFORMASI GEOMETRI
5.1 Pendahuluan
Telah diketahui bahwa suatu titik pada citra(piksel) mempunyai dua komponen, yaitu
kordinat piksel (x,y) dan warna keabuan piksel f(x,y). Pada operasi perbaikan citra, operasi-
operasi yang digunakan hanya memodifikasi warna piksel saja, sedangkan kordinat piksel
tetap tidak mengalami perubahan. Untuk kebutuhan pengolahan citra, sering sekali
diperlukan perubahan-perubahan bentuk giometri citra baik ukuran maupun orientasinya.
5.3 Rotasi
Rotasi juga merupakan operasi geometri yang tidak mengalami perubahan ukuran
citra, sebuah pixel yang posisinya di (x,y) diputar terhadap titik pusat putaran (xc,yc) dengan
sudut 𝜃 hingga posisi akhirnya pada titik (xc’,yc’).
5.4 Cropping
Operasi cropping adalah pengolahan citra dengan kegiatan memotong suatu bagian
dari citra. Sebuah citra di-cropping sebesar W x H. titik(x1,y1) dan(x2,y2) adalah kordinat
titik pojok kiri atas dan pojok kanan bawah citra yang akan di-crop. Rumus yang digunakan
adalah:
/**
* Creates new form CropImage
*/
int drag_status=0,c1,c2,c3,c4;
public static void main(String args[])
{ new CropImage().start();
}
public void start() {
ImagePanel im=new ImagePanel("faeza.jpg");
add(im); setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener( this );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void draggedScreen()throws Exception {
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
Robot robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
File save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Cropped image saved successfully.");
}
@Override
public void mouseClicked(MouseEvent arg0) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
} @Override
public void mousePressed(MouseEvent arg0)
{ repaint();
c1=arg0.getX();
c2=arg0.getY();
}
@Override
public void mouseReleased(MouseEvent arg0)
{ repaint();
if(drag_status==1) {
c3=arg0.getX();
c4=arg0.getY();
try {
draggedScreen();
} catch(Exception e)
{ e.printStackTrace(
);
}
}
}
@Override public void mouseDragged(MouseEvent arg0)
{ repaint();
drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@Override public void mouseMoved(MouseEvent arg0) {
}
public void paint(Graphics g)
{ super.paint(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
if(w<0) w = w * -1;
g.drawRect(c1, c2, w, h);
}
public CropImage() {
initComponents();
}}
5.5 Tugas
1. Buat Program untuk pencerminan citra secara vertikal dan horizontal bersamaan.
2. Modifikasi Program rotasi hingga dapat digunakan dengan berbagai sudut.
BAB VI
SEGMENTASI CITRA
6.1 Pendahuluan
Segmentasi citra bertujuan untuk membagi wilayah-wilayah yang homogen.
Segmentasi adalah salah satu metode penting yang digunakan untuk mengubah citra input ke
dalam citra output berdasarkan atribut yang diambil dari citra tersebut. Segmentasi membagi
citra ke dalam daerah intensitasnya masing-masing sehingga bisa membedakan antara objek
dan background-nya. Pembagian ini tergantung pada masalah yang akan diselesaikan.
Segmentasi harus dihentikan apabila masing-masing objek telah terisolasi atau terlihat
dengan jelas. Tingkat keakurasian segmentasi bergantung pada tingkat keberhasilan prosedur
analisis yang dilakukan. Dan diharapkan proses segmentasi memiliki tingkat keakuratan yang
tinggi.
Dimana M adalah besar gradient di titik tengah kernel dan turunan parsial dihitung
menggunakan persamaan berikut.
𝑆𝑥 = (𝑎2 + 𝑐𝑎3 + 𝑎4) − (𝑎0 + 𝑐𝑎7 + 𝑎6)
𝑆𝑦 = (𝑎0 + 𝑐𝑎1 + 𝑎2) − ( 𝑎6 + 𝑐𝑎5 + 𝑎4)
Dimana c adalah konstanta yang bernilai 2. Sx dan Sy diimplementasikan menjadi kernel
berikut.
-1 0 1 1 2 1
𝑆𝑥 = -2 0 2 𝑆𝑦 = 0 0 0
-1 0 1 -1 -2 -1
Tampak bahwa operator sobel menggunakan pembobotan pada piksel yang lebih dekat
dengan titik pusat kernel. Oleh karena itu, pengaruh piksel-piksel tetangga akan berbeda
sesuai dengan letaknya terhadap titik dimana gradient dihitung. Dalam melakukan
perhitungan gradient, operator ini merupakan gabungan dari posisi mendatar dan posisi
vertikal.
maks=new int[3][3];
maks[0][0]=1;
maks[0][1]=2;
maks[0][2]=1;
maks[1][0]=0;
maks[1][1]=0;
maks[1][2]=0;
maks[2][0]=-1;
maks[2][1]=-2;
maks[2][2]=-1;
for(int i=0; i<height; i++)
{ for(int j=0; j<width; j+
+){
grey=0;
if ((i>0 && i< height-1) && (j>0 && j<width-1))
{ m=
0;
for(int x=i-1;x<=i+1;x++)
{
n=0;
for (int y=j-1;y<=j+1;y++)
{
}
else
{
Color c = new Color(image.getRGB(j, i));
red = (int)(c.getRed());
green = (int)(c.getGreen());
blue = (int)(c.getBlue());
grey=(int)(red+green+blue)/3;
}
grey1[j][i]=(int)grey;
}
}
for(int i=0; i<height; i++)
{ for(int j=0; j<width; j+
+){
grey=grey1[j][i];
if (grey>255)
{
grey=255;
}
else if(grey<0)
{
grey=0;
}
// System.out.println(String.valueOf(red));
6.3 Tugas
4. Lengkapi seluruh program dari bab 1 sampai bab 6, hingga seluruh tugas dalam masing-
masing menu.