Anda di halaman 1dari 25

LAPORAN TB GARFIKA KOMPUTER

KELOMPOK 8 :

NAMA NIM
M.Rizkiawan
Rinaldi P.Komber
Lola Karolina
Filio Daffa Tinata
M.Eko Sugiono
Ayu Amasetia DBC 117 074
Prilindo Bebi

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS PALANGKA RAYA
2019
BAB I
PENDAHULUAN
1.1 LANDASAN TEORI
1.1.1 HISTOGRAM
Histogram adalah representasi grafis dari bentuk yang digunakan untuk secara
visual mewakili distribusi data atau frekuensi dengan nilai lain yang terjadi dalam
catatan. Histogram juga merupakan salah satu dari 7 alat kontrol kualitas (Alat QC 7).
Kegunaan dari Histogram adalah untuk mengetahui distribusi / penyebaran data
sehingga dengan demikian didapatkan informasi yang lebih banyak dari data tersebut
dan akan memudahkan untuk mendapatkan kesimpulan dari data tersebut. Mengkaji
Histogram :
1. Bentuk normal (simetris / bentuk lonceng): Harga rata rata histogram terletak
ditengah range data. Frekuensi data paling tinggi di tengah dan menurun secara
bertahap dan simetris pada kedua sisinya. Catatan : Bentuk ini merupakan bentuk
yang paling sering dijumpai.
2. Bentuk Moltimodal : Kelas dalam urutan nomor genap mempunyai frekuensilebih
kecil / sedikit dibanding dengan sisiluarnya. Catatan : Bentuk ini bisa terjadi bila
jumlah data tidak menentu pada masing2 kelas ada kecenderungan pengumpulan /
pembulatan data yang kurang tepat.
4. Bentuk Curam Dikiri : Harga rata2 histogram terletak jauh disebelah kiri dari
range dan frekuensi disisi kiri turun menjadi nol secara tiba tiba. Catatan : Bentuk
ini mungkin disebabkan adanya batasan yang tidak boleh dilampaui di sisi kiri
(data yang dibawah batas bawah tidak dipakai.
5. Bentuk Plateum : Bentuk ini terjadi bila frekuensi di masing masing kelas hampir
sama dan hanya pada ujung 2yang berbeda cukup banyak. Catatan : Bentuk ini
mungkin disebabkan adanya penggabungan beberapa kumpulan data yang
mempunyai harga rata-rata berdekatan.
6.Bentuk dengan 2 puncak Pada bentuk ini frekuensinya dibagian tengah agak rendah
dan terdapat 2 puncak di masing2 sisinya. Catatan : Bentuk ini dapat terjadi bila
ada penggabungan 2 kumpulan data yang harga rata-ratanya berbeda jauh.
7.Bentuk dengan puncak terpisah Pada bentuk ini terdapat puncak kecil yang terpisah
dari bentuk histogram yang normal. Catatan : Bentuk ini bisa terjadi bila terdapat
pena-mbahan kumpulan data dalam jumlah kecil dengan distribusi berbeda. Bisa
juga terjadi bila salah pengukuran, pemasukan data dari proses lain atau
ketidakberesan / ketidaknormalan dalam proses.
1.1.2 GRAYSCALE
Suatu citra grayscale adalah suatu citra yang hanya memiliki warna tingkat keabuan.
Penggunaan citra grayscale dikarenakan membutuhkan sedikit informasi yang diberikan
pada tiap piksel dibandingkan dengan citra berwarna. Warna abu-abu pada citra grayscale
adalah warna R (Red), G (Green), B (Blue) yang memiliki intensitas yang sama. Sehingga
dalam grayscale image hanya membutuhkan nilai intensitas tunggal dibandingkan dengan
citra berwarna membutuhkan tiga intensitas untuk tiap pikselnya. Intensitas dari citra
grayscale disimpan dalam 8 bit integer yang memberikan 256 kemungkinan yang mana
dimulai dari level 0 sampai dengan 255 (0 untuk hitam dan 255 untuk putih dan nilai
diantaranya adalah derajat keabuan).
1.1.3 LABELISASI CITRA
Untuk dapat mengenali atau membeda-bedakan beberapa benda yang terdapat di
dalam sebuah citra, diperlukan informasi mengenai intensitas warna yang bebeda - beda
dari masing-masing benda tersebut. Sebuah citra yang telah dibinarisasikan akan
mempunyai informasi mengenai intensitas warna yang sama dari masing-masing benda
tersebut, hitam (0) saja atau putih (255) saja. Untuk memberikan informasi warna yang
berbeda-beda dari masing-masing benda tersebut, kita perlu mengganti atau memberikan
informasi warna (label) kepada masing-masing benda tersebut. Adapun cara untuk
memberikan label pada citra adalah sebagai berikut :
1. Sambil membaca data citranya, jika diketemukan pixel berwarna hitam yang belum
mempunyai label, koordinat dari pixel tersebut diingat atau disimpan ke dalam memori
komputer.
2. Kemudian koordinat tadi dijadikan sebagai titik awal. Setelah itu pixel yang
bersebelahan dengan pixel yang mempunyai koordinat tadi diberi label yang sama.
Pixel lain yang tidak bersebelahan dibiarkan begitu saja tanpa diberi label.
3. Data citra yang telah dibuat dalam langkah nomor 2 di atas dibaca, dan sekarang pixel
yang sudah mempunyai label dibiarkan begitu saja tanpa diberi label. Kemudian
menentukan nilai label yang baru dan kembali lagi kepada langkah nomor 1, begitu
seterusnya.
Langkah-langkah proses labelisasi ini terus diulangi sampai semua pixel yang
seharusnya diberi label telah mempunyai label.
BAB II
PEMBAHASAN
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package histogram;

import processing.ImageProcessing;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.UnsupportedLookAndFeelException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

/**
*
*
*/
public class Viewhistogram extends javax.swing.JFrame {

ImageProcessing imageFormSiji = null;


ImageProcessing imageFormLoro = null;
ImageProcessing imageFormTelu = null;
/**
* Creates new form View
*/
public Viewhistogram() {
initComponents();
setLocationRelativeTo(null);
imageFormSiji = new ImageProcessing();
imageFormLoro = new ImageProcessing();
imageFormTelu = new ImageProcessing();
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jTabbedPane1 = new javax.swing.JTabbedPane();


jPanel2 = new javax.swing.JPanel();
citraLog = new javax.swing.JLabel();
citraLabel = new javax.swing.JLabel();
chartAwal = new javax.swing.JPanel();
ukuranCitra = new javax.swing.JLabel();
pilihGambarCitra = new javax.swing.JButton();
namaCitra = new javax.swing.JLabel();
chartLog = new javax.swing.JPanel();
citraGrayLabel = new javax.swing.JLabel();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem2 = new javax.swing.JMenuItem();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("KELOMPOK 8");

citraLog.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
citraLog.setText("Citra Tranformasi Logaritma");
citraLog.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Citra Tranformasi
Logaritma", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

citraLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
citraLabel.setText("Citra Awal");
citraLabel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Citra Awal",
javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

chartAwal.setBackground(new java.awt.Color(71, 121, 163));


chartAwal.setLayout(new java.awt.BorderLayout());

ukuranCitra.setText("Ukuran Citra");

pilihGambarCitra.setText("Pilih Gambar");
pilihGambarCitra.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
pilihGambarCitraMouseClicked(evt);
}
});
pilihGambarCitra.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
pilihGambarCitraActionPerformed(evt);
}
});

