Iterative Closest Point and 3D matrices

Hi,
Unfortunately, my matrices created form a stack of dicom files dont work with ICP . My matrices are 500*500*80 of vertices while the demo provided works with vectors 3*6400. Do you know how to pass from vertices to vectors or more generally how I could reach my goal namely re-positioning a 3d volume ?
Regards.

2 Kommentare

Matt J
Matt J am 23 Nov. 2012
Bearbeitet: Matt J am 23 Nov. 2012
My matrices are 500*500*80 of vertices
Are you sure you don't mean your image volumes are 500x500x80? ICP doesn't seem appropriate if you only have image intensity data, rather than a list of coordinates.
ocelote
ocelote am 23 Nov. 2012
Bearbeitet: ocelote am 23 Nov. 2012
Thank you. Is there any way for me to get coordinate from my "volume" of intensity points ?
Would you know any appropriate methodology ?

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Matt J
Matt J am 23 Nov. 2012
Bearbeitet: Matt J am 23 Nov. 2012

0 Stimmen

That's a surface segmentation problem. Maybe use BWPERIM in conjunction with FIND/IND2SUB.

6 Kommentare

ocelote
ocelote am 23 Nov. 2012
Bearbeitet: ocelote am 23 Nov. 2012
Thank you for your time. Could you be a bit more specific about the way I could achieve it ?
I managed to see my volume with
p = patch( isosurface(v(1:10:end,1:10:end,1:10:end),0) );
I must have a surface to work with no ?
BWPERIM seems to be for images (2D data), should I use it on every dicom file ?
Matt J
Matt J am 23 Nov. 2012
Bearbeitet: Matt J am 23 Nov. 2012
I can't be much more specific, because I don't know anything specific about your data or what surfaces on it you would like to match.
Usually ICP is meant for matching two surfaces, given a list of coordinates lying on those surfaces. If you have a binary map of the object, BWPERIM would return a binary map of its surfaces, so that might be a possible direction to go. You would have to pre-process that map in some way to get rid of surfaces you don't want to include. You can then use FIND and IND2SUB to convert the binary map to 3D coordinates.
Don't know why you think BWPERIM is only for 2D arrays. See "doc BWPERIM".
thank you for your help. I will try to be more specific :
- I have 3 volumes AB (reference), A and B (AB is made of A an B). I am trying to translate and rotate A and B to match AB using ICP.
- As you pointed out above, I had intensity data so I am using isosurface
a = isosurface(Va(1:2:end,1:2:end,1:2:end),0)
a =
vertices: [4525x3 double]
faces: [9050x3 double]
I get the vertices and faces.
- from here, I use
[Ricp Ticp ER t] = icp(M, D, 10);
But the results are quite bad, it plots my volume A which looks like the same as AB (that is normally twice bigger)... and the plot3 function is really poor in rendering.
Matt J
Matt J am 26 Nov. 2012
Bearbeitet: Matt J am 26 Nov. 2012
You haven't said what M and D are.
Regardless, it seems strange to me that you would use the 0 isovalue. Doesn't that just give you the background?
ocelote
ocelote am 27 Nov. 2012
M is the model (AB) and D is the data (A), a part of AB. Unfortunately the result is http://hpics.li/304865b where the red part (A) becomes twice bigger whereas it should be half. No I dont have the background either I put 1 or 0 in isosurface.
Matt J
Matt J am 27 Nov. 2012
Have you verified that the isosurface() output identifies the surface that you want?

Melden Sie sich an, um zu kommentieren.

Tags

Gefragt:

am 23 Nov. 2012

Community Treasure Hunt

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

Start Hunting!

Translated by