8 Nachbarpixel prüfen

Münchner

Aktives Mitglied
Hallo Leute,

ich steck fest.

Ich hab eine 3x3 Matrix und möchte vom mittleren Punkt aus die Differenzen zu allen umliegenden Punkten berechnen.
Jetzt könnt ich natürlich vom Mittelpunkt aus zu jedem anderen Punkt die Differenz bilden.
Geht das irgendwie relativ, also Mittelpunkt - Werte an der Stelle {-1,-1},{1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}.
Kann mir jemand nen Tipp geben wie man sowas umsetzt.
Grüße
Münchner


Java:
public class DACHTTEST2 {
	public static void main (String args[]){
	int macht[][] = new int[3][3];
	macht[0][0]=1;
	macht[0][1]=2;
	macht[0][2]=3;		// Zeile 0
	macht[1][0]=4;
	macht[1][1]=5;
	macht[1][2]=6;		// Zeile 1
	macht[2][0]=7;
	macht[2][1]=8;
	macht[2][2]=9;		// Zeile 2
	
	    
	

	
	for(int i = 0; i< macht.length; i++ )
	{	
		for (int j = 0; j < macht[i].length; j++)
		{
			int pixel = macht[i][j];
			System.out.println(pixel);
		}

		
	}
	
	int erg = macht[1][1]- macht[0][1];
	System.out.println(erg );
	
	
	}
	
}
 

Münchner

Aktives Mitglied
Ne die Pixeldifferenz mein ich ned. Jedes Pixel hat einen Pixel value, so wie in nem Grauwertbild beispielsweise. Und ich möchte jetzt beispielsweise die geringste Grauwertdifferenz rausfinden, indem ich die benachbarten Pixel nach ihren Werten abfrag.
 

Volvagia

Top Contributor
So?

Java:
private static final Point[] NEIGHTBORS = new Point[] {
	new Point(-1, -1),
	new Point(-1, 0),
	new Point(-1, 1),
	
	new Point(0, -1),
	new Point(0, 1),
	
	new Point(1, -1),
	new Point(1, 0),
	new Point(1, 1),
};

private static int[][] macht;

public static void main(String[] args)
{
	defineMacht();
	
	int highesDiv = checkPxDifference(1, 1);
	System.out.println(highesDiv);
}
private static void defineMacht()
{
    macht = new int[3][3];
    macht[0][0]=1;
    macht[0][1]=2;
    macht[0][2]=3;
    
    macht[1][0]=4;
    macht[1][1]=5;
    macht[1][2]=6;
    
    macht[2][0]=7;
    macht[2][1]=8;
    macht[2][2]=9;		
}
private static int checkPxDifference(int x, int y)
{
	int maxDif = 0;
	int myValue = macht[x][y];
	
	for(Point p:NEIGHTBORS)
	{
		int pxX = x + p.x;
		int pxY = y + p.y;
		
		try
		{
			int pxValue = macht[pxX][pxY];
			int dif = Math.abs(myValue - pxValue);
			maxDif = Math.max(maxDif, dif);
		}
		catch (ArrayIndexOutOfBoundsException e) {}
	}
	return(maxDif);
}
 

faetzminator

Gesperrter Benutzer
Irgendwie so was?
Guckt einfach nach der geringsten Differenz und speichert diese.
Java:
int macht[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

int diff = Integer.MAX_VALUE;
for (int i = 0; i < macht.length; i++) {
    for (int j = 0; j < macht[i].length; j++) {
        if (i != 1 || j != 1) {
            int result = Math.abs(macht[1][1] - macht[i][j]);
            if (result < diff) {
                diff = result;
            }
        }
    }
}

System.out.println(diff);
 

Marco13

Top Contributor
Java:
...		
		try
		{
			int pxValue = macht[pxX][pxY];
			int dif = Math.abs(myValue - pxValue);
			maxDif = Math.max(maxDif, dif);
		}
		catch (ArrayIndexOutOfBoundsException e) {}
}

:shock: :autsch: :noe: Lieber eine "isValid(int x, int y)"-Methode schreiben....
EDIT: Wobei man die evtl. auch nicht brauchen würde, je nachdem, wie das angewendet werden soll...
 

Volvagia

Top Contributor
:shock: :autsch: :noe: Lieber eine "isValid(int x, int y)"-Methode schreiben....

Zu Befehl, mein Javaral.
salutier.gif


