We haven't offered this assignment before, so we don't know what kinds of questions students will have. We will add to the list as needed.
How do I manipulate images in Java? Use our Picture data type (which is part of stdlib.jar) and the Color data type (which is part of the java.awt library). Here is some more information about the Color and Picture data types. Luminance.java and Grayscale.java are example clients that use the Color and Picture data types, respectively.
I noticed that the Picture API has a method to change the origin (0, 0) from the upper left to the lower left. Can I assume (0, 0) is the upper left pixel? Yes.
The data type is mutable. Does this mean I don't have to make a defensive copy of the Picture? Do not mutate the Picture that is passed to the constructor. To make changes to the Picture do a defensive copy first.
Identifying the shortest energy path in a picture looks a lot like the COS126 dynamic programming assignment about genetic sequencing. Can I use that approach?
You absolutely can use the dynamic programming approach. Not all 126 students do that assignment so don't worry if you don't understand this. The dynamic programming approach in this case is the same as the shortest paths approach using topological sort.
My program is using recursion to find the shortest energy path. Is this ok? Shortest path algorithms
do not use recursion. Using recursion will probably make your code inefficient even if correct.
Note that tail recursion can easily be converted to iterative code.
My program seems to be really slow. Any advice? Be sure to calculate energy() once
per pixel. Consider deferring any calculations until necessary.
My program is using recursion to find the shortest energy path. Is this ok? Shortest path algorithms do not use recursion. Using recursion will probably make your code inefficient even if correct. Note that tail recursion can easily be converted to iterative code.
My program seems to be really slow. Any advice? Be sure to calculate energy() once per pixel. Consider deferring any calculations until necessary.
The energy at the border (195,075) is not the maximum value that the energy can have? For example, if I have a (0,0,0) color surrounded by (255,255,255) colors, then I will get 6 * 255^2 = 2 * 195075.
If you have a situation like the one you describe, then the energy is 0. The energy at the border is not absolutely maximal.
Assigning the same constant to all boundary pixels is what is needed to find the minimal seam. The constant that is given equals the energy of a point on the boundary of a black area and white area.
Clients. You may use the following client programs to test and debug your code.
Sample input files. The directory seamCarving contains the client programs above along with some sample image files. You can also use your own image files for testing and entertainment.
These are purely suggestions for how you might make progress. You do not have to follow these steps.