2D-Grafik Fehler beim Farbe auslesen

K

kunstwurst

Gast
Hallo, ich arbeite gerade mit schwarz-weiss Interferenz-Bildern und ein teil der Auswertung beinhaltet die suche nach dem "Massenmittelpunkt" (Mittelpunkt vom großem hellem Fleck auf dem Bild)
Es funktioniert auch gut, allerdings nur solange ich nicht zu viele Grautöne habe, denn sonst findet es den gesuchten punkt oft im negativen bereich. An einem Konkretem Beispiel:

http://i55.tinypic.com/2555so3.jpg <= läuft, Mitte ist irgendwo bei 320/260
http://i53.tinypic.com/2hz1zya.jpg <= auch in der Gegend
http://i56.tinypic.com/2r55jep.png <= irgendwo am Rand bei 80/0 (dies ist übrigens die differenz der obigen beiden Bildern)

Ich hab absolut keine Ahnung mehr woran das liegen könnte vielleicht verhalten sich die RGB werte bei .bmp's mit 24 bit farbtiefe anders als bei 8 bit-.bmp's oder andere Sachen die einem nicht eingeweihtem nicht sofort auffallen

Ach ja und hier der Code. Übersichtlichkeitshalber wurde auf Effizienz verzichtet, aber ob das jetzt eine halbe oder eine ganze sekunde pro bild braucht ist mir im moment egal

Java:
// rechnet die differenz von zwei bildern und bestimmt den mittelpunkt, input: bild hintergrund
import java.io.*;
import java.awt.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.lang.Math;
import java.text.*;


public class differenz
{

public static void main(String args[]) throws IOException{
BufferedImage mypic= ImageIO.read(new File(args[0]));
BufferedImage zeropic= ImageIO.read(new File(args[1]));
int Xmid=0;
int Ymid=0;
int sum=0;
int[][] mydata= new int[640][480];
int[][] zerodata= new int[640][480];
int[][] diff= new int[640][480];


for(int i=0; i<640; i++){
	for(int j=0; j<480; j++){
	int clr=mypic.getRGB(i,j); 
	int  blu  =  clr &  0xff;
	mydata[i][j]=blu;	
	}
}//bild1 zu array

for(int i=0; i<640; i++){
	for(int j=0; j<480; j++){
	int clr=zeropic.getRGB(i,j); 
	int  blu  =  clr &  0xff; //grau=blau
	zerodata[i][j]=blu;	
	}
}//bild2 zu array

for(int i=0; i<640; i++){
	for(int j=0; j<480; j++){
	diff[i][j]=mydata[i][j]-zerodata[i][j];
	}
}//differenz

int min=diff[0][0];
for(int i=0; i<640; i++){
	for(int j=0; j<480; j++){
	if(diff[i][j]<min)min=diff[i][j]  ;
	}
}//minimum suchen
System.out.println(min); //das ist der richtige wert

for(int i=0; i<640; i++){
	for(int j=0; j<480; j++){
	diff[i][j]-=min;
	}
}//dunkelstheit auf null setzen

for(int i=0; i<640; i++){
	for(int j=0; j<480; j++){
	sum+=diff[i][j]; //gesamtsumme der grauwerte
	Xmid+=(i+1)*diff[i][j]; //gewichtete x-position
	Ymid+=(j+1)*diff[i][j];	//gewichtete y-pos.
	}
}
Xmid=Xmid/sum-1; Ymid=Ymid/sum-1; //ergebniss...manchmal völlig daneben
//Mitte suchen
System.out.println(Xmid+" "+Ymid); 
System.out.println(sum); //dieser Wert stimmt auch

}
}
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Woh... schwer nachzuvollziehen, was da überhaupt abläuft... aber ein kleiner Punkt
Xmid=Xmid/sum-1
sollte das nicht
Xmid=Xmid/(sum-1)
sein, und ist dir klar, dass bei sowas wie 99/100 der Wert 0 rauskommt?
 
K

kunstwurst

Gast
1) das "-1" ist eigentlich nicht nötig, ich hab nur vergessen das rauszumachen, das war nur eine indexverschiebung damit ich die erste zeile/spalte nicht mit 0 gewichte, läuft aber auf das gleiche heraus.

2) hast recht auch mit kommentaren ist es vielleicht doch zu viel zum durchschauen, hier hab ich das mal reduziert auf den teil der nicht funktioniert

Java:
import java.io.*;
import java.awt.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

