tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Thomas Darimont
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
769
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    slope90 slope90 ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Ort
    Dortmund
    Beiträge
    3
    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
     

  2. #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ß Tom
    slope90 bedankt sich. 
    Java 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

  3. #3
    slope90 slope90 ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Ort
    Dortmund
    Beiträge
    3
    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

  1. Gauss-Weichzeichnen: Problem beim normieren
    Von kuhlmaehn im Forum Coders Talk
    Antworten: 2
    Letzter Beitrag: 05.05.11, 23:02
  2. Eigener Filter/Custom Filter
    Von lisali im Forum Photoshop
    Antworten: 1
    Letzter Beitrag: 23.09.10, 00:54
  3. Produkt-Suche / Filter, Effizienter Algorithmus gesucht?
    Von muehl im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 19.04.05, 01:43
  4. Probleme mit Filter>>Rendering-Filter>>Beleuchtungseffekte
    Von extracuriosity im Forum Photoshop
    Antworten: 2
    Letzter Beitrag: 22.08.04, 16:39
  5. Gauss-Kurve berechnen mit PHP
    Von prdyn im Forum PHP
    Antworten: 6
    Letzter Beitrag: 12.05.04, 22:21

Stichworte