Programmierung der Faltung

Gast #2277957
Hallo,

ich habe ein Problem wo ich so nicht weiter komme!
Es geht darum dass ich einen Gaussfilter mit einem 5x5 Kern auf ein Bild 
anwenden soll.
Dabei muss ja das Ausgangsbild mit dem Filter gefaltet werden!
Aber irgendwie macht dass was ich da in Code geschrieben habe nicht dass 
was es soll, es bewirkt nur ein dass das Bild dunkler wird!
Es wäre cool wenn mir jemand denn tipp geben kann wo evtl. ein Fehler 
liegen könnte!

Gruß
goldeneyes



Hier ist der Matlab-Code denn ich geschrieben habe!
1
function pic = faltung(image,filter)
2

3
[L,K] = size(filter);
4
[N,M] = size(image);
5
pic = zeros(N,M,'uint8');
6
teiler = getSumFilterElements(filter);
7
gw  = 0; 
8
for i = L/2 + .5  : 1 : N - (L/2 - .5)
9
    for j = K/2 + .5 : 1 : M - (K/2 - .5)
10
        for t = - (L/2 - .5) : 1 :(L/2 - .5)
11
            for p = - (K/2 - .5) : 1 : (K/2 - .5)
12

13
               gw =   gw + (double((image(i + t, j + p)) * filter(L/2 + .5 +  t ,K/2 + .5 + p)));
14

15
            end
16
        end
17
        gw =  gw/teiler;
18
        pic(i,j) = gw;
19
        gw = 0;
20
    end
21
end
ich seh keinen fehler, aber so wäre es übersichtlicher:

1
 function pic = faltung(image,filter)
2
 
3
 [L,K] = size(filter);
4
 [N,M] = size(image);
5
 pic = zeros(N,M,'uint8');
6
 teiler = getSumFilterElements(filter);
7
 for i = L/2 + .5  : 1 : N - (L/2 - .5)
8
     for j = K/2 + .5 : 1 : M - (K/2 - .5)
9
         gw  = 0;
10
         for t = - (L/2 - .5) : 1 :(L/2 - .5)
11
             for p = - (K/2 - .5) : 1 : (K/2 - .5)
12
 
13
                gw =   gw + (double((image(i + t, j + p)) * filter(L/2 +.5 +  t ,K/2 + .5 + p)));
14
             end
15
         end
16
         pic(i,j) = gw/teiler;
17
     end
18
 end
Gast
Ja danke,
aber warum wird das Bild nur dunkler und nicht dass was es soll?
Wenn ich einen größern Kern nehme wie z.B. 9x9, ist dass Bild nahezu 
schwarz!

Hoffe um weitere Hilfe da ich dies morgen für ein Labor benötige!

Gruß
goldenEyes
Vielleicht gibt getSumFilterElements(filter);
was falsches aus, woher sollen wir das wissen?

Du wirst wohl debuggen müssen:
 was passiert miteinem Kern der Größe 1x1?
Ändert sich das Ergebnis wenn Du den einzigen Eintrag änderst?
Was passiert bei einem kern größe 3x3 bei dem ausser dem mittleren 
Eintrag alles null ist?
Was passiert bei einem kern größe 3x3 bei dem ausser dem oberen Eintrag 
alles null ist?

usw.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.