namaCitra.setText("Nama Citra");

chartLog.setBackground(new java.awt.Color(71, 121, 163));


chartLog.setLayout(new java.awt.BorderLayout());

citraGrayLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
citraGrayLabel.setText("Citra Gray");
citraGrayLabel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Citra Gray",
javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);


jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(chartAwal, javax.swing.GroupLayout.PREFERRED_SIZE, 550,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(chartLog, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(pilihGambarCitra)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(namaCitra, javax.swing.GroupLayout.PREFERRED_SIZE, 212,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(ukuranCitra, javax.swing.GroupLayout.PREFERRED_SIZE, 196,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(citraLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(164, 164, 164)
.addComponent(citraGrayLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 128,
Short.MAX_VALUE)
.addComponent(citraLog, javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(58, 58, 58)))))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(pilihGambarCitra)
.addComponent(namaCitra)
.addComponent(ukuranCitra))
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(9, 9, 9)

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(citraLog, javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(citraGrayLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(18, 18, 18)
.addComponent(citraLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(chartLog, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(chartAwal, javax.swing.GroupLayout.PREFERRED_SIZE, 269,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(365, 365, 365))
);

jTabbedPane1.addTab("Transformasi Logaritma", jPanel2);

jMenu1.setText("File");

jMenuItem2.setText("Exit");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem2ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem2);

jMenuBar1.add(jMenu1);

setJMenuBar(jMenuBar1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());


getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPane1)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 616,
javax.swing.GroupLayout.PREFERRED_SIZE)
);

