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 ausschneiden mit vordefinierter "Schablone"

 

Dymenz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2013, 16:05     Titel: Bild ausschneiden mit vordefinierter "Schablone"
  Antworten mit Zitat      
Hallo,
ich beschäftige mich erst seit ein paar Tagen mit Matlab und möchte mich mit Bildverarbeitung beschäftigen. Leider komme ich nicht hinter warum der folgende Code nicht funktioniert.
Code:


bild = uigetfile({'*.jpg';'*.png';'*tif'},'Bitte Bildatei auswählen');

lesen = rgb2gray(imread(bild));
edges = edge(lesen, 'sobel', 0.05);
imagesc(edges);

se90 = strel('line', 3, 90);
se0 = strel('line', 3, 0);

BWsdil = imdilate(edges, [se90 se0]);
figure, imshow(BWsdil), title('dilated gradient mask');

BWdfill = imfill(BWsdil, 'holes');
figure, imshow(BWdfill);
title('binary image with filled holes');

BWnobord = imclearborder(BWdfill,4);
figure, imshow(BWnobord), title('cleared border image');

seD = strel('diamond',1);
BWfinal = imerode(BWnobord,seD);
BWfinal = imerode(BWfinal,seD);
figure, imshow(BWfinal), title('segmented image');

BWoutline = bwperim(BWfinal);
Segout = bild;
Segout(BWoutline) = 255;
figure, imshow(Segout), title('outlined original image');


Der letzte Block wird als Fehler angezeigt. Das Fenster öffnet sich, aber leider ist es leer. Es müsste das Original Bild angezeigt werden und die Umrisse der erkannten Figur auf dem Bild.Diese sind überlabt auf einem Bild Dargestellt.
Und das führt zur meiner Nächten Frage: wie kann ich dann die erkannten Umrisse als eine art Schablone benutzen und die erkannte Figur ausschneiden und den Rest wegwerfen?


danke schon mal für die Hilfe


Hubertus
Forum-Meister

Forum-Meister


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

da hast du nur einen kleinen Fehler übersehen. Richtig ist:

Code:
Segout = lesen;


Eine erfolgreiche Woche!

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Dymenz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2013, 22:49     Titel:
  Antworten mit Zitat      
Dankeschön, jetzt klappt alles. Außer das mit dem Ausschneiden. Das kriege ich nicht hin. Ich finde zwar im Internet einige Ansätze die bringen mich aber leider nicht weiter.
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 05.11.2013, 06:38     Titel:
  Antworten mit Zitat      
Leider bringen mich deine Hinweise auch nicht weiter. Wie soll den ausgeschnitten werden? Du kannst standardisiert einen Ausschnittbereich vorgeben oder interaktiv einen Rahmen setzen. Oder sollen bestimmte Bildbereiche '"ausgeschnitten" - also isoliert dargestellt werden. Hänge doch einfach mal Bildbeispiel an, wie es aussehen soll.
Private Nachricht senden Benutzer-Profile anzeigen
 
Dymenz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2013, 09:53     Titel:
  Antworten mit Zitat      
Das Objekt auf einem Bild das eingelesen wird, soll wie bei Photoshop vom Hintergrund Freigestellt werden so das ich nur noch das Objekt als eine Datei habe. Hoffe das beispiel was ich hier zeige weiter hilft.

Bsp.jpg
 Beschreibung:

Download
 Dateiname:  Bsp.jpg
 Dateigröße:  357.89 KB
 Heruntergeladen:  649 mal
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 05.11.2013, 10:19     Titel:
  Antworten mit Zitat      
Prinzipiell musst die die in Photoshop dargestellten "gekachelten Flächen" auf NaN setzen. Dazu muß die Datei in double konvertiert und die Werte, die in der gekachelten Fläche liegen, auf "NaN" indiziert werden. NaN wird in der Figur aber schwarz dargestellt! Mache mal folgenden Versuch:

Code:
I=double(imread('cameraman.tif'));
I(I==9)=NaN;
figure;imshow(I)


Du siehst jetzt ein paar schwarze Punkte, die den Wert "9" mit "NaN" darstellen.

Überprüfen kannst du das mit "impixelinfo". Gehe mit dem cursor auf einen schwarzen Punkt und lese den Wert ab.

Das geht natürlich nur, wenn die Werte, die transparent dargestellt werden sollen, nicht gleichzeitig mit den gleichen Werten im Bild vorkommen. Dann wird es problematischer.
Private Nachricht senden Benutzer-Profile anzeigen
 
Dymenz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2013, 21:15     Titel: Bild ausschneiden
  Antworten mit Zitat      
Leider komme ich immer noch nicht hinter wie ich die erkannten Kanten als Schablone zum ausschneiden benutzen kann und dann die ausgeschnittene Figur in einer separaten Datei speichern kann.

vielleicht kann mir jemand ein wenig unter die Arme greifen.
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 19.11.2013, 07:36     Titel:
  Antworten mit Zitat      
Was hast du den bisher nicht verstanden? Es gibt 2 unterschiedliche Wege. Du hast zunächst einmal eine große weiße Fläche, die eindeutig mit den Werten 1.0 zu NaN indiziert werden kann. Du musst nur daran denken, dass du bei einem Farbbild die Indizierung über alle 3 Layer laufen lässt.Dazu gibt es entweder die Schleife oder separat über alle RGB-Auszüge. Dann hast du noch ein paar Pixel am Rand, die händisch gelöscht werden müssen.

Der andere Weg ist, dass du einen Pfad um die Figur setzt und dann zu NaN löscht. Da das Pfadwerkzeug aber in Matlab nicht so komfortabel ist wie in Photoshop (erlaubt kein Absetzen) müsste mann den Vorgang in kleinen Schritten mehrmals wiederholen. Erscheint mir ein bisschen umständlich. Einen Zauberstab wie in Photoshop gibt es in Matlab nicht.

Du musst schon konkret sagen, was du bisher gemacht hast, welche Fehler aufgetaucht sind und welchen Vorgang du umsetzen möchtest. Sonst weiß niemand, wie man dir helfen soll.
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.