KELOMPOK 8 :
NAMA NIM
M.Rizkiawan
Rinaldi P.Komber
Lola Karolina
Filio Daffa Tinata
M.Eko Sugiono
Ayu Amasetia DBC 117 074
Prilindo Bebi
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 {
/**
* 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() {
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
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");
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
.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))
);
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);
pack();
}// </editor-fold>
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";
@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;
}
return false;
}
});
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);
}
}
}
/**
*
*/
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>
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 {
/**
* 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() {
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);
}
});
jLabel4.setText("Metode");
.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())
);
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:");
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");
.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);
pack();
}// </editor-fold>
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";
@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;
}
return false;
}
});
} catch (IOException e) {
javax.swing.JOptionPane.showMessageDialog(
this, "File Tidak Ditemukan " + e);
}
}
}
imageFormSiji.imageToLogTransformation(Double.parseDouble(constantaLogTransInput.getText()));
citraLogTransformationLabel.setIcon(new
ImageIcon(imageFormSiji.getLogTransformationImage().getScaledInstance(300, 300, 0)));
citraLogTransformationLabel.setText("");
}
};
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>
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