Jumat, 16 Desember 2016

PENGOLAHAN CITRA - uas

uas.java
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Image;
import java.awt.image.PixelGrabber;
import java.lang.*;

public class uas extends Applet
{
    Image img;
    int lebar, tinggi;
    int warna, red, green, blue, abuabu, alpha, tempwarna;
    String tampil;
    int m,n;
    double kernelF[][];
   
    public void init()
    {
        img=this.getImage(this.getDocumentBase(),"UAS.png");
        lebar=img.getWidth(this);
        m=3;
        n=3;
        kernelF = new double [m+1][n+1];
        kernelF[1][1]=-3; kernelF[1][2]=-3; kernelF[1][3]=-3;
        kernelF[2][1]=-3; kernelF[2][2]=0; kernelF[2][3]=5;
        kernelF[3][1]=-3; kernelF[3][2]=5; kernelF[3][3]=5;
    }
   
    public double konvolusi (int x, int y, int m, int n, int tempBitmap[][], double kernel[][])
    {
        double hasil;
        hasil=0;
        //rumus konvolusi
        for(int i=-1;i<2;i++)
        {
            for(int j=-1;j<2;j++)
            {
                hasil = hasil + (tempBitmap[x+i][y+j] * kernel[m-1+i][n-1+j]);
            }
        }
        //tresholding atau ada yang menyebutnya cliping
        if(hasil <0) hasil = 0;
        if (hasil > 255) hasil = 255;
        //return hasil
        return hasil;
    }
   
    public void setNilaiTepi (int processedBitmap[][], int nilai)
    {
        //nilai tepi
        for(int y=0;y<=tinggi;y++)
        {
            processedBitmap[0][y] = nilai;
            processedBitmap[lebar+1][y] = nilai;
        }
        for(int x=0;x<=lebar;x++)
        {
            processedBitmap[x][0] = nilai;
            processedBitmap[x][tinggi+1] = nilai;
        }
    }
   
    public void paint (Graphics g)
    {
        g.setColor(Color.lightGray);
        g.fillRect(0,0,2800,800);
       
        lebar=img.getWidth(this);
        tinggi=img.getHeight(this);
       
        g.setColor(Color.black);
        tampil=String.valueOf(lebar);
        g.drawString("lebar : "+tampil,10,20);
        tampil=String.valueOf(tinggi);
        g.drawString("tinggi : "+tampil,10,40);
       
        g.drawImage(img,10,50,this);
       
        int[] pixels = new int [lebar*tinggi];
        int[][] bitmapR = new int[lebar+2][tinggi+2];
        int[][] bitmapG = new int[lebar+2][tinggi+2];
        int[][] bitmapB = new int[lebar+2][tinggi+2];
        int[][] bitmapA = new int[lebar+2][tinggi+2];
        int[][] bitmapM = new int[lebar+2][tinggi+2];
       
        int[][] repbitmapR = new int[lebar*2][tinggi*2];
        int[][] repbitmapG = new int[lebar*2][tinggi*2];
        int[][] repbitmapB = new int[lebar*2][tinggi*2];
       
        int[][] hasilFR = new int[lebar+1][tinggi+1];
        int[][] hasilFG = new int[lebar+1][tinggi+1];
        int[][] hasilFB = new int[lebar+1][tinggi+1];
       
        PixelGrabber pg = new PixelGrabber(img,0,0,lebar,tinggi,pixels,0,lebar);
        try
        {
            pg.grabPixels();
        }
        catch (InterruptedException ie)
        {
            System.out.println("terjadi kesalahan saat ambil data pixels");
            ie.printStackTrace();
            return;
        }
       
        g.drawString("hasil pengolahan",lebar+100,20);
        g.drawString("normal",lebar+100,40);
        g.drawString("grayscale",lebar+100+lebar+50,40);
        g.drawString("monokrom channel red",lebar+100+2*lebar+2*50,40);
        g.drawString("grayscale channel red",lebar+100+3*lebar+3*50,40);
        g.drawString("replikasi skala 1,5",lebar+100,280);
        g.drawString("filtering warna",lebar+100+lebar+150,280);
        g.drawString("normal red",lebar+100+2*lebar+2*100,280);
       
        g.setColor(Color.black);
        for(int j=0;j<tinggi;j++)
        {
            for(int i=0;i<lebar;i++)
            {
                warna=pixels[j*lebar+i];
                alpha=(warna>>24)&0xff;
                red=(warna>>16)&0xff;
                bitmapR[i][j]=red;
                green=(warna>>8)&0xff;
                bitmapG[i][j]=green;
                blue=(warna)&0xff;
                bitmapB[i][j]=blue;
                abuabu=(red+green+blue)/3;
                bitmapA[i][j]=abuabu;
            }
        }
       
        for(int j=0;j<tinggi;j++)
        {
            for(int i=0;i<lebar;i++)
            {
                //replikasi
                double tempsx=i*1.5;
                double tempsy;
                repbitmapR[(int)(Math.floor(i*1.5))][(int)(Math.floor(j*1.5))] = bitmapR[i][j];
                repbitmapG[(int)(Math.floor(i*1.5))][(int)(Math.floor(j*1.5))] = bitmapG[i][j];
                repbitmapB[(int)(Math.floor(i*1.5))][(int)(Math.floor(j*1.5))] = bitmapB[i][j];
                tempsx=(int)(Math.floor(i*1.5));
                while(tempsx<(i+1)*1.5)
                {
                    tempsy=(int)(Math.floor(j*1.5));
                    while(tempsy<(j+1)*1.5)
                    {
                        repbitmapR[(int)tempsx][(int)tempsy] = bitmapR[i][j];
                        repbitmapG[(int)tempsx][(int)tempsy] = bitmapG[i][j];
                        repbitmapB[(int)tempsx][(int)tempsy] = bitmapB[i][j];
                        tempsy++;
                    }
                    tempsx++;
                }
            }
        }
       
        for(int j=0;j<(tinggi*1.5);j++)
        {
            for(int i=0;i<(lebar*1.5);i++)
            {
                //replikasi
                g.setColor(new Color(repbitmapR[i][j],repbitmapG[i][j],repbitmapB[i][j]));
                g.drawLine(i+lebar+100,j+290,i+lebar+100,j+290);
            }
        }
       
        setNilaiTepi(bitmapA, 128);
        for(int y=1;y<=tinggi;y++)
        {
            for(int x=1;x<=lebar;x++)
            {
                hasilFR[x][y] = (int) konvolusi(x, y, m, n, bitmapR, kernelF);
                hasilFG[x][y] = (int) konvolusi(x, y, m, n, bitmapG, kernelF);
                hasilFB[x][y] = (int) konvolusi(x, y, m, n, bitmapB, kernelF);
            }
        }
        for(int y=1;y<=tinggi;y++)
        {
            for(int x=1;x<=lebar;x++)
            {
                //filtering
                g.setColor(new Color(hasilFR[x][y], hasilFG[x][y], hasilFB[x][y]));
                g.drawLine(x+lebar+100+lebar+150,y+290,x+lebar+100+lebar+150,y+290);
            }
        }
       
        for(int j=0;j<tinggi;j++)
        {
            for(int i=0;i<lebar;i++)
            {
                //normal
                g.setColor(new Color(bitmapR[i][j],bitmapG[i][j],bitmapB[i][j]));
                g.drawLine(i+lebar+100,j+50,i+lebar+100,j+50);
                //abuabu
                g.setColor(new Color(bitmapA[i][j],bitmapA[i][j],bitmapA[i][j]));
                g.drawLine(i+lebar+100+lebar+50,j+50,i+lebar+100+lebar+50,j+50);
                //monokrom red
                if(bitmapA[i][j]<128) bitmapM[i][j]=0;
                if(bitmapA[i][j]>127) bitmapM[i][j]=255;
                g.setColor(new Color(bitmapM[i][j],0,0));
                g.drawLine(i+lebar+100+2*lebar+2*50,j+50,i+lebar+100+2*lebar+2*50,j+50);
                //grayscale red
                g.setColor(new Color(bitmapA[i][j],0,0));
                g.drawLine(i+lebar+100+3*lebar+3*50,j+50,i+lebar+100+3*lebar+3*50,j+50);
                //normal red
                g.setColor(new Color(bitmapR[i][j], 0, 0));
                g.drawLine(i+lebar+100+2*lebar+2*100,j+290,i+lebar+100+2*lebar+2*100,j+290);
            }
        }
    }
   
