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

Bild und Gerade gemeinsam verdrehen

 

batimania83
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.01.12
Wohnort: Bochum
Version: R2010
     Beitrag Verfasst am: 08.01.2012, 15:10     Titel: Bild und Gerade gemeinsam verdrehen
  Antworten mit Zitat      
Hallo Leute,

als ziemlicher Neuling in der Welt von Matlab muss ich mich zunächst ein mal pauschal bei euch bedanken, denn ohne dieses Forum wär mir der Einstieg um einiges schwerer gefallen...nun stehe ich aber doch vor einem Problem, zu dem ich leider bisher keine hilfreichen Tipps gefunden habe.

Sachverhalt:
Zu Beginn habe ich ein Image aus 224x560 Pixeln. Als User soll man dann in einem ersten Schritt per Maus eine Region of Interest markieren, in die dann reingezoomt wird. In einem zweiten Schritt legt man dann eine Gerade durch zwei Punkte, die ebenfalls per Mausklick ausgewählt werden. Daraufhin soll der Winkel der Geraden zur Vertikalen ermittelt und das Bild inkl. der Geraden entsprechend verdreht werden, sodass die Gerade senkrecht steht, also einer Spalte der Matrix entspricht. In dieser Spalte soll dann in einem letzten Schritt die Zeilenzahl eines gewissen Pixelwerts ausgegeben werden.

Stand der Dinge:
Bisher habe ich die Routine soweit geschrieben, dass man zu Beginn per Mauszeiger mittels "getrect" ein Rechteck um die RoI zieht und sich dieser Abschnitt dann vergrößert in einer neuen Abbildung öffnet. Dann klickt man mittels "pinput" zwei Punkte an, durch die dann über die Geradengleichung eine Linie in den Grenzen der RoI gelegt wird und auch angezeigt wird.

An dieser Stelle beginnt nun mein Problem. Und zwar wird in dem folgenden Schritt zwar das Bild automatisch um "alpha"gedreht und in einer neuen Abbildung angezeigt, allerdings ohne die vorher ausgewählte Gerade bzw. hat diese noch ihre alte Position in einem nun völlig anderen Bildausschnitt. Ich hätte es allerdings gerne, dass die Gerade ortsfest zu den beiden ausgewählten Bildpunkten mit gedreht wird.

Hat da vielleicht jemand eine Idee oder sogar schon einen passenden Befehl, mit der ich das bewerkstelligen könnte? Ich wär für jede Anregung dankbar, auch wenn es da vielleicht einen einfacheren Ansatz geben sollte.

Ich hoffe ich konnte das Problem ausreichend schildern, ansonsten liefere ich bei Bedarf natürlich gerne Infos nach. Danke schon mal im Voraus.

Viele Grüße,
Sebastian
Private Nachricht senden Benutzer-Profile anzeigen


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 08.01.2012, 17:36     Titel:
  Antworten mit Zitat      
Moin,

es gibt verschiedene Möglichkeiten eine Linie zu erzeugen, entweder mit "line" oder man setzt die Pixel auf der gedachten Linie auf einen indizierten Wert, der auch farbig sein kann. Wenn du die Linie mit Line erzeugt hast, wird wohl dein beschriebenes Problem entstehen ( kann das im Moment nicht prüfen, da ich am Wochenende keinen Zugriff auf Matlab habe). Dann besteht immer noch die Möglickeit, dass du den Inhalt deiner Figur als Bild speicherst und dann wieder einlädst. Speichern des Inhalts einer Figur siehe:

http://www.gomatlab.de/gespeicherte.....ung-speichern-t21732.html

Vielleicht hilft das weiter, sonst versuche ich ab Montag das Problem nachzuvollziehen.

Viele Grüße

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
batimania83
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.01.12
Wohnort: Bochum
Version: R2010
     Beitrag Verfasst am: 09.01.2012, 21:49     Titel:
  Antworten mit Zitat      
Hallo Hubertus,

danke für die schnelle Antwort, leider konnte ich mich nicht eher damit beschäftigen. Also die Funktion "line" benutze ich gar nicht. Die Linie erzeuge ich mit folgendem Code (ROI sind hier die Eckpunkte von "getrect"):

Code:

[a1,b1]=ginput(1);
[a2,b2]=ginput(1);
c=(ROI(1):1:ROI(1)+ROI(3));
d=(b1+(b2-b1)/(a2-a1)*(c-a1));
plot(c,d,'r')
%close

alpha=(atan((a2-a1)/(b2-b1)))*180/pi
B=imrotate(A,-alpha);


Danach drehe ich dann das Bild A um Alpha und würde darin gerne die Gerade an fester Position belassen. Oder mach ich da was falsch?

Zu deinen Vorschlägen:
1. was meinst du genau mit indizierten Werten?
2. ich habe mir den Link mal angeschaut. Heißt das, dass man die gesamte Abbildung vor dem Rotieren als *.tif speichert und dann ich rotierter Form wieder einlädt? oder wie hab ich das zu verstehen?

Hätte ja gedacht, das wird eine ganz einfache Aktion Rolling Eyes

Noch eine Alternative hast du aber wahrscheinlich nicht mehr in petto, oder?

Viele Grüße,
Sebastian
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 10.01.2012, 06:18     Titel:
  Antworten mit Zitat      
Moin,

du speicherst deine Figur mit den Linien wie in dem Link gezeigt ab und lädst dann das gespeicherte Bild wieder ein. Dann ist es ein "normales" Bild und du kannst es drehen oder sonstiges.

Die Alternative wäre, du indizierst die Bildpixel zu einer Linie:

Code:
I=imread('cameraman.tif');
figure; imshow(I)
I(:,10)=1;
I(:,20)=1;
figure; imshow(I)


Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
batimania83
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.01.12
Wohnort: Bochum
Version: R2010
     Beitrag Verfasst am: 15.01.2012, 00:05     Titel:
  Antworten mit Zitat      
Hallo Hubertus,

nach einigem erfolglosen Rumprobieren habe ich jetzt doch noch einen ganz anderen Ansatz gefunden, sodass eine Rotation nicht mehr nötig ist...

Trotzdem aber noch einmal Danke für deine Bemühungen.

Viele Grüße,
Sebatsian
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 - 2025 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.