Forum: Digitale Signalverarbeitung / DSP / Machine Learning Programmierung der Faltung


von goldeneyes1987 (Gast)


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

von Hans M. (hansilein)


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

von goldeneyes1987 (Gast)


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

von Hans M. (hansilein)


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.

von goldeneyes1987 (Gast)


Lesenswert?

Hi,
habe den Fehler gefunden!
Lag am Filter und nicht an der implementierung der Faltung!


Vielen Dank trozdem!

Gruß
goldenEyes

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.