Threshold image after applying mask

13 views (last 30 days)
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.

Accepted Answer

Image Analyst
Image Analyst on 1 May 2017
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();
  3 Comments
Dua Arshad
Dua Arshad on 30 Mar 2020
Sir, How can i apply this graythresh masking concept on the whole grayscale image. i have to segment the backgroud of fruits.
is it possible if i take first the binary image and make the background black and then use its mask to the gray image to remove background?
Image Analyst
Image Analyst on 30 Mar 2020
You can do :
% Assume background is dark. Threshold to find dark pixels.
backgroundMask = grayImage < 50; % or > or whatever value works for you instead of 50.
% Blacken background.
grayImage(backgroundMask) = 0; % Set background to 0.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!