public class test
{
public static void main(String args[]) throws IOException{
BufferedImage mypic= ImageIO.read(new File(args[0]));
int sum=0;
int Xmid=0;
int Ymid=0;

for(int i=0; i<640; i++){
	for(int j=0; j<480; j++){
	int clr=mypic.getRGB(i,j); 
	int  blu  =  clr &  0xff;
	sum+=blu;
	Xmid+=i*blu;
	Ymid+=j*blu;
	}
}

System.out.println(Xmid/sum +" " +Ymid/sum);
}
}

3) mir ist klar das bei ganzzahlendivision der wert abgerundet wird, allerdings ist Xmid etwa 300 mal größer, 0 kann also nicht rauskommen, und so kann ich mir das explizite runden sparen.

4) die lösung ist mir heute morgen eingefallen. Anfangs dachte ich, das läge am zahlenbereich aber die maximale Farbsumme ist Smax=640*480*255=78.336*10^6, was nur ein bruchteil von dem 2^31 großem int, also hab ich den gedanken verworfen. Was ich vergessen habe, ist dass die gewichteten vektoren bis zu
Ymax=Smax*480/2 und
Xmax=Smax*640/2=2.5*10^10
Sprengen den Int-Zahlenbereich. Hätte mir eigentlich sofort bei negativen werten auffallen sollen. deswegen hat es auch nur bei dunklen bildern funktioniert. Mit long statt int läüft jetzt alles prima
 
K

kunstwurst

