Medianfilter eines PGM-Bildes
Frage
Ich muss ein Programm schreiben, das jedes Pixel durch den Medianwert von ihm und seinen 8 Nachbarn ersetzt.Was ich habe, wird kompiliert, aber wenn ich versuche, ein neues Bild zu erstellen, erhalte ich mehrere Fehler.Hilfe wird geschätzt.
Hier ist der Stacktrace:
Exception in thread "main" java.lang.ClassCastException: [I cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:171)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at ImageProcessing.median(ImageProcessing.java:25
Und hier ist mein Code:
public static int [] [] median(int [] [] image) {
int height = image.length;
int width = image[0].length;
int [] [] result = new int [height] [width];
for (int col = 0 ; col < image.length ; col++) {
result[0][col] = image[0][col];
result[height - 1][col] = image[height - 1][col];
}
for (int row = 0 ; row < image[0].length ; row++) {
result[row][0] = image[row][0];
result[row][width - 1] = image[row][width - 1];
}
for (int row = 1 ; row < height - 1 ; row++) {
for (int col = 1 ; col < width - 1 ; col++) {
Arrays.sort(image);
result[row][col] = image[row][col] / 2;
}
}
return result;
}
Lösung
Der Fehler, den Sie erhalten, liegt daran, dass im letzten Schleifenpaar Ihr Aufruf an erfolgt Arrays.sort(image)
versucht, die Zeilen des Bildes zu sortieren.
Anstatt anzurufen Arrays.sort(image)
, müssen Sie eine Liste der neun Pixelwerte erstellen, die Sie betrachten möchten (das Pixel selbst und seine acht Nachbarn).Dann sortieren Das, und schreiben Sie den Medianwert hinein result
.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow