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

richtiges Sortiern trotz Indexverschiebung

 

C_h_r_i_s
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 11.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2010, 17:47     Titel: richtiges Sortiern trotz Indexverschiebung
  Antworten mit Zitat      
Hi, ich habe ein Problem:

Mein Code liefert folgendes Ergebnis:

Sums =

0 0 0 0
2 1 1 3
2 1 3 0
2 1 3 0

Richtig wäre aber:

Sums =

0 0 0 0
2 1 1 3
2 1 0 3
2 1 0 3

Ich will aus meinem 3dim-Testdatensatz (5 Schichten) durchängige Kanäle (=0) ausgeben lassen.
Die Zugehörigkeit zu einem Kanal wird anhand des Kanalschwepunktes gekennzeichent.

Mein Problem: Durch bwlabeln kommt es bei der Schicht-für-Schicht-Analyse zu Indexverschiebungen, sobald ein Kanal NICHT durchgängig ist.

Die Analyse des gesamten Datensatzes mit belabeln ist jedoch nicht detailliert genug.

Weiß jemand Rat?

Danke
Christian

Code:

clear all;
close all;

%Anmerkung A(x,y;z) Code läuft in Richtung y (=j)
%also von "links nach rechts" durch den Datensatz

%========================================================================

%Data

A(:,:,1) = [0 1 1 1 1;  
            0 1 1 1 1;
            0 1 1 1 1;
            0 1 1 1 1;
            0 1 1 1 1;
            0 1 1 1 1;
            1 1 1 1 1]
   
 
A(:,:,2) = [0 0 0 0 0;  
            0 0 0 0 0;
            0 1 1 1 1;
            0 0 0 1 1;
            0 1 1 1 1;
            0 0 0 0 0;
            1 1 1 1 1]
       
A(:,:,3) = [0 1 1 1 1;  
            0 1 1 1 1;
            0 1 1 1 1;
            0 1 1 1 1;
            0 1 1 1 1;
            1 1 1 1 1;
            1 1 1 1 1]
       
A(:,:,4) = [0 1 1 1 1;  
            0 1 1 1 1;
            0 1 1 1 1;
            0 1 1 1 1;
            0 0 0 0 0;
            0 0 0 0 0;
            0 0 0 0 0]

%=======================================================================

 B = A;
 
 %Step3 (Ziel: SUMS = Anzahl Kanäle und jeweilige Größe pro Schicht)
 
 for j = 1:(size(B,2)-1)
     
 slice1 = bwlabeln(~B(:,j,:)); %Schicht für Schicht labeln
 
 peak1  = max(max(slice1)); %maximaler Index einer Schicht
 
     
 
 k=1;  %Spaltenindex für SUMS-Matrix (!Fehler-Verursacher!)

     for i = 1:peak1  
         [x , y] = find(slice1==i);
         mx = round(mean(x));       %Schwerpunkte
         my = round(mean(y));

%Test: Kanal auch noch in nächster Schicht? -gemäß Flächenschwerpunkt %vorheriger Schicht

            if B(mx,j+1,my) == 0                
                Sums(j,k) = sum(sum(slice1==i));
                k=k+1;
            end
     end
 
 end


Sums


 
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.08.2010, 14:53     Titel:
  Antworten mit Zitat      
Hallo Chris,

ich denke, dass k=k+1 muss aus der IF-Anweisung raus.
Sonst habe ich dein Algorithmus nicht verstanden.

Code:


     for i = 1:peak1  
         [x , y] = find(slice1==i);
         mx = round(mean(x));       %Schwerpunkte
         my = round(mean(y));

%Test: Kanal auch noch in nächster Schicht? -gemäß Flächenschwerpunkt %vorheriger Schicht

            if B(mx,j+1,my) == 0                
                Sums(j,k) = sum(sum(slice1==i));
            end
            k=k+1;
     end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
C_h_r_i_s
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 11.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2010, 19:39     Titel:
  Antworten mit Zitat      
Danke Supporter, aber das führt leider zu folgender "Verschlimmbesserung":

Sums =

0 0 0 0
2 1 1 3
2 0 1 3
2 1 3 0

In diesem Fall könnte man "k" auch gleich weglassen und die Ergebnismatrix SUMS mit j und i aufbauen können...

Code:

   if B(mx,j+1,my) == 0                
                Sums(j,i) = sum(sum(slice1==i));
            end
   


Bislang haben sich in diesem Forum und in der Mathworks-Newsgroup knapp 200 Leute dieses Problem angeschaucht. Daher werde ich nochmal versuchen das Problem besser zu erläutern (s. unten).
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
C_h_r_i_s
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 11.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2010, 19:53     Titel: Erläuterung des Problems
  Antworten mit Zitat      
Erläuterung des Problems:

Ein 3D-Datensatz stellt eine proröse Wand dar, die "von links" also in Y-Richtung gleichmäßig vom Wasser getroffen wird. Diese Wand hat Löcher (Kanal=0). Einige gehen komplett durch und machen die Wand undicht, andere sind nicht druchgängig.

Druch diese pröse Wand läuft in Y- bzw. "J"-Richtung der Alogithmus.

Sein ZIEL: Aufbau einer SUMS-Matrix, die die Anzahl aller Kanäle (durchgängig + nicht durchgängig) und ihre Breite je Schicht ausgibt .

SUMS:
Reihenzahl = Anzahl der Kanäle,
Spaltenzahl = Breite des jeweiligen Kanals in der jeweiligen Schicht.

Anmerkung:
Die oberste Schicht A(: , 1 , : ) ist "Luft" außerhalb der Wand. Also weder ein Kanal in der Wand noch ein Stück der Wand!

_________________________________________________________
Ideen, Denkansätze, Fehler - ich bin für jeden Tipp weiterhin dankbar.

Grüße u danke
Christian
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
C_h_r_i_s
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 11.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.08.2010, 16:54     Titel: [under construction]
  Antworten mit Zitat      
Hi, Laufindex in der For-Schleife ändern war natürlich unclever von mir.

Dennoch:

Ich teste gerade diverse alternative Prüfziffern (Schwerpunkte, Abstände zum Quadrat, Flächen-Schnittmengen).

Wenn ihr noch welche kennt - gerne schreiben.

LG
Christian
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.