pack();
}// </editor-fold>

private void pilihGambarCitraMouseClicked(java.awt.event.MouseEvent evt) {


final String path = "./Citra Images/gambar";

javax.swing.JFileChooser chooser = new javax.swing.JFileChooser();


chooser.setCurrentDirectory(new File(path));

chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public final static String jpeg = "jpeg";
public final String jpg = "jpg";
public final String gif = "gif";
public final String tiff = "tiff";
public final String tif = "tif";
public final String png = "png";

/*Get the extension of a file.*/


public String getExtension(java.io.File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');

if (i > 0 && i < s.length() - 1) {


ext = s.substring(i + 1).toLowerCase();
}
return ext;
}

@Override
public String getDescription() {
return "All Images extensions (jpg, gif, tiff, tif, png)";
}

@Override
public boolean accept(java.io.File f) {
if (f.isDirectory()) {
return true;
}

String extension = getExtension(f);


if (extension != null) {
return extension.equals(tiff)
|| extension.equals(tif)
|| extension.equals(gif)
|| extension.equals(jpeg)
|| extension.equals(jpg)
|| extension.equals(png);
}

return false;
}
});

if (chooser.showDialog(this, " Open ")


== javax.swing.JFileChooser.APPROVE_OPTION) {
java.io.File file = chooser.getSelectedFile();
String filePath = file.toString();
try {
final BufferedImage bimg = ImageIO.read(new File(filePath));
namaCitra.setText("Nama Citra : " + file.getName());
Thread t = new Thread() {
@Override
public void run() {
imageFormSiji.setImage(bimg);
imageFormSiji.imageToGray(1);
imageFormSiji.setHistogram();
int jumlah = 0;
DefaultCategoryDataset chartBarAwal = new DefaultCategoryDataset();
DefaultCategoryDataset chartBarHasil = new DefaultCategoryDataset();
//barChartData.setva
for (int i = 0; i < imageFormSiji.getHistogram().size(); i++) {
System.out.println(imageFormSiji.getHistogram().get(i).getRgb()+" =
"+imageFormSiji.getHistogram().get(i).getJumlah()+" =
"+imageFormSiji.getHistogram().get(i).getJumlahKumulatif()+" =
"+imageFormSiji.getHistogram().get(i).getHasilLog());
jumlah += imageFormSiji.getHistogram().get(i).getJumlah();
chartBarAwal.setValue(imageFormSiji.getHistogram().get(i).getJumlah(), "aha",
""+imageFormSiji.getHistogram().get(i).getRgb());
chartBarHasil.setValue(imageFormSiji.getHistogram().get(i).getHasilLog(), "aha",
""+imageFormSiji.getHistogram().get(i).getRgb());
}

JFreeChart chartSiji = ChartFactory.createBarChart("Histogam Citra Awal", "RGB",


"Jumlah", chartBarAwal, PlotOrientation.VERTICAL, false, true, false);
JFreeChart chartLoro = ChartFactory.createBarChart("Histogram Citra Tranformasi
Logaritma", "RGB", "Jumlah", chartBarHasil, PlotOrientation.VERTICAL, false, true, false);
CategoryPlot categoryPlotSiji = chartSiji.getCategoryPlot();
CategoryPlot categoryPlotLoro = chartLoro.getCategoryPlot();
categoryPlotSiji.setRangeGridlinePaint(Color.yellow);
categoryPlotLoro.setRangeGridlinePaint(Color.yellow);

ChartPanel cpanelSiji = new ChartPanel(chartSiji);


ChartPanel cpanelLoro = new ChartPanel(chartLoro);
chartAwal.removeAll();
chartAwal.add(cpanelSiji);
chartAwal.validate();

chartLog.removeAll();
chartLog.add(cpanelLoro);
chartLog.validate();

System.out.println("Jumlah = "+jumlah);
citraLabel.setText("");
citraGrayLabel.setText("");
citraLog.setText("");
citraLabel.setIcon(new ImageIcon(bimg.getScaledInstance(230, 230, 0)));
//resetCitra();
ukuranCitra.setText("Ukuran Citra : " + imageFormSiji.getTinggi() + " x " +
imageFormSiji.getLebar() + "");
citraLog.setIcon(new ImageIcon(imageFormSiji.getLogImage().getScaledInstance(230, 230,
0)));
citraGrayLabel.setIcon(new
ImageIcon(imageFormSiji.getGrayImage().getScaledInstance(230, 230, 0)));

}
};
t.start();

} catch (IOException e) {
javax.swing.JOptionPane.showMessageDialog(
this, "File Tidak Ditemukan " + e);
}
}
}

private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {


System.exit(0);
}

private void pilihGambarCitraActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
}

