Weird Imhist beahviour seen

5 次查看(过去 30 天)
Jason
Jason 2014-11-21
评论: DGM 2024-5-20
Hi, ive been tearing my hair out all morning. I want to plot the histogram of an image. I normally use im hist. My images are 3 12 bit images that are summed, hence the max value can be 3*4095=12285. It appears my histogram is defaulting to 16 bit values.
This is my code:
IM = imread(file);
IM1=double(IM);
[maxval,idx]=max(IM1(:)) % determine number of bins (of width = unity)
maxval= double(maxval);
[counts,x] = imhist(IM,maxval);
figure
stem(x,counts,'b', '.');
counts(maxval) %check the max intensity
First of all, counts(maxval) returns zero, and here is the histogram stem plot - defaulting to 65535 levels. I want to have 1-12285 levels.

采纳的回答

Image Analyst
Image Analyst 2014-11-21
Try this:
grayImage = imread(file);
maxGrayLevel = max(grayImage(:)) % determine max gray level.
[counts, grayLevels] = imhist(grayImage);
bar(grayLevels, counts, 'Color', 'b');
xlim([0, maxGrayLevel)]; % Specify range of x axis.
Let me know how it works.
  2 个评论
Jason
Jason 2014-11-21
OK, so you don't suppress the unwanted gray levels, but use display via xlim to view only whats wanted.
Yes this works, thanks IA!
Image Analyst
Image Analyst 2014-11-21
You're welcome. Can you go ahead and officially mark the answer as "Accepted" then? Thanks in advance.

请先登录,再进行评论。

更多回答(1 个)

DGM
DGM 2024-5-20
I don't know where everyone is getting uint12-scale images, but I guess it's a thing. I posted an example which demonstrates three ways of representing improperly scaled images (uint12 in uint16, and int12 in int16) using imhist() and other tools.
  2 个评论
DGM
DGM 2024-5-20
Oh wow. I didn't even notice both threads were yours. I certainly didn't expect a prompt reply!
You're welcome.

请先登录,再进行评论。

标签

Community Treasure Hunt

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

Start Hunting!

Translated by