package services; import domain.image.GrayScaleMatrix; import domain.image.Image; import domain.image.processing.filtering.GlobalLinearFiltering; import domain.image.processing.morphology.ComplexMorphology; import java.util.function.Supplier; public class UseCaseService { public Image reduceNoise(Image i0) { double cutoff = 0.7 * getMaxCutoff(i0.getWidth(), i0.getHeight()); GrayScaleMatrix m0 = i0.toGrayScale(); GrayScaleMatrix m1 = measureTime("Butterworth low pass", () -> GlobalLinearFiltering.butterworthLowPassFiltering(m0, cutoff, 1)); Image i1 = m1.toImage(); return measureTime("Median filter", () -> ComplexMorphology.medianFilter(i1, 5).toImage()); } public Image[] equalizeHistogram(Image image) { Image rgbEqualized = equalizeRgb(image); Image luminanceEqualized = equalizeLuminance(image); return new Image[]{rgbEqualized, luminanceEqualized}; } public Image[] segmentPeas(Image image) { Image bluePeas = extractBluePeas(image); Image redPeas = extractRedPeas(image); return new Image[]{bluePeas, redPeas}; } public Image[] segmentBarnacles(Image image) { Image largeBarnacles = extractLargeBarnacles(image); Image smallBarnacles = extractSmallBarnacles(image); return new Image[]{largeBarnacles, smallBarnacles}; } public Image segmentTools(Image image) { return extractTools(image); } public Image[] extractSpacecraft(Image spacecraftImage, Image planetImage) { Image synthesis = createSynthesis(spacecraftImage, planetImage); Image synthesis2 = addSpacecraftContour(synthesis); return new Image[]{synthesis, synthesis2}; } public Image detectToastContours(Image image) { return extractToastContours(image); } private Image equalizeRgb(Image image) { return image; } private Image equalizeLuminance(Image image) { return image; } private Image extractBluePeas(Image image) { return image; } private Image extractRedPeas(Image image) { return image; } private Image extractLargeBarnacles(Image image) { return image; } private Image extractSmallBarnacles(Image image) { return image; } private Image extractTools(Image image) { return image; } private Image createSynthesis(Image spacecraftImage, Image planetImage) { return planetImage; } private Image addSpacecraftContour(Image synthesis) { return synthesis; } private Image extractToastContours(Image image) { return image; } public T measureTime(String name, Supplier operation) { long start = System.nanoTime(); T result = operation.get(); long elapsed = (System.nanoTime() - start) / 1_000_000; System.out.println(name + " took " + elapsed + " ms"); return result; } private double getMaxCutoff(int width, int height) { return Math.sqrt(Math.pow(width / 2.0, 2) + Math.pow(height / 2.0, 2)); } }