Thresholding based on energy

2 次查看(过去 30 天)
D_coder
D_coder 2019-1-7
I have an image which is very sparse. I want to threshold the image by retaining a certain amount of energy. What is the most efficient way in matlab to perform thresholding based on energy.

回答(1 个)

Image Analyst
Image Analyst 2019-1-7
You need to compute the histogram, then the CDF:
numBins = 100; % whatever....
[counts, edges] = histcounts(energyImage, numBins);
cdf = cumsum(counts);
Now figure out what energy you want to remain. Let's say it should be in the darker gray levels rather than the brighter ones. Let's say it's 3.5e7 for example. Pick whatever number is right for your situation. Then find the energy level of the CDF that has that energy
remainingEnergy = 3.5e7; % Whatever....
index = find(cdf > remainingEnergy, 1, 'first')
% Now find edge where this occurs
thresholdLevel = edges(index);
% Now threshold the image at that level:
binaryImage = energyImage < thresholdLevel;
It's probably the most efficient way.
  4 个评论
D_coder
D_coder 2019-1-7
i dont want any data dependent operations , histogram depends on bins
Image Analyst
Image Analyst 2019-1-7
Anything and everything you do in MATLAB is data dependent. You use data, that's what you do. Another data dependent way is to call sort() and then cumsum() and then find(). This would be similar to the histogram method if you chose the histogram to have as many bins as pixels in the image.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Images 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by