Frage zur Matlab Übung 2

Moderator: Bildverarbeitung

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Frage zur Matlab Übung 2

Beitrag von Toobee » 16. Apr 2011 21:52

Hallo,

hab Probleme mit dem Matlab-Aufgaben

a)Zeigen Sie das Bild Lena.bmp als 3D-Oberfläche an. Achten Sie darauf dass sich die Achsenskalierung bei 
Rotation der Darstellung nicht ändert.

Ich versteh nicht ganz wie ich eine dritte Dimension in die Matrix reinbekomme oder wie ich die Aufgabe zumindest im Ansatz lösen soll. Könnte mir da jemand etwas mehr zu sagen, welche Matlab-Kommandos verwendet werden müssen?

b)Rastern und Quantisieren Sie eine Sinusschwingung im Intervall [0, π] in ein 100x1, 150x1, 200x1 Pixel großes Bild mit jeweils 3,4,8,12,16-Bit pro Pixel. Plotten Sie die Kurven und zeigen Sie den Fehler grafisch. Erklären Sie das Ergebnis.
Hinweis: linspace

Bei dieser Aufgabe verstehe ich nicht, wie ich die Bit pro Pixel da setzen kann. Ich komme bis
x1=sin(linspace(0,pi,100));

Nur weiter weiß ich nicht?

BerndAmend
Neuling
Neuling
Beiträge: 2
Registriert: 17. Apr 2011 09:23

Re: Frage zur Matlab Übung 2

Beitrag von BerndAmend » 17. Apr 2011 09:38

Toobee hat geschrieben: Ich versteh nicht ganz wie ich eine dritte Dimension in die Matrix reinbekomme oder wie ich die Aufgabe zumindest im Ansatz lösen soll. Könnte mir da jemand etwas mehr zu sagen, welche Matlab-Kommandos verwendet werden müssen?
Es ist notwendig eine Funktion zu verwenden die den jeweiligen Matrix-Eintrag als dritte Dimension verwendet.
Toobee hat geschrieben: Bei dieser Aufgabe verstehe ich nicht, wie ich die Bit pro Pixel da setzen kann. Ich komme bis
x1=sin(linspace(0,pi,100));

Nur weiter weiß ich nicht?
Wie würdest du es in Java/C++/Scala/Scheme/Lisp/... umsetzen? Hinweis: Wie ist der Wertebereich von x1?

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Re: Frage zur Matlab Übung 2

Beitrag von Toobee » 17. Apr 2011 12:44

>Es ist notwendig eine Funktion zu verwenden die den jeweiligen Matrix-Eintrag als dritte Dimension verwendet.

Ich hatte es Anfangs mit
surf(image)
probiert, da die Hilfe eig. sagt, dass 1:n als x, 1:m als y und m:n = z interpretiert würde. Da bekomme ich aber eine Fehlermeldung das "dimension must agree, not rendering mesh". Habe mir dann noch diesen mesh() befehl angeguckt, aber nicht verstanden, was mir das jetzt hätte sagen sollen.

>Wie würdest du es in Java/C++/Scala/Scheme/Lisp/... umsetzen? Hinweis: Wie ist der Wertebereich von x1?
Verstehe immer noch nicht, worauf die Aufgabe hinaus will. Der Wertebereich ist von 0 bis pi in 100 Schritten

Ich würd mir in java vermutlich ein array machen, in dem ich die integer werte aufnehme. Das würde dann entsprechend für die Farbwerte 3, 4, etc. je Pixel aufnehmen?

SebFreutel
Computerversteher
Computerversteher
Beiträge: 317
Registriert: 30. Okt 2006 21:54

Re: Frage zur Matlab Übung 2

Beitrag von SebFreutel » 17. Apr 2011 14:42