    public void repaint (Graphics g)
    {
        //kosongkan
    }
}




uas.html
<html>
<head>
    <title> UAS <title>
</head>
    <body>
        <applet code=uas.class width=1000 height=800></applet>
    </body>
</html>

Kamis, 15 Desember 2016

MANAJEMEN JARINGAN - GNS3

Kalian bisa download aplikasinya disini. Langkah-langkahnya :
1. Sebelumnya copy file mikrotik.img dan mikrotik.iso ke folder C:\Program Files\GNS3\qemu-2.2.0.
Buka cmd -> run administrator. ketik seperti gambar ini.
2. Lalu akan muncul seperti ini
ketik A -> I -> N -> Y akan muncul kotak dialog seperti atas kembali.
3. Buka GNS3 klik edit




jika sudah selesai maka mikrotik sudah tersetting di dalam gns3.

Sabtu, 03 Desember 2016

PENGOLAHAN CITRA - Kontur

coding contur.java :
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Image;
import java.awt.image.PixelGrabber;

public class contur extends Applet
{
    Image img, img2;
    int lebar, tinggi, posX, posY, filter, tepi;
    int lebar2, tinggi2, posX2, posY2, filter2, tepi2;
    int warna, alpha, red, green, blue, abuabu, tempwarna;
    int warna2, alpha2, red2, green2, blue2, abuabu2, tempwarna2;
    String tampil, tampil2, rantai, rantai2, kon, kon2;
    int m, n;
    double kernelK[][];
   
    public void init()
    {
        img=this.getImage(this.getDocumentBase(),getParameter("filegambar"));
        lebar=img.getWidth(this);
        filter=Integer.parseInt(getParameter("filter"));
        tepi=Integer.parseInt(getParameter("tepi"));
       
        img2=this.getImage(this.getDocumentBase(),getParameter("filegambar2"));
        lebar2=img2.getWidth(this);
        filter2=Integer.parseInt(getParameter("filter"));
        tepi2=Integer.parseInt(getParameter("tepi"));
       
        m=3;
        n=3;
        kernelK=new double [m+1][n+1];
        //isi kernel kontur
        kernelK[1][1]=-1; kernelK[1][2]=-1; kernelK[1][3]=-1;
        kernelK[2][1]=-1; kernelK[2][2]=8; kernelK[2][3]=-1;
        kernelK[3][1]=-1; kernelK[3][2]=-1; kernelK[3][3]=-1;
    }
   
