Skip to content

PixelCounter_3.0

OTI2020 edited this page Mar 12, 2020 · 1 revision

package org.OTI.Softwarepraktikum2020;

/**

  • author: OTI2020 && heilandoo
  • title: SoPraTestBand
  • aim: testing and implementaion of foodfill algorithem to detect connected areas of same color
  • date: 11.03.2020; 11:20 am **/

public class SoPraTestBand { private static int px = 2; private static int py = 1; private static int anzPixel = 0; private static float[][] ausgangsArr = { {0 ,255,255,0 }, {0 ,255,255,0 }, {0 ,255,255,0 }, {0 ,255,255,0 }};

//Kernstuek des Algor. ist die floodfill()
public static void main(String[] args){
	floodFill(ausgangsArr[px][py]);
}

//pixelCounter() setzt den Zaehler anzPixel bei jedem Aufruf einshöher,
//was aber nur passiert, wenn floodFill() eine bisher ununtersuchte 
//Nachbarzelle mit dem Wert 255 aufspuert
public static int pixelCounter() {
	anzPixel += 1;
	System.out.println("Die momentane Anzahl der zusammenhaengenden und untersuchten Pixel: " + anzPixel);
	return anzPixel;
}

//floodFil() fragt alle 8 Nachbarzellen des vorgegebenen Ausgangspixels, 	
//ob diese existieren, d.h. innerhalb des float[][] ausgangsArr liegen,
//und ob diese den Wert 255 speichern. Wenn diese Bedingungen erfuellt sind, 
//wird pixelCounter() aufgerufen, der Wert, der an entsprechender Stelle im 
//ausgangsArr gespeichert ist wird veraendert, damit das Pixel im rekursiven
//Verfahren nicht erneut mitgezaehlt wird. Anschließend wird der neue Pixelwert 
//in der Konsole ausgegeben, sodass der Vorgang besser nachvollziehbar ist. 
//Später, wenn alles einwandtfrei funktioniert, koennen die betreffenden Zeilen
//auskommentiert werden(ebenso die else-Anweisungen). Die letzte Zeile der 
//jeweiligen if-Abfragen enthaelt den Rekursionsschritt, der den untersuchten 
//Nachbarpixel zum neuen Startpixel macht.
public static void floodFill(float point) {
	if((ausgangsArr[px][py + 1] == 255.0f) && (py < (ausgangsArr[px].length - 1))) {
		pixelCounter();
		ausgangsArr[px][py + 1] = 100.01f;
		System.out.println(ausgangsArr[px][py + 1]);
		floodFill(ausgangsArr[px][py + 1]);
	}else System.err.println("unten");
	if((py < (ausgangsArr[px].length - 1)) && (px > 0) && (ausgangsArr[px - 1][py + 1] == 255.0f)) {
		pixelCounter();
		ausgangsArr[px -1][py + 1] = 100.02f;
		System.out.println(ausgangsArr[px -1][py + 1]);
		floodFill(ausgangsArr[px - 1][py + 1]);
	}else System.err.println("unten links");
	if((px > 0) && (ausgangsArr[px - 1][py] == 255.0f)) {
		pixelCounter();
		ausgangsArr[px - 1][py] = 100.03f;
		System.out.println(ausgangsArr[px -1][py]);
		floodFill(ausgangsArr[px - 1][py]);
	}else System.err.println("links");
	if((py > 0) && (px > 0) && (ausgangsArr[px - 1][py - 1] == 255.0f)) {
		pixelCounter();
		ausgangsArr[px - 1][py - 1] = 100.04f;
		System.out.println(ausgangsArr[px - 1][py - 1]);
		floodFill(ausgangsArr[px - 1][py - 1]);
	}else System.err.println("oben links");
	if((py > 0) && (ausgangsArr[px][py - 1] == 255.0f)) {
		pixelCounter();
		ausgangsArr[px][py - 1] = 100.05f;
		System.out.println(ausgangsArr[px][py - 1]);
		floodFill(ausgangsArr[px][py - 1]);
	}else System.err.println("oben");
	if((px < (ausgangsArr.length - 1)) && (py >0) && (ausgangsArr[px + 1][py - 1] == 255.0f)) {
		pixelCounter();
		ausgangsArr[px + 1][py - 1] = 100.06f;
		System.out.println(ausgangsArr[px + 1][py - 1]);
		floodFill(ausgangsArr[px + 1][py - 1]);
	}else System.err.println("oben rechts");
	if((px < (ausgangsArr.length - 1)) && (ausgangsArr[px + 1][py] == 255.0f)) {
		pixelCounter();
		ausgangsArr[px + 1][py] = 100.07f;
		System.out.println(ausgangsArr[px + 1][py]);
		floodFill(ausgangsArr[px + 1][py]);
	}else System.err.println("rechts");
	if((px < (ausgangsArr.length - 1)) && (py < (ausgangsArr[px].length - 1)) && (ausgangsArr[px + 1][py + 1] == 255.0f)) {
		pixelCounter();
		ausgangsArr[px + 1][py + 1] = 100.08f;
		System.out.println(ausgangsArr[px + 1][py + 1]);
		floodFill(ausgangsArr[px + 1][py + 1]);
	}else System.err.println("unten rechts");
	
}

}

//gut = float[ausgangsArrX][ausgangsArrY];
/*
if(py < (ausgangsArr[px].length - 1)) {
	
}
if(ausgangsArr[px][py + 1] == 255.0f) {
	ausgangsArr[px][py + 1] = 100.0f;
	printPixelValue(p);
	p = ausgangsArr[px][py + 1];
	floodFill(p);
	System.out.println(point + " if Geschichte");
}

else {
	System.out.println(point + " else Geschichte");
	if(ausgangsArr[px - 1][py + 1] == 255.0f) {
			printPixelValue(p);
	}
}
	else {
		System.out.println(point + " else_else Geschichte");
	}
} 
*/

/* {0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,255}, {0 ,255,255,255,255,255,255,255,0 ,0 }, {0 ,255,255,255,255,255,255,255,255,0 }, {0 ,0 ,255,255,255,0 ,0 ,255,255,0 }, {0 ,255,255,255,0 ,0 ,0 ,255,255,0 }, {0 ,0 ,255,255,0 ,0 ,255,255,0 ,0 }, {0 ,0 ,255,255,255,255,255,0 ,0 ,0 }, {0 ,255,255,255,255,255,0 ,0 ,0 ,0 }, {0 ,0 ,0 ,255,255,255,0 ,0 ,255,255}, {255,0 ,0 ,0 ,0 ,0 ,0 ,255,255,255}}; */

Clone this wiki locally