ich habe ein Kreis als Objekt der als Pixelwerte SNR Werte hat. Um diese auszuwerten habe ich mir zwei Arten ausgedacht. Einmal der SNR Verlauf über den Radius, das hab ich auch geschaft. Nun möchte ich aber auch den SNR in Abhängigkeit vom Winkel grafisch darstellen. Habe mir gedacht, dass ich das Kreis quasi wie eine Uhr einteile...bei 12uhr gehts los,also Null Grad...bei 3Uhr wären 90grad usw. nur in viel kleineren Winkeln. Meine Idee war, dass alles nutzen kann was ich für die darstellung SNR in Abhängigkeit vom Radius gemacht habe. Wollte es vielleicht über die Fläche eines Kreissektors lösen:
A=Alpha/360grad * pi *r²
r² =(x-xm)²+(y-ym)² (das hab ich schon)
aber ich weiß nicht wie ich die Fläche des Kreissektors mit meinem Objekt in Verbindung bringen kann, dass ich eine Maske erhalte und somit nur die SNR werte des Kreissektors habe.
Vielleicht ist meine Idee auch total falsch und einer von euch hat eine bessere?!
adieu
PS: Hier mal mein Code für den SNR verlauf über den Radius, falls das helfen sollte oder wen es interessiert
Code:
for ri=1:1:10 %Anzahl der Abschnitte des Radiuses
for i=1:1:length(DCMContent) disp(i);
L=bwlabel(SNR(:,:,i));
s=regionprops(L,'all');
ifisempty(s);continue;end
si=size(s);
ar=[];
for u=1:1:si(1)
ar(u)=s(u,1).Area;
end [mx,my]=max(ar);
if mx<=7000;disp(mx);continue;end %fläche kleiner als 7000 Pixel, dann gehts zur nächsten Schicht
ce=s(my,1).Centroid;
Is=size(s(my,1).Image);
[X,Y]=meshgrid(1:256,1:256);
rq=(X-ce(1)).^2+(Y-ce(2)).^2;
ct(:,:,i)=(rq<=ri*((Is(1)/20)^2))&(rq>((ri-1)*(Is(1)/20)^2))&c(:,:,i);
end
mt(ri)=mean(SNR(ct));
St(ri)=std(SNR(ct),1);
disp(ri);
end save([PathName,'\','Tiefenwerte.mat'],'mt','St');
der Kreis ist mein Objekt! Nun möchte ich diesen in "küchenstückchen" unterteilen, im beispiel sind es eben 8, aber mehr wär besser. Nunmöchte ich von jedem "Kuchenstück", also Kreissektor, den Mittelwert aller Pixel berechnen. Also wär es am besten, wenn ich irgendwie eine Maske bekommen würde....oder vielleocht hast du eine andere Idee?
Nunmöchte ich von jedem "Kuchenstück", also Kreissektor, den Mittelwert aller Pixel berechnen.
Welche Pixel?
In welcher Form liegen denn Deine Messwerte oder simulierten Werte oder was sonst denn vor? Hast Du sie als Pixel-Bild? Es wäre viel einfacher und deutlich genauer, wenn Du die Koordinaten der Punkte zur Verfügung hättest. In Polar-Koorinaten umgerechnet (CART2POL) ist eine Einteilung in Segmente ziemlich einfach:
1 + FLOOR(AnzahlDerSegmente * Rotations-Winkel / 2 * pi)
Das wäre schon der Index des Segments, zu dem jedes Pixel gehört.
im anhang findest du eine Datei mit der ich arbeite! Da ist eine Matrix mit dem Namen "SNR". Es ist eine 3D Matrix, vobei die x-y ein Bild mit 256x256 ist und z die anzahl der bilder (bsp.31)! Jedes Pixel ist ein SNR-wert! Ich möchte nun zum besipiel bilde SNR(:,:,1) so wie in der skizze einteilen und dann alle Pixelwerte, also SNR-Werte die in einem "Kuchenstück" sind zu mean zusammenrechnen! letztlich möchte ich einen Grafenverlauf vom SNR in Abhängigkeit des Winkels haben!
Da ich auch erst neu hier bin, hab ich wohl paar probleme alles wichtige und genaue hier zu erläutern, damit mir jemand helfen kann...bitte das zu entschuldigen...hoffe aber,dass es jetzt klarer ist!?
ich kann Dein MAT-File leider nicht öffnen, weil ich auf meinem Internetrechner kein Matlab installiert habe.
Soweit ich das verstanden habe, könnten Deine Daten folgende Form haben:
Welche Werte befinden sich darin? Ist ein "Pixel" eine 1 und ein "Nicht-Pixel" eine 0?
Dummy-Testdaten per RAND sind im Forum besser. MAT-Files sind nur zu speziellen Matlab-Versionen kompatibel und können Matlab auch schon mal crashen lassen.
Im Screenshot sehe ich eine große Tabelle. Was die nun mit Deinem [256x256x31] Array zu tun hat, weiß ich nicht.
Ich denke auch, dass Dein MAT-File harmlos ist und vielleicht hast Du es ja auch mit "save -v6" erstellt, so dass ich es auch mit meinem Matlab 6.5 lesen kann.
Ich könnte aber auch ein MAT-File posten, das Dir den Rechner abschießt. Deshalb öffne ich fremde MAT-Files nur, wenn es notwendig ist.
Zurück zum Problem:
Nehmen wir also eine [256x256] Matrix aus Deinen Daten. Dann hast Du zu jedem Pixel die Koordinaten (nämlich die Indices) und einen Wert.
1. Kannst Du nun diese Cartesischen Koordinaten in Polar-Koordinaten umrechnen? Da hatte ich schon etwas drüber sgeschrieben.
2. Kannst Du nun anhand des Winkels die Pixel den einzelnen Kreissegmenten zuordnen?
3. Kannst Du dann noch die gewünschten Berechnungen mit diesen Pixels durchführen?
der screenshot zeigt einen ausschnitt aus einem meiner "bilder", also bsp. SNR(:,:,1)!
Aber jetzt versteh ich was du meinst mit den Polarkoordinaten!
DANKE
Dann ist mir dein 2. und 3.Punkt logisch!
ABER: der Mittelpunkt des 256x256 Matrix, ist nicht der gleiche Mittelpunkt von meinem Objekt, was ja sehr wichtig ist für die genauigkeit. Hast du eine Idee?
Und kann ich festlegen, wo meine 0Grad sind?also nicht das 3Uhr auf 0/360grad liegt sondern 12uhr!?
Dann werd ich mal versuchen deine Idee umzusetzten, werd dann berichten von meinem erfolg/misserfolg
ist alles nicht so einfach für mit, da ich erst seit 3monaten mit Matlab arbeite.
Mit "[X,Y]=meshgrid(1:256,1:256)" erstelle ich meine Indices und über "[THETA,RHO] = cart2pol(X,Y)" kann ich für jedes Pixel die Polarkoordinaten bestimmen. Über "regionprops" und "centroid" berechne ich den mittelpunkt des objektes. Nun ist die Frage, wie ich den Koordinatenursprung zu dem punkt "centroid" bekomme?
for a=0:10:350 [X,Y]=meshgrid(1:256,1:256);
for i=length(DCMContent):-1:1
X=X-ce(1);
Y=Y-ce(2);
[THETA,RHO] = cart2pol(X,Y);
THETA=THETA.*(180/pi);
cth(:,:,i)=(a)<=THETA<(a+10);
cr(:,:,i)=RHO<=(Is(1)/2);
end
ma(a)=mean(SNR(cth)& SNR(cr));
sa(a)=std(SNR(cth)& SNR(cr),1);
end
So hab ich mir das gedacht!
Will den kreis in 10Grad schritten durchgehen, daher die erste schleife! Die 2.schleife ist für meine n verschiedenen Bilder die ich auch einzeln durchgehe. Um den Koordinaten ursprung zu dem Mittelpunkt,Variable ce, zubekommen das X-ce(1) usw.!bsp: ce= (128 132)!
SNR ist eine 256x256xn Matrix!
1.Problem: die Winkel! erste quadrant hat negativen winkel...also anstatt wie es in der Hilfe bei "cart2pol" mit positiven winkeln los geht, ist es bei mir negativ! quadrant 3 und 4 sind wieder positiv
2.Problem: es geht nicht über 180grad...sondern er geht dann eben in die andere richtung, sodass ich keine 270grad haben sondern eben +90grad zw. quadrant 3 und 4!
3.problem: ich glaube meine mean berechnung geht so nicht.. oder doch?
dann freu ich mich schon auf eure verbesserungsvorschläge und danke auch schonmal wie verrückt!!
adieu
_________________
der marzl
Zuletzt bearbeitet von marzl am 26.10.2010, 15:20, insgesamt einmal bearbeitet
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 26.10.2010, 14:53
Titel:
Nur so.
Du willst den ganzen Kreis durchgehen?
Warum geht dann die Schleife nur bis 350?
ich brauch dann immer den Bereich zw. 0grad und 10grad, dann weiter zw. 10 und 20grad usw.!
hab ja dann bei der Abfrage stehen:
cth(:,:,i)=(a)<=THETA<(a+10);
verstehst dus jetzt?
also ich find es für mich logisch...aber vielleicht hab ich auch ein denkfehler?!
LG
_________________
der marzl
Einstellungen und Berechtigungen
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.