    public double konvolusi (int x, int y, int m, int n, int tempBitmap[][], double kernel[][])
    {
        double hasil;
        hasil=0;
        //rumus konvolusi
        for(int i=-1;i<2;i++)
        {
            for(int j=-1;j<2;j++)
            {
                hasil = hasil + (tempBitmap[x+i][y+j] * kernel[m-1+i][n-1+j]);
            }
        }
        //tresholding atau ada yang menyebutnya cliping
        if(hasil <0) hasil = 0;
        if (hasil > 255) hasil = 255;
        //return hasil
        return hasil;
    }
   
    public void setNilaiTepi (int processedBitmap[][], int nilai)
    {
        //nilai tepi
        for(int y=0;y<=tinggi;y++)
        {
            processedBitmap[0][y] = nilai;
            processedBitmap[lebar+1][y] = nilai;
            processedBitmap[lebar2+1][y] = nilai;
        }
        for(int x=0;x<=lebar;x++)
        {
            processedBitmap[x][0] = nilai;
            processedBitmap[x][tinggi+1] = nilai;
            processedBitmap[x][tinggi2+1] = nilai;
        }
    }
   
    public void cari(int nextX, int nextY, int bitmapRantai[][])
    {
        //cari kode rantai 1
        if(bitmapRantai[nextX+1][nextY] == 0)
        {
            rantai = rantai + "1";
            bitmapRantai[nextX+1][nextY] = 1;
            cari(nextX+1, nextY, bitmapRantai);
        }
        //cari kode rantai 2
        if(bitmapRantai[nextX+1][nextY-1] == 0)
        {
            rantai = rantai + "2";
            bitmapRantai[nextX+1][nextY-1] =2;
            cari(nextX+1, nextY-1, bitmapRantai);
        }
        //cari kode rantai 3
        if(bitmapRantai[nextX][nextY-1] == 0)
        {
            rantai = rantai + "3";
            bitmapRantai[nextX][nextY-1] = 3;
            cari(nextX, nextY-1, bitmapRantai);
        }
        //cari kode rantai 4
        if(bitmapRantai[nextX-1][nextY-1] == 0)
        {
            rantai = rantai + "4";
            bitmapRantai[nextX-1][nextY-1] = 4;
            cari(nextX-1, nextY, bitmapRantai);
        }
        //cari kode rantai 5
        if(bitmapRantai[nextX-1][nextY] == 0)
        {
            rantai = rantai + "5";
            bitmapRantai[nextX-1][nextY] = 5;
            cari(nextX-1, nextY, bitmapRantai);
        }
        //cari kode rantai 6
        if(bitmapRantai[nextX+1][nextY+1] == 0)
        {
            rantai = rantai + "6";
            bitmapRantai[nextX+1][nextY+1] = 6;
            cari(nextX+1, nextY+1, bitmapRantai);
        }
        //cari kode rantai 7
        if(bitmapRantai[nextX][nextY+1] == 0)
        {
            rantai = rantai + "7";
            bitmapRantai[nextX][nextY+1] = 7;
            cari(nextX, nextY+1, bitmapRantai);
        }
        //cari kode rantai 8
        if(bitmapRantai[nextX+1][nextY+1] == 0)
        {
            rantai = rantai + "8";
            bitmapRantai[nextX+1][nextY+1] = 8;
            cari(nextX+1, nextY+1, bitmapRantai);
        }
    }
   
