Project 2: Image Processing Program
Phase 1(20 points)Due start of class April 27th
Phase 2 (200 points)Due 11pm May 4
You are to create a program that is a GUI Java application. It will allow the user to load an image and present the user with a set of Image Processing Functions that they can choose to apply. After loading an image a display of the image will pop up.
Now the user can choose various operations and it will be applied to the active image window. The new image will be displayed in the same active window.
Also, at any time the user should be able to save the image data currently being displayed to a file (in the original JPEG/GIF format). Note that the image data that has been processed is not saved to a file until the user specifically asked to do this operation. You should save the file in jpeg format.
This project is broken up into two phases to help you with breaking down the problem. The first phase will only implement the image loading, display, and saving to a file (in JPEG/GIF). For phase 2, you will have to implement the following image processing operations: thresholding, image negative, contrast stretching and edge detection (Sobel). The elements of each phase are described below. BECAUSE you are learning how to manipulate an image and create code to do this at a pixel level, you MUST write these algorithms yourself. YOU CAN NOT use a funciton routine from a third party software package or from a java package.
After a valid image is loaded, the following operations (displayed as menu items) should be enabled:
- File Menu = Open (partially done for you in sample code), Save As, Exit (partially done for you in sample code)
- Edit Menu= Undo
- Process Menu = Threshold, Contrast Stretch, Image Negative, Edge Detection
Note, when most options are choosen, other windows that may ask for necessary relavent user input may pop-up before the image function takes place on the image already loaded. For example, when Threshold selected, asks for threshold value. See below for details.
IMPORTANT: After each selection is made, it is applied to that active image (see ActiveImage object below) window and the processing is completed the new resulting image should be displayed in the same active window. Any further
processing requested by the user will be done on the active image.
For example, this means that you can first create a edge detected image and then do thresholding on the edge detected image.
Note: You are only required to load the standard formats of JPEG and GIF that Java accepts.
You should be able to load either a color or greyscale image. See information below about different operations and how to handle it for color images.
THIS IS NOT GROUP WORK. You must do it individually.
Some Code Requirements
- You may use the following partial java code to get you started. Included in here are java source files as well as the GUI files needed. (setup for work in the required Eclipse environment). This will open up an image and display it in a new window. It also saves raw data ONLY does not save as a JPEG or GIF as you will need to do. NOTE: this is old code using AWT interface --- you are more than welcome to convert it to swing or any other Java framework/package for GUI you like to use. While GUI for professional applications is important it is not the focus of our class in this project.
- See the comments in the code, to help you get started.
- Change the loading of images to use MediaTraker class to make sure the image loaded successfully.
- You will need to use PixelGrabber class to grab data into an array
that you can manipulate. (there are some examples of this in the partial code)
Required Data Classes and their Meanings |
|
Class |
Meaning |
ImageData | Contains information about the Image (size-#rows, #columns, format, filename) as well as the image data itself.
tip: You may be able to use as variable of this class the Image class in Java, or there may be other classes out there. tip: see the ImageData class in the partial java code which will start you out. You need to modify as required and desired. |
Required Data OBJECTS and their Meanings |
||
Object Name |
Class |
Meaning |
ActiveImage | ImageData | Contains current image being displayed in the current window (note you can have multiple. Represents the current state of the image as pertaining to processing |
BackupImage | ImageData | Contains an image that represents the ActiveImage before the last processing operation selected. Note: Initially, before any processing has been done, it will contain the same information as ActiveImage. |
Phase 1
In this phase, you will develop a GUI java application that will allow the user to load an image and display it. The user can save the image data currently displayed. The user can also undo the last operation applied to it (note- if no operations applied Undo should not be enabled).
Eventhough you will not have implemented the image processing operations you should have the Process menu there to select them.
SW Development: I want you to use Eclipse IDE (latest stable version is preferred, not betas). Below I have listed the menus needed in your GUI application. Use the partial code (see above link) to help you get started. Note the partial code uses two frames - one for the main application and another frame (ImageFrame) for displaying the image. You can partion it in this fashion or combine if you want. However, most (except Exit and Open) must be associated with the window the Image is display in (in partial code provided this is the ImageFrame class).
File Menu Option : File -> Open Option : File -> Save As Option : File -> Exit
|
Edit Menu Option: Edit->Undo
|
Process Menu Option: Process->Threshold Option : Process -> Negaitve Option : Process -> Edge Detect Option : Process -> Contrast Stretch |
Phase 2
You are now coing to implement the various Processing operations from Phase 1 that were not implemented
File Menu Option : File -> Open Option : File -> Save As Option : File -> Exit
|
Edit Menu Option: Edit->Undo
|
Process Menu Option: Process->Threshold
Option : Process -> Negaitve
Option : Process -> Edge Detect
Option : Process -> Contrast Stretch
|
Deliverables (and How to turn in)
- PHASE 1: Turn in only screen shots of the project working and a description in a pdf of the state of phase 1--what is completed and what is not. This is worth 10% of the points if you have turned in the items and they are fully functional.
Note, you should have already done an exercise that actually finished most of the required work for Phase 1. Go to BB->Projects->Project2 Phase 1.
- PHASE 2: Fully comment and test out program. Post on Project 2 link in Projects on Blackboard (BB->Projects->Project 2 Phase 2). You MUST zip them up as a single file so that I can unzip into a test directory and run right away. YOU must setup all the ECLIPSE files necessary and send these.
- PHASE 2: IF YOU use additional classes not in standard Java, you need to have all of the files here...make a JAR file. I want to you to have the program ready to run already compiled!
- PHASE 2: Word Document (click here for template you MUST use) that details the following: HERE IS EXAMPLE FOR PHASE 1
- Section 1 Execution Instructions: Instructions for me to download and run your code. YOU NEED to show me screen shots of you doing this from your uploaded blackboard code.....this forces you to make sure that I can run your code. You MUST have the following screenshots AND give description on what to do:
- screenshot 1.1 = screen shot of your files uploaded to Project 1 turn in folder on blackboard
- screenshot 1.2 = directory view of "temp" directory you unzipped file to showing the unziped files and directory structures.
- screenshot 1.3 = Eclipse running where you have opened up project file in "temp" directory.
- screenshot 1.4 = Eclipse running the application - show screenshot of it running. If I must do something beyond simply hitting the "run" button, you need to give screenshots and step by step instructions.
- Section 2 Code Descpription: A describing how code is structured and the state of how it works. Give a describption for each filename listed.
- Section 3 Testing: here you give screen shots of you running the various stages of the program as detailed here:
- section 3.1: loading image -
- screenshot 3.1a= pop-up file dialog box where you have selected the image you are going to load in your program.
- screenshot 3.1b= the image being viewed in your application that was just loaded.
- section 3.2: saving image
- screenshot 3.2a = screen shot of active image in your application you are going to save
- screenshot 3.2b = screen shot of file save as dialog box where you have specified a DIFFERENT name not used yet for this image.
- screenshot 3.2c = screen shot after you do an open on the image you just saved in 3.2b
- section 3.3: exit application
- screenshot 3.3a = screen shot showing application gone (really this is nothing) BUT, if the application has errors on closing I want to see this!!!
- section 3.4: thresholding
- screenshot 3.4a = original image you are going to threshold shown in activeimage displayed in your application
- screenshot 3.4b = pop-up dialog box asking user for threshold information, enter in the threshold value before screenshot
- screenshot 3.4c = new image after thresholding in activeimage displayed in your applicaiton.
- section 3.5: Undo Operation
- screenshot 3.5a = thresholded image from screenshot 3.4c.
- screenshot 3.5b = new image reverting back to unthresholded image AFTER you have selected the UNDO operation. This is the new activeimage displayed in your application.
- section 3.6: negative
- screenshot 3.6a = original image you are going to negate shown in activeimage displayed in your application
- screenshot 3.6b = new image after negative operation done in activeimage displayed in your applicaiton.
- section 3.7: edge detction
- screenshot 3.7a = original image you are going to edge detection on shown in activeimage displayed in your application
- screenshot 3.7b = new image after edge detection done in activeimage displayed in your applicaiton.
- section 3.8: contrast stretching
- screenshot 3.8a = original image you are going to contrast stretch shown in activeimage displayed in your application
- screenshot 3.8b = pop-up dialog box asking user for input regarding contrast stretching enter in the information before screenshot
- screenshot 3.8c = new image after contrast stretching in activeimage displayed in your applicaiton.
- section 3.1: loading image -
- Section 4 Comments Optional any comments you have regarding your code (necessary if you code is not working, you need to tell me in detail what the problem is or what is missing)
- Section 1 Execution Instructions: Instructions for me to download and run your code. YOU NEED to show me screen shots of you doing this from your uploaded blackboard code.....this forces you to make sure that I can run your code. You MUST have the following screenshots AND give description on what to do:
NOTE: FOR PHASE 1 DUE DATE- you will only be asked to demonstrate the working items by turning in screen shots - YOU WILL get 10% of the points graded for this based on demonstrating full completion of Phase 1 --you will not be traditionally graded on partial credit. The goal of this is to make sure that you are staying on track in class and getting help if you need it prior to the due date. Also, don't forget you should have already done an exercise to help you out with much of Phase 1. Don't forget I have office hours.
NOTE: FOR PHASE 2 DUE DATE, ,will be traditionally graded (see evaluation guidelines) for the entire application code functionality when Phase 2 is turned in. For Phase 2, you will submit only 2 attachments 1 the zipped (use zip only) up source code and 2 the word document.