Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public MeinBild konturVerlauf() {
- int width = meinBild.getWidth();
- int height = meinBild.getHeight();
- int[][] pixel = meinBild.getBildmatrix();
- int[][] auswerteBild = new int[width+2][height+2];
- int xStart, yStart, xKontur, yKontur, xHinter, yHinter, xKand, yKand;
- // Binaerobjekt kann am Bildrand liegen, deshalb
- for (int x=0; x<width; x++) {
- for (int y=0; y<height; y++) {
- auswerteBild[x+1][y+1] = pixel[x][y];
- pixel[x][y] = 0;
- }
- }
- // Hell/Dunkel-Übergang im Bild finden
- for (int x=1; x<width; x++) {
- for (int y=1; y<height; y++) {
- // Startpunkt gefunden
- if (auswerteBild[x-1][y] == 0 && auswerteBild[x][y] == 255)
- {
- System.out.println("Startpunkt gefunden");
- auswerteBild[x][y] = 128;
- pixel[x-1][y-1] = 255;
- xStart = x;
- yStart = y;
- xKontur = xStart;
- yKontur = yStart;
- xHinter = xStart-1; // Koordinaten des letzten
- yHinter = yStart; // Hintergrundpunktes
- // eigentliche Konturextraktion beginnt
- do {
- boolean gefunden = false;
- int versuche = 1;
- // Suche den nächsten Konturpunkt
- while (!gefunden && versuche<8) {
- int deltaX = xHinter - xKontur;
- int deltaY = yHinter - yKontur;
- if (xHinter != xKontur && yHinter != yKontur) {
- xKand = xHinter - (deltaX+deltaY)/2;
- yKand = yHinter + (deltaX-deltaY)/2;
- }
- else {
- xKand = xHinter - deltaY;
- yKand = yHinter + deltaX;
- }
- if (auswerteBild[xKand][yKand] != 0) { // Konturpunkt
- auswerteBild[xKand][yKand] = 128;
- pixel[xKand-1][yKand-1] = 255;
- xKontur = xKand;
- yKontur = yKand;
- gefunden = true;
- }
- else { // Hintergrundpunkt
- xHinter = xKand;
- yHinter = yKand;
- }
- versuche++;
- }
- } while (xKontur != xStart || yKontur != yStart);
- }
- }
- }
- // Abspeichern in MeinBild
- meinBild.resetPixel(pixel);
- return meinBild;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement