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 aus mehrere Bildern erstellen

 

tobiasfw
Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2012, 12:48     Titel: Bild aus mehrere Bildern erstellen
  Antworten mit Zitat      
Hallo,

ich möchte 6 Bilder unterschiedlich zusammenfügen. D.h. das Endbild soll zB 600x800 Pixel groß sein. Auf festen Positionen sollen 6 verschiedene Bitmaps eingefügt werden, aber unterschiedlich permutiert.

Ich habe schon herausgefunden, dass ich die 6! = 720 Kombinationen mit perms([1 2 3 4 5 6]) als Matrix erstellen kann.

Die Frage ist nur, wie ich ein Bild auf ein anderes "klebe".

Hat jemand einen Tipp?

LG
Private Nachricht senden Benutzer-Profile anzeigen


flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2012, 13:34     Titel:
  Antworten mit Zitat      
Das "klebe" ist jetzt irgendwie schwierig zu verstehen. Bilder sind letztendlich Matrizen, d.h. Du kannst sie normal der Matrixoperationen (Addition, Multiplikaton, Division, Subtraktion) verarbeiten, diese vier Operationen kannst Du auch je elementweise durchführen.
Zusätzlich kannst Du auch Matrizen aneinander hängen, d.h. z.B. z.B. die erste Matrix hat die Dimensionen [(1,1), (5,5)] und die zweite kannst Du dann z.B: [(1,6),(5,11)] ablegen. Dafür musst Du dann lediglich de Positionen der Spalten und Zeilen korrekt angeben
Private Nachricht senden Benutzer-Profile anzeigen
 
tobiasfw
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2012, 15:25     Titel:
  Antworten mit Zitat      
D.h. ich könnte eine Matrix erstellen, bei der in jeder Zelle ein RGB-Wert steht, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
tobiasfw
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2012, 16:51     Titel:
  Antworten mit Zitat      
ich habe das jetzt folgendermaßen gemacht:

Code:
pic1 = imread('1a.bmp')

background = zeros(768,1024);
for i = 1:121
  for j = 1:89
    background(312+i-1,129+j-1) = pic1(i,j);
  end
end

showimg(background)
 


eigentlich funktioniert das ganz gut, aber alles ist in blau! Wieso benutzt er auf einmal eine andere Farbskala???

Danke und Gruß,
Tobias
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: 29.06.2012, 19:36     Titel:
  Antworten mit Zitat      
Moin,

sehe dir mal die Matrix genau an, das ist keine RGB-Matrix, sondern nur m*n!
Für eine richtige Darstellung verwende lieber den Befehl "imshow".

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
tobiasfw
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2012, 11:11     Titel:
  Antworten mit Zitat      
Ja, interessanterweise erstellt Matlab eine AxB-dimensionale Matrix wenn ein Bild von AxB Pixeln eingelesen wird, das grauskaliert ist.

Wenn es farbig ist, entsteht eine AxBx3-dimensionale Matrix.

Der Befehl "imshow" ändert jedenfalls nichts an der Darstellung, dass es blau ist.

LG
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: 02.07.2012, 11:24     Titel:
  Antworten mit Zitat      
Dein erstes Beispiel kann nur blau aussehen wenn du es mit imagesc anzeigen lässt, da es ein reines SW-Bild ist. Deine Funktion showimg kenne ich nicht. Wenn du jetzt eine RGB - Matrix hast wird dein SW-Bild nicht automatisch blau, da ein SW-Bild*3 wieder ein SW-Bild ergibt.

Blau kann es nur noch werden, wenn dein Ausschnitt nur über 2 Farbebenen läuft. Du mußt auch den Ausschnitt über die 3 Ebenen laufen lassen, wenn das Bild weiterhin grau sein soll, Wenn es farbig werden soll, dann die Ebenen auswählen, die die Farbe erzeugen.

Zuletzt bearbeitet von Hubertus am 02.07.2012, 11:30, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
tobiasfw
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2012, 11:29     Titel:
  Antworten mit Zitat      
Das Problem scheint zu sein, dass mit "imread" keine RGB-Matrix erstellt wird, wenn das einzulesende Bild grauskaliert ist. Kann ich das irgendwie "erzwingen"?
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: 02.07.2012, 11:53     Titel:
  Antworten mit Zitat      
Du mußt die Matrix ändern:

Code:
I=imread('cameraman.tif');
I2=repmat(I,[1 1 3]);    
R=I2(:,:,1);
G=I2(:,:,2);
B=I2(:,:,3);
I3=cat(3,R,G,B);


Hier hast du auch den Zugriff auf die einzelnen Farblayer.
Private Nachricht senden Benutzer-Profile anzeigen
 
tobiasfw
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2012, 18:26     Titel:
  Antworten mit Zitat      
Das Erstellen der Matrix funktioniert so gut. Noch zwei Sachen:

1) Ich verstehe noch nicht, was in deinem Beispiel der Unterschied zwischen I3 und I2 ist. Wenn ich das richtig sehe, sollten die doch absolut identisch sein, oder?

2) Ich benutze den Befehl "imshow", dabei kommt folgende Fehlermeldung: "Error using ==> image
TrueColor CData contains element out of range 0.0 <= value <= 1.0"

Tatsächlich sind die Werte nicht zwischen 0 und 1, sondern zwischen 0 und 255, wie man es auch eigentlich bei RGB-Werten erwarten sollte. Muss ich die vorher umrechnen?

LG
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: 02.07.2012, 19:16     Titel:
  Antworten mit Zitat      
Streng genommen sind I2 und I3 nicht gleich - sie sind anders entstanden. Aber es ist auch kein Fehler, sie gleich zu benennen - vielleicht in größeren Scripten unübersichtlich.

Deine Fehlermeldung ist mir unklar, da in den hier genannten Beispielen kein "double" verwendet wurde. Hast du den Befehl irgendwo eingebaut?
Private Nachricht senden Benutzer-Profile anzeigen
 
tobiasfw
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2012, 19:28     Titel:
  Antworten mit Zitat      
Ich benutze folgendes Script:

Code:
pic1 = imread('1a.bmp');
pic1 = repmat(pic1,[1 1 3]);
bg = zeros(768,1024,3);

for i = 1:121
  for j = 1:89
    bg(312+i-1,129+j-1,:) = pic1(i,j,:);
  end
end

imshow(bg);
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: 02.07.2012, 19:57     Titel:
  Antworten mit Zitat      
Kann den Fehler im Moment nicht nachvollziehen, da ich keinen Zugriff auf Matlab habe. Ändere mal folgende Zeile:

Code:
pic1 = imread('1a.bmp')/255;
Private Nachricht senden Benutzer-Profile anzeigen
 
tobiasfw
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2012, 20:02     Titel:
  Antworten mit Zitat      
Keine Fehlermeldung mehr. Aber dafür ist das Bild komplett schwarz...
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.07.2012, 21:31     Titel:
  Antworten mit Zitat      
Hallo tobiasfw,

Welchen Type hat den das Array, das IMREAD zurückgibt?
Wenn dies ein UINT8 ist, sind Werte zwischen 0 ind 255 erlaubt, bei einem DOUBLE dagegen Werte zwischen 0 und 1.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.