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

eigene Funktion zum einlesen der Bilder schreiben

 

opto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2015, 16:49     Titel: eigene Funktion zum einlesen der Bilder schreiben
  Antworten mit Zitat      
Ich würde gerne eine eigene Funktion für das Einlesen der Bilder schreiben. Die Bilder sind folgendermaßen benannt z.B. "Kanal_1_+200.bmp". Dabei enthält jeder Bildname "Kanal_1_", da es noch Bilder auch für Kanal_2_ gibt. und +/- eine Zahl. pos gibt mit welcher Zahl angefangen werden soll und bis wohin raufgezählt werden soll. Also von -200 in 12,5 Schritten bis +200.
Und am ende werden die Bilder eingelesen. Die For schleife funktioniert auch. Nur verstehe ich nicht wie man daraus eine Funktion schreiben soll.
So habe ich es jetzt versucht. Aber es funktioniert nicht. Hab ich die erste Zeile falsch geschrieben?

Code:
function [bild] = abc(pos)

pos = -200:12.5:+200;

for m = 1:length(pos);

     if pos(m) < 0
    str = [ 'Kanal_1_' num2str(pos(m)) '.bmp'];
     elseif pos(m) > 0
    str = [ 'Kanal_1_+' num2str(pos(m)) '.bmp'];
     else
         str = ['Kanal_1_' num2str(pos(m)) '.bmp'];
     end
     bild=imread(str);
end
end
 


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.02.2015, 17:10     Titel:
  Antworten mit Zitat      
warum übegiebst du pos an die funktion wenn du es eh neu anlegst?
Zitat:
Aber es funktioniert nicht
auch wenn diese fehlerbeschreibung auf den ersten blick sehr stichhaltig und eindeutig aussiht ergeben sich noch einige fragen. zb was funktioniert nicht? fehlermeldungen? ergebnisse? du überschreibst in jedem schleifen druchlauf deine variable "bild". also wird dir am ende nur das letzte bild zurück übergeben.
falls sich alle bilder im selben ordner befinden könnte man sich auch mit
Code:
behelfen. allgemein gibt es in diesem forum schon den ein oder anderen beitrag zum automatisierten einlesen von daten.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
opto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2015, 17:36     Titel:
  Antworten mit Zitat      
es gibt keine Fehlermeldung. aber es wird auch kein Bild geladen, da kommen nur lauter Zahlen raus. was sollte ich den übergeben?

hab den code jetzt verändert.

Code:
function [str] = abc

pos = -200:12.5:+200;

for m = 1:length(pos);

     if pos(m) < 0
    str = [ 'Kanal_1_' num2str(pos(m)) '.bmp'];
     elseif pos(m) > 0
    str = [ 'Kanal_1_+' num2str(pos(m)) '.bmp'];
     else
         str = ['Kanal_1_' num2str(pos(m)) '.bmp'];
     end
     
end
end


aber jetzt ist das problem, dass im hauptprogramm versuche die Funktion aufzurufen:
Code:
str= abc(pos);


kommt folgende Fehlermeldung:
Code:
??? Error using ==> abc
Too many input arguments.

Error in ==> auswertung2 at 11
     str= abc(pos);
 
 
opto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2015, 17:47     Titel:
  Antworten mit Zitat      
ich verstehe einfach nicht welche Parameter ich der Funktion übergeben soll und wie ich die Funktion im Hauptprogramm aufrufen kann.
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.02.2015, 17:51     Titel:
  Antworten mit Zitat      
Zitat:
aber es wird auch kein Bild geladen, da kommen nur lauter Zahlen raus
was erwartest du denn als ergebniss?

wenn deine funktion abc keine eingabe werte hat kannst du natürlich auch keine übergeben. das sagt dir ja die fehlermeldung.
deine funktion liefert jetzt als rückgabe argument den string 'Kanal_1_+200.bmp' nichts anderes. wenn du mehrere dinge zurück geben willst must du die auch speichern. indem du zum beispiel einen index bei jedem schleifen druchlauf erhöhst.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
opto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2015, 12:05     Titel:
  Antworten mit Zitat      
ich möchte gern das die funktion die bilder einliest.
mein rückgabewert ist das bild. und was soll ich als eingabewert benutzen. ich habe doch nur die strings und pos in der funktion.
indes durchlaufen lassen , heisst dann so was wie n=1:33; und wo soll dieser index hin?
Code:
bild(n)= imread(str);
funktioniert nicht.
 
opto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2015, 12:18     Titel:
  Antworten mit Zitat      
bekomme so was als Fehlermeldung.

Code:
??? Subscripted assignment dimension mismatch.

Error in ==> abc at 11
    str(n) = [ 'Kanal_1_' num2str(pos(m)) '.bmp'];

Error in ==> auswertung2 at 14
    bild = abc(n);


ich verstehe nicht wie ich den idex hochzählen soll bzw. benutzen soll. und wie ich die bilder speichern kann
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.02.2015, 13:50     Titel:
  Antworten mit Zitat      
ein bild hat normalerweise nicht nur einen eintrag und wie dir deine fehler meldung schon sagt kann man mehrere einträge nicht in ein element einer matrix schreiben. da die bild daten nummerisch sind könntest du sie in einem multidimensionalen array ablegen oder auch in einer cell.
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
opto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2015, 16:32     Titel:
  Antworten mit Zitat      
also könnte man so die bilder speichern oder?ich weiss nur nicht wie ich "n" hochzählen soll.

Code:


for n=1:33

    bild=imread(str);
    [M N] = size(bild);
    Bilder_array= [M,N,n];
    Bilder_array(:,:,n) = bild;

end
 
 
opto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2015, 17:07     Titel:
  Antworten mit Zitat      
also langsam verzweifle ich. das was ich vorhin gepostet habe, ergab eine Fehlermeldung, das die Dimensionen nicht stimmen.
also hab ich es so versucht:

Code:
bild=imread(str);
    [M N] = size(bild);
    Bilder_array= zeros(M,N);
    Bilder_array(:,:,n) = bild(n);


aber das einzige was ich erreicht habe, ist das matlab abstürzt.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.02.2015, 17:12     Titel:
  Antworten mit Zitat      
Hallo nehme statt 3-D Matrix lieber einen Cell-Array


so:
Code:




[bild] = abc(pos)
if nargin==0
   pos = -200:12.5:+200;
end

% cell array vorintialisieren, außerhalb der Schleife
bild = cell(1, length(pos))

for m = 1:length(pos);

     if pos(m) < 0
    str = [ 'Kanal_1_' num2str(pos(m)) '.bmp'];
     elseif pos(m) > 0
    str = [ 'Kanal_1_+' num2str(pos(m)) '.bmp'];
     else
         str = ['Kanal_1_' num2str(pos(m)) '.bmp'];
     end
     bild{m}=imread(str);
end
end
 

 
Private Nachricht senden Benutzer-Profile anzeigen
 
opto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2015, 17:26     Titel:
  Antworten mit Zitat      
ok, danke. ))
und wie kriege ich die Bilder aus dem cell array wieder raus. also wie kann ich auf die Bilder zugreifen?
 
opto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2015, 17:57     Titel:
  Antworten mit Zitat      
was bedeutet dieser befehl ? wozu ist es da?

Code:
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.02.2015, 21:59     Titel:
  Antworten mit Zitat      
Zitat:
ok, danke. ))
und wie kriege ich die Bilder aus dem cell array wieder raus. also wie kann ich auf die Bilder zugreifen?

Ganz einfach über geschweifte Klammer und den Index(Zähler)
z.B:
Code:
idx =1
bild{idx}



Zitat:

was bedeutet dieser befehl ? wozu ist es da?
Code:


NARGIN gibt die Anzahl der übergebener Parameter an die Funktion zurück.
Wenn ich z.B die Funktion ohne Parameter aufgerufen wird, gibt NARGIN eine Null zurück. Das habe ich deswegen gemacht, weil du an die Funktion pos übergibst und gleich überschreibst. Wenn das ein Default-Wert sein soll, dann sollte man NARGIN mit IF-Bedingung nutzen.
Dann wird pos auf ein default-Wert gesetzt, wenn nichts übergeben wird, abc()

Schaue dir die Befehle zuerst in der Doku, bevor du Fragen hier in Forum stellst
Erstens viel schneller als in Forum
Zweitens ist die Doku in Matlab super hilfreich und gut erklärt.
Und dazu gibt es gleich auch Beispiele zur Verdeutlichung

entsprechende Hilfeseite kann mit dem DOC Befehl aufrufen, so z.b zu NARGIN
Code:


Bitte auch Getting Started Kapitel in der Doku lesen.
Das steht schon alles zu Array/Cell Array usw.
Private Nachricht senden Benutzer-Profile anzeigen
 
opto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2015, 12:14     Titel:
  Antworten mit Zitat      
danke, für die tipps.
ich hab jetzt leider noch ein problem. ich habe folgendermaßen die funktion in meinem hauptprogramm aufgerufen.

Code:
bild{m} = abc(pos);
 


da ich aber später die bilder binarisiere. meckert das programm das die datei ein cellarray ist und kein double.
also hab ich mit cell2mat versucht es umzuwandeln

Code:

    image = cell2mat(bild{m});


nur jetzt zeigt das programm nicht das ganze bild, sondern nur ein ausschnitt. und auch keine einzelne bilder, sonder alle bilder in einem fenster zusammengefügt. gibt es eine möglichkeit jedes bild einzeln anzusprechen und in double zu verwandeln.
 
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.