Java:
private static final Point[] NEIGHTBORS = new Point[] {
	new Point(-1, -1),
	new Point(-1, 0),
	new Point(-1, 1),
	
	new Point(0, -1),
	new Point(0, 1),
	
	new Point(1, -1),
	new Point(1, 0),
	new Point(1, 1),
};

private static int[][] macht;
	
public static void main(String[] args)
{
	defineMacht();
	
	int highesDiv = checkPxDifference(2, 1);
	System.out.println(highesDiv);
}
private static void defineMacht()
{
    macht = new int[3][3];
    macht[0][0]=1;
    macht[0][1]=2;
    macht[0][2]=3;
    
    macht[1][0]=4;
    macht[1][1]=5;
    macht[1][2]=6;
    
    macht[2][0]=7;
    macht[2][1]=8;
    macht[2][2]=9;		
}
private static int checkPxDifference(int myX, int myY)
{
	int maxDif = 0;
	int myValue = macht[myX][myY];
	
	for(Point p:NEIGHTBORS)
	{
		int pxX = myX + p.x;
		int pxY = myY + p.y;
		
		if(!isValid(pxX, pxY))
			continue;

		int pxValue = macht[pxX][pxY];
		
		int dif = Math.abs(myValue - pxValue);
		maxDif = Math.max(maxDif, dif);
	}
	return(maxDif);
}
private static boolean isValid(int x, int y)
{
	return(x >= 0 && y >= 0 &&
			x < macht.length && y < macht[0].length);
}
 

Münchner

Aktives Mitglied
@Volvagia: Ja genau sowas, vielen Dank für den ausführlichen Code.
@faetzminator: Dir auch vielen Dank, den werd ich auch probieren.

Ich kannte demn Typ point gar nicht, scho wieder was gelernt
 

Marco13

Top Contributor
Zu Befehl, mein Javaral.
salutier.gif

Spüre ich da einen subtile Hauch von Ironie? ;)
Abgesehen davon war da ja noch das EDIT: Ich verstehe nicht ganz, warum du das mit den Points machst (und damit auch nicht, warum du die isValid überhaupt brauchst). Das ist vielleicht praktisch, wenn man die Umgebung für jedes Feld der 3x3-Matrix berechnen will (also z.B. auch die Umbegung von 0,0 oder 2,0) - aber es ging doch NUR(!?) um den Mittelpunkt?! Da wäre die Lösung von faetzminator wohl die nächstliegende...
 

Volvagia

Top Contributor
Ne, war ganz lieb gemeint. :oops:
Ich habe mal irgendwo, ich denke es war ein Buch gelesen, dass ein Algorithmus sich nicht auf so detailierte Fragen wie z. B. "Wie finde ich die Differenz zwischen den Mittelpunkt eines Arrays und den umliegenden existierenden Feldern", sondern "Wie finde ich die größte Differenz zwischen allen Nachbarn und einen Array-Feldes heraus" stützen sollte.

Stand in etwa so drinnen: Nicht "wie sortiert man 10 Zahlen", sondern "wie sortiert man Zahlen". Ich denke, das liegt an der Wiederverwendbarkeit von Algos.
 

Münchner

Aktives Mitglied
ok, soweit so gut.

Ja das ist richtig, mit der Umsetzung von faetzminator bin ich für einen Mittelpunkt gut bedient.
Allerdings bin ich mit den Points aus der Umsetzung von Volvagia flexibler, weil es durchaus sein kann, dass ich den Mittelpunkt irgendwann verlagern will.
 

Marco13

Top Contributor
@Volvagia: Klar, allgemeiner ist immer besser. (Oder? - Anderes Thema ;) ).

Speziell hier hatte ich auch erst gedacht, dass das doch vermutlich später nicht nur auf einem 3x3-Array laufen soll, sondern vielleicht auch ein 3x3-Fenster von einem 10x10-Array - dann wäre die Lösung mit den Points auch wieder einfacher anzupassen. Aber Bei einen n x n-Fenster in einem m x n-Array würde das dann plötzlich wieder umschlagen - die Points-Lösung wäre dafür praktisch nicht anwendbar, und mit einer Schleife (d.h. 4 Schleifen) wäre es trivial. Speziell weil die Points ja auch so gleichmäßig sind (einfach von -1 bis +1 in x- und y-Richtung). Für sowas wie die Sprungmöglichkeiten eines Springers auf einem Schachbrett wäre das wieder was anderes.
 

Crian

Top Contributor
[c]private static final Point[] NEIGHTBORS = new Point[] { [/c]

Das Wort heißt entweder "neighbours" (im britischen Englisch, was ich hier verwenden würde) oder "neighbors" (im amerikanischen). Aber "neightbors" ist auf jeden Fall falsch. ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
I Auf vollen Monat prüfen? Java Basics - Anfänger-Themen 22
A Dateiname auf Vorkommen prüfen Java Basics - Anfänger-Themen 29
I Prüfen, ob Anzahl an Monate ein Jahr ergeben Java Basics - Anfänger-Themen 4
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
W Klasse existiert prüfen Java Basics - Anfänger-Themen 5
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
M Array auf Primzahlen prüfen Java Basics - Anfänger-Themen 7
K Wie String prüfen ob drei mal das gleiche Zeichen vorkommt? Java Basics - Anfänger-Themen 7
J ArrayList auf bereits vorhanden eintrag prüfen Java Basics - Anfänger-Themen 5
X Zwei Dimensionales Array prüfen Java Basics - Anfänger-Themen 1
B Prüfen, ob Zeit Überschreitung Java Basics - Anfänger-Themen 2
B Sudoku prüfen Java Basics - Anfänger-Themen 13
M Prüfen auf null ohne NPE Java Basics - Anfänger-Themen 1
X Array auf Leerstellen prüfen Java Basics - Anfänger-Themen 1
FelixN Prüfen, ob ein 2D-Array rechteckig ist Java Basics - Anfänger-Themen 42
C Erste Schritte JComboBox Einträge auf Duplikat prüfen Java Basics - Anfänger-Themen 4
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
C Array auf Null-Inhalte prüfen Java Basics - Anfänger-Themen 9
B Prüfen, ob Country Code in Europa ist? Java Basics - Anfänger-Themen 24
L Prüfen ob Fax (Tif-Datei) vollständig angekommen ist Java Basics - Anfänger-Themen 15
O Datenstruktur auf SET prüfen in O(n) Java Basics - Anfänger-Themen 32
O Einzelne Bits umwandeln und prüfen Java Basics - Anfänger-Themen 23
U Mehrfacheingabe auf bestimmte Parameter prüfen Java Basics - Anfänger-Themen 8
B Prüfen, ob Datum2 der gleiche Tag ist wie Datum1 Java Basics - Anfänger-Themen 10
Dimax Erste Schritte String Eingabe Prüfen Java Basics - Anfänger-Themen 11
S char auf buchstabe/zeichen prüfen Java Basics - Anfänger-Themen 1
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
B Prüfen, ob es schon einen Termin gibt in einem Zeitraum Java Basics - Anfänger-Themen 5
K Linux Speicherplatz mit Java prüfen Java Basics - Anfänger-Themen 4
O Array nach gleichen Zahlen prüfen und ausgeben Java Basics - Anfänger-Themen 6
G Compiler-Fehler Auf Anagramm prüfen Java Basics - Anfänger-Themen 1
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert Input/Output Prüfen wie oft etwas eingegeben wurde Java Basics - Anfänger-Themen 2
K Operatoren 2D Int Array auf Null-Referenzen prüfen Java Basics - Anfänger-Themen 18
S Prüfen ob Zelle in Excel leer ist funktioniert nicht (Apache POI) Java Basics - Anfänger-Themen 18
C Klassen Reguläre Ausdrücke auf Gleichheit prüfen Java Basics - Anfänger-Themen 5
M Erste Schritte Java prüfen ob eine der Möglichkeiten erfüllt ist Java Basics - Anfänger-Themen 2
R Auf Nachkommastellen prüfen. Java Basics - Anfänger-Themen 2
P Argumente auf plausibilität prüfen... Java Basics - Anfänger-Themen 8
F LimitedQueue auf Datum prüfen Java Basics - Anfänger-Themen 6
B Passwort prüfen bis eindeutig - while Schleife? Java Basics - Anfänger-Themen 11
Tommy Nightmare Variable auf mehrere Ungleichheiten prüfen Java Basics - Anfänger-Themen 18
B String mit Emailadresse prüfen Java Basics - Anfänger-Themen 11
E 2D Arrays auf Ungleichheit prüfen! Java Basics - Anfänger-Themen 5
MrSnake Prüfen ob TitledPane schon besteht Java Basics - Anfänger-Themen 2
B Serial Key prüfen -> String mit privatem Key und dann abgleichen; Summe = 0 Java Basics - Anfänger-Themen 8
N Compiler-Fehler Iban prüfen Java Basics - Anfänger-Themen 7
J Prüfen ob Arrays nur mit einem Wert belegt sind Java Basics - Anfänger-Themen 3
M String prüfen Java Basics - Anfänger-Themen 7
E Prüfen ob Sammlung gesetzt wurde - Lebensmittelsammlung Java Basics - Anfänger-Themen 8
H Zufällig generierte Zahlen auf Eingabe prüfen Java Basics - Anfänger-Themen 5
S Prüfen ob bestimmter Ordner geöffnet ist (Windows XP) Java Basics - Anfänger-Themen 5
Ruvok Prüfen ob bestimmtest Element existiert im Array Java Basics - Anfänger-Themen 11
DeVolt Java8 Paket Time: Datum prüfen / try-catch Java Basics - Anfänger-Themen 1
W char-Array auf bestimmte Zeichen prüfen Java Basics - Anfänger-Themen 10
S String auf Pallindromeigenschaft prüfen Java Basics - Anfänger-Themen 15
AssELAss Datums-Objekt prüfen ob im gleichen Monat? Java Basics - Anfänger-Themen 5
Screen Input/Output Wie prüfen ob Stream1 in Stream2 enthalten ist (on-the-fly) ? Java Basics - Anfänger-Themen 5
P Seite auf Inhalt prüfen Java Basics - Anfänger-Themen 2
I Prüfen ob Webseite existiert Java Basics - Anfänger-Themen 3
Z Inputs prüfen Java Basics - Anfänger-Themen 6
G Textdatei auf Dubletten prüfen Java Basics - Anfänger-Themen 8
I Prüfen von zwei Listen Java Basics - Anfänger-Themen 1
K zwei Rechtecke auf Berührung prüfen Java Basics - Anfänger-Themen 2
G String auf Format prüfen Java Basics - Anfänger-Themen 3
J Eingabewert übergeben und prüfen von showInputDialog Java Basics - Anfänger-Themen 4
L 6stellige Zufallszahlen erzeugen & auf einzigartigkeit prüfen Java Basics - Anfänger-Themen 3
S Array befüllen & auf doppelte werte prüfen Java Basics - Anfänger-Themen 6
M Prüfen, ob Zeichen eine Zahl ist Java Basics - Anfänger-Themen 3
M Punkt auf eine Farbe prüfen Java Basics - Anfänger-Themen 8
C Datentypen Prüfen of eine Zahl Quadratzahl ist Java Basics - Anfänger-Themen 2
K Eindimensionalen Array prüfen Java Basics - Anfänger-Themen 5
M Konstruktor auf null prüfen, Arrays Java Basics - Anfänger-Themen 9
O Prüfen ob ein String den selben Namen hat wie eine Booleanreihe? Java Basics - Anfänger-Themen 17
J Arrays prüfen und über if Bedingung ausgeben Java Basics - Anfänger-Themen 15
B Interface Generics: prüfen ob Interface deklariert wird Java Basics - Anfänger-Themen 18
L Erste Schritte Einträge in ArrayList prüfen Java Basics - Anfänger-Themen 4
S OOP long prüfen Java Basics - Anfänger-Themen 5
H Prüfen, ob jpg image schon vorhanden ist, bevor es geladen wird Java Basics - Anfänger-Themen 13
L Eine ArrayList auf gleiche Inhalte prüfen Java Basics - Anfänger-Themen 10
Rayo Eingelesene Ascii Zahlen wie normale Zahlen prüfen Java Basics - Anfänger-Themen 4
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
N Prüfen ob Objekt existiert Java Basics - Anfänger-Themen 6
I Mehrere ArrayLists mit einer for( : ) Schleife auf Inhalt prüfen Java Basics - Anfänger-Themen 6
A Prüfen ob Datei existiert Java Basics - Anfänger-Themen 9
G Verfügbare Clients prüfen ohne ping Java Basics - Anfänger-Themen 12
P JSP Werte übergeben und prüfen Java Basics - Anfänger-Themen 4
A Anfängerfrage: Zahlformat prüfen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben