Verfasst am: 12.02.2013, 11:44
Titel: Problem mit log. Referenzen von Arrays
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:
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
Verfasst am: 12.02.2013, 12:15
Titel: Re: Problem mit log. Referenzen von Arrays
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"?
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.
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
shks_als_gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.02.2013, 18:18
Titel:
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.
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: ---
Verfasst am: 12.02.2013, 18:51
Titel:
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
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:
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 :/
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
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
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.