Finding the coordinates of a points of 2D projection in 3D volume

4 views (last 30 days)
Hi,
I already got the projection of a 3D image on the axial plane, so now, I have the 2D projection of that image. I selected some points on the 2D projection and now I want to find the location of those points on the 3D image. Does any one know how I can find the coordinates of those points?
  3 Comments
Bahareh Salafian Esfahani
Bahareh Salafian Esfahani on 17 May 2020
The image with star points are those I want to find in 3D image and the image that I showed it in 3D slicer is my 3D image. I had coordinates of star points.

Sign in to comment.

Answers (4)

Charles Mistretta
Charles Mistretta on 12 May 2021
I am not good matlab programmer but maybe this will get you started. I hav a 3d volume called temp
I make mips in all three directions and project the intensity values (1) throughout the volume
When I add up all these backprojected values I get three where the bacprojections overlap
Then I apply a function that gives the coordinates at the minimum
%find 3d coordinates of point identfied in mipt images through volume
% multiply through the volume at point identified in three mip views
%start wth volume called temp
load temp
tempmip2=squeeze(max(temp,[],2));
figure, imshow(tempmip2(:,:),[])
title 'temp2'
tempmip1=squeeze(max(temp,[],1));
figure, imshow(tempmip1(:,:),[])
title 'temp1'
tempmip3=squeeze(max(temp,[],3));
figure, imshow(tempmip3(:,:),[])
title 'temp3'
drawnow
%make all necessary volumes the same
tempmult1=zeros(512,512,394);
tempmult2=zeros(512,512,394);
tempmult3=zeros(512,512,394);
tempmult12=zeros(512,512,394);
tempmult123=zeros(512,512,394);
%multiply throughout volume by value in mip
for x=1:512
x
tempmult1(x,289,15)=tempmip1(289,15);
end
max(max(max(tempmult)))
for y=1:512
y
tempmult2(196,y,15)=tempmip2(196,15);
end
max(max(max(tempmult)))
tempmult12(:,:,:)=tempmult1(:,:,:)+tempmult2(:,:,:);
max(max(max(tempmult12)))
for z=1:394
z
tempmult3(:,:,z)=tempmip3(197,296);
end
max(max(max(tempmult3)))
% add all the volume They should add at the point related to the points
% chosen in the mips
tempmult123(:,:,:)=tempmult1(:,:,:)+tempmult2(:,:,:)+tempmult3(:,:,:);
max(max(max(tempmult123(:,:,:))))
%this was a function previously given to me someone named Walter-sorry -lost
%last name
[~, linearidx] = max(tempmult123(:));
[r,c,p] = ind2sub(size(tempmult123), linearidx);
%this give 3d coords corresponding to points chosen in MIPs
[r,c,p]
% the points identified in the three mip views might not be consistent so it might be good to do some blurring along the way

Charles Mistretta
Charles Mistretta on 12 May 2021
send e-mail to camistre@wisc.edu and I will send you the volume called temp which is an angiogram

Charles Mistretta
Charles Mistretta on 12 May 2021
The script I sent was probably too complicated.You can just get the coordinates by placing your points in the three views. The key thing is that you need three views to tease ut the coordinates. One 2d image wont provide that informationn

Tim
Tim on 20 May 2021
What kind of projection are you using? Only some projections allow for direct correspondence between values in the projection and locations in the volume (e.g. MIP values can be associated with volume indices, assuming there are no repeat values, but averages cannot). If you are using MIP's, the easiest way is simply to do something like:
[Projection, Indices_of_max_along_MIP_axis] = max(volume, [], MIP_axis);
Use the indices of the feature selected in the projection to look up the indices along the MIP axis. The other indices are just the indices along the first and second dimensions of the projection for the value you are selecting.
But this only works for MIP's, and not even then sometimes (imagine a uniform value cube). The best way to locate a volume is to use an actual volume visualizer, vs. working with a projection.

Community Treasure Hunt

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

Start Hunting!