    public void paint (Graphics g)
    {
        //beri warna pada panel
        g.setColor(Color.lightGray);
        g.fillRect(0,0,2800,800);
       
        //ambil lebar dan tinggi citra
        lebar = img.getWidth(this);
        tinggi = img.getHeight(this);
        lebar2 = img2.getWidth(this);
        tinggi2 = img2.getHeight(this);
       
        //tampilkan informasi lebar dan tinggi citra
        g.setColor(Color.black);
        tampil = String.valueOf(lebar);
        g.drawString("lebar: "+tampil,10,10);
        tampil = String.valueOf(tinggi);
        g.drawString("tinggi: "+tampil,10,30);
       
        tampil2 = String.valueOf(lebar2);
        g.drawString("lebar: "+tampil2,10,170);
        tampil2 = String.valueOf(tinggi2);
        g.drawString("tinggi: "+tampil2,10,190);
       
        //tampilkan citra dengan drawImage
        g.drawImage(img,10,40,this);
        g.drawImage(img2,10,200,this);
       
        //tentukan panjang array pixels
        int [] pixels = new int[lebar*tinggi];
        int [] pixels2 = new int[lebar2*tinggi2];
        int [][] bitmapA = new int [lebar+2][tinggi+2];
        int [][] bitmapR = new int [lebar+2][tinggi+2];
        int [][] bitmapG = new int [lebar+2][tinggi+2];
        int [][] bitmapB = new int [lebar+2][tinggi+2];
        int [][] hasilbitmapA = new int [lebar+1][tinggi+1];
        int [][] hasilK = new int [lebar+1][tinggi+1];
       
        int [][] bitmapA2 = new int [lebar2+2][tinggi2+2];
        int [][] bitmapR2 = new int [lebar2+2][tinggi2+2];
        int [][] bitmapG2 = new int [lebar2+2][tinggi2+2];
        int [][] bitmapB2 = new int [lebar2+2][tinggi2+2];
        int [][] hasilbitmapA2 = new int [lebar2+1][tinggi2+1];
        int [][] hasilK2 = new int [lebar2+1][tinggi2+1];
       
        g.drawString("Hasil Pengolahan",lebar+100,10);
        g.drawString("Grayscale",lebar+100,30);
        g.drawString("Deteksi Tepi",lebar+100+lebar+50,30);
        g.drawString("Kontur",lebar+100+2*lebar+2*50,30);
       
        g.drawString("Grayscale",lebar+100,tinggi+70);
        g.drawString("Deteksi Tepi",lebar+100+lebar+50,tinggi+70);
        g.drawString("Kontur",lebar+100+2*lebar+2*50,tinggi+70);
        g.setColor(Color.black);
       
        PixelGrabber pg = new PixelGrabber(img,0,0,lebar,tinggi, pixels,0,lebar);
        PixelGrabber pg2 = new PixelGrabber(img2,0,0,lebar2,tinggi2, pixels2,0,lebar2);
        try
        {
            pg.grabPixels(); //grab piksel citra ke object pg.
            pg2.grabPixels();
        }
        catch (InterruptedException ie)
        {
            System.out.println("Terjadi kesalahan saat mengambil data pixels");
            ie.printStackTrace();
            return;
        }
       
        for(int y=0;y<tinggi;y++)
        {
            for(int x=0;x<lebar;x++)
            {
                //menguraikan warna dengan model RGB
                warna=pixels[y*lebar+x];
                alpha = (warna>>24) & 0xff;
                red=(warna >> 16) & 0xff;
                bitmapR[x+1][y+1]=red;
               
                green=(warna >> 8) & 0xff;
                bitmapG[x+1][y+1]=green;
               
                blue=(warna) & 0xff;
                bitmapB[x+1][y+1]=blue;
               
                abuabu = (red+green+blue)/3;
                bitmapA[x+1][y+1]=abuabu;
            }
        }
       
        for(int y=0;y<tinggi2;y++)
        {
            for(int x=0;x<lebar2;x++)
            {
                //menguraikan warna dengan model RGB
                warna2=pixels2[y*lebar2+x];
                alpha2 = (warna2>>24) & 0xff;
                red2=(warna2 >> 16) & 0xff;
                bitmapR2[x+1][y+1]=red2;
               
                green2=(warna2 >> 8) & 0xff;
                bitmapG2[x+1][y+1]=green2;
               
                blue2=(warna2) & 0xff;
                bitmapB2[x+1][y+1]=blue2;
               
                abuabu2 = (red2+green2+blue2)/3;
                bitmapA2[x+1][y+1]=abuabu2;
            }
        }
       
        //isi filter tepi
        setNilaiTepi(bitmapA, 255);
        setNilaiTepi(bitmapA2, 255);
       
        for(int y=1;y<=tinggi;y++)
        {
            for(int x=1;x<=lebar;x++)
            {   
                hasilK[x][y] = 0;
            }
        }
        for(int y=1;y<=tinggi2;y++)
        {
            for(int x=1;x<=lebar2;x++)
            {   
                hasilK2[x][y] = 0;
            }
        }
       
        //konvolusi
        for(int y=1;y<=tinggi;y++)
        {
            for(int x=1;x<=lebar;x++)
            {
                hasilbitmapA[x][y] = (int) konvolusi(x, y, m, n, bitmapA, kernelK);
                hasilK[x][y]=255-hasilbitmapA[x][y];
            }
        }
        for(int y=1;y<=tinggi2;y++)
        {
            for(int x=1;x<=lebar2;x++)
            {
                hasilbitmapA2[x][y] = (int) konvolusi(x, y, m, n, bitmapA2, kernelK);
                hasilK2[x][y]=255-hasilbitmapA2[x][y];
            }
        }
       
        //tampil hasil proses
        for(int y=1;y<=tinggi;y++)
        {
            for(int x=1;x<=lebar;x++)
            {
                //abu-abu
                g.setColor(new Color(bitmapA[x][y],bitmapA[x][y],bitmapA[x][y]));
                g.drawLine(x+lebar+100,y+40,x+lebar+100,y+40);
                //deteksi tepi
                g.setColor(new Color(hasilbitmapA[x][y],hasilbitmapA[x][y],hasilbitmapA[x][y]));
                g.drawLine(x+lebar+100+lebar+40,y+40,x+lebar+100+lebar+40,y+40);
                //kontur
                g.setColor(new Color(hasilK[x][y],hasilK[x][y],hasilK[x][y]));
                g.drawLine(x+lebar+100+lebar+40+lebar+40,y+40,x+lebar+100+lebar+40+lebar+40,y+40);
            }
        }
       
        posX = -1; posY = -1;
        for(int y =1; y<lebar;y++)
        {
            for(int x=1;x<tinggi;x++)
            {
                if(hasilK[x][y] == 0)
                {
                    if(posX <0)
                    {
                        posX = x;
                        posY = y;
                    }
                }
            }
        }
        g.setColor(Color.blue);
        g.drawString("Posisi awal gambar 1 X = "+posY+" Y = "+posX,10,3*tinggi+50);
   
        //kode rantai gambar 1
        rantai = "Mulai ";
        cari(posX,posY, hasilK);
        kon = rantai + " Selesai";
        g.drawString("Kode rantai 1 = "+ kon,10,3*tinggi+70);
       
        for(int y=1;y<=tinggi2;y++)
        {
            for(int x=1;x<=lebar2;x++)
            {
                //abu-abu
                g.setColor(new Color(bitmapA2[x][y],bitmapA2[x][y],bitmapA2[x][y]));
                g.drawLine(x+lebar2+100,y+90+tinggi2,x+lebar2+100,y+90+tinggi2);
                //deteksi tepi
                g.setColor(new Color(hasilbitmapA2[x][y],hasilbitmapA2[x][y],hasilbitmapA2[x][y]));
                g.drawLine(x+lebar2+100+lebar2+40,y+90+tinggi2,x+lebar2+100+lebar2+40,y+90+tinggi2);
                //kontur
                g.setColor(new Color(hasilK2[x][y],hasilK2[x][y],hasilK2[x][y]));
                g.drawLine(x+lebar2+100+lebar2+40+lebar2+40,y+90+tinggi2,x+lebar2+100+lebar2+40+lebar2+40,y+90+tinggi2);
            }
        }
       
        posX2 = -1; posY2 = -1;
        for(int y =1; y<lebar2;y++)
        {
            for(int x=1;x<tinggi2;x++)
            {
                if(hasilK2[x][y] == 0)
                {
                    if(posX2 <0)
                    {
                        posX2 = x;
                        posY2 = y;
                    }
                }
            }
        }
       
        g.setColor(Color.blue);
        g.drawString("Posisi awal gambar 2 X = "+posY2+" Y = "+posX2,10,3*tinggi2+92);
        //kode rantai gambar2
        rantai ="";
        rantai = "Mulai ";
        cari(posX2,posY2,hasilK2);
        kon2 = rantai + " Selesai";
        g.drawString("Kode rantai 2 = "+ kon2,10,3*tinggi2+114);
        if(kon.equals(kon2))
        {
            g.setColor(new Color(0,0,0));
            g.drawString("Kedua gambar mempunyai bentuk sama",10,10+2*tinggi+50+180);
        } else
        {
            g.setColor(new Color(255,0,0));
            g.drawString("Kedua gambar mempunyai bentuk berbeda",10,10+2*tinggi+50+180);
        }
    }
   
