Programmierung der Faltung

Gast #2277957
Lesenswert?

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
#2277984
Lesenswert?

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 #2277998
Lesenswert?

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
#2278073
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren