Use this class to make a self-contained image viewing panel within a GUI (or any figure). Similar to imtool but with the added ability to scroll through slices of an image stack. Only designed to view grayscale (intensity) images. Hopefully this will save people time when either designing a GUI or even when they just need to quickly look through an image stack.
It's mostly bug fixes so far along with a bunch of stylistic changes (splitting up long lines, changing indentation, suppressing compiler warnings where appropriate). Next up, I'm now working on some code to allow ROIs in the imtool3D to be more closely integrated with a host application that is making use of the imtool3D in a GUI panel.
My use of the tool is for a preclinical DCE-MRI analysis tool I'm working on. I am using imtool3D to display the DCE time series and draw the ROIs for the analysis.
Thanks @Matt! Would you mind giving an executive summary of the changes you've made thus far? Anything major beyond bug fixes?
Great tool! I've made a fork with some modifications here: https://gitlab.msu.edu/MCIL/imtoool3D You're welcome to integrate any of my changes back into the main branch if they are useful to you.
A last feature I forgot to mention is a separate LUT for the Mask to represent label masks. That would actually be truly amazing to overlay segmentation results on an image.
Thanks for the positive feedback Sebastien. I'll think about adding some of those features in future releases. FYI, the voxel ratio is actually adjustable already. There's a method called setAspectRatio. I don't think I've added that methods in the documentation but its pretty straightforward.
This is an amazing tool! The only features I am missing are:
- View histogram in log scale
- Limit histogram to selected ROI
- 3D Rotate volume respect X and Y axis
- Adjustable voxel ratio
- Perform adjustable limited depth Z MIP
- Z MIP (interactive with 3D rotation)
Thank You for sharing this amazing tool!
@Giorgio, I just uploaded a new version which has better window and leveling behavior. You can control how fast the window and leveling changes by changing the windowSpeed property (default it 2, increase this number to window faster).
Very nice tool!
Is it possible a faster window and leveling by mouse left click?
You are welcome Justin, it would be also nice to display two different 3D images in different colors (good to visualize fusion results).
Thanks @Meade and @Ibraheem Al-Dhamari for pointing out this bug. I tend to just convert all my images to doubles when I read them in so I hadn't seen this error before. I'll include this fix in the next version.
I get the following error when opening standard DICOM data using Matlab's baked in dicomread fnc:
Error using .*
Integers can only be combined with integers of the same class, or scalar doubles.
Error in linspace (line 30)
y = d1 + (0:n1).*(d2 - d1)/n1;
Error in imtool3D (line 310)
I changed line 310 to :
and it seemed to take care of it.
very nice tool :D
I changed these lines after311 to make it suitable for different image types e.g. I have an 256x256x60 int16 image and I got some errors but this code solved them:
would be nice if there is "undo button". Maybe I implement this when I have more time.
@Diana Carver, I just updated imtool3D to be compatible with R2014b. Hopefully should work for you now.
In case you're curious, the problem was that you can no longer make a double array of handles in R2014b. Thus cell2mat throws an error when trying to convert a cell array of handles to a double array of handles. This is because the new Matlab has drastically changed the graphics system. Graphics handles are now objects, and not doubles.
Great tool! Only thing is, I just upgraded to 2014b and alas it no longer works. I get this error:
Error using cell2mat (line 52)
CELL2MAT does not support cell arrays containing cell arrays or objects.
Error in imtool3D (line 225)
Trying to debug it myself to figure out what went wrong.
I just submitted a major update to the tool. The user now has access to all the underlying handles of the objects contained in the tool. You may be able to accomplish what you want now. (Though I'm not entirely clear on what exactly you want to do).
%get a structured variable of all the handles
handles = getHandles(tool)
%et the 'AlphaData' property of the image
Thanks for the positive feedback. Unfortunately there is not an AlphaData property for this tool right now. I'm planning to make a major revision to this tool to make it easier to access the underlying image objects. It will be much easier to do what you describe in the next version. Stay tuned! (no timeline yet, really busy with other stuff at the moment).
Great tool! Is there an equivalent to an 'AlphaData' tag property for this tool? Trying to see if one could overlay a set of images and use this tool to scroll through it. Thanks!
You can use mouse wheel to switch slices. It makes the GUI easier to use.
Added a "smart" paint brush. The brush works by doing a local binary Ostu threshold and then painting onto only the area that contains the most pixels. This lets you accurately capture the edge of a feature quickly.
Fixed a small bug related to windowing with the mouse.
Added a paint brush to adjust the overlay mask. The window and leveling should now work well for images for any dynamic range. Added a property (windowSpeed) that controls how quickly the window and level settings change with mouse movement.
Fixed one more window and level bug.
2.3.2- Squished a few bugs for older Matlab versions. Added method to set and get the transparency of the overlaid mask. Refined the panning and zooming.
Now the code makes sure the figure is centered when creating an imtool3D object in a new figure.
Added ability to overlay a semi-transparent mask on top of the image data. Also redesigned/simplified the ROI tools implementation.
Updated for compatibility with MATLAB R2014b. Also fixed a bug where an error was shown when a single slice image is viewed with imtool3D.
Updated to allow for multiple imtool3D objects in a single figure while being able to use the scroll wheel for each one.
2.1- Added crop tool, help button, and button that resets the pan and zoom settings to show the entire image (useful when you're zoomed in and you just want to zoom out quickly.
New in version 2.0- Completely redesigned the tool. Window and leveling, pan, and zoom are now done with the mouse as is standard in most medical image viewers. Also the overall astestic design of the tool is improved with a new black theme. Added ab
Added the method: