Fehlersuche für Gradientenbild < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 19:33 Mo 22.02.2010 | Autor: | JanaS |
Hallo!
Frasier, Deine Hilfe mit repmat konnte ich leider nicht verwenden. Repmat = eingebauter Befehl = verboten... :-(.
Also, ich möchte ein Bild mit einem Farbgradienten erstellen. Zuerst frage ich alle Inparameter ab (Breite und Höhe des Bildes, Anfangsfarbe als Vektor a1,a2,a3 und Endfarbe als Vektor b1,b2,b3, Schrittlänge steps und in welcher Richtung der Gradient erschaffen werden soll). Den Teil des Codes stelle ich hier nicht ein, das wäre etwas viel. Der Teil ist aber auch in Ordnung.
So, und dann geht es an den Gradienten und hier verliessen sie mich... Ich habe momentan:
Alles was ich herausbekomme, ist ein schwarzes Bild... Immerhin hat es schonmal die geforderte Höhe und Breite. Aber in den Matrizen stehen nur Nullen und Einsen. Und ich weiss nicht warum...
Vielen Dank für Eure Hilfe!
Viele Grüsse von Jana
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 21:05 Mo 22.02.2010 | Autor: | Frasier |
Hallo Jana,
>> Repmat = eingebauter Befehl = verboten... :-(
ist eine merkwürdige Schlussfolgerung, denn letztlich verwendest du nichts anderes als eingebaute Befehle...
Ich weiß immer noch nicht, was ein Farbgradient ist.
Geht es noch darum, eine Matrix wie
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
zu erzeugen (ohne repmat, aber mit for)?
Was hältst du von
x=4;
y=5;
A=zeros(x,y);
for k=1:x
A(k,:)=1:y;
end
A
lg
F.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 08:29 Di 23.02.2010 | Autor: | JanaS |
> Hallo Jana,
>
> >> Repmat = eingebauter Befehl = verboten... :-(
> ist eine merkwürdige Schlussfolgerung, denn letztlich
> verwendest du nichts anderes als eingebaute Befehle...
>
> Ich weiß immer noch nicht, was ein Farbgradient ist.
> Geht es noch darum, eine Matrix wie
> 1 2 3 4 5
> 1 2 3 4 5
> 1 2 3 4 5
> 1 2 3 4 5
> zu erzeugen (ohne repmat, aber mit for)?
> Was hältst du von
> x=4;
> y=5;
> A=zeros(x,y);
> for k=1:x
> A(k,:)=1:y;
> end
> A
> lg
> F.
>
Hallo Frasier,
Das ist ja ungefähr das, was ich auch in meinem Code verbacken habe... Nur funktioniert er nicht. Er zeigt nur ein schwarzes Bild und lauter Nullen in den drei Matrizen.
Zum Farbgradient: ein farbiges Bild besteht aus 2 übereinander liegenden Matrizen. Jede Matrize hat eine Farbe (RGB) und übereinander ergeben sie alle unterschiedlichen Farben, die es gibt. Wenn Du also einen Startwert festlegst, z.B. die Farbe R=23, G=90, B=100 und einen Schlusswert, z.B. R=100, G=250, B=130, kannst Du einen Farbverlauf zwischen diesen Farben erzeugen, indem R von 23 bis 100 läuft, G von 90 bis 250 und B von 100 bis 130. Dabei werden unterschiedliche Farben durchlaufen, weil ja jede unterschiedliche Kombination von RGB eine andere Farbe erzeugt. Verstehst Du, was ich meine?
LG Jana
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 09:21 Di 23.02.2010 | Autor: | Frasier |
Hallo Jana,
ich verstehe das jetzt als Farbverlauf.
Beim Überfliegen deines Codes sind mir die s1, s2 und s3 aufgefallen. Du legst die mit linspace an, also sind das wohl Vektoren. Dann benutzt du die aber für for-Schleifen als Endwert für die Laufvariable. Das geht so nicht.
s1 z.B. wird ja mehrere Elemente haben, welches davon ist das richtige für den Endwert?
Hier ist ein einfacher Farbverlauf von links nach rechts.
Andere Richtungen musst du dir selber austüfteln.
---
breite=640;
hoehe=480;
img=zeros(hoehe,breite,3);
r=[23,100];
g=[90,250];
b=[100,130];
rr=linspace(min(r),max(r),breite);
gg=linspace(min(g),max(g),breite);
bb=linspace(min(b),max(b),breite);
for k=1:hoehe
img(k,:,1)=rr;
img(k,:,2)=gg;
img(k,:,3)=bb;
end
img=uint8(img);
image(img);
axis equal;
axis off;
---
lg
F.
|
|
|
|