필터 지우기
필터 지우기

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
Jason
Jason 2024년 5월 20일
Thankyou!
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