/**
*
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
javax.swing.UnsupportedLookAndFeelException ex) {
try {

javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
UnsupportedLookAndFeelException ex1) {
Logger.getLogger(translog.View.class.getName()).log(Level.SEVERE, null, ex1);
}
}
//</editor-fold>

/* Create and display the form */


java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Viewhistogram().setVisible(true);
}
});
}

// Variables declaration - do not modify


private javax.swing.JPanel chartAwal;
private javax.swing.JPanel chartLog;
private javax.swing.JLabel citraGrayLabel;
private javax.swing.JLabel citraLabel;
private javax.swing.JLabel citraLog;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JPanel jPanel2;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JLabel namaCitra;
private javax.swing.JButton pilihGambarCitra;
private javax.swing.JLabel ukuranCitra;
// End of variables declaration

View.java

Viewhistogram.java

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package translog;

import processing.ImageProcessing;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.UnsupportedLookAndFeelException;

/**
*
*
*/
public class View extends javax.swing.JFrame {

ImageProcessing imageFormSiji = null, imageFormLoro = null, imageFormTelu1 = null,


imageFormTelu2 = null, imageFormPapat1 = null, imageFormPapat2 = null;
/**
* Creates new form View
*/
public View() {
initComponents();
setLocationRelativeTo(null);
imageFormSiji = new ImageProcessing();
imageFormLoro = new ImageProcessing();
imageFormTelu1 = new ImageProcessing();
imageFormTelu2 = new ImageProcessing();
imageFormPapat1 = new ImageProcessing();
imageFormPapat2 = new ImageProcessing();
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jTabbedPane2 = new javax.swing.JTabbedPane();


jPanel6 = new javax.swing.JPanel();
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel1 = new javax.swing.JPanel();
citraGrayLabel = new javax.swing.JLabel();
grayProsesButton = new javax.swing.JButton();
grayMetodeCombo = new javax.swing.JComboBox();
jLabel4 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
citraLogTransformationLabel = new javax.swing.JLabel();
logTransformationProsesButton = new javax.swing.JButton();
constantaLogTransInput = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
citraLabel = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
pathCitraLabel = new javax.swing.JLabel();
detailCitraLabel = new javax.swing.JLabel();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem2 = new javax.swing.JMenuItem();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("KELOMPOK 8");

jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Gray Level"));
citraGrayLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
citraGrayLabel.setText("Citra Gray");
citraGrayLabel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Citra Gray",
javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

grayProsesButton.setText("Proses");
grayProsesButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
grayProsesButtonMouseClicked(evt);
}
});

grayMetodeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Ligthness",


"Average", "Luminosity" }));

jLabel4.setText("Metode");

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);


jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(5, 5, 5)
.addComponent(citraGrayLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 366,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createSequentialGroup()

.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(grayMetodeCombo, 0, 108, Short.MAX_VALUE)
.addComponent(grayProsesButton, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(36, 36, 36)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(grayMetodeCombo, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(grayProsesButton)
.addContainerGap(233, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(citraGrayLabel, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);

jTabbedPane1.addTab("Gray Level", jPanel1);

jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Log Transformation"));

citraLogTransformationLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
citraLogTransformationLabel.setText("Citra Log Transformation");
citraLogTransformationLabel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Citra
Log Transformation", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

logTransformationProsesButton.setText("Proses");
logTransformationProsesButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
logTransformationProsesButtonMouseClicked(evt);
}
});

constantaLogTransInput.setText("30");

jLabel1.setText("Konstanta c:");

javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);


jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(citraLogTransformationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 363,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(logTransformationProsesButton, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(constantaLogTransInput)
.addGroup(jPanel3Layout.createSequentialGroup()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 85,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 13, Short.MAX_VALUE)))
.addContainerGap())
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(38, 38, 38)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(constantaLogTransInput, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(logTransformationProsesButton)
.addContainerGap(231, Short.MAX_VALUE))
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(citraLogTransformationLabel, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);

jTabbedPane1.addTab("Log Transformation", jPanel3);

citraLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
citraLabel.setText("Citra Awal");
citraLabel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Citra Awal",
javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

jButton1.setText("Pilih Gambar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

pathCitraLabel.setText(" ");

detailCitraLabel.setText("Detail Citra");

javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);


jPanel6.setLayout(jPanel6Layout);
jPanel6Layout.setHorizontalGroup(
jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel6Layout.createSequentialGroup()
.addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel6Layout.createSequentialGroup()
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 125,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(citraLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 346,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(detailCitraLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 201,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(pathCitraLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 202,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel6Layout.createSequentialGroup()
.addGap(56, 56, 56)
.addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 503,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel6Layout.setVerticalGroup(
jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel6Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel6Layout.createSequentialGroup()

.addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton1)
.addGroup(jPanel6Layout.createSequentialGroup()
.addGap(65, 65, 65)
.addComponent(detailCitraLabel)))
.addGap(30, 30, 30)
.addComponent(pathCitraLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 23,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(citraLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 335,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 401,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(35, Short.MAX_VALUE))
);

jTabbedPane2.addTab("Halaman", jPanel6);

jMenu1.setText("File");

jMenuItem2.setText("Exit");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem2ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem2);

jMenuBar1.add(jMenu1);

setJMenuBar(jMenuBar1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());


getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPane2)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jTabbedPane2)
.addContainerGap())
);

pack();
}// </editor-fold>

private void resetCitra() {


citraGrayLabel.setIcon(null);
citraLogTransformationLabel.setIcon(null);
citraGrayLabel.setText("Citra Gray");
}
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


final String path = "./Citra Images/gambar";

javax.swing.JFileChooser chooser = new javax.swing.JFileChooser();


chooser.setCurrentDirectory(new File(path));

chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public final static String jpeg = "jpeg";
public final String jpg = "jpg";
public final String gif = "gif";
public final String tiff = "tiff";
public final String tif = "tif";
public final String png = "png";

/*Get the extension of a file.*/


public String getExtension(java.io.File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');

if (i > 0 && i < s.length() - 1) {


ext = s.substring(i + 1).toLowerCase();
}
return ext;
}

@Override
public String getDescription() {
return "All Images extensions (jpg, gif, tiff, tif, png)";
}

@Override
public boolean accept(java.io.File f) {
if (f.isDirectory()) {
return true;
}

String extension = getExtension(f);


if (extension != null) {
return extension.equals(tiff)
|| extension.equals(tif)
|| extension.equals(gif)
|| extension.equals(jpeg)
|| extension.equals(jpg)
|| extension.equals(png);
}

return false;
}
});

if (chooser.showDialog(this, " Open ")


== javax.swing.JFileChooser.APPROVE_OPTION) {
java.io.File file = chooser.getSelectedFile();
String filePath = file.toString();
try {
final BufferedImage bimg = ImageIO.read(new File(filePath));
pathCitraLabel.setText("Nama Citra : " + file.getName());
Thread t = new Thread() {
@Override
public void run() {
imageFormSiji.setImage(bimg);
citraLabel.setText("");
citraLabel.setIcon(new ImageIcon(bimg.getScaledInstance(300, 300, 0)));
resetCitra();
detailCitraLabel.setText("Ukuran Citra : " + imageFormSiji.getTinggi() + " x " +
imageFormSiji.getLebar() + "");
}
};
t.start();

} catch (IOException e) {
javax.swing.JOptionPane.showMessageDialog(
this, "File Tidak Ditemukan " + e);
}
}
}

private void logTransformationProsesButtonMouseClicked(java.awt.event.MouseEvent evt) {


citraLogTransformationLabel.setText("Processing");
if (imageFormSiji.getGrayImage() == null) {
JOptionPane.showMessageDialog(rootPane, "Set Gray Level Terlebih Dahulu !!!");
return;
}
Thread t = new Thread() {
@Override
public void run() {

imageFormSiji.imageToLogTransformation(Double.parseDouble(constantaLogTransInput.getText()));
citraLogTransformationLabel.setIcon(new
ImageIcon(imageFormSiji.getLogTransformationImage().getScaledInstance(300, 300, 0)));
citraLogTransformationLabel.setText("");
}
};
t.start();
}

private void grayProsesButtonMouseClicked(java.awt.event.MouseEvent evt) {


citraGrayLabel.setText("");
Thread t = new Thread() {
@Override
public void run() {
imageFormSiji.imageToGray(grayMetodeCombo.getSelectedIndex());
citraGrayLabel.setIcon(new ImageIcon(imageFormSiji.getGrayImage().getScaledInstance(300,
300, 0)));
}
};
t.start();
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
javax.swing.UnsupportedLookAndFeelException ex) {
try {

javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
UnsupportedLookAndFeelException ex1) {
Logger.getLogger(View.class.getName()).log(Level.SEVERE, null, ex1);
}
}
//</editor-fold>

/* Create and display the form */


java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new View().setVisible(true);
}
});
}

// Variables declaration - do not modify


private javax.swing.JLabel citraGrayLabel;
private javax.swing.JLabel citraLabel;
private javax.swing.JLabel citraLogTransformationLabel;
private javax.swing.JTextField constantaLogTransInput;
private javax.swing.JLabel detailCitraLabel;
private javax.swing.JComboBox grayMetodeCombo;
private javax.swing.JButton grayProsesButton;
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel4;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel6;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JTabbedPane jTabbedPane2;
private javax.swing.JButton logTransformationProsesButton;
private javax.swing.JLabel pathCitraLabel;
// End of variables declaration
}
BAB III
KESIMPULAN

Histogram merupakan representasi grafis dari bentuk yang digunakan untuk secara visual
mewakili distribusi data atau frekuensi dengan nilai lain yang terjadi dalam catatan. Kegunaan
dari Histogram adalah untuk mengetahui distribusi / penyebaran data sehingga dengan demikian
didapatkan informasi yang lebih banyak dari data tersebut dan akan memudahkan untuk
mendapatkan kesimpulan dari data tersebut. Sedangkan Suatu citra grayscale adalah suatu citra
yang hanya memiliki warna tingkat keabuan. Penggunaan citra grayscale dikarenakan
membutuhkan sedikit informasi yang diberikan pada tiap piksel dibandingkan dengan citra
berwarna.
DAFTAR PUSTAKA

https://rumusrumus.com/cara-membuat-histogram/
https://sammypatikawa.wordpress.com/2012/05/11/greyscale/
https://www.academia.edu/29281461/CITRA_GRAYSCALE_BRIGHTNESS_NEGATIVE_DA
N_HISTOGRAM
https://www.jejaring.web.id/pengertian-grayscale/
https://www.scribd.com/doc/27266753/HISTOGRAM-Kegunaan-Dari-Histogram-Adalah-
Untuk-Mengetahui

Anda mungkin juga menyukai