WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Transformationsmatrix

 

Mr.Radar
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 28.08.08
Wohnort: ---
Version: 7.4.0
     Beitrag Verfasst am: 04.09.2008, 11:54     Titel: Transformationsmatrix
  Antworten mit Zitat      
Hallo,

folgendes Problem quält mich, ich finde keine Lösung dazu:

Ich habe eine Rotationsmatrix:
Code:
R=[cos(theta) -sin(theta); sin(theta) cos(theta)]
, also 2x2. Dann habe ich Koordinaten x,y eines Punktes, die ich jetzt mit der Rotationsmatrix auf u,v transformieren möchte. Nur, wie geht das?

Code:
[u,v]=[x,y]*R
liefert mir "too many arguments"
wenn ich z.b.
Code:
erg=[x,y]*R
ausführe, kommt der fehler "inner matrix dimensions must agree"

hat jemand nen tipp für mich? oder bin ich sowieso vollkommen am holzweg?
Private Nachricht senden Benutzer-Profile anzeigen


Martin
Admin

Admin



Beiträge: 651
Anmeldedatum: 16.06.07
Wohnort: Bietigheim-Bissingen
Version: ---
     Beitrag Verfasst am: 04.09.2008, 12:14     Titel:
  Antworten mit Zitat      
Hallo Mr.Radar,

ja ein Denkfehler ist drin.
Du musst die Drehmatrix von links anwenden und nicht von rechts.

Code:
[u,v]=R*[x,y]


So müsste es klappen (ungetestet).

Grüße Martin
_________________

Der kleine goMatlab.de-Knigge - Eine kleine Liste von wichtigen Regeln, die jeder beachten sollte
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 04.09.2008, 12:30     Titel:
  Antworten mit Zitat      
Hallo zusammen,

da ist das Problem mit der Ausgabe noch drin. So geht's:

Code:
erg = R*[x;y];
u = erg(1);
v = erg(2);


Bitte beachten: [x;y] muss ein Spaltenvektor sein! x und y müssen skalar sein (keine Vektoren).

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Mr.Radar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 28.08.08
Wohnort: ---
Version: 7.4.0
     Beitrag Verfasst am: 04.09.2008, 18:51     Titel:
  Antworten mit Zitat      
ok, das funktioniert jetzt mal, aber mein script funktioniert trotzdem nicht so wie ich mir das vorstelle - vielleicht kann mir jemand sagen, wo mein denkfehler ist:

Was passieren soll:
Ich habe eine Rotationsmatrix R, sowie 12 15x15-Filterkerne K(:,:,i), gefüllt mit Nullen. Platziert in der Mitte des Kerns (also rund um K(7,7,i)) sollen im Bereich von abs(u)<=6und abs(v)<=4 die Ergebniswerte der Funktion K(x,y)=-exp(-u^2/8 ) stehen, wobei [u,v]=R*[x,y]

Mein Code:
Code:

theta=0;
T = [1 0 -floor(kernelwidth/2); 0 1 -floor(kernelheight/2); 0 0 1]; %building translation matrix
for i = 1:12
    R=[cos(theta) -sin(theta) 0; sin(theta), cos(theta) 0; 0 0 1]; %building rotation matrix
    theta = theta+15;
    for x = 1:kernelwidth %=15
        for y = 1:kernelheight %=15
            %rotate, translate to middle
            np = T*R*[x;y;1];
            %get values
            u=np(1);
            v=np(2);
            if ((abs(u) <= 3*sigma) && (abs(v)<=L/2)) %bereich pruefen
                K(x,y,i) = -exp(-u^2/(2*sigma^2)); %wert berechnen
            end
        end
    end
 


tut das aber nicht, die werte stehen immer im linken oberen eck der matrix - ich habe es auch schon ohne T probiert - das Ergebnis ist ähnlich seltsam.

wo denke ich hier falsch?
thx
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 05.09.2008, 10:00     Titel:
  Antworten mit Zitat      
Hallo Mr. Radar,

vor der Schleife solltest Du K initialisieren:

Code:
K = zeros(kernelwidth,kernelheight,12);


Nach der Schleife kannst Du so überprüfen, wo die Kerne Einträge haben:

Code:
for k = 1:12
    figure(k)
    spy(K(:,:,k))
end


Für mich sieht es ganz gut aus (getestet mit sigma = 2, L = 8, war leicht zu raten Wink). Allerdings gibt es nur die Kerne 1 4 6 9 und 11. Ist das korrekt?

Herzliche Grüße
Bijick

P.S. Der Eindruck, dass Werte nur im rechten oberen Eck stehen, kann daher kommen, dass Du Dir die Matrizen im Command Window angeschaut hast, wo sie aber nicht in eine "Zeile" passen. Wenn Du weiter nach oben scrollst, siehst Du noch mehr von den Matrizen.
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Mr.Radar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 28.08.08
Wohnort: ---
Version: 7.4.0
     Beitrag Verfasst am: 05.09.2008, 11:52     Titel:
  Antworten mit Zitat      
mh, den init von K hab ich eh gemacht - hab ihn nur zwecks besserer Übersichtlichkeit im Beispielcode weggelassen.

Danke für den Tipp mit dem Spy - so sieht man die Matrizen schon besser. Was mir nur auffällt, ist, dass ich in einigen Matrizen unregelmäßige "Löcher" (also kl. Bereiche innerhalb des Kerns, die 0 werden) habe - hat das so seine Richtigkeit? (In dem - wie du richtig vermutet hast - Paper von Chaudhuri sind nur 2 Kerne abgebildet, einer bei 45° und einer bei 90° - also für die "unregelmäßigeren" Drehwinkel nicht wirklich aussagekräftig)

Bei mir werden das schon 12 Kerne - wie sieht das denn bei dir aus? sind die geraden Kerne einfach leer, oder stehen da irgendwelche seltsamen Werte drin?,...

(Ich glaube schon, dass bei meiner Implementierung was nicht stimmt - wenn ich dann die Kerne nacheinander auf das Bild anwende und dann den pixelweise maximalen Wert der 12 Ergebnisbilder behalte, krieg ich nur ein schwarzes Bild - auch schon mit imtool() angesehen, ob das nicht evtl. am Kontrast liegen kann - das ist nicht der Fall)

Achja, eine weitere Frage ist noch aufgetaucht:
Gibts eine Faustregel, wie groß der Kern sein sollte, wenn das L größer oder kleiner gewählt wird? Aktuell habe ich 15x15 fest eingestellt, teste aber auch nur mit L=9, so wie im Paper. Aber auch da passen ja bei manchen Rotationswinkeln nicht alle Werte rein, somit bin ich da etwas verwirrt...
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Radar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 28.08.08
Wohnort: ---
Version: 7.4.0
     Beitrag Verfasst am: 18.09.2008, 18:01     Titel:
  Antworten mit Zitat      
um es für die nachwelt festzuhalten: Probleme gelöst:

a) die leere Ausgabe im imtool() resultierte daraus, dass mein bild vom datenyp uint war und der filterkern aber double - und imfilter() hat die bei der faltung entstehenden negativen werte einfach auf nullen abgeschnitten.

b) die filtergröße war auch ganz einfach: einfach der durchmesser des rechteck-umkreises...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.