Anzahl Farbwerte (RGB) im Array speichern - Problem

MarioK

Aktives Mitglied
Hallo Gemeinschaft,
Also, heut möchte ich aus einem selbst gewähltem Bild(Farbbild) von einer beliebigen Festplatte Bild die RGB Farbwerte auslesen. D.h. zur Standardausgabe soll ein Array zu sehen sein, wo folgendes (grob dargestellt) abzulesen sein soll:
0 1 2 3 4 5 6 -> 256 (Farbwert)(das soll nicht im Array auftauchen, dient nur zum VErständnis)
3 0 7 9 6 4 7 -> wie oft der Farbwert im Bild vorgekommen ist, ist nachher dann wichtig für ein Histogramm(eine Schleife durchläuft alle Pixel)

Also das habe ich bisher:
Java:
package Uebung1;

import ij.IJ;
import ij.ImagePlus;
import ij.plugin.PlugIn;
import ij.process.ImageProcessor;


public class Histo2 implements PlugIn {

	private final ImagePlus imp;

	public static void main( final String args[] ) {
		
		IJ.open( "" );
		final Histo2 histo2 = new Histo2( IJ.getImage() );
		histo2.run( "" );
		
	}

	public Histo2( final ImagePlus imp ) {
		
		if( imp == null ) {
			throw new IllegalArgumentException( "The parameter 'imp' must not be null!" );
		}
		this.imp = imp;
		
	}
	
	@Override
	public void run( final String arg ) {

		
		final ImageProcessor ipOld = imp.getProcessor();
		final ImageProcessor ipold = imp.getProcessor();
		
		final byte[] Pic = new byte[ipold.getPixelCount()];
		final int[] PicPix = (int[]) ipOld.getPixels();

		final int[] h = new int[256];
		for( int i = 0; i < PicPix.length; ++i ) {
            
			int r = (PicPix[ i ] & 0x00ff0000) >> 16;
			int g = (PicPix[ i ] & 0x0000ff00) >> 8;
			int b = PicPix[ i ] & 0x000000ff;

			for (int j = 0; j<Pic.length; ++j){
				h[Pic[j]]++;
			}
					
			//System.out.println(java.util.Arrays.toString(h));
			System.out.println(i + ":" + r + ":" + g + ":" + b);
			//hier bekomme ich Pixel + rWert + gWert + bWert
			
		}
		
		System.out.println(java.util.Arrays.toString(h));
		//hier bekommen ich nur [0,0,0,0,0,0 -> 256]
		//newImage.show();
		
	}
	
}

Ausgabe der äiusseren Schleife:
271342:158:156:159
271343:158:156:159
271344:160:158:161
271345:162:160:163
271346:163:161:164
271347:164:162:165
271348:176:162:179
271349:174:164:175
271350:200:156:207
271351:197:174:200
271352:164:176:162
271353:132:149:130 usw

Ausgabe der inneren Schleife:
[618549284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
ja hier sollten eigentlich die zusammengerechneten Werte stehen, aber ... da weiss ich leider nicht mehr weiter bzw. ein Gedankenanstoss von euch ??!!

Allgemein möchte ich im Anschluss in einem Histogramm die Helligkeit des (Farb)Bildes ausgeben. Ob ich das Bild das noch in ein Grauwertbild wandeln muss, ist noch nicht geklärt.
 
Zuletzt bearbeitet:

MarioK

Aktives Mitglied
mhhh - manchmal liegen die Antworten gar nicht mal so weit weg.
Damit hat es geklappt:
Java:
@Override
	public void run( final String arg ) {

		final ImageProcessor ipold = imp.getProcessor();		
		final byte[] Pic = new byte[ipold.getPixelCount()];

		final int[] h = ipold.getHistogram();

			for (int j = 0; j<Pic.length; ++j){
				h[Pic[j]]++;
			}

		System.out.println(java.util.Arrays.toString(h));
		
	}
 

Michael...

Top Contributor
mhhh - manchmal liegen die Antworten gar nicht mal so weit weg.
Damit hat es geklappt:
Java:
@Override
	public void run( final String arg ) {

		final ImageProcessor ipold = imp.getProcessor();		
		final byte[] Pic = new byte[ipold.getPixelCount()];

		final int[] h = ipold.getHistogram();

			for (int j = 0; j<Pic.length; ++j){
				h[Pic[j]]++;
			}

		System.out.println(java.util.Arrays.toString(h));
		
	}

Ich würde dann aber die for-Schleife weglassen ;-)

