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

Problem mit log. Referenzen von Arrays

 

shks_als_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2013, 11:44     Titel: Problem mit log. Referenzen von Arrays
  Antworten mit Zitat      
Guten Tag,
ich habe ein kleines Problem und komme nicht weiter. Wahrscheinlich hab ich einfach was falsch verstanden; helft mir bitte auf die Sprünge.
Zum Problem:

Grob:
Ich hab einen 2000x2000 (sparse)array mit zahlenwerten pro position.
Dann möchte ich eine Region of Interest(ROI) angeben, mit der ich den bereich bestimme aus denen die o.g. zahlenwerte ausgelesen werden.
Das klappt soweit. ich komme an die richtigen zahlenwerte ran, nur leider würde ich nun gerne auch die (col,row) information der lp-punkte, die in der ROI liegen, verwenden.
Der Code sieht ungefähr so aus:
Code:

    lp= sparse( ...
      round(lpdata(:,1)), ... %x
      round(lpdata(:,2)), ... %y
      lpdata(:,4), ... % werte
      img_size(2), ... % größe über bild festgelegt
      img_size(1) );

figure('name','ROI festlegen');
axis equal; axis ij; colormap('gray'); axis([1, img_size(1), 1, img_size(2)]);
imagesc(loadedimage)
hold on

spy(lp,'r')
BWsprs = sparse(roipoly);
spy(BWsprs)
[x,y,values] = find(lp(BWsprs));
 


In x stehen dann zig tausende indizes des sparsearrays lp, in y genausoviele "1"er und in values tatsächlich die entsprechenden erwünschten werte.

Was ich schon versucht habe, was aber mMn nicht geht, da die Roi nicht rechtwinklig ist, war
Code:

Aber das war irgendwie nicht wirklich hilfreich.
Ich steh aufm schlauch :/

Ich bin auch für funktionierende alternativen dankbar, nur muss man damit 2000x2000 (dünn besetzte) matrizen verwenden vielleicht auch irgendwann mal 200000x200000 aber das is vielleicht eher unnötig Smile

Besten Dank und schönen Gruß
shks.


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.02.2013, 12:15     Titel: Re: Problem mit log. Referenzen von Arrays
  Antworten mit Zitat      
Hallo shks_als_gast,

Was ist genau die Frage?

Zitat:
ich komme an die richtigen zahlenwerte ran, nur leider würde ich nun gerne auch die (col,row) information der lp-punkte, die in der ROI liegen, verwenden.

In x stehen dann zig tausende indizes des sparsearrays lp, in y genausoviele "1"er und in values tatsächlich die entsprechenden erwünschten werte.

Ist damit die Frage nicht bereits gelöst?

Was genau bedeutet "irgendwie nicht wirklich hilfreich"?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
shks_als_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2013, 13:03     Titel:
  Antworten mit Zitat      
Hallo,

zunächst einmal wundert es mich, dass

Code:
lp(BWsprs)


so etwas wie
Code:

ans =

                 (56,1)                      0.1083
                (138,1)                      0.1097
                (144,1)                      0.1108
                (234,1)                      0.1134
                (382,1)                      0.1113
                (404,1)                      0.1268
                (515,1)                      0.1047
                (591,1)                      0.1237
                (624,1)                      0.0643
                (666,1)                      0.1087
                (754,1)                      0.1255

(...)

             (254737,1)                      0.0785
             (254754,1)                      0.1773
             (254850,1)                      0.1278
             (254948,1)                      0.2135
             (254997,1)                      0.1098
 


erzeugt wird. obwohl sowohl "lp" als auch "BWsprs" die Form
Code:

(1622,2042)    0.2064
(1680,2042)    0.2753
(1922,2042)   -0.0021
 (535,2043)   -0.0384
(1780,2043)   -0.0042
(1839,2043)    0.0812
etc...
 

haben.

Wenn ich mir mit spy(ind2sub(size(bwsprs),x) anschaue hab ich ein rechteckiges Bildchen mit Punkten, wo ( vielleicht) die mich interessierenden Punkte liegen.

Ich werde das gleich nochma versuchen auszuwerten, aber ich fänds auch schöner, wenn ich direkt die indizies der nonzeroelemente der sparsematrix erhalten könnte, ohne dass sie "platt" gemacht werden.

gruß
shks.

P.S.: erstma kurz mittag Smile
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.02.2013, 16:55     Titel:
  Antworten mit Zitat      
Hallo shks_als_gast,

Ich verstehe das Problem nicht.
Wenn lp und BWsprs sparse Arrays sind, wieso verwundert es Dich dann, dass lp(BWsprs) sparse ist? Oder was findest Du an den "Formen" dieser Variablen merkwürdig?

Zitat:
Ich werde das gleich nochma versuchen auszuwerten, aber ich fänds auch schöner, wenn ich direkt die indizies der nonzeroelemente der sparsematrix erhalten könnte, ohne dass sie "platt" gemacht werden.

Was bedeutet hier genau "auswerten" und wo liegt das Problem beim erhalten der non-zero indices?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
shks_als_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2013, 18:18     Titel:
  Antworten mit Zitat      
Zitat:
Wenn lp und BWsprs sparse Arrays sind, wieso verwundert es Dich dann, dass lp(BWsprs) sparse ist?

Mich wundert nicht dass sie sparse sind, sondern dass sie mir mit einem Laufindex ausgeworfen werden!

Wenn ich mir spy(BWsprs) anschaue hab ich ein bildchen meiner ROI in x gegen y,
wenn ich mir spy(LPsprs) anschaue, hab ich ein bildchen meiner daten aufgetragen in x gegen y.

Wenn ich mir
Code:

[idx,~,values] = find(LPsprs(BWsprs));
[M N] = ind2sub(size(BWsprs),idx);
lpfromroisprs = sparse(M,N,values);
spy(lpfromroisprs);
 

anschaue hab ich nur ein rechteck mit ziemlich zufällig verteilten datenpunkten.

Ich glaube einfach, dass die rückindizierung nicht richtig ist so wie ich sie mache.
Die werte sind ja richtig, aber ihre position im koordinatensystem bleibt nicht erhalten, das ist was mich wurmt...
 
shks_als_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2013, 18:51     Titel:
  Antworten mit Zitat      
Hab mir nochma die laufindices in idx angeschaut, und ich glaube dass die laufindizierung ab dem ersten punkt der lp-matrix, welcher in der ROI liegt, gezählt wird.
Vermutlich muss ich da nur die laufindexkoordinate aufaddieren.
näheres dazu in hoffentlich naher zukunft Razz
 
shks.
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 12.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2013, 10:00     Titel:
  Antworten mit Zitat      
So, da wär ich wieder.

Ich versuch nochmal klarheit zu schaffen:

Ich habe eine 2048x2048 sparseMatrix lp mit werten die mich interessieren. Ich muss jedoch unterschiedliche gebiete untersuchen, dazu verwende ich aus der Imageprocessing Toolbox die funktion polyroi, welche mir eine binäre Maske bw gleicher größe erstellt.
Über logisches Subscripting wollte ich nun einfach die Bereiche von lp(bw) auswerten. Das funktioniert auch, wenn ich nur die Werte benutzen möchte!
Ich hätte aber gerne noch die (x,y) koordinaten der ausgewählten lp-Punkte!
Der rückgabewert von lp(bw) ist aber eine Liste dieser art:
Code:
(56,1) 0.1083
bzw.
(index, 1) wert

mit
Code:
[x,y,values] = find(lp(BWsprs));
finde ich dann leider nicht (x,y) sondern (idx,"1").
Im prinzip käme ich mit den indizes auch klar, wenn ich eine ROI hätte, die rechteckig ist! Denn sonst, so glaube ich, klappt der Befehlt ind2sub nicht!
Meine Roi haben eher die Form eines Parallelogramms, das heißt die anzahl an Werten pro Spalte ändert sich.

Und damit komme ich nicht wirklich klar. Es ist irgendwie frustierend, weil das Problem eigentlich schon durch das coole logische subscripting gelöst ist, aber die indizierung, zumindest für mich nicht komplett nachvollziehbar ist.
oben genanntes ist lediglich meine Vermutung.

Also kurzum:
Ich muss irgendwie die indizierung auf die form der ROI beziehen, dazu werde ich wohl als workaround verscuhen die länge der aufeinanderfolgenden 1er in der Maske pro Spalte auszuwerten.

Ich hoffe irgendwer hat eine nette lösung für mich, das würde mich sehr freuen.
Vielen Dank schon ma im voraus
shks.

P.S.: Imageprocessing Toolbox function können benutzt werden, ich hab hab leider nichts einfaches gefunden :/
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 16.02.2013, 18:44     Titel:
  Antworten mit Zitat      
Hallo,

Ich bin nicht sicher, ob ich dein Problem richtig verstehe.

Hilft das weiter?
Code:
A = 10 .* rand(4, 5);   % entspricht deinem Ip
log_A = A > 3;          % entspricht deinem ROI

k = 0;
for j = 1:5
    for i = 1:4
        k = k + 1;
        Z(i, j) = k;    % Matrix mit "linearen Indizes"
    end
end
[I, J] = ind2sub([4, 5], Z);    % Zeilen- und Spaltenindizes

I_log_A = I .* log_A    % entspricht Zeilenindizes von ROI
J_log_A = J .* log_A    % entspricht Spaltenindizes von ROI


Grüße,
Seban
_________________

Richtig fragen
Debugging
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.