3D viewer cursor coordinates

Hi,
I've been using imshow3Dfull to display a 3D matrix 192*192*17 with pixel value [0,1], it is super useful. I now need to write up a small programme to allow me extract cursor coordinate. I tried control+right click with then export cursor coordinates in 2D only. Does anyone know a way to extract 3D coordinate as [x,y,z]? Alternatively is there another viewer I can use which enables export of [x,y,x] coordinate easily? Essentially I need to write a piece of code which open the data with a 3d viewer, look into the suspicous pixel and click on it which then feed back the [x,y,z] of the cursor.
Link for imshow3dfull:
Many thanks in advance!
Fiona

8 Comments

Rik
Rik on 16 Nov 2020
Edited: Rik on 16 Nov 2020
You should be able to modify that viewer to return the [x,y] position and extract the z position from the slider. Did you try that? Alternatively you could search for other 3D viewers on the FEX.
I have a (by now heavily) modified version of viewer3D that I use for such tasks, where I also integrated WindowLevel.
Hi Rik, Thanks for swift response. I had a quick look into the code and couldn't quite figure out a good solution. Will try viewer3D next.
Hi Rik, can I ask how do you extract datacursor position in viewer3D please? It is not working for me. When I click on it with datacursor mode on, it just won't record any positions....
Can't you create a new button that will get the Value property of your slider?
LOL I’m still trying. Not experienced on this figures... thanks Rik
I'm currently on mobile so I can't give you specific help, but this thread should get you started: https://www.mathworks.com/matlabcentral/answers/483657-how-to-create-a-gui
This is the slider callback function, when you say 'new button which gets the value property of slider' do you mean a new button in the GUI of imshow3Dfull? Sorry after reading all posts and watch videos still can't quite get my head around it! Thanks in advance!!!
% -=< Slice slider callback function >=-
function SliceSlider (hObj,event, Img)
S = round(get(hObj,'Value'));
set(get(gca,'children'),'cdata',squeeze(Img(:,:,S,:)))
caxis([Rmin Rmax])
if sno > 1
set(stxthand, 'String', sprintf('Slice# %d / %d',S, sno));
else
set(stxthand, 'String', '2D image');
end
end
Yes, that is what I mean. You don't need to change the slider callback, you only need the handle to it.

Sign in to comment.

Answers (0)

Categories

Find more on Just for fun in Help Center and File Exchange

Asked:

on 16 Nov 2020

Commented:

Rik
on 17 Nov 2020

Community Treasure Hunt

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

Start Hunting!