MATLAB: Threshold image after applying mask

masksegmentationthreshold

Hi,
I have an image (object + background, uint16) and I remove the background of this image by using imbinarize. So the background has a value of zero and the object has its original values (1000 – 7000). Now I want to apply a threshold only on the object. I tried to change the zero values to nan, but that did not work. How can I only threshold the object, without all the zeros of the background?
Thanks!
Edit: I attached a photo of my file. Inside the red line is the object and outside is the background (black). I want to apply a threshold on the intensity of the object. I tried to remove the background by a mask, but when applying an automatic threshold, the background is still included. So hope someone can help.

Best Answer

I think imbinarize() and graythresh() work on 1-D images. So if you want to determine the a threshold only considering the gray levels of the gray ring and not considering the black background, extract the ring pixels into a list and pass them to graythresh():
ringPixels = originalImage(originalImage > theThreshold); % No black pixels here
newThreshold = graythresh(ringPixels);
Since you've already masked the image by doing something like
maskedImage = originalImage; % Initialize
maskedImage(mask) = 0; % Erase background.
you could also do the first line like this
ringPixels = maskedImage(maskedImage > 0);
and then call graythresh();
Related Question