View Full Version : [PROBLEM] - Bsp3
ViennaLinux
28-10-2007, 16:36
Hi, stehe seit 10 Minuten vor folgendem Problem:
filterGauss3x3 =
0.1096 0.1118 0.1096
0.1118 0.1141 0.1118
0.1096 0.1118 0.1096
mein "Array"- Ausschnitt:
ans =
37 37 39
37 39 37
35 35 37
wenn ich jetzt ausschnitt * filtterGauss3x3 mache -->
??? Error using ==> mtimes
Integers can only be combined with integers of the same class, or scalar doubles.
Ich dachte es reicht, dass Zeilen und Spalten übereinstimmen - was stimmt mit den Datentypen nicht und wie kann ich den aktuellen Datentyp herausbekommen bzw. ändern?
Danke
Mit der Funktion double() kann man einfach Matrizen auf den double-Typ konvertieren.
Hier sollte man dike beiden Matrizen aber auf alle Fälle elementweise multiplizieren, d.h. den .* Operatro verwenden.
LG
Sebastian (GDBV-Tutor)
Mal eine Frage zum Gauss-Filter:
Ich kann ja einen Filter mit:
filter = fspecial('gaussian', [groesse groesse], Standarsabweichung)
erstellen, aber welche Standardabweichung soll ich da nehmen??
Denn wenn ich keine Standardabweichung angebe sieht bei mir der Filter dann so aus:
filter =
0.0000 0.0000 0.0002 0.0000 0.0000
0.0000 0.0113 0.0837 0.0113 0.0000
0.0002 0.0837 0.6187 0.0837 0.0002
0.0000 0.0113 0.0837 0.0113 0.0000
0.0000 0.0000 0.0002 0.0000 0.0000
Das kann ja nicht gerade stimmen, oder?
Oder soll ich hier die Standardverteilung selbst wählen (gibts da keine Berechnugsregel dafür?) und einfach Testen, wie ich sie mir am Besten herleite??
Lg
Spite
Ich habe mal durch herumprobieren einen geeigneten Wert gefunden glaube ich (sofern man den selbst wählen darf):
5x5 Gaussfilter:
groesse = 5
Standardverteilung = sqrt(groesse/2)
Damit bekomme ich einen solchen Filter (der würde schon passen gleube ich):
filter =
0.0161 0.0294 0.0359 0.0294 0.0161
0.0294 0.0536 0.0655 0.0536 0.0294
0.0359 0.0655 0.0800 0.0655 0.0359
0.0294 0.0536 0.0655 0.0536 0.0294
0.0161 0.0294 0.0359 0.0294 0.0161
Was sagt ihr dazu (ihr = wahrscheinlich buschti :) )
Außerdem habe ich eine Frage zum Medianfilter:
Die berechnung des Bildes mit Medianfilter dauert immer am Längsten.
Ich verwende
sowas (bitte nicht schlagen):
for i=1:xsize
for j=1:ysize
Variablen
...
for k=1:groesse
for l=1:groesse
schmeissWerte in Vektor
bestimme Median und setze entsprechenden Bildwert
end
end
end
end
Ich weiß, das ist wirklich "ekelhaft", aber wie kann ich das mit den Rändern sonst berücksichtigen??
Oder gibts irgendwo einen Medianfilter in Matlab den ich noch nicht gefunden habe???
Bitte um ein, zwei Tipps, denn das dauert wirklich lange so :(
Lg
Franz
Generell gilt, daß man bei größerer Standardabweichung einen größeren Filter braucht. Ein Gaußverteilung ist ja eigentlich unendlich, d.h. der Filter müßte auch unendlich groß sein. Als Faustregel gilt, daß der Filter den Bereich bis 3*sigma abdecken sollte (das sind glaub ich ca. 99% der Verteilung).
Das heißt z.B. bei sigma=1 in jede Richtung 3 Pixel, also eine Filtergröße von 7x7.
Bei sigma=0.5 wären es 3x3 (da abgerundet wird)
Bei sigma=1.5 9x9
Ich hoffe, das war jetzt verständlich.
LG
Sebastian (GDBV-Tutor)
Ja ich glaub shcon das ich dich verstanden habe:
Soll ich also immer ca. groesse/6 nehmen (wenn groesse zB 5 bei einem 5x5 Filter ist....) werde ich so machen, danke.
Lg
Spite
edit:
nicht ganz aber ich habs gecheckt :)
Also ich habe jetzt mal die Berechnung von meinem Median-Filter etwas schöner hinbekommen :) aber eine Doppelte for schleife, die alle Pixel durchgeht hab ich immer noch.....
Gibts da noch was, was man verwenden könnte?
Denn für imfilter gibts da ja keine Option oder?
Lg
Spite
Also ich habe jetzt mal die Berechnung von meinem Median-Filter etwas schöner hinbekommen :) aber eine Doppelte for schleife, die alle Pixel durchgeht hab ich immer noch.....
Gibts da noch was, was man verwenden könnte?
Da ist eine doppelte for-Schleife schon ok, schließlich muß man ja für jedes Pixel etwas komplexere Berechnungen anstellen.
LG
Sebastian (GDBV-Tutor)
Ok, thx, dann lasse ich das mal so wie es jetzt ist ;)
Lg
Spite
hmm ok ... irgendwie komm ich nicht weiter,...
man berechnet sich den gaussfilter und hat dann somit eine x * x matrix,...
die multipliziert man mit dem bild was man schon hat, ... halt blockweise,... nur geht das bei mir irgendwie nicht,... kompiler schreit immer ...
wie macht man das am geschicktesten, geht es auch ohne 2 forschleifen, und wie erhält man dann wieder ein 500x500 bild? bei mir sind am ende lauter 5x5 blöcke im ergebnis ....
danke im voraus ... lg
Die Faltung ergibt Dir für jeden Grauwert wieder einen einzelnen Grauwert. Der neue Grauwert errechnet sich dabei einfach durch Multiplikation aller Grauwerte in der Umgebung mit dem jeweiligen Filter und anschließender Aufsummierung der Produkte:
Alle Werte im 5x5 Fenster, das das jeweilige Pixel umgibt, werden elementweise mit dem Filter multipliziert. So erhälst Du 25 Werte, und die Summer dieser Werte ist der neue Grauwert.
LG
Sebastian (GDBV-Tutor)
Die doppelte for-Schleife brauchst du nur für den Median-Filter, für die beiden anderen gehts bequem mit den f"special" und "imfilter" Methoden :)....
Ich hoffe ich verrate hier nicht zu viel, aber es steht sowieso schon hier irgendwo!
Lg
Spite
Die doppelte for-Schleife brauchst du nur für den Median-Filter, für die beiden anderen gehts bequem mit den f"special" und "imfilter" Methoden :)....
Aber Achtung, da die Faltung selbst zu implementieren ist, darf natürlich auch die Funktion imfilter nicht verwendet werden (die macht ja genau das).
LG
Sebastian (GDBV-Tutor)
Hmmm, wo steht das denn??
Ich habs ja vorher selbst gemacht, dann aber diese Fktn. gefunden.....
Muß ich jetzt wieder zurück zur alten (LANGSAMEN) Version?
Ziemlich mühsam, wenn man als Ausgabe dann ca. 50 Bilder hat finde ich :)
Lg
Spite
edit:
...Die Faltung ist
selbst zu implementieren. Die MATLAB Funktionen filter2 und conv2 d¨urfen nicht verwendet
werden...Das da? Steht zumindest nix von imfilter.... :(
edit:
Das da? Steht zumindest nix von imfilter.... :(
da steht aber: "die faltung ist selbst zu implementieren". und imfilter macht ja gerade die faltung. Wurde auch schon in der TUWIS-Mailingliste erwähnt, dass imfilter selbstverständlich auch nicht verwendet werden darf.
LG
Sebastian (GDBV-Tutor)
Aha, ok, na dann eben wieder die doppelten Schleifen :(
Thx für den Hint
Lg
Spite
habe gerade mein skriptum nicht dabei und wollte mal fragen welche filter wir in der VO gelernt haben...?? erinnere mich an gauss und median, gabs da noch weitere???
thx
hat sich erledigt, ist in einem anderen thread erwähnt worden "Mittelwert, Gauß und Median Filter"
sry
he wie geht man hierbei vor wenn ich die kanten elemetar mit den Filter-Werten multiplizieren möchte...
da wenn ich jetzt vom index(1,1) gehe und 3x3 bereich habe ist es dan einfach.. dann nehme ich einfach (1,1)(1,2)(1,3)(2,1)(2,2)(2,3).*'Filter'.. aber was mache ich wenn ich im eintrag bei den indexen (500,500) bin wenn ich den auch elementar multiplizieren möchte dan bekomme ich folgenden Fehler 'Index exceeds matrix dimensions.' weil man da ja nicht (500+1, 500+1) nehmen kann weil das ja leer ist... wie geht ihr bei diesem Fall vor??
hat sich in der zwischenzeit ebenfalls erledigt... habe die Formel dafür erst spät entdeckt!
aber wie sehen bei euch die ergebnisse aus??
klaustaler
12-11-2007, 20:31
das ist soweit ich weiß unsere sache, wie wir das machen (steht ja so in der angabe "machen sie das mit einer geeigneten methode")...in der vo wurden folgende möglichkeiten besprochen:
- bei einem kanten wert nur die 5 umliegenden Pixel berücksichtigen (bei einem 3x3 filter)
- Die Kantenwerte der gegenüberliegenden Kante verwenden (das bild praktisch als loop betrachten)
- Das Bild an den nicht-berechneten Kanten abschneiden (bild wird um die kantenbreite kleiner)
Am einfachsten ist sicher die letzte möglichkeit zu implementieren.
Die anderen beiden könnte man vielleicht so machen, dass man das Bild vorher um die Kantenbreite vergrößert, alles berechnet und anschließend wieder kleiner macht...ich frag das morgen auch mal im Tutorium, aber in etwa dürfte das so stimmen :)
grüße,
der flo
@klaustaler, wäre schön wenns das mal nachfragst.. ich glaube aber das deine letzte erwähnte variante anwendbar wäre (jedoch nicht die kanten abschneiden) aber sehen wir dann noch!!...
ich hätte jetzt auch noch eine weitere verständnis frage; sehe ich das richtig das, wie oben erwähnt, die imfilter-funktion das Ergebniss der Faltung liefern sollte. Nun habe ich aber eine eigene implementierung eingebaut und mit einer der imfilter-Funktion verglichen (!!gleiche -filter-Werte, gleiches Bild!!) und mein ergebniss weicht von dem ab, ist etwas heller... ist das bei euch auch so?? bzw. sollte man davon ausgehen das die ergebnisse gleich sein könnten oder ist es ein blödsinn??
wobei ich dazu tendiere zu behaupten dass das Ergebniss nicht ident sein sollte, verstehe aber dann aber nicht warum :shinner:....
ah und noch ein weiterer Punkt; wenn ich jetzt ein Eingangsbild 5x5 habe und einen Faltungskern 3x3 (siehe Skriputm S. 23), wie sieht das Ergebniss aus ist es 3x3 oder 5x5, weil irgendwo habe ich gelesen das es dem Bild gleich sein sollte in dem Fall 5x5 aber im Skriptum ist es ein 3x3-Ergebniss also gleich dem Faltungskern... also wie sieht es dann aus: 'Bild5x5 * Faltungskern3x3 = ?? (3x3 od. 5x5)
1.:
Ich habs so gemacht, das einfach die Randpixel genommen werden, die am nächsten liegen, entspriecht also der 'replicate' - Methode beim imfilter (glaube ich zumindest ;) ). Imfilter dürfen wir ja anscheinend nicht verwenden, also müssen wir sowieso selbst was implementieren.... wobei ich noch sagen will, das beim Pixel(1, 1) nicht von (1, 1) - (3, 3) die Pixel genommen werden, sondern die Pixel rund herum, also (0, 0) - (2, 2) soweit ich das verstanden habe und es mir logisch erscheint.....
2. Versuche mal ein imshow(DEINBILD, []), vielleicht siehts dann gleich aus, wie das ergebnis mit imfilter.....
3. Ich denke du solltest ein 5x5 Bild erhalten, allerdings nur, wenn du nicht die Methode verwendest, bei der die Randpixel nicht berechnet werden, denn in dem Fall bekommst du ein 3x3 Bild:
3x3 Ergebnis weil:
5-2*((3-1)/2), sieht komisch aus (habs mir jetzt mal einfach so überlegt, ist aber ganz einfach:
(3-1)/2 wäre bei einem 3x3filter = 1, also wieviele Pixel am Rand zusätzlich notwendig wären.... *2 weil auf beiden Seiten des Bildes und das 5- weil dieser Berechnete wert von der Bildgröße abgezogen wird.... (in unserem Fall eben 5-2 = 3, also ergibt sich ein 3x3 Bild.... ;)
Hoffe das ist klar/richtig, so wie ich da jetzt beschrieben habe....
Lg
Spite
ich hätte jetzt auch noch eine weitere verständnis frage; sehe ich das richtig das, wie oben erwähnt, die imfilter-funktion das Ergebniss der Faltung liefern sollte. Nun habe ich aber eine eigene implementierung eingebaut und mit einer der imfilter-Funktion verglichen (!!gleiche -filter-Werte, gleiches Bild!!) und mein ergebniss weicht von dem ab, ist etwas heller... ist das bei euch auch so?? bzw. sollte man davon ausgehen das die ergebnisse gleich sein könnten oder ist es ein blödsinn??
wobei ich dazu tendiere zu behaupten dass das Ergebniss nicht ident sein sollte, verstehe aber dann aber nicht warum :shinner:....
Solange die Filter symmetrisch sind, darf es keinen Unterschied machen (imfilter2 macht eigentlich correlation, was aber bei symmetrischen Filtern das gleiche ist wie convolution).
Bist Du Dir sicher, dass die Ergebnisse nicht quasi identisch sind? Beachte, dass der Randbereich bei Deiner Implementierung vielleicht anders behandelt wird. Und schau Dir beide Bilder unbedingt im selben Grauwertbereich an, d.h. gib imshow in eckigen Klammern den darzustellenden Wertebereich mit.
ah und noch ein weiterer Punkt; wenn ich jetzt ein Eingangsbild 5x5 habe und einen Faltungskern 3x3 (siehe Skriputm S. 23), wie sieht das Ergebniss aus ist es 3x3 oder 5x5, weil irgendwo habe ich gelesen das es dem Bild gleich sein sollte in dem Fall 5x5 aber im Skriptum ist es ein 3x3-Ergebniss also gleich dem Faltungskern... also wie sieht es dann aus: 'Bild5x5 * Faltungskern3x3 = ?? (3x3 od. 5x5)
Das kommt eben auf die Behandlung des Randes an. Da gibt es mehrere Möglichkeiten, die müßten eigentlich auch im Skriptum stehen. Wenn das Bild nach der Faltung gleich groß sein soll, muß man sich überlegen, welche Werte man für Pixel außerhalb des Randes annimmt.
LG
Sebastian (GDBV-Tutor)
he, vielen, vielen Dank für eure antworten.. echt hilfreich... ich verstehe bei Spite82 nicht wie du das mit dem von (0,0)-(2,2) meinst.. wie referenzierst die null, bzw wie greifst auf das 0te index.. geht ja nicht, oder???
was den vergleich angeht... bei mir sind die bilder (imfilter und selbst implementierter imfilter) "optisch" gleich, aber wertemäßig gibt es abschweifungen, hängt möglicherweise wegen der Behandlung des Bildrandes.. aber jetzt bin ich gerade beschäftigt diese replicate vorgehensweise einzusetzen um zu sehen was sich dann daraus ergibt...
ah und is es immer so das wir auf die nachbarn immer gleich zugreifen also auf das mittlere element wird angewendet mit dem einsatz der drumherum liegenden nachbarn.... weil iregendwo habe ich auch gesehen das man vom element selbst +3 zeilen/spalten macht und nicht drumherum?? liege ich mit meiner vermutung richtig wenn ich beim drumherum bleibe??
DANKEE!!!
klaustaler
13-11-2007, 17:01
hi!
war jetzt heut mal im tutorium und mir wurde auch prima geholfen. woher der kleine bub kommt (er hat wieder rumgespuckt) wissen wir zwar bis jetzt noch nicht, aber zur Kantenbehandlung gibts folgendes zu sagen:
- Das Ausgabebild MUSS nicht 500x500 groß sein, aber ich bezweifle, dass man sich dann volle Punkte erwarten kann
- Mann kann das Bild im ersten Schritt vergrößern und den "aufgefüllten Rand" mit grauwerten füllen. Dann das Bild ohne extra Randbehandlung bearbeiten und anschließend wieder auf 500x500 zuschneiden. Die Frage hierbei ist, was für Grauwerte man nimmt. Das bleibt euch überlassen (Zufallswerte, Werte der Kante, Werte der gegenüberliegenden Kante, Gespiegelte Werte einer Kante...whatever).
ich hoffe, das hilft dem ein oder anderen weiter :)
baba
der flo
hmmm... mir ist jetzt ziemlich alles klar.. aber ich bin jetzt bei einem Punkt wo ich mir iregendwie gedanken über die effizienz des skripts mache....
hat jemand bereits dieses beispiel fertig?? welchen umfang hat es?? ich muss gestehen das bei mir, auf grund dessen das der einsatz vom imfilter nicht erlaubt ist, die skriptlänge expandiert.. es hält sich noch in grenzen bei den 3x3 filter aber wenn ich dann für unterschiedlich filter-größen das alles implementiere (z.B. 7x7)... dann kann ich zumindest bei mir 'hohohohooo' sagen, es wird viel und ich kanns mir nicht vorstellen das dies wirklich verlangt ist.. aus dem grunde möchte ich erfahren wie es bei euch vom Umfang her aussieht???
möglicherweise bin ich auf dem total falschem (aber laut ergebnissen richtigem) weg...
Hallo
Müssen wir auch Medianfilter selbst implementieren, oder nur die Faltung? Dh. dürfen wir medfilt2 Funktion benutzen?
danke
Hallo
Müssen wir auch Medianfilter selbst implementieren, oder nur die Faltung? Dh. dürfen wir medfilt2 Funktion benutzen?
danke
Für den Medianfilter könnt ihr schon die Funktion medfilt2 verwenden.
LG
Sebastian (GDBV-Tutor)
ist es aber nicht so das wenn man die medfilt2-funktion anwendet diese funktion die Faltung wider selbst macht??
oder bezieht sich das dann auf den einsatzt von medfilt nach dem imnosie befehl??
gleich noch eine frage zum letzten teil dieses beispiels;
muss man jetzt nachdem ich mit imnoise das pfeffer&salz angewendet habe immer nach jedem p (0.05 , 0.1, 0.2) immerweider die filter durchlaufen lassen oder kann ich sagen ich mache nur nach dem ich ein imnoise mit einem p=0.2 angewendet habe wieder alle filter durch... und mit den filter sind die vom oberen teil, also median, average und gaussian gemient??
thx
ist es aber nicht so das wenn man die medfilt2-funktion anwendet diese funktion die Faltung wider selbst macht??
Der Median-Filter führt keine Faltung durch
gleich noch eine frage zum letzten teil dieses beispiels;
muss man jetzt nachdem ich mit imnoise das pfeffer&salz angewendet habe immer nach jedem p (0.05 , 0.1, 0.2) immerweider die filter durchlaufen lassen oder kann ich sagen ich mache nur nach dem ich ein imnoise mit einem p=0.2 angewendet habe wieder alle filter durch... und mit den filter sind die vom oberen teil, also median, average und gaussian gemient??
Du machst drei Bilder mit unterschiedlichem Rauschanteil. Auf jedes Bild wendest du dann die drei Filter an.
LG
Sebastian (GDBV-Tutor)
frage: ich habe leider kein skriptum, könnte jemand die relevanten seiten aus dem skriptum dafür online stellen? beispiel 3 ist leider sonst etwas schwer zu lösen (oder gibt es noch skripten zu erstehen?)
klaustaler
18-11-2007, 15:49
die skripten sollte es laut vorbesprechung im "sekretariat" geben. Das sollte sich laut vorbesprechung im gleichen gang wie der Hörsaal 18 befinden und laut vorbesprechung 15 euro kosten :)
an sich ist beispiel 3 aber nicht schwer. schau in der hilfe nach "fspecial" und schau dir außerdem an, wie die Faltung funktioniert (die du ja selbst implementieren musst).
hier im forum steht dazu auch schon eine ganze menge.
Zu implementieren sind der Median, der Average und der Gaussian-Filter.
hat jemand bereits dieses beispiel fertig?? welchen umfang hat es?? ich muss gestehen das bei mir, auf grund dessen das der einsatz vom imfilter nicht erlaubt ist, die skriptlänge expandiert.. es hält sich noch in grenzen bei den 3x3 filter aber wenn ich dann für unterschiedlich filter-größen das alles implementiere (z.B. 7x7)... dann kann ich zumindest bei mir 'hohohohooo' sagen, es wird viel und ich kanns mir nicht vorstellen das dies wirklich verlangt ist.. aus dem grunde möchte ich erfahren wie es bei euch vom Umfang her aussieht???
möglicherweise bin ich auf dem total falschem (aber laut ergebnissen richtigem) weg...
Ich hab genau das gleiche Problem wie du. Die selbst implementierten Filter (mit zwei for-Schleifen) sind bei mir einfach grottenlangsam (obwohl ich die notwendigen Matrizen bereits vorher reserviere, wie empfohlen), und das ganze Zeugs braucht pro Filter ungefähr 5 Sekunden. Das kanns doch nicht sein, oder? Im Moment bin ich gerade dabei, die zusätzliche Aufgabe bzgl Salt & Pepper zu implementieren, scheitere aber irgendwie an der Frustration, weil immer alles so lange dauert...
Also, eine Frage: Wie kann man diese selbst implementiere Faltung schneller machen? Kann mir nicht vorstellen, dass bei dem Beispiel von uns wirklich verlangt wird, zwei Bilder mit jeweils drei S&P-Intensitäten mit jeweils drei Filtern zu behandeln, zusätzlich zu dem ersten Tei der Aufgabe (wo ja auch schon 2 Bilder * 3 Filter * unterschiedliche Größen entstehen...) wenn das jedesmal fünf Sekunden braucht...
Ich hab genau das gleiche Problem wie du. Die selbst implementierten Filter (mit zwei for-Schleifen) sind bei mir einfach grottenlangsam (obwohl ich die notwendigen Matrizen bereits vorher reserviere, wie empfohlen),
................
................
drei S&P-Intensitäten mit jeweils drei Filtern zu behandeln, zusätzlich zu dem ersten Tei der Aufgabe (wo ja auch schon 2 Bilder * 3 Filter * unterschiedliche Größen entstehen...) wenn das jedesmal fünf Sekunden braucht...
leider ist es so und es ist OK! :shinner:
nichtmöglich
21-11-2007, 11:30
hallo,
ich hab ein paar fragen zur "tabellarischen" abgabeform.
wie sollen wir die bilder in tabellenform anordnen? können wir einfach subplot hernehmen und dann ALLE bilder in eines reinwerfen(natürlich dann mit überschriften). die frage ist dann, ob man überhaupt noch was erkennen kann...
und wieviele verschiedene filtergrößen muss man verwenden (reichen 3?)
danke schon mal :)
hallo,
ich hab ein paar fragen zur "tabellarischen" abgabeform.
wie sollen wir die bilder in tabellenform anordnen? können wir einfach subplot hernehmen und dann ALLE bilder in eines reinwerfen(natürlich dann mit überschriften). die frage ist dann, ob man überhaupt noch was erkennen kann...
"Tabellarisch anordnen" heißt hier, daß das Ganze halt übersichtlich sein sollte, z.B. alle Ergebnisse mit einem Filter und verschiedenen Filtergrößen in einer Figure.
und wieviele verschiedene filtergrößen muss man verwenden (reichen 3?)
3 reichen schon.
LG
Sebastian (GDBV-Tutor)
Hallo!
Ich habe die Randbehandlung so gemacht, dass ich für jeden Rand die Pixelwerte vom gegenüberliegenden Rand einbeziehe.
Nur weiss ich nocht ob das stimmt?
Ich mache zuerst eine Kopie vom Bild und vergroessere dieses mit jeweils einem Pixel von jeder Seite.
Die neuen Randpixel haben zuerst Grauwert 0. Für jeden Rand(in der Kopie) kopiere ich die Pixelwerte vom gegenüberliegenden Rand(im Originalbild).
So bleiben aber die vier Eckpixel im vergrösserten Bild 0. Ist das ok????
Dann führe ich die Faltung durch(mit der Kopie).
Das Ergebnisbild schneide ich von jeder Seite um einen Pixel.
Und da ist mein Endbild.
Hallo!
Ich habe die Randbehandlung so gemacht, dass ich für jeden Rand die Pixelwerte vom gegenüberliegenden Rand einbeziehe.
Nur weiss ich nocht ob das stimmt?
Ja, das ist eine Möglichkeit.
LG
Sebastian (GDBV-Tutor)
Danke für die schnelle Antwort!!!!!
Hallo!
Zu welchem Bild sollen wir "Salz- und Pfefferrauschen" addieren?
lg
unusual05
21-11-2007, 17:46
Hallo!
Zu welchem Bild sollen wir "Salz- und Pfefferrauschen" addieren?
lg
Da es keinen Sinn machen würde "Salt 'n Pepper" zum Bild mit der schlechten Qualität hinzuzufügen, würde ich vorschlagen das Originalbild mit der guten Quali mit "Salt 'n Pepper" zu modifizieren
Und dann kannst du ja wieder die Filter anwenden, wie gewohnt...
nichtmöglich
22-11-2007, 10:54
frage zum grauwertprofil:
sollen wir im ernst aus JEDEM filterbild dieselbe grauwertzeile rausschneiden und die werte mit den originalbildern vergleichen?? wir haben über 20 verschiedene filterbilder, das wär doch etwas zu aufwendig, oder? reichts da nicht, wenn wir einfach sagen, dass die grauwerte je filter unterschiedlich berechnet werden und deshalb die werte teilweise anders sind? ...
:)
frage zum grauwertprofil:
sollen wir im ernst aus JEDEM filterbild dieselbe grauwertzeile rausschneiden und die werte mit den originalbildern vergleichen?? wir haben über 20 verschiedene filterbilder, das wär doch etwas zu aufwendig, oder? reichts da nicht, wenn wir einfach sagen, dass die grauwerte je filter unterschiedlich berechnet werden und deshalb die werte teilweise anders sind? ...
:)
zudem punkt wollte ich noch weiters wissen, wie sieht es hierbei aus, müssen wir hier nur die plots im Dokument darstellen oder müssen wir auch noch etwas diesbezüglich Beschreiben?
Mir fällt eigentlich nicht sehr viel ein was ich hierzu Beschreiben könnte, den die Grafiken sprechen ja für sich...
wir haben einige ausgeschnitten dargestellt... sind insgesamt 12plots. jeweils 2nebeneineander --> 6Bilder im dokument.. hoffe das passt so... wie es aber für 20 und mehr filterbilder aussieht.. würde ich auch gerne wissen :rolleyes:
frage zum grauwertprofil:
sollen wir im ernst aus JEDEM filterbild dieselbe grauwertzeile rausschneiden und die werte mit den originalbildern vergleichen?? wir haben über 20 verschiedene filterbilder, das wär doch etwas zu aufwendig, oder? reichts da nicht, wenn wir einfach sagen, dass die grauwerte je filter unterschiedlich berechnet werden und deshalb die werte teilweise anders sind? ...
:)
Macht das halt am besten Mal für alle Filter als Vergleich und für 3 verschiedene Filtegrößen als Vergleich (also insgesamt 6 Grauwertprofile). Es geht darum, die Unterschiede aufzuzeigen.
LG
Sebastian (GDBV-Tutor)
zudem punkt wollte ich noch weiters wissen, wie sieht es hierbei aus, müssen wir hier nur die plots im Dokument darstellen oder müssen wir auch noch etwas diesbezüglich Beschreiben?
Mir fällt eigentlich nicht sehr viel ein was ich hierzu Beschreiben könnte, den die Grafiken sprechen ja für sich...
Man sollte schon beschreiben, wo und warum es Unterschiede gibt. Welcher Filter glättet am meisten? Was für eine Auswirkung haben unterschiedliche Filtergrößen? usw.
LG
Sebastian (GDBV-Tutor)
signalout
24-11-2007, 17:42
hallo!
wir sind gerade dabei, die methode für die randbedingungen anzupassen.
ich glaub der betroffene bereich wird im skriptum behandelt.
wäre jemand so nett und würde für uns die entsprechenden seiten einscannen? (ich hab gelesen, dass es sich nur um seite 23 handelt?)
wie siehts aus mit dem 500x500px-ausschnitt des bildes. sst es hier erlaubt photoshop oder andere bildbearbeitunsprogramme zu verwenden, oder muss das ausschneiden auf mittels matlab gelöst werden?
Hallo,
Auf Seite 23 ist die Faltung erklärt.
Auf Seite 25 steht was über Randbehandlung....aber nur Stichwörter:
Lösungen:
1. Spezialfälle, algoritmischen Berücksichtigung
2. Ergebnisbild kleiner als Originalbild
3. Annahme : Pixel außerhalb des Bildes 0
4. zyklischer Abschluß
Das ist alles.
Ich habe es wir im Punkt 4 gemacht. Für die Randpixel habe ich die Pixelwerte von der gegenüberliegenden Seite einbezogen.
Sieht Post 24 und 36.
Vielleicht hilft das euch weiter.
hallo!
wir sind gerade dabei, die methode für die randbedingungen anzupassen.
ich glaub der betroffene bereich wird im skriptum behandelt.
wäre jemand so nett und würde für uns die entsprechenden seiten einscannen? (ich hab gelesen, dass es sich nur um seite 23 handelt?)
für die randbedingung könnt ihr zero-padding verwenden (einfachstes verfahren). d.h. ihr vergrössert das bild um n stellen (n = filtergrösse-1, wobei die filtergrösse ungerade ist) die erweiterung einfach auf 0 setzen. am ende sollte das bild in x und y richtung bei einer filtergrösse von 3 z.b. so aussehen:
0 3 10 7 (...) 3 2 210 0
dann ganz normal filtern.
wie siehts aus mit dem 500x500px-ausschnitt des bildes. sst es hier erlaubt photoshop oder andere bildbearbeitunsprogramme zu verwenden, oder muss das ausschneiden auf mittels matlab gelöst werden?
nein, aber wie man ein bild ausschneidet wurde hier (http://www.informatik-forum.at/showthread.php?t=58569) besprochen. andere möglichkeit: imgC = img(200:700, 300:800); davor kannst du mit impixelinfo im plot nachschauen, welche werte du ca. brauchst.
grüsse markus
die ausarbeitung meines beispiels dauer halbe ewigkeiten speziell der medianfilter (mehrere minuten) . ist das bei euch auch so, oder hab ich einen fehler?
ausserdem bin ich mir doch nicht so ganz sicher welche filter wir wie anwenden sollen.
mein beispiel sieht so aus.
ich schneide aus beiden bildern 500x500 pixel ausschnitte
auf diese ausschnitte (inkl. randbehandlung) wende ich den
mittelwertfilter, gaussfilter und medianfilter an jeweils mit [3 3], [5 5], [7 7 ]
dann mache ich ein grauwertprofil der zeile 200, : für beide bilder mit allen filtern und filtergrößen
dann nehme ich einen ausschnitt (den besseren) addiere salz und pfeffer (0.05, 0.1, 0.2) und wende auf diese drei bilder den median filter an.
oder soll ich hier auch alle filter mit allen filtergrößen nehmen? - dann hätte ich für diesen Punkt alleine 27 berechnungen.
Seh ich das richtig das das implementieren der Faltung bedeutet, einfach nur das bild mit dem fspecial filter zu multiplizieren? ich schau nämlich jetzt schon ne zeit durchs skriptum und im net und finde nichts dazu wie man eine 'faltung' selbst erstellen kann. hat da jemand ne idee oder hinweis?
vielen dank,
Raz :)
dann nehme ich einen ausschnitt (den besseren) addiere salz und pfeffer (0.05, 0.1, 0.2) und wende auf diese drei bilder den median filter an.
oder soll ich hier auch alle filter mit allen filtergrößen nehmen? - dann hätte ich für diesen Punkt alleine 27 berechnungen.
Nachdem in der Angabe die Frage nach dem besten Filter gestellt wird, solltest du zumindest jeden Filter einmal anwenden.
Seh ich das richtig das das implementieren der Faltung bedeutet, einfach nur das bild mit dem fspecial filter zu multiplizieren? ich schau nämlich jetzt schon ne zeit durchs skriptum und im net und finde nichts dazu wie man eine 'faltung' selbst erstellen kann. hat da jemand ne idee oder hinweis?
vielen dank,
Raz :)
mit fspecial multiplizieren würde eher wenig sinn machen. fspecial erstellt dir nur den kernel (filter) für die faltung. das müsstest du mit conv2, imfilter oä auf dem bild anwenden, was bei diesem bsp nicht erlaubt ist.
die faltung implementierst du folgendermaßen selber:
for x = 1:size(img,1)
for y = 1:size(img,2)
imgF(x,y) = sum(img(x-ksize/2:x+ksize/2, y-ksize/2:y+ksize/2).* kernel);
end
end
dieser code ist nur exemplarisch und stimmt so noch nicht ganz (keine randbedingung, falscher index etc.) aber ich hoffe er verdeutlicht was du machen solltest... in worten nochmal: für jedes neue pixel imgF(x,y) musst du den kernel mit den entsprechenden nachbarn des ursprünglichen bildes img multiplizieren und diese werte aufsummieren. in meinem bsp. wird davon ausgegangen, dass der kernel schon normalisiert ist.
die mathematische formel findest du auch hier (http://de.wikipedia.org/wiki/Bildverarbeitung) (nach Faltung suchen).
grüsse markus
Super, danke dir :)
sowas ähnliches hatte ich schon versucht, wobei meine formel grob einfach so aussah:
M(i,j)= f(k,l) .* b(i+k,j+l)
Mit der Funktion double() kann man einfach Matrizen auf den double-Typ konvertieren.
Hier sollte man dike beiden Matrizen aber auf alle Fälle elementweise multiplizieren, d.h. den .* Operatro verwenden.
LG
Sebastian (GDBV-Tutor)
bekomme den fehler auch. allerdings funktioniert die konvertierung auf double von meiner IMG-matrix nicht. dann wird immer nur ein weisses bild angezeigt. wenn ichs nicht auf double konvertiere, funktioniert die faltung nicht, weil ich eine exception bekomme. wie ist das zu lösen?
Probiere mit im2double...vielleicht klappt so.
ahhhh.
"Subscripted assignment dimension mismatch."
sitze schon seit stunden dran, den filter hab ich zu double konvertiert, das bild mittels im2double auch. woran kann das jetzt noch liegen? wenn ich die faltung auskommentiere, wird das bild wenigstens angezeigt...
ahhhh.
"Subscripted assignment dimension mismatch."
das bedeutet prinzipiell, dass du z.b. eine 3x4 matrix mit einer 4x4 matrix multiplizierst. schau dir mal die größen der matrizen an, die du multiplizierst (oder addierst...)
sitze schon seit stunden dran, den filter hab ich zu double konvertiert, das bild mittels im2double auch. woran kann das jetzt noch liegen? wenn ich die faltung auskommentiere, wird das bild wenigstens angezeigt...
durch den fehler kommt er gar nicht zum anzeigen des bildes : )
grüsse markus
hab jetzt die faltung für einen 3x3 filter so gemacht, bekomme noch immer obige exception:
imgFiltered(i,j) = sum(I(i-1:i+1, j-1:j+1) .* filterMittel3);
was kann daran nicht stimmen?
edit: noch was: muss ich beim filter auch eine laufvariable mitlaufen lassen?
hab jetzt die faltung für einen 3x3 filter so gemacht, bekomme noch immer obige exception:
imgFiltered(i,j) = sum(I(i-1:i+1, j-1:j+1) .* filterMittel3);
was kann daran nicht stimmen?
Die rechte Seite von Deiner Zuweisung ergibt einen Vektor, deswegen geht das nicht. Schreib am einfachsten sum(sum(...));
LG
Sebastian (GDBV-Tutor)
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.