Zur Drehrichtung:
Glaube das ist nur bei Unterscheidung von Hin (exp(-…)) und Rücktrafo(exp(+…)) wichtig.
Hier wird aber nur Rücktrafo gemacht, oder?
ja so meinte ich das. aber ich weiß nicht ob wir das hier gleich einfach so posten sollten
wenn ich das mit der drehrichtung richtig verstanden habe, drehen wir einmal hin und einmal zurück. aber frag mich nicht, da steht prost, und das ist gut…
Woran könnte es liegen, wenn man ein mogrify: No decode delegate for this image format im cip bekommt? Ich gebe make convert ein und erhalte auch 2 mal Prost!, aber zum Schluss kommt eben diese Fehlermeldung und keine .bmp Datei wird erstellt.
bist du sicher dass eye of gnome auch installiert ist? sollte ja eigentlich schon der fall sein.
Noch eine interessante Frage:
Warum bleiben meine Bilder trotzdem immer schwarz? Trotz Prost?
ich vermute der vegleich in compareReal() in image.cpp ist nicht ganz optimal für die aufgabe wenn du in deine main statt:
if (idftResult.compareReal(referenceImage)) {
folgendes schreibst:
if (idftResult.compareReal(referenceImage) && referenceImage.compareReal(idftResult)) {
kommt bei schwarzem Bild nämlich kein „Prost!“ mehr bei (fast) gleichem Bild aber schon
also ich habe meinen code nochmal nachgebessert. ging nur indem ich alles einmal im detail durchgelaufen bin, habe dann den ein oder anderen fehler gefunden, und jetzt bekomme zumindest den text angezeigt. aber nur so dünn. die bilder sehen immer noch nicht genau wie das reference-bild aus…
UPDATE:
Jetzt habe ich exakt die Bilder raus, die ich haben soll. Puhh, das war nicht grade ein Kinderspiel
Aber eine Frage habe ich dann immer noch: Was sollen wir in aufgabe 2 b) machen. Ich verstehe es beim besten Willen nicht, da auf diese Methode ohnehin nicht zugegriffen wird, wenn ich richtig geschaut habe. Und wie wir das experimentell bestimmen sollen, keine Ahnung. Einfach Ausprobieren? Und wie kann ich dann meinen Wert überprüfen, wenn er nirgends verwendet wird?
// TODO: Aufgabe 2 b) Setzen sie die Werte in filteredSpectrum die zu Frequenzen höher als der CutoffIndex gehören zu 0.
im anderen thread steht glaube ich einfach ausprobieren
ja du meinst die andere 2 b) (aufgabenblatt und code sind vertauscht)
ich meinte die Aufgabe 2 b) vom aufgabenblatt. Das ist die 2 a) im code.
// TODO: Aufgabe 2 b) Setzen sie die Werte in filteredSpectrum die zu Frequenzen höher als der CutoffIndex gehören zu 0.
Das habe ich schon gelöst.
// TODO: Aufgabe 2 a) Ermitteln sie experimentell den Cutoff-Index und geben sie diesen zurück!
bei dem weiß ich nicht was ich machen soll. ausprobieren kann ich ja schlecht, da meine main eh immer 16 verwendet.
Woran könnte es liegen, wenn man ein mogrify: No decode delegate for this image format im cip bekommt? Ich gebe make convert ein und erhalte auch 2 mal Prost!, aber zum Schluss kommt eben diese Fehlermeldung und keine .bmp Datei wird erstellt.
Ist bei mir genauso =(.
Da hat wohl ein Held das fabs(X) in Zeile 68 in der image.cpp vergessen.
In der Aufgabe ist nur die Rücktransformation gefragt, daher ist der Hinweis wohl eher “ein bisschen zu gut gemeint”.
Zum CutOffIndex: Es gibt anscheindend nicht nur einen Wert der passt, sondern einen Bereich.
Bzgl. mogrify was im CIP kaputt zu sein scheint (vmtl. ImageMagick vs GraphicsMagick) - Rumkonvertieren geht auch mit pfsin & pfout (Alternativ kann man auch pfsin & pfsview benutzen):
.PHONY: all execute convert2bmp convert clean
LD = g++
CXXFLAGS = -Wall -g -DLINUX
SOURCEFILES = idft.cpp image.cpp complex.cpp main.cpp lowpass.cpp
HEADERFILES = idft.h image.h complex.h
PFMS := $(wildcard img/*.pfm)
BMPS := $(patsubst %.pfm, %.bmp,$(PFMS))
all: A4
A4: $(HEADERFILES) $(SOURCEFILES)
$(LD) $(CXXFLAGS) -o $@ $(SOURCEFILES)
%.bmp: %.pfm
pfsin $< | pfsout $@
convert2bmp: $(BMPS)
@echo "----- converted img/*.pfm to img/*.bmp -----"
execute: A4
./A4
convert: A4 execute convert2bmp
eog ./img/_this_should_look_like_referenceImage.bmp
clean:
rm *.o ./img/*.bmp ./img/_this_should_*.pfm A4 -f
habe ich das dann richtig verstanden, dass wir einfach selbst eine formel herleiten sollen, mit der sich ein geeigneter cutoffIndex ermitteln lässt? und diese dann in die funktion getcutoffIndex() schreiben? oder sollen wir in diese methode einfach sofort einen wert reinschreiben, der passt, und den dann zurückgeben? dann könnte ich ja einfach in meine main schauen, und den wert “abschreiben”.
habe ich das dann richtig verstanden, dass wir einfach selbst eine formel herleiten sollen, mit der sich ein geeigneter cutoffIndex ermitteln lässt? und diese dann in die funktion getcutoffIndex() schreiben? oder sollen wir in diese methode einfach sofort einen wert reinschreiben, der passt, und den dann zurückgeben? dann könnte ich ja einfach in meine main schauen, und den wert „abschreiben“.
Nein, das ist damit nicht gefragt, denn: „referenceImageLPF_CutOff16.pfm“ soll in der Aufgabe ersetzt werden.
Durch entweder:
„referenceSpectrumNoised.pfm“
Oder:
„referenceSpectrumNoisedRealOnly.pfm“
Beide müssen erst durch die TiefpassFilterung und dann durch den 2D-IDFT und wenn dann der Vergleich mit „referenceImage.pfm“ stimmt, dann hast du deinen experimentellen Wert.
Nur welches der beiden Bilder verwenden?
Das zweite Bild sieht immer verschwommen aus.
Nur das erste gibt bei mir zwei Treffer zurück.
okay, also muss ich dann auch die main etwas umschreiben, dass er auch auf getcutoffIndex() zugreift, richtig?
tja, da wäre ich mit der aufgabenstellung nicht drauf gekommen
Und welches bild wir nehmen sollen weiß ich auch nicht. :-/
Beide müssen erst transformiert werden und dann durch den 2D-IDFT
erst transformieren, dann idft? ist das nicht dasselbe?
Verstehe ich euch richtig? Man soll ausprobieren, mit welche cutoffIndex man vom referenceSpectrumNoised zu referenceImage kommt?
Edit: Wenn ich versuche die IDFT auf referenceSpectrumNoisedRealOnly anzuwenden, erhalte ich irgendwie nur eine graue Fläche…
Dito. Versuch mal einen Wert unter 10, dann kommen verschwommene Flächen.
Aber wofür ist die Datei jetzt gut? Ich weis es nicht.
also ich bin jetzt grade wild am rumexperimentieren in meiner main, um an werte zu kommen. getcutoffIndex() verwende ich trotzdem nicht. wie sollte das auch großartig sinn machen? die methode getFilteredSpectrum() will ja ohnehin schon beim Aufrufen einen Wert haben. Was soll ich also mit getcutoffIndex(). Ich habe da bisher nichts reingeschrieben.
Man kann ja die main anpassen und da dann getCutoffIndex aufrufen. So habe ich es gemacht, und einfach so lange herumprobiert, bis ich das dem Referenzbild ähnlichste Ergebnis hatte.
Man kann ja die main anpassen und da dann getCutoffIndex aufrufen. So habe ich es gemacht, und einfach so lange herumprobiert, bis ich das dem Referenzbild ähnlichste Ergebnis hatte.
also hast du dann auch einfach in getcutoffIndex() nur irgendeinen wert reingeschrieben, der dann zurückgegeben wird, und mit dem das programm dann arbeitet? so hätte ich es jetzt gemacht, aber ich sehe nicht, wo da die schwierigkeit ist. einfach ausprobieren ist alles? ich hab ja nun 2 werte raus, aber es erscheint mir doch etwas zu simpel, hinzuschreiben:
uint a = *wert*;
return a;
So hatte ich das jedenfalls verstanden. Kann mich auch irren, aber wie soll das Programm selbst herausfinden, welcher Wert passt?
uint a = *wert*; return a;
Das habe ich sogar noch kürzer gemacht
ausgezeichnet, dann bekommen wir schonmal kein plagiat