    public void repaint (Graphics g)
    {
        //kosongkan saja
    }
}

  coding contur.html :
<html>
    <head>
        <title>Kontur</title>
    </head>
    <body>
        <applet code=contur.class width=1000 height=800>
        <PARAM NAME = filegambar VALUE="hex1.jpg">
        <PARAM NAME = filegambar2 VALUE="pen1.jpg">
        <PARAM NAME = filter VALUE=-1>
        <PARAM NAME = tepi VALUE=255>
        <PARAM NAME = filter2 VALUE=-1>
        <PARAM NAME = tepi2 VALUE=255>
        </applet>
    </body>
</html>

PENGOLAHAN CITRA - Deteksi Tepi (Robert, Sobel, Prewitt)

coding rsp.java :
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Image;
import java.awt.image.PixelGrabber;
import java.lang.Math;

public class rsp extends Applet
{
    Image img;
    int lebar,tinggi, parG, parP;
    int warna, red, green, blue,alpha, abuabu, tempwarna;
    String tampil;
    int m; int n;
    double kernelRX[][];
    double kernelRY[][];
    double kernelSX[][];
    double kernelSY[][];
    double kernelPX[][];
    double kernelPY[][];
   
    int bitmapR[][];   
    int bitmapG[][];   
    int bitmapB[][];
    int bitmapA[][];
       
    int hasilbitmapR[][];
    int hasilbitmapG[][];
    int hasilbitmapB[][];
    int hasilbitmapA[][];
       
    int hasilRobert[][];
    int hasilSobel[][];
    int hasilPrewitt[][];
   
    public void init()
    {
        img=this.getImage(this.getDocumentBase(),getParameter("filegambar"));
        parG = Integer.parseInt(getParameter("parg"));
        parP = Integer.parseInt(getParameter("parp"));
        m=3;
        n=3;
       
        kernelRX = new double [m+1][n+1];
        kernelRY = new double [m+1][n+1];
        kernelSX = new double [m+1][n+1];
        kernelSY = new double [m+1][n+1];
        kernelPX = new double [m+1][n+1];
        kernelPY = new double [m+1][n+1];
       
        lebar =img.getWidth(this);
       
        //isi kernelRX
        kernelRX[1][1]=1; kernelRX[1][2]=0;
        kernelRX[2][1]=0; kernelRX[2][2]=-1;
        //isi kernelRY
        kernelRY[1][1]=0; kernelRY[1][2]=-1;
        kernelRY[2][1]=1; kernelRY[2][2]=0;
       
        //isi kernelSX
        kernelSX[1][1]=-1; kernelSX[1][2]=0; kernelSX[1][3]=1;
        kernelSX[2][1]=-2; kernelSX[2][2]=0; kernelSX[2][3]=2;
        kernelSX[3][1]=-1; kernelSX[3][2]=0; kernelSX[3][3]=1;
        //isi kernelSY
        kernelSY[1][1]=1; kernelSY[1][2]=2; kernelSY[1][3]=1;
        kernelSY[2][1]=0; kernelSY[2][2]=0; kernelSY[2][3]=0;
        kernelSY[3][1]=-1; kernelSY[3][2]=-2; kernelSY[3][3]=-1;
       
        //isi kernelPX
        kernelPX[1][1]=-1; kernelPX[1][2]=0; kernelPX[1][3]=1;
        kernelPX[2][1]=-1; kernelPX[2][2]=0; kernelPX[2][3]=1;
        kernelPX[3][1]=-1; kernelPX[3][2]=0; kernelPX[3][3]=1;
        //isi kernelPY
        kernelPY[1][1]=1; kernelPY[1][2]=1; kernelPY[1][3]=1;
        kernelPY[2][1]=0; kernelPY[2][2]=0; kernelPY[2][3]=0;
        kernelPY[3][1]=-1; kernelPY[3][2]=-1; kernelPY[3][3]=-1;
    }
   
