Color Thresholder tool runs out of memory

8 views (last 30 days)
JSC on 22 Oct 2021
Commented: JSC on 26 Oct 2021
I'm trying to use the Color Thresholder tool in the Image Processing Toolbox to segment and mask very large RGB whole-slide microscopy images (roughly 30,000 x 20,000 px on average). My images are compressed SVSs (a few hundred MB each), though I could make them TIFFs too if needed. After the tool loads the image and prompts me to select a color space, I do so and then the tool freezes and I receive the following message:
Warning: Error occurred while executing the listener callback for the class
SelectedColorSpace property PostSet event:
Error using matlab.images.internal.rgb2hsv
Requested 42277x60589x3 (57.3GB) array exceeds maximum array size preference (15.9GB). This might cause MATLAB to become unresponsive.
Error in rgb2hsv (line 50)
h = matlab.images.internal.rgb2hsv(imageIn);
Error in
Error in
Error in>@(hobj,evt)self.colorSpaceSelectedCallback(evt)
Error in (line 161)
self.SelectedColorSpace = src.String;
Error in>@(src,evt)self.selectFromButtons(src,evt) (line 148)
'Callback',@(src,evt) self.selectFromButtons(src,evt));
Related documentation
> In (line 161)
In>@(src,evt)self.selectFromButtons(src,evt) (line 148)
Is there a way to increase the available memory for the thresholder tool or allow it to work with blockproc? I have already set the Java Heap Memory to max (4075 MB), compressed my image files, and reduced the pixel dimensions by 50%. I also tried using bigimage or blockedImage but it looks like they are incompatible with the tool.

Accepted Answer

Image Analyst
Image Analyst on 22 Oct 2021
You should reduce the pixel dimensions by a factor of 50 or 100. There is no need to have such a huge image for determining the color thresholds. Believe it or not you will most likely end up deciding on the same thresholds if you have the full image or just a much smaller version. So resize it so that it's like 900 by 600 and you should be fine. It will fit in memory and you'll end up with the same thresholds you'd have if you had used the full size image. Remember, your screen doesn't have 30000 pixels across so you're making thresholding decisions on the overall image that can fit on your screen, which is probably 1920x1080 or something.

Sign in to comment.

More Answers (1)

yanqi liu
yanqi liu on 23 Oct 2021
sir, may be use imresize to make image smaller can continue the processing.

Community Treasure Hunt

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

Start Hunting!