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

2 Bilder überlagern ohne zu plotten

 

Phipo
Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 04.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 10.03.2010, 15:38     Titel: 2 Bilder überlagern ohne zu plotten
  Antworten mit Zitat      
Hallo miteinander,

wie kann ich 2 Bilder (gleicher Größe) übereinander legen ohne diese per imshow in einem figure anzeigen zu lassen?
Das obere Bild soll später per AlphaData und einer Maske partiell transparent werden.


Code mit imshow:
Code:

imshow(bild1);
hold
h=imshow(bild2)
hold off
set(h,AlphaData,Maske)
 



Hintergrund: Erstelle ein Avi-File mit mehr als tausend frames. Wenn ich da jedes Frame per imshow anzeigen lass ist das Perfomance technisch suboptimal.

Hoffe ihr könnt mir helfen. Vielen Dank schonmal
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.03.2010, 16:10     Titel:
  Antworten mit Zitat      
Wenn es S/W-Bilder sind geht es mit:

Code:
x=imadd(bild1,bild2)
%wenn Color
a=im2double(bild1);
b=im2double(bild2);
c=a+b;


Viele Grüße
Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Phipo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 04.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 10.03.2010, 16:45     Titel:
  Antworten mit Zitat      
Hey Hubertus,

erst mal Danke für die Vorschläge.
Ich hab zwei 768x1024x3 RGB Bilder. Eins ist eine Kameraaufnahme das andere ein einfarbiges Bild, wobei letzteres das erstere überlagern soll.
Beide Lösungsmöglichkeiten führen zum gleichen Ergebnis (siehe Anhang). Das sieht mir nach einer Verschmelzung beider Bilder aus. Ich brauche aber ein übereinander liegen der Bilder. D.h. wenn ich das einfarbige Bild auf 0 Transparenz setze soll nur das zu sehen sein.

Hättest Du noch eine weiter Lösungsidee?

Grüße Philipp

test.png
 Beschreibung:

Download
 Dateiname:  test.png
 Dateigröße:  854.01 KB
 Heruntergeladen:  934 mal
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: 11.03.2010, 07:53     Titel:
  Antworten mit Zitat      
Moin Phipo,

für S/W-Bilder müßte folgendes gehen:
Code:
X=cat(3,bild1,bild2);
a=(X(:,:,1));
b=(X(:,:,2));


Du kannst mit a+b wieder auf die Bilder zugreifen. Man müßte diese Zeilen nur für Color-Bilder erweitern (? Schleife) oder den Weg über die Layer gehen. Du kannst die beiden Bilder z.B. in den Rot und Grünkanal packen und dann über R(:,:,1) bzw. G(:,:,2) wieder trennen. Würde mich interessieren, wenn Du eine Lösung gefunden hast

Erstmal viel Glück, werde das weiter interssiert beobachten

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Phipo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 04.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 11.03.2010, 12:03     Titel:
  Antworten mit Zitat      
Mahlzeit Hubertus,

der Sinn des übereinanderlegens ist der, dass ich der Maske die Transparenz des einfarbigen oben liegenden Bild variabel definieren kann. Damit kann ich auf die Straße des unten liegenden Bilds variable Geometrien legen.
Leider bringt mich dein letzter Lösungvorschlag nicht weiter, da cat die Bilder nicht übereinanderlegt.

Ich hätte ein Lösungsvorschlag der aber nicht schön ist:

Code:

figure('Visible','off'), imshow(bild1);
hold
h = imshow(bild2);
hold
set (h,'AlphaData',Maske);
aviobj = addframe(aviobj,gcf)
close gcf;
 


Leider hab ich jetzt ein grauen Rahmen. Wie bekomm ich den wieder weg?
Vielleicht weiß jemand noch eine schönere Variante.

Viele Grüße
Phipo
Code:
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: 11.03.2010, 12:31     Titel:
  Antworten mit Zitat      
Mahlzeit Phibo,

bei mir passiert irgendwelcher Mist auf dem Rechner, muß das klären. Kann das mit cat nicht reproduzieren. Aber mit den Layern müßte das doch gehen, oder habe ich Dein Problem falsch verstanden

Bis dann

Hubertus