Das Array Pic ist nur mit 0en gefüllt, daher das Ergebnis des ersten Codes.
 

MarioK

Aktives Mitglied
Musste noch mal dran schleifen, da die vorrige VErsion mir am Anfang des Arrays die Gesamtanzahl der Pixel ausgegeben hat ... Sollte ja nicht sein ... so hiermit zählt er nun so wie ich es haben möchte und gibt es in einem Array aus ... sortiert von 0 - 256 ....
Java:
@Override
	public void run( final String arg ) {

		final ImageProcessor ip = imp.getProcessor();		

		final int[] h = ip.getHistogram();
			
		System.out.println(java.util.Arrays.toString(h));
		
	}
 
Zuletzt bearbeitet:

MarioK

Aktives Mitglied
ok ... alles noch einmal von vorn .... das Histogramm soll ohne ip.getHistogram´ausgegeben werden ... mein Ansatz war ja :
Java:
@Override
	public void run( final String arg ) {

		final ImageProcessor ip = imp.getProcessor();		
		final byte[] Pic = new byte[ip.getPixel(ip.getWidth(), ip.getHeight())];
		final int[] h = new int[256];

		for (int j = 0; j<Pic.length; ++j){
			h[Pic[j]]++;
		}
			
		System.out.println(java.util.Arrays.toString(h));

	}

nur mein Array enthält nur NULLEN ... wie bekomme ich die Farbwerte rein?
 
Zuletzt bearbeitet:
D

despikyxd

Gast
ich frage jetzt mal gezielt und dierekt : hat das ganze etwas mit Captchas und deren umgehung zu tun ? ...
wenn ja : google mal nach Houghman - Transformierung ... ist das einfachste um muster von referenz-bildern in einem anderen wieder zu finden ... die position bestimmt man dann anhand des schleifen-counters und sendet das entsprechende request an den server ...
 

MarioK

Aktives Mitglied
ich frage jetzt mal gezielt und dierekt : hat das ganze etwas mit Captchas und deren umgehung zu tun ? ...
wenn ja : google mal nach Houghman - Transformierung ... ist das einfachste um muster von referenz-bildern in einem anderen wieder zu finden ... die position bestimmt man dann anhand des schleifen-counters und sendet das entsprechende request an den server ...

davon abgesehen das ich gar nicht weiss was das ist ... aber es hat nix damit zu tun ... ich möchte lediglich die Helligkeit eines(Farb) Bildes in ein Histogramm ausgeben .... ohne die Hilfsklassen von ImageJ ...
 

MarioK

Aktives Mitglied
JA jetzt habe ich es endlich geschafft Helligkeitswerte eines RGB Bildes zu bilden (Mittelwert aus RGB / Photoshop MEthode). Aber, in der inneren Schleife möchte ich dem Array h die RGB Werte aus allen Pixeln zusammen addieren lassen. Das klappt noch nicht. Könnt ihr mir sagen wo mein Denkfehler ist??

Beispiel:
Pixel 449 hat den Mittelwert rgb von 220. h[220] sollte dann +1 sein.
Pixel 220345 hat den Mittelwert rgb von 18. h[18] sollte dann +1 sein.

Java:
public void run( final String arg ) {

		final ImageProcessor ip = imp.getProcessor();
		final int[] pixOld = (int[])ip.getPixels();
		//final byte[] Pic = new byte[ip.getPixel(ip.getWidth(), ip.getHeight())];
		final int[] h = new int[256];
		
		for (int j = 0; j<pixOld.length; ++j){
			
			int r = (pixOld[ j ] & 0x00ff0000) >> 16;
			int g = (pixOld[ j ] & 0x0000ff00) >> 8;
			int b = pixOld[ j ] & 0x000000ff;
			int rgb = (int)(Math.min(r, Math.min(g, b)) + Math.max(r,Math.max(g,b)))/2;
			for(int n=0;n<=h.length;++n){
				if (h[n] == rgb) h[n]++;
			}
			System.out.println("Pixel:" + j + ":" + r+":"+g+":"+b+":" + rgb);
			
		}
	
		System.out.println(java.util.Arrays.toString(h));
	}
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Kenne die Mittelwertmethode nicht aber ich würde mal behaupten die for-Schleife in Zeile 14 ist überflüssig und die Bedingung in Zeile 5 wird - wenn überhaupt - und nur wenigen Fällen erfüllt.
Vergleiche einfach mal Deine Anforderung:
Pixel 449 hat den Mittelwert rgb von 220. h[220] sollte dann +1 sein.
Pixel 220345 hat den Mittelwert rgb von 18. h[18] sollte dann +1 sein.
Mit Deiner Umsetzung:
if (h[n] == rgb) h[n]++;
 

MarioK

Aktives Mitglied
Kenne die Mittelwertmethode nicht aber ich würde mal behaupten die for-Schleife in Zeile 14 ist überflüssig und die Bedingung in Zeile 5 wird - wenn überhaupt - und nur wenigen Fällen erfüllt.
Vergleiche einfach mal Deine Anforderung:

Mit Deiner Umsetzung:

if (h[n] == rgb) h[n]++;
h[n] = = rgb ... wird nie erfüllt sein .. im Prinzip bräuchte ich den Index von h[rgb] damit ich dann h[rgb) ++ machen kann ... ich versuche das gerade mit einer ArrayList in Kombination mit einem INT Array zu lösen ... aber aber ...


Beim MIttelwert streiten sich so manch Gelehrte ... manche sagen RGB = (r+g+b)/3 und andere bevorzugen die Photoshop MEthode RGB = (Math.min(r,g,b) + Math.max(r,g,b))/2 ... zweiteres stimmt auch zu 98 Prozent mit den Angaben die ich über ImageJ erhalten überein. Die Fehlertoleranz sind auf Rundungsfehler zurückzuführen.
 
Zuletzt bearbeitet:

Fu3L

Top Contributor
Wenn ich das nach einem Überfliegen des Threads richtig verstanden habe, brauchst du den Index von h[rgb] nicht ermitteln... Mit rgb hast du ihn ja bereits. Also einfach h[rgb]++ ;-)
 

MarioK

Aktives Mitglied
Wenn ich das nach einem Überfliegen des Threads richtig verstanden habe, brauchst du den Index von h[rgb] nicht ermitteln... Mit rgb hast du ihn ja bereits. Also einfach h[rgb]++ ;-)

na super .... irgendwann wäre ich wahrscheinlich auch darauf gekommen ... ich danke dir .. es funktioniert auch ....

dann bleibt jetzt nur noch das Histogramm in einem extra Fenster ...
 
D

despikyxdSoSo

Gast
hat vielleicht nicht primär das thema:

ich frage jetzt mal gezielt und dierekt : hat das ganze etwas mit Captchas und deren umgehung zu tun ? ...
wenn ja : google mal nach Houghman - Transformierung ... ist das einfachste um muster von referenz-bildern in einem anderen wieder zu finden ... die position bestimmt man dann anhand des schleifen-counters und sendet das entsprechende request an den server ...

aber was ist wenn es nicht nur um HTTPTCP/IPHTML geht sondern auch um technologieen wie javascript oder ajax? einfacher HTTPpostRequest ist dann ja nicht mehr ausreichend.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
BeginnerJava Anzahl der 5 % - Zuwächse ausgeben Allgemeine Java-Themen 6
M Wie übergebe ich den Zähler für die Anzahl Rekursionsschritte korrekt? Allgemeine Java-Themen 2
S BlockingQueue mit dynamischer Anpassung der Anzahl von Producer und Consumer Threads Allgemeine Java-Themen 1
S Iterable<?> anzahl der Element Allgemeine Java-Themen 14
M Java- Bild gewissen Anzahl von Sekunden anzeigen?! Allgemeine Java-Themen 4
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
M Relative Anzahl an verschachtelten Forschleifen Allgemeine Java-Themen 8
The Pi Anzahl der Gewichtscheiben berechnen Allgemeine Java-Themen 11
P Threads Parallelisierte DB-Abfragen mit variabler Anzahl an Threads Allgemeine Java-Themen 4
Soloeco BubbleSort Anzahl der Vertauschungen Allgemeine Java-Themen 9
J Anzahl geöffneter Plugins Allgemeine Java-Themen 3
A Anzahl an Threads Systemweit Allgemeine Java-Themen 2
J Anzahl von Möglichkeiten zur Verteilung von Kugeln in Behälter Allgemeine Java-Themen 3
P Erste Schritte Dynamische Anzahl von verschachtelten Schleifen Allgemeine Java-Themen 5
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
R Int werte vergleichen und Anzahl Paare ausgeben Allgemeine Java-Themen 4
L Ermitteln der Anzahl an Lösungen von quatratischen Gleichungen (Sieb von Atkin) Allgemeine Java-Themen 1
L Anzahl der Tage eines Monats Allgemeine Java-Themen 3
P Auf die Anzahl der Joins achten beim WS design Allgemeine Java-Themen 1
J Anzahl der Zeichen bei Eingabe begrenzen Allgemeine Java-Themen 5
S Zur Laufzeit Klasse mit einer anzahl von X Objekten erstellen Allgemeine Java-Themen 5
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
P Anzahl vo Einträgen in verschiedenen Sets Allgemeine Java-Themen 3
R Anzahl der gerade gedrückten Tasten Allgemeine Java-Themen 6
J ermitteln der Anzahl der Monate Allgemeine Java-Themen 7
M Anzahl der Durchläufe einer Funktion errechnen Allgemeine Java-Themen 6
G Anzahl Primzahlen im Intervall Allgemeine Java-Themen 3
X Textdatei auf gewünschte Anzahl der Zeilen kürzen Allgemeine Java-Themen 2
N variable Anzahl von Objektinstanzen zur Laufzeit erstellen Allgemeine Java-Themen 4
D unbekannte Anzahl checkboxes Allgemeine Java-Themen 2
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
Iron Monkey Anzahl der Monate ermitteln Allgemeine Java-Themen 17
neonfly Anzahl Zeichen pro Zeile auf der Konsole Allgemeine Java-Themen 8
R ArrayList -- Maximale Anzahl an Elementen Allgemeine Java-Themen 2
O Große Anzahl Bilder laden Allgemeine Java-Themen 7
S Array: Anzahl Elemente mit best. Wert zählen Allgemeine Java-Themen 4
V Java-Objekt. wie groß maximal ? anzahl der einträge Allgemeine Java-Themen 4
M Aus Anzahl Tagen Datum ermitteln Allgemeine Java-Themen 8
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
T Anzahl Tage zwischen zwei Daten - Stunde fehlt? Allgemeine Java-Themen 2
S Anzahl der Stunden in Excel Datei schreiben Allgemeine Java-Themen 2
G Anzahl an Tagen auf Datum addieren Allgemeine Java-Themen 4
MQue Anzahl der Ziffern Allgemeine Java-Themen 13
G Anzahl Tage in Datum umwandeln Allgemeine Java-Themen 13
MQue Anzahl der Kommastellen Allgemeine Java-Themen 6
L Anzahl Tage zwischen zwei Kalenderdaten Allgemeine Java-Themen 5
F Anzahl der nachkommastellen bestimmen nur wie? Allgemeine Java-Themen 10
M Aktualisieren eines Chatprofils (Anzahl Minuten) Allgemeine Java-Themen 4
G Variable Anzahl JTextfleder Allgemeine Java-Themen 3
S Bandbreite/Anzahl Pakete messen Allgemeine Java-Themen 3
V String formatiert ausgeben ( gleiche Anzahl von Ziffern ) Allgemeine Java-Themen 5
padde479 Anzahl Methodenaufrufe Allgemeine Java-Themen 7
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
F Datum mit anzahl tagen berechnen Allgemeine Java-Themen 3
W PrepareStatement und Anzahl der Datensätze Allgemeine Java-Themen 2
rambozola anzahl zeichen in konsole eclipse begrenzt? Allgemeine Java-Themen 5
G anzahl "verwendeter" elemente eines arrays ermitte Allgemeine Java-Themen 2
M Anzahl der Threads pro Programm? Allgemeine Java-Themen 3
R java.lang.String maximale Anzahl der Zeichen Allgemeine Java-Themen 7
V Anzahl der Zeilen in einem File Allgemeine Java-Themen 3
K anzahl laufender Threads Allgemeine Java-Themen 3
hdi Auslesen der Farbwerte einer Grafik-Datei Allgemeine Java-Themen 4
G Farbwerte eines Punktes? Allgemeine Java-Themen 4
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
M Array Rang eines Elements Allgemeine Java-Themen 4
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
noah1407 Array Allgemeine Java-Themen 3
D Methoden Teil-Array mit Maximalwert bestimmen Allgemeine Java-Themen 23
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
L Array und Index Allgemeine Java-Themen 26
L die 3 größten Zahlen im Array Allgemeine Java-Themen 1
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
Willi.We Array sortieren Allgemeine Java-Themen 5
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
Aboya Char Array rekursiv vergleichen Allgemeine Java-Themen 15
V4ll3.Wff Array in Java Allgemeine Java-Themen 4
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
H Array Sportschütze Allgemeine Java-Themen 6
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
M Array verändern Allgemeine Java-Themen 1
A JavaFX 2 dimensionales array Allgemeine Java-Themen 1
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben