Add convolution and mean filtering

This commit is contained in:
2026-09-22 18:04:45 +02:00
parent 048ff5c792
commit 11aceb1f67
19 changed files with 602 additions and 68 deletions

View File

@@ -47,9 +47,12 @@ public class NavPresenter {
}
public void goToFiltering() {
navigator.showFiltering();
navigator.showIdealFiltering();
}
public void goToConvolution() {
navigator.showConvolutionFiltering();
}
public void gotToButterworth() {
navigator.showButterworth();

View File

@@ -1,9 +1,9 @@
package presenters.filtering;
package presenters.filtering.global;
import domain.events.listeners.Listener;
import domain.image.Image;
public interface FilteringListener extends Listener {
public interface GlobalFilteringListener extends Listener {
void onLowPassChanged(Image image);
void onHighPassChanged(Image image);
void onButterworthLowPassChanged(Image image);

View File

@@ -1,23 +1,23 @@
package presenters.filtering;
package presenters.filtering.global;
import app.state.AppState;
import app.state.FilteringState;
import app.state.GlobalFilteringState;
import com.google.inject.Inject;
import domain.image.GrayScaleMatrix;
import domain.image.Image;
import services.FilteringService;
import services.GlobalFilteringService;
import services.ImageService;
import ui.abstractions.IFilteringView;
import ui.abstractions.IGlobalFilteringView;
public class FilteringPresenter implements FilteringListener {
public class GlobalFilteringPresenter implements GlobalFilteringListener {
private final AppState appState;
private final FilteringState state;
private final GlobalFilteringState state;
private final ImageService imageService;
private final FilteringService filteringService;
private IFilteringView view;
private final GlobalFilteringService filteringService;
private IGlobalFilteringView view;
@Inject
public FilteringPresenter(AppState appState, FilteringState state, ImageService imageService, FilteringService filteringService) {
public GlobalFilteringPresenter(AppState appState, GlobalFilteringState state, ImageService imageService, GlobalFilteringService filteringService) {
this.appState = appState;
this.state = state;
this.imageService = imageService;
@@ -25,7 +25,7 @@ public class FilteringPresenter implements FilteringListener {
this.state.subscribe(this);
}
public void setView(IFilteringView view) {
public void setView(IGlobalFilteringView view) {
this.view = view;
}

View File

@@ -0,0 +1,10 @@
package presenters.filtering.local;
import domain.image.Image;
public interface LocalFilteringListener {
void onConvolutionChanged(Image image);
void onMeanChanged(Image image);
}

View File

@@ -0,0 +1,66 @@
package presenters.filtering.local;
import app.state.AppState;
import app.state.LocalFilteringState;
import domain.image.Image;
import jakarta.inject.Inject;
import services.ImageService;
import services.LocalFilteringService;
import ui.abstractions.ILocalFilteringView;
public class LocalFilteringPresenter implements LocalFilteringListener {
private final AppState appState;
private final LocalFilteringState state;
private final ImageService imageService;
private final LocalFilteringService filteringService;
private ILocalFilteringView view;
@Inject
public LocalFilteringPresenter(
AppState appState,
LocalFilteringState state,
ImageService imageService,
LocalFilteringService filteringService
) {
this.appState = appState;
this.state = state;
this.imageService = imageService;
this.filteringService = filteringService;
this.state.subscribe(this);
}
public void setView(ILocalFilteringView view) {
this.view = view;
}
public void computeConvolutionFiltering(double[][] mask) {
Image image = filteringService.applyConvolutionMask(appState.getImage(), mask);
state.setConvolution(image);
}
public void computeMeanFiltering(int value) {
Image image = filteringService.applyMeanFilter(appState.getImage(),value);
state.setMean(image);
}
@Override
public void onConvolutionChanged(Image image) {
if (view != null) {
view.updateConvolutionFiltering(image);
}
}
@Override
public void onMeanChanged(Image image) {
if (view != null) {
view.updateMeanFiltering(image);
}
}
public void dispose() {
state.unsubscribe(this);
}
}