Files
MASI4-signal-processing/src/main/java/services/UseCaseService.java
2026-10-04 13:03:49 +02:00

111 lines
3.1 KiB
Java

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> T measureTime(String name, Supplier<T> 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));
}
}