Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. package mr.gonzalez;
  2. import images.*;
  3. import java.io.*;
  4. import java.util.*;
  5.  
  6. public class SeamCarving {
  7.  
  8. public static void main(String[] args) throws FileNotFoundException {
  9. // TODO Auto-generated method stub
  10.  
  11. Scanner r = new Scanner(System.in);
  12. System.out.println("filename:");
  13. String filename = r.next();
  14. System.out.println("number seams:");
  15. int numSeams = r.nextInt();
  16.  
  17. APImage image = new APImage(filename);
  18.  
  19. //before
  20. image.draw();
  21.  
  22. int[][] values = new int[image.getWidth()][image.getHeight()];
  23. int[][] bestSeam = new int[image.getHeight()+1][2]; //last index is cost
  24. bestSeam[image.getHeight()][0] = Integer.MAX_VALUE;
  25. int[][] currentSeam = new int[image.getHeight()+1][2];
  26. currentSeam[image.getHeight()][0] = 0;
  27.  
  28.  
  29. Pixel p;
  30. for (int x = 0; x < image.getWidth(); x++) {
  31. for (int y = 0; y < image.getHeight(); y++) {
  32. p = image.getPixel(x, y);
  33. values[x][y] = (p.getBlue()+p.getGreen()+p.getRed())/3;
  34. }
  35. }
  36.  
  37. int currentX, currentY, currentValue, cost;
  38. for (int x = 0; x < image.getWidth(); x++) {
  39. //get the seam
  40. currentSeam[0] = new int[] {x, 0};
  41. for (int y = 1; y < image.getHeight(); y++) {
  42. currentX = currentSeam[y-1][0];
  43. currentY = currentSeam[y-1][1];
  44. currentValue = values[currentX][currentY];
  45. if (currentX == 0) { // prevent hitting edge of picture
  46. cost = Math.min(Math.abs(values[currentX][y] - currentValue), Math.abs(values[currentX+1][y] - currentValue));
  47. currentSeam[y] = new int[] { cost, y};
  48. currentSeam[image.getHeight()][0] += cost;
  49. } else if (currentX == image.getWidth()-1) {
  50. cost = Math.min(Math.abs(values[currentX][y] - currentValue), Math.abs(values[currentX-1][y] - currentValue));
  51. currentSeam[y] = new int[] { cost, y};
  52. currentSeam[image.getHeight()][0] += cost;
  53. } else {
  54. cost = Math.min(Math.min(Math.abs(values[currentX][y] - currentValue), Math.abs(values[currentX-1][y] - currentValue)), Math.abs(values[currentX+1][y] - currentValue));
  55. currentSeam[y] = new int[] {cost, y};
  56. currentSeam[image.getHeight()][0] += cost;
  57. }
  58. }
  59. if (currentSeam[image.getHeight()][0] < bestSeam[image.getHeight()][0])
  60. bestSeam = currentSeam.clone();
  61. }
  62.  
  63.  
  64. //after
  65. image.draw();
  66. }
  67.  
  68. public APImage carve(APImage image, int[][] points) {
  69. APImage carved = new APImage(image.getWidth()-1, image.getHeight()-1);
  70.  
  71. int xc = 0, yc = 0;
  72.  
  73. Pixel p;
  74. for (int x = 0; x < image.getWidth(); x++) {
  75. for (int y = 0; y < image.getHeight(); y++) {
  76. for (int[] a: points) {
  77. if (!(x == a[0] && y == a[1])) {
  78. p = image.getPixel(x, y);
  79. carved.setPixel(xc, yc, p);
  80. xc++;
  81. yc++;
  82. }
  83. }
  84. }
  85. }
  86. return carved;
  87. }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement