1Danke
ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
769
769
EMPFEHLEN
-
Hallo zusammen,
ich versuche zu Übungszwecken, den Gaussfilter zu programmieren. Das Einlesen der Bilddaten (integer ARGB) und die Bewegung der Faltungsmatrix (Spaltenweise) über das Bild funktioniert. Was auch funktioniert ist das korrekte positionieren der neuen Werte in das Array, das zurückgegeben wird.
Allerdings hänge ich an der Berechnung der Bilddaten (also Integerwerte, die die Farbinformation beinhalten) mit den Koeffizienten (auch Integer) der Faltungsmatrix (Zeile 17-18). Sprich die Faltung der Maske mit dem Bild. Noch ausführlicher: wie ich die Bildpixel mit den Koeffizienten der Faltungsmatrix multipliziere und später durch die Anzahl der Zahlen in der Maske teile, sodass ich ein leicht verschwommenes Bild erhalte.
Moment wird jedes Pixel eingelesen, verändert und in das Array "newValue" gespeichert, aber der Effekt von einem GaussFilter filter wird nicht erzielt.
Ich poste vorerst mal nur die Methode mit dem Algorithmus. Sollte mehr Bedarf bestehen, füge ich das ganze Projekt hinzu.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
public int[] algorithm(){ //Array für berechnete Werte int[] newValues=new int[(width-(maskSize-1))*(height-(maskSize-1))]; //äußere geschachtelte Schleife, damit die Faltungmaske sich über das Bild bewegt. Spaltenweise for(int x=(maskSize-1)/2; x<width-(maskSize+1)/2;x++) { for(int y=(maskSize-1)/2; y<height-(maskSize+1)/2;y++) { //in diese Variable werden die Werte des Bildes gespeichert, die innherhalb der Faltungsmaske liegen double sum=0; //innere geschachtelte Schleife,damit die Werte des Bildes(ARGB Integer) innherhalb der Faltungsmatrix for(int x1=0;x1<maskSize;x1++) { for(int y1=0;y1<maskSize;y1++) { int x2 = (x-(maskSize-1)/2+x1); int y2 = (y-(maskSize-1)/2+y1); //Wert des Pixels vom Bild (integerWert ARGB. z.B. -1238236 entspricht (255|237|27|36) * gewichteter Koeffizient der Faltungsmaske z.B. 4 float value = (input[y2*width+x2] /*&0xff*/) * (mask[y1*maskSize+x1]); sum =+ value; } } // double erg=sum/9; //Berechneter Wert wird in das Array geschrieben. // newValues[(y-((maskSize-1)/2)*(width-((maskSize-1))+(x-((maskSize-1)/2)] = 0xff000000 | ((int)erg << 16 | (int)erg << 8 | (int)erg); newValues[(y-(maskSize-1)/2)*(width-(maskSize-1))+(x-(maskSize-1)/2)] = 0xff000000 | ((int)sum << 16 | (int)sum << 8 | (int)sum); } } return newValues; }
Danke für jede Hilfe
-
06.01.12 09:32 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.885
- Blog-Einträge
- 29
Hallo,
kennst du http://www.jhlabs.com/ip/filters/ ? Die haben da ein Beispiel zu einem Gaussian Filter, wo du nachschauen kannst wie solch ein Filter realisiert werden kann.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Danke Tom,
die Seite kannte ich vorher schon auch, aber ich habe irgendwie übersehen, dass sie auch ganze Klassen anbieten. Die Beispiele haben mir sehr geholfen.
Ähnliche Themen
-
Gauss-Weichzeichnen: Problem beim normieren
Von kuhlmaehn im Forum Coders TalkAntworten: 2Letzter Beitrag: 05.05.11, 23:02 -
Eigener Filter/Custom Filter
Von lisali im Forum PhotoshopAntworten: 1Letzter Beitrag: 23.09.10, 00:54 -
Produkt-Suche / Filter, Effizienter Algorithmus gesucht?
Von muehl im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 19.04.05, 01:43 -
Probleme mit Filter>>Rendering-Filter>>Beleuchtungseffekte
Von extracuriosity im Forum PhotoshopAntworten: 2Letzter Beitrag: 22.08.04, 16:39 -
Gauss-Kurve berechnen mit PHP
Von prdyn im Forum PHPAntworten: 6Letzter Beitrag: 12.05.04, 22:21





Zitieren

Login





