MATLAB Answers

Determine the intensity value, "T", in a 2D image for which 99.9% of all intensity values are less than "T"

3 views (last 30 days)
Ed Principe
Ed Principe on 30 Oct 2020
Commented: Ed Principe on 30 Oct 2020
% I can read in an image and calculate a threshold for which the pixels are above some value, i.e., 6000.
Threshold=Q>6000;
% I can count the number of those pixels above that value
PixelCount = sum(Threshold(:))
% ratio the PixelCount over the total # of pixels in an image with dimensions X1, Y1 to determine a fraction, or percent of pixels above that value
Fraction=PixelCount/(X1*Y1)
But if I wish to calculate the intensity value that represents a desired fraction, i.e. 0.001, - instead of choosing an arbitrary number, like 6000........... how do I program to extract the intensity value that represents cutoff for which 99.9% of pixels have a lower intensity ?
I should mention these are uint16 images.
  1 Comment
Ed Principe
Ed Principe on 30 Oct 2020
I think I have something that works for me..... Q is an image from an image stack extracted in a for loop wih index 'p':
Q=l.images1(:,:,p);
SortedQ=sort(Q(:));
figure;plot(SortedQ);
title(['Sorted Pixel Intensities:',F,': image #: ', num2str(p),'/',num2str(l.noimages)],'Interpreter', 'none');
SortedQ(round(0.999*X1*Y1))

Sign in to comment.

Accepted Answer

Akira Agata
Akira Agata on 30 Oct 2020
I believe prctile function will be helpful to this task, like:
% Read sample gray scale image
I = imread('cameraman.tif');
% Calculate threshold value (99.9% cut-off)
th = prctile(I(:),99.9);
Check the result:
>> nnz(I<th)/numel(I)
ans =
0.9990
  3 Comments
Ed Principe
Ed Principe on 30 Oct 2020
Yes, that works, that is essentially what I came up with in my comment on the original post above. Thank you very much!!

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!

Translated by