    public double konvolusi(int x, int y, int m, int n, int tempBitmap[][], double kernel[][])
    {
        double hasil;
        hasil=0;
        int ht=Math.round(m/2);
        int vt=Math.round(n/2);
        for(int l=1;l<=m;l++)
        {
            for(int k=1;k<=m;k++)
            {
                hasil=hasil+kernel[l][k]*tempBitmap[x+ht-(k-m+ht)][y+vt-(l-n+vt)];
            }
        }
        if(hasil<0) hasil=0;
        if(hasil>255) hasil=255;
        return hasil;
    }
   
    public void setNilaiTepi (int processedBitmap[][], int nilai)
    {
        //nilai tepi
        for(int y=0;y<=tinggi;y++)
        {
            processedBitmap[0][y] = nilai;
            processedBitmap[lebar+1][y] = nilai;
        }
        for(int x=0;x<=lebar;x++)
        {
            processedBitmap[x][0] = nilai;
            processedBitmap[x][tinggi+1] = nilai;
        }
    }
   
    public void paint(Graphics g)
    {
        //ambil lebar dan tinggi citra
        lebar = img.getWidth(this);
        tinggi = img.getHeight(this);
           
        //tampilkan informasi lebar dan tinggi citra
        g.setColor(Color.black);
        tampil = String.valueOf(lebar);
        g.drawString("lebar: "+tampil,10,20);
        tampil = String.valueOf(tinggi);
        g.drawString("tinggi: "+tampil,10,40);
       
        g.drawImage(img,10,50,this);    //tampilkan citra dengan drawImage
       
        int [] pixels = new int[lebar*tinggi];    //Tentukan panjang array pixels
        bitmapR = new int [lebar+2][tinggi+2];   
        bitmapG = new int [lebar+2][tinggi+2];   
        bitmapB = new int [lebar+2] [tinggi+2];
        bitmapA = new int [lebar+2][tinggi+2];
       
        hasilbitmapR = new int [lebar+1][tinggi+1];
        hasilbitmapG = new int [lebar+1][tinggi+1];
        hasilbitmapB = new int [lebar+1][tinggi+1];
        hasilbitmapA = new int [lebar+1][tinggi+1];
       
        hasilRobert = new int [lebar+1][tinggi+1];
        hasilSobel = new int [lebar+1][tinggi+1];
        hasilPrewitt = new int [lebar+1][tinggi+1];
       
        PixelGrabber pg = new PixelGrabber(img,0,0,lebar,tinggi, pixels,0,lebar);
        try
        {
            pg.grabPixels();    //grab piksel citra ke object pg.
        }
        catch(InterruptedException ie)
        {
            System.out.println("Terjadi kesalahan saat mengambil data pixels");
            ie.printStackTrace();
            return;
        }
   
        g.setColor(Color.black);
        g.drawString("abu-abu", 10, tinggi+90);
        g.drawString("Robert", lebar+100, tinggi+90);
        g.drawString("Sobel", lebar+100+lebar+50, tinggi+90);
        g.drawString("Prewitt", lebar+100+2*lebar+2*50, tinggi+90);
        g.setColor(Color.white);
           
        for(int y=0; y<tinggi; y++)
        {
            for(int x=0; x<lebar; x++)
            {
                //Menguraikan warna dengan model RGB
                warna = pixels[y*lebar+x];
                red = (warna >> 16) &0xff;
                green = (warna >> 8) &0xff;
                blue = (warna) & 0xff;
                abuabu = (red + green + blue) /3;
                bitmapR[x+1][y+1]=red;
                bitmapG[x+1][y+1]=green;
                bitmapB[x+1][y+1]=blue;
                bitmapA[x+1][y+1]=abuabu;
            }
        }
       
        //deklarasi temp
        int tempRX, tempRY, tempSX, tempSY, tempPX, tempPY;
       
        setNilaiTepi(bitmapA, 128);
        //operator
        for(int y=1;y<=tinggi-1;y++)
        {
            for(int x=1;x<=lebar-1;x++)
            {
                //robert
                tempRX=(int)konvolusi(x,y,m,n,bitmapA,kernelRX);
                tempRY=(int)konvolusi(x,y,m,n,bitmapA,kernelRY);
                if(Math.abs(tempRX) > Math.abs(tempRY))
                {
                    hasilRobert[x][y]=Math.abs(tempRX);
                } else
                {
                    hasilRobert[x][y]=Math.abs(tempRY);
                }
               
                //sobel
                tempSX=(int)konvolusi(x,y,m,n,bitmapA,kernelSX);
                tempSY=(int)konvolusi(x,y,m,n,bitmapA,kernelSY);
                if(Math.abs(tempSX) > Math.abs(tempSY))
                {
                    hasilSobel[x][y]=Math.abs(tempSX);
                } else
                {
                    hasilSobel[x][y]=Math.abs(tempSY);
                }
               
                //prewitt
                tempPX=(int)konvolusi(x,y,m,n,bitmapA,kernelPX);
                tempPY=(int)konvolusi(x,y,m,n,bitmapA,kernelPY);
                if(Math.abs(tempPX) > Math.abs(tempPY))
                {
                    hasilPrewitt[x][y]=Math.abs(tempPX);
                } else
                {
                    hasilPrewitt[x][y]=Math.abs(tempPY);
                }
            }
        }
       
        for (int j=1; j<=tinggi; j++)
        {
            for (int i=1; i<=lebar; i++)
            {
                //Abu Abu
                g.setColor(new Color(bitmapA[i][j], bitmapA[i][j], bitmapA[i][j]));
                g.drawLine(i+10, j+tinggi+100, i+10, j+tinggi+100);
                //robert
                g.setColor(new Color(hasilRobert[i][j], hasilRobert[i][j], hasilRobert[i][j]));
                g.drawLine(i+lebar+100, j+tinggi+100, i+lebar+100, j+tinggi+100);
                //sobel
                g.setColor(new Color(hasilSobel[i][j], hasilSobel[i][j], hasilSobel[i][j]));
                g.drawLine(i+lebar+100+lebar+50, j+tinggi+100, i+lebar+100+lebar+50, j+tinggi+100);
                //prewitt
                g.setColor(new Color(hasilPrewitt[i][j], hasilPrewitt[i][j], hasilPrewitt[i][j]));
                g.drawLine(i+lebar+100+2*lebar+2*50, j+tinggi+100, i+lebar+100+2*lebar+2*50, j+tinggi+100);
            }
        }
    }

