finding 2D curvature for a left ventricular plot

> load('D:\Matlab\315 Big.txt');
Vertices=[sin(r) cos(r)]*10;
Lines=[(1:size(Vertices,1))' (2:size(Vertices,1)+1)']; Lines(end,2)=1;
Na=zeros(size(Vertices,1),1); Nb=zeros(size(Vertices,1),1);
Na(Lines(:,1))=Lines(:,2); Nb(Lines(:,2))=Lines(:,1);
checkNa=Na==0;
checkNb=Nb==0;
Naa=Na;
Nbb=Nb;
Naa(checkNa)=find(checkNa);
Nbb(checkNb)=find(checkNb);
Na(checkNa)=Nbb(Nbb(checkNa));
Nb(checkNb)=Naa(Naa(checkNb));
Ta=-sqrt(sum((Vertices-Vertices(Na,:)).^2,2));
Tb=sqrt(sum((Vertices-Vertices(Nb,:)).^2,2));
Ta(checkNa)=-Ta(checkNa);
Tb(checkNb)=-Tb(checkNb);
x = [Vertices(Na,1) Vertices(:,1) Vertices(Nb,1)];
y = [Vertices(Na,2) Vertices(:,2) Vertices(Nb,2)];
M = [ones(size(Tb)) -Ta Ta.^2 ones(size(Tb)) zeros(size(Tb)) zeros(size(Tb)) ones(size(Tb)) -Tb Tb.^2];
invM=M.^-1;
a(:,1)=invM(:,1,1).*x(:,1)+invM(:,2,1).*x(:,2)+invM(:,3,1).*x(:,3);
a(:,2)=invM(:,1,2).*x(:,1)+invM(:,2,2).*x(:,2)+invM(:,3,2).*x(:,3);
_Index in position 3 exceeds array bounds (must not exceed 1)._

댓글 수: 7

im trying to get the curvature but i have no idea which codes to use.. rather challenging task when i have no basics of matlab at all
madhan ravi
madhan ravi 2018년 11월 1일
편집: madhan ravi 2018년 11월 1일
select the whole code and press the code button {} so that its easy to read and upload Big.txt file to test
a(:,2)=invM(:,1,2).*x(:,1)+invM(:,2,2).*x(:,2)+invM(:,3,2).*x(:,3);
at this part it prompts (Index in position 3 exceeds array bounds (must not exceed 1).) is there any problem with this line?
did you read my previous comment??
yes, i have no idea how to do that..
Edit your question, the click the paper click icon above the edit box.
don't close question which has answers

댓글을 달려면 로그인하십시오.

답변 (3개)

KSSV
KSSV 2018년 11월 1일

0 개 추천

댓글 수: 1

Vertices =load(''D:\Matlab\315 Big.txt');
Vertices(:,1) = [] ; % because all zeros
k=LineCurvature2D(Vertices) ;
Use the attached code as it is.....
Note that this is a function written by other guy. You need to rate it at the respective link.

댓글을 달려면 로그인하십시오.

madhan ravi
madhan ravi 2018년 11월 1일
편집: madhan ravi 2018년 11월 1일

0 개 추천

M =load('D:\Matlab\315 Big.txt');
r=4;
Vertices=[sin(r) cos(r)]*10;
Lines=[(1:size(Vertices,1))' (2:size(Vertices,1)+1)']; Lines(end,2)=1;
Na=zeros(size(Vertices,1),1); Nb=zeros(size(Vertices,1),1);
Na(Lines(:,1))=Lines(:,2); Nb(Lines(:,2))=Lines(:,1);
checkNa=Na==0;
checkNb=Nb==0;
Naa=Na;
Nbb=Nb;
Naa(checkNa)=find(checkNa);
Nbb(checkNb)=find(checkNb);
Na(checkNa)=Nbb(Nbb(checkNa));
Nb(checkNb)=Naa(Naa(checkNb));
Ta=-sqrt(sum((Vertices-Vertices(Na,:)).^2,2));
Tb=sqrt(sum((Vertices-Vertices(Nb,:)).^2,2));
Ta(checkNa)=-Ta(checkNa);
Tb(checkNb)=-Tb(checkNb);
x = [Vertices(Na,1) Vertices(:,1) Vertices(Nb,1)];
y = [Vertices(Na,2) Vertices(:,2) Vertices(Nb,2)];
M = [ones(size(Tb)) -Ta Ta.^2 ones(size(Tb)) zeros(size(Tb)) zeros(size(Tb)) ones(size(Tb)) -Tb Tb.^2];
invM=M.^-1;
a(:,1)=invM.*x(1)+invM.*x(2)+invM.*x(3);

댓글 수: 9

if it doesn't work upload your text file by clicking the paperclip button
This is the txt file. thanks so much
check edited answer
it says that the matrix size is different on the left and right. The code used was from the link KSSV provided just now same link but stuck.
KSSV
KSSV 2018년 11월 1일
What made you to change the function? You can straight away use the function eh.
the inverse M had an error code saying its undefined following by:a(:,2)=invM(:,1,2).*x(:,1)+invM(:,2,2).*x(:,2)+invM(:,3,2).*x(:,3); this having a error code: Index in position 3 exceeds array bounds (must not exceed 1).
KSSV
KSSV 2018년 11월 1일
Clearly int he function invM is a 3D matrix..where as in your case it is not.....so the error. My question is what is stopping you to use the function with out changes? Why did you change it?
i changed the function cos there is an error code.
KSSV
KSSV 2018년 11월 1일
That case..you have to show us what error you got.

댓글을 달려면 로그인하십시오.

Bruno Luong
Bruno Luong 2018년 11월 1일

0 개 추천

The original code is here:
Sorry but you you don't master the MATH behind, why wasting your time (and our time) to make your horrible modifications?
The way you compute the inverse the matrix tells clearly that you don't have a math background to make any modification.

댓글 수: 8

yes i know nothing about this. trying to figure out. i used the original code, and got this error: function k=LineCurvature2D(Vertices,Lines) ↑ Error: Function definition not supported in this context. Create functions in code file.
If you don't know how to download a FEX and how to use/call it then please ask question in this sense rather than trying to make modification on the code (again it beyond what your level of MATLAB) and ask why it doesn't work.
would you be able to provide any assisstance in this case where the error code show: function k=LineCurvature2D(Vertices,Lines) ↑ Error: Function definition not supported in this context. Create functions in code file.
Easy, just do what the message tells you "Create functions in code file."
Or you downnload the FEX zip file and unzip it in the working folder, and call it correctly, and not copy past the code in your script.
how do i create functions in code file in this case? the function that i am supposed to code is this? (k=LineCurvature2D(Vertices,Lines))
I just told you Downnload the FEX zip file and unzip it in the working folder
im sorry but where is the working folder? i downloaded it, and opened it opened in the editor window. i started with M =load('D:\Matlab\315 Big.txt'); then followed by the code is that okay?
Sorry I don't have time to help you. Please post question in separate thread might be someone else is able to help you with basic function calling or read the Matlab Starting Guide.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Large Files and Big Data에 대해 자세히 알아보기

질문:

2018년 11월 1일

다시 열림:

2018년 11월 2일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by