Add basic and complex morphologies

This commit is contained in:
2026-09-28 17:27:34 +02:00
parent 11aceb1f67
commit 9fcc48ecf5
13 changed files with 700 additions and 32 deletions

View File

@@ -42,28 +42,18 @@ public class NavPresenter {
appState.setImage(image);
}
public void goToFourier() {
navigator.showFourier();
}
public void goToFourier() { navigator.showFourier(); }
public void goToFiltering() {
navigator.showIdealFiltering();
}
public void goToFiltering() { navigator.showIdealFiltering(); }
public void goToConvolution() {
navigator.showConvolutionFiltering();
}
public void goToConvolution() { navigator.showConvolutionFiltering(); }
public void gotToButterworth() {
navigator.showButterworth();
}
public void gotToButterworth() { navigator.showButterworth(); }
public GrayScaleMatrix getImageGrayMatrix() {
return appState.getImage().toGrayScale();
}
public void goToBasicMorphology(){ navigator.showBasicMorphology(); }
public void setMode(Mode mode) {
modeService.setMode(mode);
}
public GrayScaleMatrix getImageGrayMatrix() { return appState.getImage().toGrayScale(); }
public void setMode(Mode mode) { modeService.setMode(mode); }
}

View File

@@ -0,0 +1,13 @@
package presenters.morphology;
import domain.image.Image;
public interface MorphologyListener {
void onErosionChanged(Image image);
void onDilationChanged(Image image);
void onOpeningChanged(Image image);
void onClosingChanged(Image image);
}

View File

@@ -0,0 +1,102 @@
package presenters.morphology;
import app.state.AppState;
import app.state.MorphologyState;
import com.google.inject.Inject;
import domain.image.Image;
import services.MorphologyService;
import ui.abstractions.IBasicMorphologyView;
public class MorphologyPresenter implements MorphologyListener {
private final AppState appState;
private final MorphologyState morphologyState;
private final MorphologyService morphologyService;
private IBasicMorphologyView view;
@Inject
public MorphologyPresenter(
AppState appState,
MorphologyState morphologyState,
MorphologyService morphologyService
) {
this.appState = appState;
this.morphologyState = morphologyState;
this.morphologyService = morphologyService;
}
public void setView(IBasicMorphologyView view) {
this.view = view;
if (view != null) {
morphologyState.subscribe(this);
} else {
morphologyState.unsubscribe(this);
}
}
public void computeErosion(Integer maskSize) {
Image image = appState.getImage();
Image result = morphologyService.erosion(image, maskSize);
morphologyState.setErosion(result);
}
public void computeDilation(Integer maskSize) {
Image image = appState.getImage();
Image result = morphologyService.dilation(image, maskSize);
morphologyState.setDilation(result);
}
public void computeOpening(Integer maskSize) {
Image image = appState.getImage();
Image result = morphologyService.opening(image, maskSize);
morphologyState.setOpening(result);
}
public void computeClosing(Integer maskSize) {
Image image = appState.getImage();
Image result = morphologyService.closing(image, maskSize);
morphologyState.setClosing(result);
}
public void dispose() {
morphologyState.unsubscribe(this);
view = null;
}
@Override
public void onErosionChanged(Image image) {
if (view != null) {
view.updateErosion(image);
}
}
@Override
public void onDilationChanged(Image image) {
if (view != null) {
view.updateDilation(image);
}
}
@Override
public void onOpeningChanged(Image image) {
if (view != null) {
view.updateOpening(image);
}
}
@Override
public void onClosingChanged(Image image) {
if (view != null) {
view.updateClosing(image);
}
}
}