import java.io.File; /** * @author Pacien TRAN-GIRARD * @author Timothée FLOURE */ public final class Main { public static final String INPUT_DIR = "resources/"; public static final String OUTPUT_DIR = "output/"; public static final String EXT_SEP = "."; public static final String NAME_SEP = "_"; public static void writeImage(int[][] image, String fileNameWithoutExt, String ext, int step, String transform) { Helper.write(OUTPUT_DIR + fileNameWithoutExt + NAME_SEP + step + NAME_SEP + transform + EXT_SEP + ext, image); } public static void writeImage(float[][] image, String fileNameWithoutExt, String ext, int step, String transform) { Main.writeImage(Color.toRGB(image), fileNameWithoutExt, ext, step, transform); } public static void processImage(File inputFile) { String fileName = inputFile.getName(); int extSepPosition = fileName.lastIndexOf(EXT_SEP); String fileNameWithoutExt = fileName.substring(0, extSepPosition); String fileExt = fileName.substring(extSepPosition + 1, fileName.length()); System.out.println("Processing file " + fileName); // Load image System.out.println("Load image..."); int[][] image = Helper.read(inputFile.getPath()); Main.writeImage(image, fileNameWithoutExt, fileExt, 1, "original"); // Convert to grayscale System.out.println("Convert to grayscale..."); float[][] gray = Color.toGray(image); Main.writeImage(gray, fileNameWithoutExt, fileExt, 2, "grayscale"); // Smooth it System.out.println("Smooth image..."); float[][] smooth = Filter.smooth(gray); Main.writeImage(smooth, fileNameWithoutExt, fileExt, 3, "smooth"); // Apply Sobel System.out.println("Compute Sobel filter..."); float[][] sobel = Filter.sobel(smooth); Main.writeImage(sobel, fileNameWithoutExt, fileExt, 4, "sobel"); // Find best seam System.out.println("Find best seam..."); int[] seam = Seam.find(sobel); Main.writeImage(Seam.merge(image, seam), fileNameWithoutExt, fileExt, 5, "best_seam"); // Shrink until it is a square int count = image[0].length - image.length; System.out.println("Shrink by removing " + count + " seams..."); for (int i = 0; i < count; ++i) { sobel = Filter.sobel(Filter.smooth(Color.toGray(image))); seam = Seam.find(sobel); image = Seam.shrink(image, seam); System.out.print("Seam " + (i + 1) + "/" + count + "\r"); } Main.writeImage(image, fileNameWithoutExt, fileExt, 6, "shrink"); System.out.println("\nDone\n"); } public static void main(String[] args) { File inputDir = new File(INPUT_DIR); File[] inputFiles = inputDir.listFiles(); for (File file : inputFiles) Main.processImage(file); } }