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

Ein Array in ein anderes Array umwandeln

 

Im2old4you
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 24.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2010, 16:20     Titel: Ein Array in ein anderes Array umwandeln
  Antworten mit Zitat      
Ich habe zwei arrays...eines von -0.5*k : 0.5*k und daraus soll [1:N] werden! Aber wie?

Ich habe keinen Ansatz dafürSad
Private Nachricht senden Benutzer-Profile anzeigen


Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 06.12.2010, 16:26     Titel:
  Antworten mit Zitat      
Ohne eine genauere Schrittweite zu wissen sag ich:

N=numel(-0.5*k : 0.5*k)
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Im2old4you
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 24.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2010, 17:13     Titel:
  Antworten mit Zitat      
Code:
function [ output_args ] = Interpolation3d( Objekt,kx,ky,kz,r )

a=size(Qbjekt);
kx=linspace[-k/2;k/2;a(1)]
end


und das soll überführt werden in

Code:
[-k/2:k/2]---> [1:N]
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.12.2010, 19:09     Titel:
  Antworten mit Zitat      
Hallo Im2old4you,

Zitat:
Code:
[-k/2:k/2]---> [1:N]

Was ist "N"? Können wir das irgendwie erraten?
Suchst Du vielleicht:
Code:
a = -k/2:k/2;
b = 1:numel(a);

Ich vermute die Frage wird klarer, wenn Du anhand von ein paar Beispielwerten zeigst, was Du suchst.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Im2old4you
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 24.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2010, 20:41     Titel:
  Antworten mit Zitat      
Die Aufgabenstellung ist

Simulieren Sie den Prozess einer Röntgenbildaufnahme. Die Röntgenquelle liegt in dem Punkt R(Quelle) und strahlt in alle Richtungen ab. Das dreidimensionale Objekt u befindet sich im Zentrum in einem Kubus der Kantenlängen kx,ky,kz und liegt als dreidimensionale Matrix der Dimension NxNxN vor. Das Detektorarray ist durch drei Punkte rD1,rD2,rD3 in der unteren linken, oberen linken und unteren rechten Ecke bestimmt und besteht aus MxM Detektorelementen.

Schreiben Sie die Funktion
interpolation3D(Objekt,kz,ky,kx,r),
die das Objekt mittels eines Nearest-Neighbour-Ansatzes an einer beliebigen Position r
interpoliert. Außerhalb des Objektes soll die Funktion den Wert null zurückgeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.12.2010, 22:30     Titel:
  Antworten mit Zitat      
Hallo Im2old4you,

Das ist also die Aufgabenstellung. Wie kommst Du von dort zur orignalen Frage:
Zitat:
Ich habe zwei arrays...eines von -0.5*k : 0.5*k und daraus soll [1:N] werden!

Die Aufgabenstellung klärt Deine Frage nicht.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Im2old4you
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 24.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2010, 00:02     Titel:
  Antworten mit Zitat      
beim ersten Array bekomme ich eine negative Matrix raus zb. [-200,200,-180] . ich möchte durch eine Indexzierung von der negativen Martix in [1,N] abbilden
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.12.2010, 00:36     Titel:
  Antworten mit Zitat      
Hallo Im2old4you,
Zitat:
beim ersten Array bekomme ich eine negative Matrix raus zb. [-200,200,-180] . ich möchte durch eine Indexzierung von der negativen Martix in [1,N] abbilden

Ich weiß immer noch nicht, was N ist. Kannst Du bitte eine Zahl dafür angeben?
Wieso ist [-200, 200, -180] eine "negative Matrix"? Weil mehr als die Hälfte der Werte kleiner als 0 ist?
Kannst Du bitte noch mitteilen, ob "1:numel(M)" eine Lösung ist oder nicht?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Im2old4you
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 24.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2010, 13:36     Titel:
  Antworten mit Zitat      
Nein, es war keine Lösung.

Kx,ky,kz spannen einen Würfel auf und [1,N] ist ein Punkt im Würfel. Also ich muss von koordinatenform zur Matrixform. Wenn der Punkt nicht im Würfel liegt soll die mAtrix null sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.12.2010, 15:36     Titel:
  Antworten mit Zitat      
Hallo Im2old4you,

Zitat:
Nein, es war keine Lösung.

Gut. Das ist doch mal ein Ansatzpunkt. Wieso ist es keine Lösung? Was muss anders sein?

Zitat:
Kx,ky,kz spannen einen Würfel auf und [1,N] ist ein Punkt im Würfel. Also ich muss von koordinatenform zur Matrixform. Wenn der Punkt nicht im Würfel liegt soll die mAtrix null sein.

