📄 somimagetester.java
字号:
/* * SOMImageTester.java * This sample application uses some code written by Jeff Heaton took by the article * "Programming Neural Networks in Java" at http://www.jeffheaton.com/ai/index.shtml */package org.joone.samples.editor.som;import java.io.*;/** * * @author Julien Norman */public class SOMImageTester extends javax.swing.JFrame { private int DrawSizeX = 81; private int DrawSizeY = 81; private int ScaleSizeX = 9; private int ScaleSizeY = 9; private java.util.Vector imageHolder = new java.util.Vector(); private java.awt.Image downsamplePreviewImage = null; private java.awt.image.BufferedImage downSample = new java.awt.image.BufferedImage(getScaleSizeX(),getScaleSizeY(),java.awt.image.BufferedImage.TYPE_INT_RGB); private java.awt.image.BufferedImage drawImage = new java.awt.image.BufferedImage(getDrawSizeX(),getDrawSizeY(),java.awt.image.BufferedImage.TYPE_INT_RGB); private java.util.Vector idHolder = new java.util.Vector(); private int currentImage = 0; private boolean alone; // true if launched from the command prompt /** * Specifies the left boundary of the cropping * rectangle. */ protected int downSampleLeft; /** * Specifies the right boundary of the cropping * rectangle. */ protected int downSampleRight; /** * Specifies the top boundary of the cropping * rectangle. */ protected int downSampleTop; /** * Specifies the bottom boundary of the cropping * rectangle. */ protected int downSampleBottom; /** * The downsample ratio for x. */ protected double ratioX; /** * The downsample ratio for y */ protected double ratioY; /** * The pixel map of what the user has drawn. * Used to downsample it. */ protected int pixelMap[]; /** Creates new form SOMImageTester */ public SOMImageTester() { this(false); } /** Creates new form SOMImageTester */ public SOMImageTester(boolean main) { alone = main; initComponents(); setup(); setSize(300,350); setResizable(false); } /** 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. */ private void initComponents() {//GEN-BEGIN:initComponents ImageHolderPanel = new javax.swing.JPanel(); PainterPanel = new ImagePainter(); DownsamplePanel = new ImageDrawer(); InfoPanel = new javax.swing.JPanel(); ImageIDLabel = new javax.swing.JLabel(); IDInputTextField = new javax.swing.JTextField(); ImageNoLabel = new javax.swing.JLabel(); DownSampleButton = new javax.swing.JButton(); ImageScrollBar = new javax.swing.JScrollBar(); ControlPanel = new javax.swing.JPanel(); HelpButton = new javax.swing.JButton(); NewImageButton = new javax.swing.JButton(); ClearImageButton = new javax.swing.JButton(); SaveImagesButton = new javax.swing.JButton(); QuitButton = new javax.swing.JButton(); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); ImageHolderPanel.setLayout(new java.awt.GridLayout(1, 2)); PainterPanel.setToolTipText("You can draw on this image."); ImageHolderPanel.add(PainterPanel); DownsamplePanel.setToolTipText("This contains the down sampled image."); ImageHolderPanel.add(DownsamplePanel); getContentPane().add(ImageHolderPanel, java.awt.BorderLayout.CENTER); InfoPanel.setLayout(new java.awt.GridLayout(2, 2)); ImageIDLabel.setText("Image ID"); InfoPanel.add(ImageIDLabel); IDInputTextField.setText("1"); InfoPanel.add(IDInputTextField); ImageNoLabel.setFont(new java.awt.Font("Dialog", 1, 14)); ImageNoLabel.setText("Image 1 of 1"); ImageNoLabel.setToolTipText("The current image number."); InfoPanel.add(ImageNoLabel); DownSampleButton.setText("Down Sample"); DownSampleButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { DownSampleButtonActionPerformed(evt); } }); InfoPanel.add(DownSampleButton); getContentPane().add(InfoPanel, java.awt.BorderLayout.NORTH); ImageScrollBar.setMaximum(1); ImageScrollBar.setMinimum(1); ImageScrollBar.setToolTipText("Use scroll bar to scroll through images."); ImageScrollBar.addAdjustmentListener(new java.awt.event.AdjustmentListener() { public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { OnScrolled(evt); } }); getContentPane().add(ImageScrollBar, java.awt.BorderLayout.EAST); ControlPanel.setLayout(new java.awt.GridLayout(5, 2)); ControlPanel.setBorder(new javax.swing.border.TitledBorder("Controls")); HelpButton.setText("Help"); HelpButton.setToolTipText("Help on this application."); HelpButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { HelpButtonActionPerformed(evt); } }); ControlPanel.add(HelpButton); NewImageButton.setText("New Image"); NewImageButton.setToolTipText("Create a new image."); NewImageButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { NewImageButtonActionPerformed(evt); } }); ControlPanel.add(NewImageButton); ClearImageButton.setText("Clear Image"); ClearImageButton.setToolTipText("Clear the drawing from this image."); ClearImageButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { ClearImageButtonActionPerformed(evt); } }); ControlPanel.add(ClearImageButton); SaveImagesButton.setText("Save Images"); SaveImagesButton.setToolTipText("Save the images out to Joone format."); SaveImagesButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { SaveImagesButtonActionPerformed(evt); } }); ControlPanel.add(SaveImagesButton); QuitButton.setText("Quit"); QuitButton.setToolTipText("Quit this application."); QuitButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { QuitButtonActionPerformed(evt); } }); ControlPanel.add(QuitButton); getContentPane().add(ControlPanel, java.awt.BorderLayout.SOUTH); pack(); }//GEN-END:initComponents private void HelpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_HelpButtonActionPerformed // Add your handling code here: // Produce a quick help box String help1 = new String("This application allows the user to draw characters or images for recognition by a Joone neural network."); String help2 = new String("It is intended to test a SOM or Kohonen Network by providing an image recognition example."); String help3 = new String("The drawing image grid is 81 X 81 but the images saved in the file are 9x9 down sampled images."); String help4 = new String("The saved file has 81 inputs and an id. The id can be used to identify the character."); String help5 = new String("Read the Editor's help pages to learn how to use this example."); javax.swing.JOptionPane.showMessageDialog(this,help1+"\n"+help2+"\n"+help3+"\n"+help4+"\n"+help5); }//GEN-LAST:event_HelpButtonActionPerformed private void QuitButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_QuitButtonActionPerformed // Add your handling code here: this.exitTester(); }//GEN-LAST:event_QuitButtonActionPerformed private void SaveImagesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SaveImagesButtonActionPerformed // Add your handling code here: SaveImagesOut(); }//GEN-LAST:event_SaveImagesButtonActionPerformed private void NewImageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_NewImageButtonActionPerformed // Add your handling code here: NewImage(); }//GEN-LAST:event_NewImageButtonActionPerformed private void ClearImageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ClearImageButtonActionPerformed // Add your handling code here: clearCurrentImage(); }//GEN-LAST:event_ClearImageButtonActionPerformed private void DownSampleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_DownSampleButtonActionPerformed // Add your handling code here: downSample(); repaint(); }//GEN-LAST:event_DownSampleButtonActionPerformed private void OnScrolled(java.awt.event.AdjustmentEvent evt) {//GEN-FIRST:event_OnScrolled // Add your handling code here: Integer id = null; if ( evt.getAdjustmentType() == java.awt.event.AdjustmentEvent.TRACK ) { if ( evt.getValue() <= imageHolder.size() ) { try { id = new Integer(IDInputTextField.getText()); } catch(java.lang.NumberFormatException ex) { ImageScrollBar.setValue(ImageScrollBar.getValue()-ImageScrollBar.getUnitIncrement()); javax.swing.JOptionPane.showMessageDialog(this,"ID must be an integer value."); return; } idHolder.set(currentImage-1, id); currentImage = evt.getValue(); IDInputTextField.setText(""+((Integer)idHolder.get(currentImage-1)).intValue()); drawImage = (java.awt.image.BufferedImage)imageHolder.get(currentImage-1); ((ImagePainter)PainterPanel).setImageToEdit(drawImage); downSample(); ImageNoLabel.setText("Image 1 of "+currentImage); repaint(); //PainterPanel.repaint(); //DownsamplePanel.repaint(); } } }//GEN-LAST:event_OnScrolled /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm this.exitTester(); }//GEN-LAST:event_exitForm private void exitTester() { if (alone) System.exit(0); else this.dispose(); } /** * */ public void setup() { if ( imageHolder != null ) { drawImage.getGraphics().setColor(new java.awt.Color(255,255,255)); drawImage.getGraphics().fillRect(0,0, drawImage.getWidth(),drawImage.getHeight()); imageHolder.add(drawImage); ((ImagePainter)PainterPanel).setImageToEdit(drawImage); if ( downsamplePreviewImage!= null) { downsamplePreviewImage.getGraphics().setColor(java.awt.Color.WHITE); downsamplePreviewImage.getGraphics().fillRect(0,0, downsamplePreviewImage.getWidth(this),downsamplePreviewImage.getHeight(this)); ((ImageDrawer)DownsamplePanel).setImageToDraw(downsamplePreviewImage); } idHolder.add(new Integer(1)); currentImage = 1; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -