111 lines
3.1 KiB
Java
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));
|
|
}
|
|
|
|
} |