Ich verstehe immer weniger. In der Aufgabenstellung was "kx, ky, kz" die Kantenlänge des Würfels. Das sind also erstmal drei Skalare. Wenn Du nun schreibst "kx, ky, kz" würde einen Würfel auspannen, sprichst Du wohl von 3 Vektoren, oder? Wie hast Du die dann definiert?

Und wie kann "[1, N]" einen Punkt in einem Würfel definieren? Ich denke, man braucht dazu 3 Komponenten.

Da ich auch "Koordinatenform zur Matrixform" nicht verstehe, wäre ein ganz konkretes Beispiel mit echten Zahlen hilfreich.
Kannst Du posten, was Du bisher programmiert hast? Das würde vielleicht auch die eine oder andere Klarheit schaffen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Im2old4you
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 24.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2010, 18:26     Titel:
  Antworten mit Zitat      
z.B. k=2, N=5, dann steht da: [-1,0,1] -> [1,2,3,4,5].


Ich suche eine affine Abbildung, die das Intervall [-k/2,k/2] auf das Intervall [1,N] abbildet? Das wäre (x+k/2)/k*(N-1)+1. Allerdings ist das keine Ganzzahl, wie die 1:N - Notation ja andeutet, des muss ich nur noch runden. Soweit bin ich gedanklich und auf dem Papier.
Ich jetzte das gleich mal in einen Code um
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 07.12.2010, 22:38     Titel:
  Antworten mit Zitat      
Hallo,

ist es nicht einfach:
Code:

was du suchst, jedenfalls fuer dein obiges Beispiel?
Ansonsten sind deine Posting ein wenig verwirrend, in der Regel bekommt man am besten Hilfe wenn man ein einfaches Minimalbeispiel zeigt oder seine Frage eindeutig beschreibt. Da erstes fehlt und letzteres (jedenfalls fuer mich) nicht zutrifft, ist es wirklichg schwer nachzuvollziehen was du nun genau moechtest. Ein gutes Beispiel hierfuer ist wohl dein erster Post: 2 Arrays (Welche?), [1:N] was ist N (oder eher welchen Werte hat es) --> aus solchen Fragen wird keiner schlau auch wenn es fuer dich, der in dem Thema steckt wohl ganz einleuchtend ist.

Zitat:

(x+k/2)/k*(N-1)+1

Was ist das x?

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Im2old4you
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 24.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.12.2010, 15:39     Titel:
  Antworten mit Zitat      
so weit bin ich gekommen

ich hänge bei der Dritten Funktion. ich weis nicht genau welche ich zu erst anwenden muss von den beiden vorherigen. Beachte Datei im anhang

Code:
function [interpol] = interpolation3D (Objekt,kx,ky,kz,r)

N = length(Objekt);
    if abs(r(1))<=kx/2    
    interpol=0;
    if   abs(r(2))<=ky/2
    interpol=0;
    if  abs(r(3))<=kz/2
    interpol=0;
   
    else s = round(((r./[kx,ky,kz])+0.5)*(N-1))+1;
   
    interpol = Objekt(s);
   
    end
    end
    end
end


weiterführend habe ich das linienintegral berechnet.

Code:
function [S] = berechneLinienIntegral(Objekt,kx,ky,kz,rQuelle,rDetetektorpixel)

a = rDetetektorpixel-rQuelle;

L=sqrt(a(1)^2+a(2)^2+a(3)^2);

S=0;

    for l = 1:L/512:L
    lfett= rQuelle+(l-1)*(rDetetektorpixel-rQuelle)/(L-1);    
    S=S+interploation3D(Objekt,kx,ky,kz,lfett);
   
    end

end
 


Medizinische_Bildgebung_Serie_3_02.pdf
 Beschreibung:

Download
 Dateiname:  Medizinische_Bildgebung_Serie_3_02.pdf
 Dateigröße:  129.42 KB
 Heruntergeladen:  502 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Im2old4you
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 24.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.12.2010, 16:50     Titel:
  Antworten mit Zitat      
Code:
??? Attempted to access r(2); index out of bounds because numel(r)=1.

Error in ==> interpolation3D at 6
    if abs(r(1))<=kx/2  ||  abs(r(2))<=ky/2  || abs(r(3))<=kz/2

Error in ==> Untitled2 at 13
k=interpolation3D(Objekt,kx,ky,kz,r);


wir kann man das um gehen
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 12.12.2010, 17:56     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung ist doch eindeutig: Du greifst auf den Index 2 der Variablen "r" zu (r(2)), welche jedoch nur eine Dimension aufweist (numel(r)=1). Du müsstest also die Variable "r" mindestens 3 Dimensionen geben um in deiner If Abfrage auf r(2) und r(3) zugreifen zu können.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.