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

Bilder Vorder und Hintergrund trennen

 

132
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 21.05.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.05.2022, 19:10     Titel: Bilder Vorder und Hintergrund trennen
  Antworten mit Zitat      
Hallo,

ich sitze momentan sehr verzweifelt an meinen Matlab aufgaben. Habe heute bereits 5 Stunden gelesen, gegooglet, probiert, geguckt aber noch nichts erreicht. Und das, obwohl ich bis Montag 5 Aufgaben abgegeben haben muss.
Folgendes Problem erstmal:
Wir haben 3 Graustufen Bilder mit dem gleichen Hintergrund aber unterschiedlichen Vordergrund gegeben (im Vordergrund steht jeweils ein Gegenstand). Wir sollen nun den Hinter und Vordergrund trennen, also 3 Bilder mit den Gegenständen und ein Bild mit dem auf allen Bildern identischen Hintergrund haben. Und das sollen wir als Funktion schreiben.

Die Idee war bisher:
Erstmal bräuchte ich nur das Bild mit dem Hintergrund ohne die Gegenstände. Dafür müsste ich ja alle Bilder vergleichen und Matlab sagen, dass es immer dort, wo ein Wert von den 3 Bildern anders ist, es den Wert der Bilder nehmen soll, wo es identisch ist (weil dort da logischerweise kein Gegenstand steht). Allerdings habe ich keine Ahnung wie. Ich habe schon probiert, das Problem mit for schleifen zu lösen, aber da rechent mein PC einfach nur die ganze Zeit. Wie schaffe ich es, das ganze in Code umzuschreiben? Vielleicht reichen mir ja auch schon nur kleine Denkanstöße oder Befehle, die noch nicht kenne.
Und dann, wenn ich das Bild ohne die Vordergründe habe, könnte ich dieses ja jeweils mit den Bildern abgleichen und dort, wo die Bilder gleich sind, alle Pixel auf schwarz stellen. Dann müsste ja nur noch die Gegenstände im Vordergrund übrig bleiben, oder? Letztendlich muss ich also die Matrizen der Bilder vergleichen und dort, wo die Werte gleich (oder sehr ähnlich) sind, alle Werte auf schwarzt stellen. Wie bekomm ich das mit dem sehr ähnlich hin? Kann man bei Matlab irgendwie eine Toleranz einstellen und kein gleich sondern irgendwie ein ungefähr gleich?

Hier so der erste Code mit der ersten idee, bitte nicht steinigen! War nur so ein sehr grober Ansatz, der aber nicht funktioniert.
Code:

function [ab] = testtest(a,b)
n=968 %pixel vom Bild, alle Bilder sind 968x968 Matrizen
a=imread("x1.tif");
b=imread("x2.tif");
c=imread("x3.tif");
ab=cat(2,a,b)
imshow(ab)
for l=1:n
    for k=1:n
        if a(l,k)=~b(l,k)
          ab(l,k)=0
    end
    end
end

   
imshow(ab)

end
 
Private Nachricht senden Benutzer-Profile anzeigen


132
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 21.05.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2022, 13:29     Titel:
  Antworten mit Zitat      
Keiner ne ahnung? Es wäre schonmal n Anfang, wenn ich nen Ansatz habe, wie ich die drei Bilder so vergleichen könnte, dass jeweils die Vordergründe verschwinden und nur das Bild mit dem Hintergrund übrig bleibt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.05.2022, 19:13     Titel:
  Antworten mit Zitat      
Hallo,

am Wochenende bei schönem Wetter sollte man etwas Geduld mitbringen. :)

Gut wäre, wenn du die Bilder zur Verfügung stellst, damit man Ansätze ausprobieren kann.

Zitat:
Kann man bei Matlab irgendwie eine Toleranz einstellen und kein gleich sondern irgendwie ein ungefähr gleich?

Statt auf Ungleichheit testen, ob der betragsmäßige Unterschied über der Toleranz ist:
Code:
if abs(a(l,k) - b(l,k)) > tol


Da sollte man im übrigen keine for-Schleifen benötigen:
Code:
ab = abs(a-b) > tol;


... und wenn du alle Variablen in einer Datei definierst, benötigst du keine Funktion. Dafür kannst du Skripte verwenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.