Question
Given the following java code: import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import javax.imageio.*; // Main class public class HoughTransform extends Frame implements ActionListener
Given the following java code:
import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import javax.imageio.*; // Main class public class HoughTransform extends Frame implements ActionListener { BufferedImage input; int width, height, diagonal; ImageCanvas source, target; TextField texRad, texThres; // Constructor public HoughTransform(String name) { super("Hough Transform"); // load image try { input = ImageIO.read(new File(name)); } catch ( Exception ex ) { ex.printStackTrace(); } width = input.getWidth(); height = input.getHeight(); diagonal = (int)Math.sqrt(width * width + height * height); // prepare the panel for two images. Panel main = new Panel(); source = new ImageCanvas(input); target = new ImageCanvas(input); main.setLayout(new GridLayout(1, 2, 10, 10)); main.add(source); main.add(target); // prepare the panel for buttons. Panel controls = new Panel(); Button button = new Button("Line Transform"); button.addActionListener(this); controls.add(button); controls.add(new Label("Radius:")); texRad = new TextField("10", 3); controls.add(texRad); button = new Button("Circle Transform"); button.addActionListener(this); controls.add(button); controls.add(new Label("Threshold:")); texThres = new TextField("25", 3); controls.add(texThres); button = new Button("Search"); button.addActionListener(this); controls.add(button); // add two panels add("Center", main); add("South", controls); addWindowListener(new ExitListener()); setSize(diagonal*2+100, Math.max(height,360)+100); setVisible(true); } class ExitListener extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } // Action listener public void actionPerformed(ActionEvent e) { // perform one of the Hough transforms if the button is clicked. if ( ((Button)e.getSource()).getLabel().equals("Line Transform") ) { int[][] g = new int[360][diagonal]; int r = 0; // insert your implementation for straight-line here. DisplayTransform(diagonal, 360, g); } else if ( ((Button)e.getSource()).getLabel().equals("Circle Transform") ) { int[][] g = new int[height][width]; int radius = Integer.parseInt(texRad.getText()); // insert your implementation for circle here. DisplayTransform(width, height, g); } } // display the spectrum of the transform. public void DisplayTransform(int wid, int hgt, int[][] g) { target.resetBuffer(wid, hgt); for ( int y=0, i=0 ; y
Also given:
import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import javax.imageio.*; // Canvas for image display class ImageCanvas extends Canvas { BufferedImage image; // initialize the image and mouse control public ImageCanvas(BufferedImage input) { image = input; addMouseListener(new ClickListener()); } public ImageCanvas(int width, int height) { image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); addMouseListener(new ClickListener()); } // redraw the canvas public void paint(Graphics g) { // draw boundary g.setColor(Color.gray); g.drawRect(0, 0, getWidth()-1, getHeight()-1); // compute the offset of the image. int xoffset = (getWidth() - image.getWidth()) / 2; int yoffset = (getHeight() - image.getHeight()) / 2; g.drawImage(image, xoffset, yoffset, this); } // reset an empty image public void resetBuffer(int width, int height) { image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); repaint(); } // reset image based on the input public void copyImage(BufferedImage input) { Graphics2D g2D = image.createGraphics(); g2D.drawImage(input, 0, 0, null); repaint(); } // listen to mouse click class ClickListener extends MouseAdapter { public void mouseClicked(MouseEvent e) { if ( e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON3 ) try { ImageIO.write(image, "png", new File("saved.png")); } catch ( Exception ex ) { ex.printStackTrace(); } } } }
Complete the code so when the Circle Transform button is pressed it applies Circle Hough Transform to the image and displays on the output image, and displays the circles with given radius on the input image.
Image given:
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started