Gast
Uhm, das kann jetzt als Erledigt markiert werden aber ich darf das wohl als gast nicht machen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
S Fehler beim Zweites 3D Bild AWT, Swing, JavaFX & SWT 2
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
J Fehler beim Einklappen eines Trees AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Fehler beim Laden eines Bildes AWT, Swing, JavaFX & SWT 25
J Fehler beim Gif Datei öffnen AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Fehler beim Überzeichnen von Linien AWT, Swing, JavaFX & SWT 11
hdi Swing JTable: Fehler beim Nutzen von RowSorter#setRowFilter AWT, Swing, JavaFX & SWT 4
M Fehler beim Zugriff von awt-KeyListener auf swt-Shell AWT, Swing, JavaFX & SWT 2
P Fehler beim Einlesen eines JTextFields AWT, Swing, JavaFX & SWT 2
G Viele Fehler beim zeichen AWT, Swing, JavaFX & SWT 5
A Fehler beim Auslesen aus einem Textfeld AWT, Swing, JavaFX & SWT 2
spacegaier Fehler beim Aufrufen von Dialog aus ActionListener AWT, Swing, JavaFX & SWT 12
P Fehler beim Verwenden von swt.jar mit NetBeans AWT, Swing, JavaFX & SWT 2
S Fehler beim Auslesen des Textes im textfield AWT, Swing, JavaFX & SWT 8
T Fehler beim Compilieren AWT, Swing, JavaFX & SWT 29
S Fehler beim addTextListener . AWT, Swing, JavaFX & SWT 2
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
J Fehler bei jFame.setTitle() AWT, Swing, JavaFX & SWT 8
thor_norsk SpringBoot-Fehler AWT, Swing, JavaFX & SWT 7
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
T ListView nach Erweiterung Fehler in CellFactory AWT, Swing, JavaFX & SWT 8
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
parrot JavaFX Fehler AWT, Swing, JavaFX & SWT 4
H JavaFX JavaFX Import Fehler AWT, Swing, JavaFX & SWT 4
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
A eine Fehler AWT, Swing, JavaFX & SWT 9
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
W fillRect() in Schleife spukt nur Fehler aus AWT, Swing, JavaFX & SWT 3
S Fehler: Hauptklasse neon.Main konnte nicht gefunden oder geladen werden AWT, Swing, JavaFX & SWT 5
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
E Fehler bei Button AWT, Swing, JavaFX & SWT 1
L Unbekannter Fehler AWT, Swing, JavaFX & SWT 13
I Fehler bei Alert AWT, Swing, JavaFX & SWT 6
J Fehler bei PixelColor erkennung AWT, Swing, JavaFX & SWT 4
T Fehler bei ActionEvent? AWT, Swing, JavaFX & SWT 3
V Fehler bei Würfelsimulator GUI AWT, Swing, JavaFX & SWT 2
Z GUI-Problem, finde meinen Fehler nicht! AWT, Swing, JavaFX & SWT 11
Seikuassi SWING - (Hoffentlicher) simpler Color-Fehler AWT, Swing, JavaFX & SWT 4
M Swing finde den fehler nicht AWT, Swing, JavaFX & SWT 9
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
D Unlogischer Fehler? AWT, Swing, JavaFX & SWT 2
L Eclipse Fehler besser zu verstehen!!! AWT, Swing, JavaFX & SWT 4
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
H GUI-Textausgabe Fehler AWT, Swing, JavaFX & SWT 5
S String is null Fehler AWT, Swing, JavaFX & SWT 2
P Swing GroupLayout() Fehler? AWT, Swing, JavaFX & SWT 3
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
N Touchscreen-Scrollen, wo liegt der Fehler? AWT, Swing, JavaFX & SWT 3
N Fehler Inhalt von JTable wird gelöscht AWT, Swing, JavaFX & SWT 5
M GEF tutorial Fehler finden AWT, Swing, JavaFX & SWT 4
S Grafik Fehler AWT, Swing, JavaFX & SWT 15
M Fehler bei Arrayübergabe an JComboBox AWT, Swing, JavaFX & SWT 10
S LayoutManager Fehler gesucht 18.6.2011 AWT, Swing, JavaFX & SWT 4
C Fehler nur bei manchen Usern AWT, Swing, JavaFX & SWT 8
Screen Fehler bei Get-Methode für ArrayList AWT, Swing, JavaFX & SWT 8
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
I Fehler bei JFileChooser AWT, Swing, JavaFX & SWT 2
E Swing Fehler nach Befüllen einer JTable mit gesetzem Rowsort?! AWT, Swing, JavaFX & SWT 10
P Swing Misteriöser Fehler JTable AWT, Swing, JavaFX & SWT 5
Y Swing JPasswordField Fehler AWT, Swing, JavaFX & SWT 14
A Swing Unknown Source Fehler AWT, Swing, JavaFX & SWT 9
N Fehler bei Grouplayout AWT, Swing, JavaFX & SWT 17
S ActionPerformed Fehler... AWT, Swing, JavaFX & SWT 9
C BufferedImage-Fehler? Falsches Bild wir gezeichnet AWT, Swing, JavaFX & SWT 5
A Tabellen Überschriften ändern -setColumnIdentifiers()- Fehler AWT, Swing, JavaFX & SWT 7
M.F.G. Fehler bei der Anzeige Grafischer Elemente AWT, Swing, JavaFX & SWT 13
D Swing Verwirrender Fehler AWT, Swing, JavaFX & SWT 7
J Fehler in fillRoundRect AWT, Swing, JavaFX & SWT 2
D Probleme mit Spiel-Engine. Komische Fehler. AWT, Swing, JavaFX & SWT 5
W fehler jedoch ka wo AWT, Swing, JavaFX & SWT 14
F Fehler in der Startklasse AWT, Swing, JavaFX & SWT 13
A Fehler bei der Parametereingabe? AWT, Swing, JavaFX & SWT 16
P finde den Fehler im JTable nicht AWT, Swing, JavaFX & SWT 2
Spin Fehler in Vergleich AWT, Swing, JavaFX & SWT 6
K Swing: ContentPane von JDialog ist transparent (Fehler) AWT, Swing, JavaFX & SWT 10
Dragonfire ZoomImage flackert -> Fehler: repaint-Aufruf [gelöst] AWT, Swing, JavaFX & SWT 5
T Invalid Range - Fehler bei TableRowSorter / Tabelle AWT, Swing, JavaFX & SWT 17
DasDogma Fehler bei getText() AWT, Swing, JavaFX & SWT 10
I Fehler bei verschachtelten JScrollPanes AWT, Swing, JavaFX & SWT 2
GilbertGrape Fehler bei HTML in JTextPane AWT, Swing, JavaFX & SWT 2
K Textfelder auslesen gibt immer Fehler AWT, Swing, JavaFX & SWT 2
D Fehler bei Button Array AWT, Swing, JavaFX & SWT 8
M Fehler mit Jigloo AWT, Swing, JavaFX & SWT 3
M setColor mit Fehler cannot fiend symbol (java.awt.Color) AWT, Swing, JavaFX & SWT 2
Z habe code, habe fehler, habe keine lösung AWT, Swing, JavaFX & SWT 7
R JComboBox Fehler AWT, Swing, JavaFX & SWT 7
B NPE-Fehler AWT, Swing, JavaFX & SWT 11
P JRadioButton in Schleife erstellen > wo liegt mein Fehler AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben