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

Mittelwert von ROI

 

rcsapo
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 11.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2014, 00:58     Titel: Mittelwert von ROI
  Antworten mit Zitat      
Werte MATLAB-Experten,

Ich habe einen Stapel von p MR-Schnittbildern, die in einer mxnxp Matrix gespeichert sind. Ich möchte in jedem Schnittbild die m/n-Koordinaten des Maximums ermitteln, rund um diesen Punkt ein ROI der Größe 5x5 legen und in diesem ROI den Mittelwert bestimmen.

Für diesen letzten Schritt könnte ich natürlich für jedes Schnittbild einen Vektor kreieren, der die 25 interessierenden Datenpunkte beinhaltet und dann den Mittelwert davon bestimmen. Das Anlegen dieses Vektors so wie ich das mache ist aber sehr umständlich und unelegant.

Wie könnte ich das besser lösen?

Code:

% Generate random matrix (10 slices)
A = rand(10,10,10)

% Get max and its coordinates in each slice
for i = 1:size(A,3)
   temp = A(:,:,i);
   [max_temp,ind] = max(temp(:));
   [ii,jj] = ind2sub([size(temp,1),size(temp,2)],ind);
   maxA{i} = [max_temp ii jj];
end

% Get coordinates of ROI points around max
for i = 1:size(maxA,2)
    xCoord(i,1:5) = [maxA{i}(3)-2:1:maxA{i}(3)+2];
    yCoord(i,1:5) = [maxA{i}(3)-2:1:maxA{i}(3)+2];
end

% Get mean of 25 points (5x5) defined by xCoord and yCoord
% This could be solved as follows but what is more efficient?
% for i = 1:size(maxA,2)
%     temp = [A(yCoord(i,1),xCoord(i,1),...
%         A(yCoord(i,1),xCoord(i,2),...
%         …
%         A(yCoord(i,5),xCoord(i,5)];
%     mean_maxA(i) = mean(temp);
% end
 
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: 29.10.2014, 16:34     Titel:
  Antworten mit Zitat      
Hallo,

Deine xCoord und yCoord sind gleich, da der Index je 3 ist.
War auch so frei und hab die Bezeichner für mich mal umbenannt.

Was soll passieren, wenn die Indizes von ROI am Rand liegen? Ich bin mal davon ausgegangen, dass sich der 5x5-Bereich um Max dann entsprechend verkleinert. zB. Maximum bei (1,2), dann wird der Mittelwert der Spalten 1 bis 4 und der Zeilen 1 bis 3 berechnet.

Code:
% Generate random matrix (10 slices)
A = rand(10,10,10);

% Get max and its coordinates in each slice
maxA = cell(1, size(A,3));
for i = 1:size(A,3)
   temp = A(:,:,i);
   [max_temp,ind] = max(temp(:));
   [ii,jj] = ind2sub([size(temp,1),size(temp,2)],ind);
   maxA{i} = [max_temp ii jj];
end

mean_maxA = zeros(1, size(maxA,2));
for i = 1:size(maxA,2)
    % Get indices of ROI points around max
    zeilen = maxA{i}(2)-2:maxA{i}(2)+2;
    spalten = maxA{i}(3)-2:maxA{i}(3)+2;
   
    zeilen = zeilen(1 <= zeilen & zeilen <= size(A,1));
    spalten = spalten(1 <= spalten & spalten <= size(A,2));
   
    % Get mean of 25 points (5x5) defined by zeilen and spalten
    mean_maxA(i) = mean(mean(A(zeilen,spalten)));
end


Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
rcsapo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 11.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2014, 19:53     Titel:
  Antworten mit Zitat      
Hallo Seban,

Vielen Dank für die Antwort. Diese Lösung ist viel einfacher, als das was ich gestern noch produziert habe (ich habe schließlich die Eckpunkte meines ROIs genutzt, um mittels poly2mask eine Maske zu erstellen, das Schnittbild damit zuzuschneiden und den Mittelwert von der 5x5 Region zu berechnen).

Idealerweise würde die ROI sich asymmetrisch rund um Max ausbreiten, wenn Max am Bildrand liegt. Ich bin sicher, das ließe sich mit einer if-Schleife lösen, vorerst reicht mir dieses Ergebnis aber schon mal.

Nochmals vielen Dank!
Robert
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.