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

Zeile mit Werten füllen (Schleife)

 

Philipp68
Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 07.05.2020, 14:48     Titel: Zeile mit Werten füllen (Schleife)
  Antworten mit Zitat      
Hallo,
ich hänge an dieser Sache seit gestern und komme nicht weiter bzw. sehe das Problem nicht. Ich habe in dem Beispiel zwei Bilder (1920x1080) und möchte einen Zeilenvektor bilden.
Bsp: Zeile: 1x2073600 (Bild1) + 1x2073600 (Bild2) = 1x4147200
Hier werden die Zeilen (1080) nacheinander an die erste Zeile hinzugefügt.

In diesem Fall geht es auch so wie ich möchte.

Code:

 app.UserArray = [];
   
 for i = 1:y  
         Bild = imread(Upload{1,i});
         
         
   
         if size(Bild,3) == 3
             Bild = rgb2gray(Bild);
        end
         
         [numRos, numCols] = size(Bild);
                 
         if numCols == 1920 && numRos == 1080
             Bild = Bild';
         end
         
         app.UserArray = reshape(Bild, 1, []);
end
 


Nur hier leicht verändert, weil ich Zellen verwende, wird mir nur das letzte Bild in app.UserArray eingetragen.

Code:

           for i = 1:Data2_size(:,1) % Data2_size = 1
                [Picture_size,~] = size(Pictures{i,1});
               
                app.UserArray = [];
               
                for j = 1:Picture_size % Picture_size = 2
                   
                    DL(j,1) = j;
                   
                    Upload = Pictures{i,1}{j,1}; % Upload ist cell{1,1}{1:2,1}
                    Upload = string(Upload);
                   
                    Picture2 = imread(Upload);
                   
                        if size(Picture2,3) == 3
                            Picture2 = rgb2gray(Picture2);
                        end
       
                        [numRos, numCols] = size(Picture2);
                 
                        if numCols == 1920 && numRos == 1080
                            Picture2 = Picture2';
                        end
                   
                    app.UserArray = reshape(Picture2, 1, []);
                    assignin("base","UserArray",app.UserArray);
                   
                end
               
            end
 


Sieht jemand den Fehler und kann mir helfen?
Wäre dafür sehr dankbar!
Liebe Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.05.2020, 15:42     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
In diesem Fall geht es auch so wie ich möchte.

Wirklich? Im ersten Fall ist app.UserArray doch auch nur das letzte Bild? Jedenfalls sehe ich nicht, wo die Bilder hier kombiniert werden.

Wenn du die Bilder aneinanderhängen willst, brauchst du etwas dieser Art:
Code:
app.UserArray = [app.UserArray, reshape(Bild, 1, [])];

und das an sich bei beiden Ansätzen.

assignin sollte man meiden. Ich kenne hier nicht den größeren Zusammenhang, aber es gibt praktisch immer eine Möglichkeit dazu.

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
 
Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 07.05.2020, 15:53     Titel:
  Antworten mit Zitat      
Du hast recht beim ersten Code, ich habe beim Kopieren etwas vergessen.
Hiermit geht es, ich danke dir!

Code:

Picture2 = reshape(Picture2, 1, []);
app.UserArray = [app.UserArray, Picture2];
 


Assignin habe ich nur in meiner GUI benutzt, um nebenbei im Workspace mir die Variabalen anzuzeigen. Damit ich weiß welche Größe etc. Später kommt es wieder raus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 08.05.2020, 10:23     Titel:
  Antworten mit Zitat      
Guten Morgen,

ich habe noch eine Frage bei einer anderen Umsetzung.
Wenn ich zwei Bilder habe und Bild 1 fünf Mal hintereinander haben möchte und dann Bild 2 fünf Mal hintereinander, also

5 Mal (1x2073600) + 5 Mal (1x2073600).

Kann ich dann nicht einfach diese Zeile

Code:

Picture2 = reshape(Picture2, 1, []);
app.UserArray = [app.UserArray, Picture2];
 


in eine Schleife packen?

Code:

for k = 1:5   % antsatt 5 kommt hier zB. 50 und höher hin
           app.UserArray = [app.UserArray, Picture2];
           app.DLEditField.Value = k;
           end
 


Matab gibt mir jedoch nur 1x2073600 anstatt 5x(1x2073600) zurück.

Code:

            for i = 1:Data2_size(:,1) % = 1
               
                [Picture_size,~] = size(Pictures{i,1});
               
                app.UserArray = [];

                for j = 1:Picture_size % = 2
                       
                            Upload = Pictures{i,1}{j,1};                  
                   
                            Picture2 = imread(Upload);
                           
                           
                            Picture2 = reshape(Picture2, 1, []); % 1x2073600

                         for k = 1:5   % Hier sollte 5x(1x2073600) entstehen
                            app.UserArray = [app.UserArray, Picture2];
                            app.DLEditField.Value = k;
                         end

                            assignin("base","UserArray",app.UserArray);
                end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.05.2020, 11:16     Titel:
  Antworten mit Zitat      
Hallo,

generell kann ich nur empfehlen, den Debugger zu verwenden um solchen Problemen auf die Spur zu kommen.

Hier würde ich repmat statt Aneinanderhängen in einer Schleife vorschlagen.

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.