Toobee hat geschrieben:Wie würdest du es in Java/C++/Scala/Scheme/Lisp/... umsetzen? Hinweis: Wie ist der Wertebereich von x1?
Verstehe immer noch nicht, worauf die Aufgabe hinaus will. Der Wertebereich ist von 0 bis pi in 100 Schritten
Das ist der Definitionsbereich, der Wertebereich ist das Ergebnis der Sinus-Funktion.
Toobee hat geschrieben:Ich würd mir in java vermutlich ein array machen, in dem ich die integer werte aufnehme. Das würde dann entsprechend für die Farbwerte 3, 4, etc. je Pixel aufnehmen?
Aber nicht 3, 4 etc. Werte, sondern Bits. D.h. der Wertebereich soll aus 2^3, 2^4 usw. möglichen Werten bestehen und du musst dementsprechend das Ergebnis skalieren (und runden).

BerndAmend
Neuling
Neuling
Beiträge: 2
Registriert: 17. Apr 2011 09:23

Re: Frage zur Matlab Übung 2

Beitrag von BerndAmend » 17. Apr 2011 14:46

Toobee hat geschrieben:>Es ist notwendig eine Funktion zu verwenden die den jeweiligen Matrix-Eintrag als dritte Dimension verwendet.

Ich hatte es Anfangs mit
surf(image)
probiert, da die Hilfe eig. sagt, dass 1:n als x, 1:m als y und m:n = z interpretiert würde. Da bekomme ich aber eine Fehlermeldung das "dimension must agree, not rendering mesh". Habe mir dann noch diesen mesh() befehl angeguckt, aber nicht verstanden, was mir das jetzt hätte sagen sollen.
Wie könnte sich die Höhe bei einem 3-Kanal-Bild ergeben? Um die Aufgabe zu erfüllen ist es nicht notwendig, dass die Darstellung farbig ist.
Toobee hat geschrieben:>>Wie würdest du es in Java/C++/Scala/Scheme/Lisp/... umsetzen? Hinweis: Wie ist der Wertebereich von x1?
Verstehe immer noch nicht, worauf die Aufgabe hinaus will. Der Wertebereich ist von 0 bis pi in 100 Schritten

Ich würd mir in java vermutlich ein array machen, in dem ich die integer werte aufnehme. Das würde dann entsprechend für die Farbwerte 3, 4, etc. je Pixel aufnehmen?
sin(0)=0.0 sin(pi/2.0)=1.0 sin(pi)=~0 entsprechend ist range(sin(linspace(0,pi,500)))=~1.0
Wie könnte man diese Werte z.B. auf die 16 Quantisierungsstufen (4-Bit) verteilen?

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Re: Frage zur Matlab Übung 2

Beitrag von Toobee » 17. Apr 2011 20:12

>Wie könnte sich die Höhe bei einem 3-Kanal-Bild ergeben? Um die Aufgabe zu erfüllen ist es nicht notwendig, dass die Darstellung farbig ist.

Hm, in dem ich von den drei Kanälen den maximalwert für einen position in der Matrix nehme?

Code: Alles auswählen

c = max(image(:,:,1), image(:,:,2))
c = max(c, image(:,:,3))
c = double(c);
surf(c)
Das führt jetzt zwar zumindest mal zu keinem Fehler mehr, allerdings ist das was ich da bekomme komplett Schwarz und nicht so wie in der Folien aus der Vorlesung. Ich hab versucht mit dem Befehl colormap da zu bewirken, dass die Werte farbig interpretiert werden, um da mal irgendwas drin zu erkennen, ging aber nicht :/

>sin(0)=0.0 sin(pi/2.0)=1.0 sin(pi)=~0 entsprechend ist range(sin(linspace(0,pi,500)))=~1.0
>Wie könnte man diese Werte z.B. auf die 16 Quantisierungsstufen (4-Bit) verteilen?


S00: 0000 = 0
S01: 0001 = 0.0625
S02: 0010 = 0.125
S03: 0011 = 0.1875
...
S15: 1111 = 1.0

Ich verstehe zwar jetzt grob, dass die Aufgabe mir sagen will, dass durch die unterschiedlich feinen Intervalle bei der Darstellung der Quantisierung zwangsläufig dazu führen wird, dass es bei den kleinen Bit bzw. Rasterwerten zu etwas hubbeligen/unschönen Kurven kommt, wenn man dieses plotted. Wie ich das ganze in Matlab mache, hab ich immernoch nicht rausgefunden. :(

Antworten

Zurück zu „Bildverarbeitung“