Hier bitte alle Fragen posten, die mit dem Verständnis der Angabe, oder von einzelnen Filtern zu tun haben.
Hier bitte alle Fragen posten, die mit dem Verständnis der Angabe, oder von einzelnen Filtern zu tun haben.
Sind die Kantenfilter immer Horizontal und Vertikal oder kann es passieren, dass nur eine Kern(vertikale bzw horizontale) verwendet wird? Und welche Parameter genau sollen wir bei den Kantenfiltern bestimmen?
Hallo,
Es ist möglich, dass nur horizontal oder nur vertikal gefilter wird. Bei den Kantendetektoren ist hauptsächlich der Name des Algorithmus und die Richtung in die gefiltert wird anzugeben.
Bernhard Steiner
[EVC & CGUE Organisation]
Der Median-Filter liefert mir nicht das exakte Ergebnis : (
Hab schon alle mögliche Filtergrößen ausprobiert.
Kann es sein, dass man den Filter 2mal anwenden muss :/
Bei einem Medianfilter nicht. Wenn das Ergebnis nicht passt, solltest du nochmal überprüfen obs wirklich ein Medianfilter ist (Medianfilter ist ja ein Sonderfall der Rangordnungsoperatoren).
Bernhard Steiner
[EVC & CGUE Organisation]
Welchen Parameter sollen wir bei Kanten Schärfung und welchen bei Unsharp Masking eingeben?
Edit: siehe nächster Post.
Last edited by BDL!; 02-04-2012 at 19:12.
Bernhard Steiner
[EVC & CGUE Organisation]
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Eine MatLab Frage dazu: wie kann man Kantenfilter auf RGB-Images anwenden? edge(..) erlaubt ja nur 2dim Matrizen, also Graubilder. Geht das auf einfachem Wege? Oder muss man die Matrizen selbst berechnen (wo ich leider anhand des Buches was die praktische Anwendung angeht noch nicht weiter gekommen bin)?
das mit dem kernel selbst definieren habe ich noch nicht so ganz verstanden. Gx und Gy durch faltung errechnen ist mir klar, aber wie ich diese bilder dann zu einem gradientenbild zusammenfüge weiß ich noch nicht. und ist das gradientenbild dann auch schon das ergebnis? ich hab leider im internet keine hilfreichen beschreibungen gefunden, die verweisen auch meist nur auf fspecial. habt ihr da vielleicht einen hilfreichen link oder tipps?
Wie du selbst gesagt hast geht edge(...) nur auf 2-dim Matrizen. Es gibt verschiedene Methoden, wie du dir dann das Gradientenbild berechnen kannst. Bei einem Bild mit mehreren Farbkanälen kannst du dir die Gradientenbilder für jeden Kanal einzeln berechnen und diese dann getrennt oder kombiniert behandeln. Oder du transformierst dein Bild zuerst in ein Grauwertbild (meist linear mit Grauwert= 0.2989*R+0.5870*G+0.1140*B) und wendest die Kandtenfilter auf das Grauwertbild an.
Wenn du das komplette Gradientenbild (Gx und Gy kombiniert) haben willst, so kannst du es machen wie es auf Wikipedia beschrieben ist: Link.
Und ja, es ist eigentlich egal ob du dir den Kantenfilter mit h=fspecial('sobel'); definierst, oder du gleich h=[1 2 1; 0 0 0; -1 -2 -1]; hinschreibst.
-------------------------------------------------
Cerman Martin
EVC Tutor SS 2013
muss man ein 100% Ergebnis erzielen? oder reicht ein 95% Ergebnis auch?
habe für Alice ein 95% Ergebnis nur in der Kante wo Schwarz/Weis auf Weis/Schwarz trifft triffet es ein wenig ab
muss ich das noch hin biegen?
nein ein 95% Ergebnis reicht nicht - hier eine Antwort von Martin Ilcik diesbezüglich.
Ines Janusch
-------------------------
EVC Tutorin 2013
ich hab ein problem und komm leider nicht selbst auf die lösung
hoffe ihr könnt mir da weiterhelfen:
ich versuche einen gaußfilter anzuwenden... und ich hab denk ich schon eine ziemlich richtige lösung
nur mein problem ist, dass ich immer einen grauen rand um das gefilterte bild bekomme.. und ich hab die werte schon geändert und es passiert trotzdem ständig...
vl wisst ihr warum das ist bzw wie ich das umgehen kann...
"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."
Hallo,
Wenn der Fehler sich immer nur auf die äußersten Pixel des Bildes bezieht entstehen diese vermutlich dadurch wie du den Rand behandelst. Bei imfilter kann man dies über eine Option ändern, siehe dazu hier (Bei Boundary Operations).
Bernhard Steiner
[EVC & CGUE Organisation]
hab ich das richtig verstanden dass das Sigma beim Gaußfilter die Summe aller Gewichte des Filterkerns angibt?
Hallo,
Nein das ist nicht korrekt. Die Summe der Gewichte im Filterkern muss immer 1 sein, da sich sonst die Gesammthelligkeit der Szene verändern würde. Sigma beschreibt die Standardabweichung bei der Gaussschen Glockenkurve. Details kann man z.B.: auf Wikipedia nachlesen
Bernhard Steiner
[EVC & CGUE Organisation]
Hey
Ich wollte fragen wie ich beim gaußblur auf das exakte sigma kommt? Bzw wie genau muss das sein?
Iwo hab ich gelesen man soll einen schätzwert nehmen und sich dann immer mehr annähern. Ich hab jetzt 0.8472. 100% zu stimmen scheint dass aber immer noch nicht.
nein, du kannst ihn genau anhand der formel berechnen, wie sie z.b. auf http://de.wikipedia.org/wiki/Gaußfilter steht.
Ansich ist für eine volle Punktezahl ein 100% Match gewünscht. Das Ergebnis soll eher nicht durch probieren bzw. raten gefunden werden. Wenn du dir bezüglich der Filtergröße sicher bist, kannst du mit der in den Folien zur Übungsbesprechung (siehe TISS) gezeigten Methode den genauen Filterkern bestimmen. Du kannst dann als Lösung Filterart und den genauen Filterkern angeben.
Ines Janusch
-------------------------
EVC Tutorin 2013
Heißt also dass wir, z.b.: wenn Gaußfilter vorliegt, uns die Angabe von Sigma sparen können?![]()
Last edited by forumlol; 06-04-2012 at 11:09. Reason: Satzzeichen ftw
Vielleicht sollte ich das in der Angabe besser spezifizieren.
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Wenn ich Sigma mit nur einer Dezimalstelle wähle ist es bei mit nicht zu 100% richtig. Ich komme dann manchmal bei ein paar Pixel auf eine minimale Abweichung.
Wenn ich den Faltungskern wie in den Folien beschrieben berechne und anwende, dann würde es passen, aber ich weiß nicht, wie ich aus dem Faltungskern auf mein Sigma kommen soll.
Dieser Angabenteil ist mir nicht ganz klar: Wendet nicht jeder Filter grundsätzlich eine Art von Faltung an? Und inwiefern werden die Randpunkte "verdoppelt"? Ist hier die Rede von einer symmetrischen Randbehandlung/Spiegelung? Wenn ja, ist diese nicht nur eine der Möglichkeiten, die in der Übung vorkommen können (z.B. zyklische Randbehandlung oder die Annahme, alle Pixel außerhalb des eigentlichen Bildes hätten den Farbwert 0 könnten ja auch auftreten)?Falls die Blackbox eine Faltung anwendet, werden die Randpunkte des Bildes verdoppelt. Dadurch kann die Faltung auf Zeilen und Spalten außerhalb des Bildes problemlos zugreifen.
Last edited by Odo; 06-04-2012 at 15:20. Reason: quote added
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Jeder Filter ist eine Faltung, nicht alle Blackboxes sind aber Filter!
Die Randpunkte werden ohne Spiegelung verdoppelt. Wenn also (0,0) gelb ist und eine Faltung z.B. auf (-k, 0) für alle k > 0 zugreifen möchte, werden alle solche Bildpunkte auch als gelb betrachtet.
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Kann mir jemand sagen wie man in Matlab einen Mittelwertfilter implementiert?
Dann werden die Randpunkte quasi unbegrenzt vervielfacht und nicht nur verdoppelt, oder? Wenn z.B. dieser (0,0)-Pixel betrachtet wird und die zugehörige Faltung z.B. sieben Pixel links davon betrachtet, dann werden diese alle als genauso wie der (0,0)-Pixel gefärbt angenommen? Und das wird bei jedem Filter genau so gemacht?
Hat es dann gar keinen Sinn, bei einem Filter im Abgabetext die Randbehandlung zu spezifizieren, weil es immer dieser "Verdopplungs"-Fall ist (Was mich jetzt irgendwie verwirrt, da es mir schien, dass mir bisher in der Übung schon andere Randbehandlungen wie eben zyklisch oder gespiegelt unterkamen)? Und hat diese Art der Randbehandlung einen speziellen Namen bzw. gäbe es evtl. ein Matlab-Kommando dazu?
Ja, es wird unbegrenzt vervielfacht und diese Randbehandlung verwenden alle Blackboxes.
Randbehandlung im Abgabetext ist nicht gefragt![]()
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Frage zum Filter Fred: Um das Ergebnis für 16Bit auch wirklich 100%ig genau zu haben, müsste ich doch ein Bild mit 2^16 verschiedenen Abstufungen haben (um das Spoilern zu vermeiden beschreib ich das Bild nicht näher). Jedoch wäre das Bild dann recht groß bzw wenn nicht, dann schwer auch wirklich alle Abstufungen drin zu haben und dadurch das Ergebnis zu bekommen? Oder liegt da ein Denkfehler meinerseits vor?
Also ist solche Genauigkeit wirklich gewünscht? Dann fällt mir gerade keine Möglichkeit ein, außer eine MatLab-Funktion zu schreiben um ein so fein und genau abgestuftes Bild zu erstellen..
da man in Matlab Matrizen auch wie Vektoren ansprechen kann, ist das eigentlich mit einer einzigen Zeile zu bewerkstelligen ;-)
Last edited by s---70; 06-04-2012 at 18:56.
Ich habs schon geschafft, habe nur festgestellt, dass Photoshop trotz 16-Bit Bild und 16-Bit Farbanzeige einen Sprung zwischen 0 und 3 macht, obwohl in der Matrix (und auch nach erneutem Einlesen eines gespeicherten TIFFs) ein klares 0 1 2 3 drin ist......
Dadurch habe ich zumindest jetzt den genauen Wert feststellen können, da wirklich alle 2^16 Abstufungen vorkommen. Nur leider ist der Wert für ein Bild das ich schon vor längerer Zeit hochgeladen habe falsch, was ich mir nicht erklären kann. Ich werd aber alles in die erste Tutorensprechstunde nach den "Ferien" mitnehmen![]()
Ich hab noch nicht genau verstanden ab wann eine Lösung richtig ist. ZB habe ich einen Kernel erstellt, bei dem bei 'kleinen' Bilder (8x8) die beiden Matrizen exakt gleich sind (isequal(A,B)=1). Bei einem 'großen' Bild (400x700) stimmen die beiden Bilder nicht mehr genau überein. Im konkreten Fall beträgt die Differenz (gebildet mit sum(A( : )) 10637.
Zweitens bezüglich der Lösung: muss man sowas schreiben wie 'Der Kernel lautet 1/4*[1 2 3; 4 5 6; 7 8 9]', oder 'Der Filter ist ein Gauss-Filter mit Fenstergröße [3 3] und s=0.8'?
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Für verschiedene Blackboxes kann es verschiedene Fehler bedeuten.
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Auf die Gefahr hin, begriffsstutzig zu wirken: Man kann sich nur sicher sein, dass man die richtigen Parameter gefunden hat, wenn jedes Bild, auf dem man den eigenen Filter angewendet hat, EXAKT bis auf den letzten Pixel mit dem Ausgabebild übereinstimmt? Also wenn isequal(A,B)=1 ergibt?
@OphiuchuS
Beim Rand kann es zu Abweichungen kommen, soweit ich das mitgekriegt habe.
Ich hätte da noch zwei Matlab Fragen, zum einen "Es bieten sich dann verschiedene Möglichkeiten zur Darstellung an: Nur negative oder positive Werte zeigen und den Rest auf 0 abbilden, das Intervall <-max_intensity, max_intensity> auf <0, max_intensity> abbilden durch x/2 + max_intensity/2, oder nur das Ausmaß zeigen."
Wie lässt sich das in Matlab umsetzten??
Bei einem anderen Beispiel bin ich mir ziemlich sicher dass es sich um Eckendetektion handelt, ich hab auch nach längerem Google noch nicht gefunden wie ich Eckendetektion in Matlab machen kann. Gibts eine Funktion für z.B. den Harris Eckendetekter?
Ich habe Schwierigkeiten bei Dana den richtigen Kernel zu finden, obwohl ich weiß welcher Filter eingesetzt wird. Bei einfachen Testbildern kann man zwar schnell mal auf einen Kernel kommen der richtig erscheint, aber bei größeren, detailreichen Bildern versagt. Mit der Methode von den Folien bin ich bei diesem Beispiel gescheitert, was wahrscheinlich daran liegt, das der Kernel negative Einträge enthält und mir die Blackbox nur Pixelwerte im Bereich [0,255] liefert. Könnte mir bitte jemand einen Tipp geben?
Dasselbe Problem hatte ich bei Bob wo ich mit meinem Kernel haargenau auf das Blackbox-Resultat meines "1-weißer-Pixel-in-der-Mitte"-Testbildes kam, bei einem "real-life"-Bild jedoch wieder teilweise (vor allem an Kanten) scheiterte. Ist das darauf zurückzuführen, dass Matlab double-Filter benutzt oder ein Fehler meinerseits?
PS: Bei Bob habe ich einen fspecial-generierten Filter benutzt (wie bereits angemerkt brachte dieser aber trotzdem bei einem weißen Pixel das richtige Ergebnis)
Danke!
@Apfelmann:
Es gibt in Matlab die Funktion edge(), die (glaube ich) defaultmäßig den Harris-Detektor anwendet.
EDIT
Die Funktion heißt natürlich corner() und nicht edge()!
Last edited by Mobe; 07-04-2012 at 17:33.
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Händisch das Resultat des Filters nachbearbeiten
Den Kernel angeben und mit imfilter anwenden.Bei einem anderen Beispiel bin ich mir ziemlich sicher dass es sich um Eckendetektion handelt, ich hab auch nach längerem Google noch nicht gefunden wie ich Eckendetektion in Matlab machen kann. Gibts eine Funktion für z.B. den Harris Eckendetekter?
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Frohe Ostern erstmal!
Bei mir hapert es am Verständnis bezüglich des Gaußfilters. Wie komme ich vom Kernel auf das Sigma? Da muss es doch einen genaueren Weg als "ungefähr, pi mal daumen annähern" geben. Irgendeine Formel mit der ich es genau bestimmen kann oder so, vielleicht?!
while(vendredi.isPresent()) {
bullshitlevel++;}
Real programmers don't document. If it was hard to write, it should be hard to understand.
There are 10 types of people. Those who understand binary and those who don't.
Wenn du bereits weißt, dass es sich um einen Gaußfilter handelt, kannst das Sigma leicht rechnerisch mithilfe der Dichtefunktion der Gaußverteilung bestimmen.
Siehe auch Post #19 und #20
Einführung in Visual Computing VU Tutor 2012
so wird das bei mir nichts. Ich versuch jetzt mein Glück im Forum, und nicht direkt per PN an nen Tutor. Ich bemühe mich nicht zuviel zu spoilern, aber das ist bei meinem Fortschritt wahrscheinlich ohnehin absurd.
Mein Vorgehen bisher:
Eingabe und Ausgabebild miteinander vergleichen. Ich subtrahiere das eingabebild vom ausgabebild um so unterschiede in der matrix feststellen zu können. Dann errechne ich mir den Kernel indem ich schaue: Welcher Wert stand vorher an der Stelle in der Matrix und welcher Wert steht jetzt drinnen. Dann stell ich ne Gleichung auf und schau, mit welchem Faktor ich multiplizieren muss um auf diesen Wert zu kommen.
Hab mir dann nen Kernel als Matrix erstellt und versuche vergebens diesen Kernel auf das Eingabebild anzuwenden. Ich weiß nicht mehr was ich falsch mache, bzw. vielleicht ist ja doch meine Denkweise generell falsch?!
Ich krieg das blöde conv2 einfach nicht hin und bin mit meinem Latein soweit am Ende, dass ich dieses Fach gerade am liebsten hinschmeißen würde.Code:>> c = conv2(si, kernel, 'same'); Warning: CONV2 on values of class UINT8 is obsolete. Use CONV2(DOUBLE(A),DOUBLE(B)) or CONV2(SINGLE(A),SINGLE(B)) instead. > In uint8.conv2 at 11 Undefined function 'conv2' for input arguments of type 'double' and attributes 'full 3d real'. Error in uint8/conv2 (line 18) y = conv2(varargin{:}); >> c = conv2(DOUBLE(si), kernel, 'same'); Undefined function 'DOUBLE' for input arguments of type 'uint8'. >> c = conv2(DOUBLE(si), DOUBLE(kernel), 'same'); Undefined function 'DOUBLE' for input arguments of type 'uint8'.
Zuviel gespoilert? Dann bitte per PN melden. Es is halt zach, wenn man wo hängt und nicht weiß wieviel man fragen darf. Per PN dauert es verständlicherweise länger und ich weiß nicht ob das für die TutorInnen angenehm ist.
Freundliche Grüße und Frohe Ostern
Vendredi
while(vendredi.isPresent()) {
bullshitlevel++;}
Real programmers don't document. If it was hard to write, it should be hard to understand.
There are 10 types of people. Those who understand binary and those who don't.
Verwende lieber imfilter statt conv2.
Es gibt keine DOUBLE Funktion im Matlab, lediglich double.
Last edited by Odo; 08-04-2012 at 12:03.
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Gut, dann wende ich imfilter auf das Eingabebild an. Jetzt vergleich ich dieses neue Bild mit dem ursprünglichen Ausgabebild.
Zwei Probleme bleiben jetzt noch. Der Wert für meinen Kernel hätte eigentlich 9 Nachkommastellen (mindestens), wenn ich jetzt nur mit einer Nachkommastelle rechne, kommt nicht das korrekte Ergebnis raus, wenn ich aber mit den ganzen 9 Stellen rechne (Matlab nutzt eh nur 4 davon) dann schon.
Was heißt das jetzt für meine Abgabe? Ich geb nur "x.y" an, aber für meine Probe mittels imfilter darf ich schon "x.y1y2y3y4" verwenden?
So würde es nämlich stimmen. imfilter gibt mir 1:1 das Ausgabild aus(geprüft mittels isequal())
Hab ich jetzt nen Volltreffer gelandet und mir fehlt "nur" mehr das Sigma?
while(vendredi.isPresent()) {
bullshitlevel++;}
Real programmers don't document. If it was hard to write, it should be hard to understand.
There are 10 types of people. Those who understand binary and those who don't.
while(vendredi.isPresent()) {
bullshitlevel++;}
Real programmers don't document. If it was hard to write, it should be hard to understand.
There are 10 types of people. Those who understand binary and those who don't.
Das ist leider eine ganz falsche Interpretation der Angabe. Es gibt keinen Grund wieso die Elemente des Kernels nur eine Nachkommastelle haben sollten. Das heißt eigentlich, dass deine Lösung stimmen wird
Wenn du mit Doppelklick im Variablenfenster die Ansicht einer Variable öffnest, wirst du sehen dass deine Beobachtung falsch ist. Vielleicht noch ein Beweis dazu:
Code:a = 0.000000001 %sollte laut deiner Aussage auf 0.0 abgeschnitten werden b = a * 100000000 %sollte dann also 0 ergeben, tut es aber nicht! QED
Last edited by Odo; 08-04-2012 at 13:55.
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
Hmm, my bad. Es zeigt (in der Matrix) nur mehr 4 Stellen an, rechnet aber brav mit allen
Und doppeltes my bad, nur das Sigma sollte nur 1 Nachkommastelle haben. (Steht in einem anderen Thread). Beim Kernel darf ich also ruhig alle angeben.
Dankeschön. Wenn das soweit stimmt, dann bleibt noch Sigma und 9 weitere Beispiele. Juhu!![]()
while(vendredi.isPresent()) {
bullshitlevel++;}
Real programmers don't document. If it was hard to write, it should be hard to understand.
There are 10 types of people. Those who understand binary and those who don't.
http://www.mathworks.de/help/toolbox...mcontrast.html
Dieses Tool funktioniert bei mir nicht wirklich : /
Wenn ich auf 'Adjust Data' klicke ändert sich kein Wert in der Matrix
Welche Parameter sollen wir bei Segmentationsfilter eingeben?
Hier ist eine längere Beschreibung am besten. Gefragt sind die Parameter, die den Filter genau spezifizieren. D.h., ich könnte es anhand deiner Lösung exakt nachbauen. Wichtige Parameter wären also (mindestens): Der Name/Prinzip des Verfahrens, Startparameter, Regiondefinition (was wird als eine Region betrachtet und was nicht mehr), Abfolge der Regionen...
Of course I don't see textures as images. Who would?
Einführung in Visual Computing VU Übungsleiter 2012
Visualisierung LU Tutor 2005-2007
huhu,
ich bräuchte bisschen Hilfestellung bei der Gaußverteilung, sitz jetzt schon länger dran aber komm nicht drauf...
im Skript S.44 wird ja die Gauß-Gewichtung in 2D beschrieben. Meinem Verständnis nach sollte G(x,y) ja die Werte im Filterkern an der Stelle (x,y) errechnen (z.B mit x = -1,0,1 und y = -1,0,1 bei einem 3x3 Filterkern).
Also entweder bin ich zu blöd des auszurechnen oder ist meine Überlegung falsch?? Ich komme mit dieser Art der Berechnung nämlich nicht auf den im Buch mit Sigma = 1 beschriebenen 3x3 Filterkern --> 1/16 * (1,2,1;2,4,2;1,2,1)
thx im Voraus
gleich mal vorweg ich hab die Statistik VO noch nicht hinter mir (was bei deiner Antwort wahrscheinlich hilfreich wäre :P)
heißt das jetzt ich muss, wenn ich nur Sigma kenne, den Filterkern anhand einer Binomialverteilung errechnen? Das funktioniert wie? Bzw ist das überhaupt relevant für diese LVA? Im Skript steht ja an sich nichts darüber?!
Last edited by forumlol; 10-04-2012 at 16:49. Reason: Formatierung, Quote
Nein. Es war eine Erklärung, warum du bei deiner Berechnung nicht auf den angegebenen Filterkern kommst, da es sich um eine Approximation handelt. Also, "binomialer" Gauß ≈ "echter" (nach formelberechneter) Gauß.
Die Binomialverteilung besitzt keinen Sigmaparameter. Die Berechnung der Filterkoeffizienten erfolgt z.B. mit Hilfe des Pascalschen Dreiecks. Ja, da in der Übung beide Arten von Filterkernen vorkommen können.
*pls delete*
Last edited by *echo*; 10-04-2012 at 23:32. Reason: Denkfehler
tut mir leid, wenn ich das nochmal aufwärme, aber es kommt bei mir einfach nicht das richtige raus...
ich hab den richtigen faltungskern des gaußfilters (schon getestet und das ergebnis ist korrekt), aber wie komm ich von dem auf das sigma?
habs mit der formel von wikipedia versucht
h(x,y) = 1/(2pi*sigma^2) * e^ ...
die umgeformt und das sigma daraus berechnet... da kommt auch was raus, das problem ist nur, wenn ich jetzt mit matlab einen gauss-filter mit fspecial mit diesem sigma erstelle, dann kommt ein falscher faltungskern raus...
was mach ich falsch?
Hallo,
Damit sich die Grundhelligkeit eines Bildes nicht verändert, muss die Summe der Werte in einem Gauss-Filter (und auch in anderen Filtern) immer 1 sein. Das würde bei der Formel aus dem Skriptum auch passieren, wenn man unendlich fein integrieren würde. Da wir aber nur an diskreten Werten abtasten, wird das nicht immer der Fall sein, daher muss man den Filter nachträglich noch normalisieren. Matlab macht dies auch, daher kriegst du nicht den selben Filter raus, wenn du nicht normalisierst.
Bernhard Steiner
[EVC & CGUE Organisation]
h(0,0) ist genau der mitte,mitte Wert des Kernels.
wenn du nun in die formel einsetzt für x=0,y=0, dann wird das e^(...) zu e^0=1 und du kannst dir bequem durch umformen das sigma herausrechnen.
Hoffe das hilft dir, hab den Eindruck man wird hier gerne dumm sterben gelassen :P
Ich hab grad darüber beschrieben, dass seine Berechnung für Sigma vermutlich korrekt ist und erklärt, warum man mit fspecial leicht andere Filterkerne herausbekommt. Wie man Sigma berechnet war ja bereits geklärt...h(0,0) ist genau der mitte,mitte Wert des Kernels.
wenn du nun in die formel einsetzt für x=0,y=0, dann wird das e^(...) zu e^0=1 und du kannst dir bequem durch umformen das sigma herausrechnen.
Tut mir leid, wenn du das so siehst. Meine Ansicht dazu ist, dass es nichts bringt, wenn wir hier einfach nur die Lösungen posten. Dann könnten wir uns die Übung ja gleich sparen. Daher erklären wir euch warum ihr andere Ergebnisse bekommt, als ihr erwartet, schreiben euch jedoch nicht gleich hin wie ihr das Beispiel lösen sollt.Hoffe das hilft dir, hab den Eindruck man wird hier gerne dumm sterben gelassen :P
Last edited by BDL!; 11-04-2012 at 19:50.
Bernhard Steiner
[EVC & CGUE Organisation]
fspecial('gaussian',size,sigma) ist - zumindest bei mir - normiert
>> sum(sum(fspecial('gaussian',x,y)))
ans =
1.0000
War nicht direkt gegen dich gerichtet, aber manchmal fehlt einfach (spreche aus eigener Erfahrung) der Schubser wie man das jetzt konkret angeht.
Bookmarks