    public void repaint(Graphics g)
    {
        //kosongkan saja
    }
}

coding rsp.html :
<html>
    <head>
        <title>Deteksi Tepi</title>
    </head>
    <body>
        <applet code=rsp.class width=1000 height=800>
        <PARAM NAME = filegambar VALUE="zayn1.jpg">
        <PARAM NAME = parp VALUE=190>
        <PARAM NAME = parg VALUE=3>
        </applet>
    </body>
</html>

PENGOLAHAN CITRA - Erosi dan Dilasi


Coding erosi.java
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Image;
import java.awt.image.PixelGrabber;

public class erosi extends Applet
{
    Image img;
    int lebar,tinggi;
    int latar,ambang,iterasi,periksa,nilai,periksa1;
    int warna, red, green, blue,alpha, abuabu, tempwarna;
    String tampil;
   
    public void init()
    {
        img=this.getImage(this.getDocumentBase(),getParameter("filegambar"));
        lebar =img.getWidth(this);
        latar = Integer.parseInt(getParameter("latar"));
        ambang = Integer.parseInt(getParameter("ambang"));
        iterasi = Integer.parseInt(getParameter("iterasi"));
    }
   
    public void paint(Graphics g)
    {
        //beri warna pada panel
        g.setColor(Color.lightGray);
        g.fillRect(0,0,2800,800);
   
        //ambil lebar dan tinggi citra
        lebar = img.getWidth(this);
        tinggi = img.getHeight(this);
           
        //tampilkan informasi lebar dan tinggi citra
        g.setColor(Color.black);
        tampil = String.valueOf(lebar);
        g.drawString("lebar: "+tampil,10,20);
        tampil = String.valueOf(tinggi);
        g.drawString("tinggi: "+tampil,10,40);
       
        g.drawImage(img,10,50,this);    //tampilkan citra dengan drawImage
       
        int [] pixels = new int[lebar*tinggi];    //Tentukan panjang array pixels
        int [][] bitmapA = new int [lebar+2][tinggi+2];   
        int [][] bitmapB = new int [lebar+2][tinggi+2];   
        int [][] bitmapTemp = new int[lebar+2] [tinggi+2];
        int [][] resultBitmap =new int [lebar][tinggi];
       
        int [][] bitmapA1 = new int [lebar+2][tinggi+2];   
        int [][] bitmapB1 = new int [lebar+2][tinggi+2];   
        int [][] bitmapTemp1 = new int[lebar+2] [tinggi+2];
        int [][] resultBitmap1 =new int [lebar][tinggi];
       
        PixelGrabber pg = new PixelGrabber(img,0,0,lebar,tinggi, pixels,0,lebar);
        try
        {
            pg.grabPixels();    //grab piksel citra ke object pg.
        }
        catch(InterruptedException ie)
        {
            System.out.println("Terjadi kesalahan saat mengambil data pixels");
            ie.printStackTrace();
            return;
        }
   
        g.setColor(Color.black);
        g.drawString("Hasil Pengolahan", lebar+100, 10);
        g.drawString("Grayscale", lebar+100, 30);
        g.drawString("Biner", lebar+100+lebar+50, 30);
        g.drawString("Erosi", lebar+100, lebar+90);
        g.drawString("Dilasi", lebar+100+lebar+50, lebar+90);
        g.setColor(Color.white);
           
        for(int y=0; y<tinggi; y++)
        {
            for(int x=0; x<lebar; x++)
            {
                //Menguraikan warna dengan model RGB
                warna = pixels[y*lebar+x];
                red = (warna >> 16) &0xff;
                green = (warna >> 8) &0xff;
                blue = (warna) & 0xff;
                abuabu = (red + green + blue) /3;
                //isi bitmap dengan nilai intensitasnya
                bitmapA[x+1][y+1] = (int) abuabu;
                bitmapA1[x+1][y+1] = (int) abuabu;
                if(abuabu<=ambang)
                {
                    bitmapB[x+1][y+1] = 0;
                    bitmapTemp[x+1][y+1] = 0;
                    bitmapB1[x+1][y+1] = 0;
                    bitmapTemp1[x+1][y+1] = 0;
                }else
                {   
                    bitmapB[x+1][y+1] = 1;
                    bitmapTemp[x+1][y+1] = 1;
                    bitmapB1[x+1][y+1] = 1;
                    bitmapTemp1[x+1][y+1] = 1;
                }
            }
        }
       
        for(int i=1;i<=iterasi;i++)
        {
            //isi nilai tepi
            for(int y=0;y<=tinggi+1;y++)
            {
                bitmapB[0][y] = bitmapB[1][y];
                bitmapB[lebar+1][y] = bitmapB[lebar][y];
                bitmapB1[0][y] = bitmapB1[1][y];
                bitmapB1[lebar+1][y] = bitmapB1[lebar][y];
           
            }
            for(int x=0;x<=lebar+1;x++)
            {
                bitmapB[x][0] = bitmapB[x][1];
                bitmapB[x][tinggi+1] = bitmapB[x][tinggi];
                bitmapB1[x][0] = bitmapB1[x][1];
                bitmapB1[x][tinggi+1] = bitmapB1[x][tinggi];
           
            }
            //erosi
            for(int y=0;y<tinggi;y++)
            {
                for(int x=0;x<lebar;x++)
                {
                    resultBitmap[x][y] = 0;
                    periksa=0;
                    for(int l=-1;l<=1;l++)
                    {
                        for(int k=-1;k<=1;k++)
                        {
                            periksa=periksa + +  (int)(bitmapB[x+1+(k*-1)][y+1+(l*-1)]);
                        }
                    }
                    if(latar==0)
                    {
                        //untuk latar=0,jika semua adalah 1 maka set dengan 1,jika tidak set dengan 0
                        if(periksa==9)
                            resultBitmap[x][y] = 1;
                        else
                            resultBitmap[x][y] = 0;
                    }else
                    {
                        //untuk latar=1,jika semua adalah 0 maka set dengan 0,jika tidak set dengan 1
                        if(periksa==0)
                            resultBitmap[x][y] = 0;
                        else
                        resultBitmap[x][y] = 1;
                    }
                }
            }
            //dilasi
            for (int y=0;y<tinggi;y++)
            {
                for (int x=0;x<lebar;x++)
                {
                    resultBitmap1[x][y] = 1;
                    periksa1 = 0;
                    for (int l=-1;l<=1;l++)
                    {
                        for (int k=-1;k<=1;k++)
                        {
                            periksa1 = periksa1 + + (int) (bitmapB1[x+1+(k*-1)][y+1+(l*-1)]);
                        }
                    }
                    if (latar == 0)
                    {
                        if (periksa1 == 0)
                            resultBitmap1[x][y] = 0;
                        else
                            resultBitmap1[x][y] = 1;
                    }   
                    else
                    {
                        if (periksa1 == 9)
                            resultBitmap1[x][y] = 1;
                        else
                            resultBitmap1[x][y] = 0;
                    }
                }
            }
            if(i<iterasi)
            {       
                for(int y=0;y<tinggi;y++)
                {
                    for(int x=0;x<lebar;x++)
                    {
                        bitmapB[x+1][y+1] = resultBitmap[x][y];
                        bitmapB1[x+1][y+1] = resultBitmap1[x][y];
                    }
                }   
            }
        }

        //Tampilkan Hasil Proses
        bitmapB = bitmapTemp;
        bitmapB1 = bitmapTemp1;
        for (int y=0; y<=tinggi-1; y++)
        {
            for (int x=0; x<=lebar-1; x++)
            {
                //Baris Pertama
                //Abu Abu
                g.setColor(new Color(bitmapA[x+1][y+1], bitmapA[x+1][y+1], bitmapA[x+1][y+1]));
                g.drawLine(x+lebar+100, y+40,x+lebar+100, y+40);
                //biner
                //sesuaikan nilai
                if(bitmapB[x][y] == 1)
                    nilai = 255;
                else
                    nilai=0;
                g.setColor(new Color(nilai, nilai, nilai));
                g.drawLine(x+2*lebar+100+50, y+40,x+2*lebar+100+50, y+40);
                //erosi
                if(resultBitmap[x][y] == 1)
                    nilai=255;
                else
                    nilai=0;
                g.setColor(new Color(nilai, nilai, nilai));
                g.drawLine(x+lebar+100, y+lebar+100,x+lebar+100, y+lebar+100);
                //dilasi
                if(resultBitmap1[x][y] == 1)
                    nilai=255;
                else
                    nilai=0;
                g.setColor(new Color(nilai, nilai, nilai));
                g.drawLine(x+2*lebar+100+50, y+lebar+100,x+2*lebar+100+50, y+lebar+100);
            }
        }
    }

    public void repaint(Graphics g)
    {
        //kosongkan saja
    }
}

coding erosi.html
<html>
    <head>
        <title>Erosi</title>
    </head>
    <body>
        <applet code=erosi.class width=1000 height=800>
        <PARAM NAME = filegambar VALUE="love.png">
        <PARAM NAME = latar VALUE=1>
        <PARAM NAME = ambang VALUE=127>
        <PARAM NAME = iterasi VALUE=5>
        </applet>
    </body>
</html>