Hab jetzt den Fehler gefunden. Bleiben noch die Farbkanäle, transparent übereinander und jedes Bild kann angesprochen werden. Wo ist da das Problem? Oder ist das heute nicht mein Tag?
Private Nachricht senden Benutzer-Profile anzeigen
 
Phipo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 04.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 11.03.2010, 13:45     Titel:
  Antworten mit Zitat      
Hey Hubertus,

kann sein, dass ich Deine Lösung noch nicht verstanden hab.
Wenn bild1 und bild2 sw-Bilder mit 640x400 Pixeln sind dann bekomm ich nach cat eine 640x400x2 Matrix. Mein Ziel ist es aber eine 640x400 Matrix mit den 2 überlagernden Bilder zu erhalten.
Hab ich da jetzt was falsch gemacht? Was hälst du von meiner Lösung mit dem nicht sichtbaren figrue?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Phipo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 04.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 15.03.2010, 17:46     Titel:
  Antworten mit Zitat      
Sieht keiner eine Möglichkeit das übereinanderlegen von 2 Bilder über ein figure zu umgehen????
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: 16.03.2010, 08:24     Titel:
  Antworten mit Zitat      
Moin Phibo,

ich will noch einmal auf meinen Vorschlag zurück kommen. Du kannst 2 Bilder transparent übereinander legen, wenn es sich in der nachfolgenden Version um 1 Colorbild und 1 S/W-Bild handelt. Vielleicht läßt sich dieses Beispiel erweitern. Ich bin da noch nicht so weit.

Code:
I=imread('1.tif'); % Colorbild
I2=imread('I2.tif'); % SW-Bild
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
G=I2;
y(:,:,1)=R;
y(:,:,2)=G;
y(:,:,3)=B;
figure; imshow(y) % "y" zeigt beide Bilder transparent übereinander
 


Ich weiss nur noch nicht, wie man das auf 2 Color-Bilder umsetzen kann.
Vielleicht mit Schleifen?
Kommt das annähernd Deinem Anliegen entgegen?

Einen schönen Tag
Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 16.03.2010, 08:54     Titel:
  Antworten mit Zitat      
Also prinzipiell sollten die Bilder auch ohne Umwege direkt transparent übereinander gelegt werden können. Die entsprechenden Formeln findet man auf Wikipedia:

http://de.wikipedia.org/wiki/RGB-Farbraum#RGBA-Erweiterung

Es sollte dabei auch eine Maskierung möglich sein.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Phipo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 04.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 16.03.2010, 14:13     Titel:
  Antworten mit Zitat      
Tach zusammen,

@Maddy deine Tipp hat zur Lösung geführt! (siehe Code) Vielen Dank!!!
@Hubertus vielen Dank auch an Dich für deine Tipps und Anregungen!!!

hier meine Lösung:
Code:

% img = eingelesenes Kamerabild
% img_farbe = einfarbiges Bild
% img_maske = Matrix mit Werten zwischen 0 und 1 welche die Transparenz von %         img_farbe steuert

img_out = img;
img_size = size(img);
for q = 1:img_size(1)
    for r = 1:img_size(2)
       alpha = img_maske(q,r);
       img_out(q,r,1) = (alpha * img_farbe(q,r,1)) + ((1-alpha) * img(q,r,1));
       img_out(q,r,2) = (alpha * img_farbe(q,r,2)) + ((1-alpha) * img(q,r,2));
       img_out(q,r,3) = (alpha * img_farbe(q,r,3)) + ((1-alpha) * img(q,r,3));
    end
end
 


Das ganze im Anhang noch als m-File (unkommentiert).

Danke nochmals!!
Phipo

argb.m
 Beschreibung:

Download
 Dateiname:  argb.m
 Dateigröße:  971 Bytes
 Heruntergeladen:  663 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
xxsimulant

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2015, 21:06     Titel: bilder mit alphadata maske überlagern und abspeichern
  Antworten mit Zitat      
Vielen Dank für diese Nachricht, ich war kurz vor der Aufgabe!

Wollte Bild a mit Bild b transparent überlagern und dann das Ergebnis mit einem weitern Bild c überlagern.
Dazu muss ab irgendwann abgespeichert werden und hat danach nach allen von mir getesteten Varianten eine andere Größe.

So wie hier gezeigt funktionierts prima!
 
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.