如何自动归一化多个直方图以达到相同的最大值?

Posted

技术标签:

【中文标题】如何自动归一化多个直方图以达到相同的最大值?【英文标题】:How to automatically normalize multiple histograms to get to the same maximum level? 【发布时间】:2017-05-26 06:33:35 【问题描述】:

我有多个从各种样本生成的直方图,最终需要组合。我发现在组合阶段我没有得到好的结果,因为不同的图有不同的最大值,但是如果我将它们标准化为有点相似的值,我会得到一个很好的结果。

例如下面三个图:

现在可以看出,其中一个图的峰值在 0.067 左右,而另外两个在 0.4 左右。我无法在这种状态下将它们组合起来,但是在直观地查看这些图之后,我知道如果我将第一个图相乘 0.6 我会得到:

现在它们处于同一级别,可以一起显示。

我对每个结果都在视觉上这样做。有可能实现自动化吗?由于它并不总是这样,有时第一个和第二个输入(图)很低,但第三个输入达到峰值,我必须将第三个图除以某个值,我在视觉查看图后知道。

【问题讨论】:

通过除法或乘法“归一化”直方图有时会耗尽直方图的某些属性,例如直方图的面积/功率,或部分之间的关​​系。如果您只想将它​​们放在同一个图表上,也许plotyy 会在这里有所帮助? 【参考方案1】:

Matlabs 函数histogram 有一些normalization types built in。您可以对计数数或直方图区域的总和进行归一化(请参阅also),...但您还不能对最大值进行归一化,这可能是您想要的。

我建议在不使用histcounts 绘图的情况下计算直方图,然后将它们标准化为一个常见的最大值,例如 1,然后将它们全部绘制在一起或在条形图中分开。

例子:

% generate example data
a = randn(100, 1) + 5;
b = randn(100, 1) * 4 + 8;
nbins = 0:20;

% compute histograms
[na, edges] = histcounts(a, nbins);
centers = mean([edges(1:end-1);edges(2:end)]);
nb = histcounts(b, nbins);

% normalize histograms to maximum equals 1
na = na / max(na);
nb = nb / max(nb);

% plot as bar plots with specified colors (or however you want to plot them)
figure;
bar_handle = bar(centers', [na',nb']);
bar_handle(1).FaceColor = 'r';
bar_handle(2).FaceColor = 'g';
title('histogram normalized to max');

看起来像

【讨论】:

以上是关于如何自动归一化多个直方图以达到相同的最大值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Matlab 中对大数据进行归一化?

如何求取一个的图像的归一化直方图?

Python中的最小-最大归一化

笔记:错误记录- gdal读取哨兵1雷达数据分贝化数据归一化计算极值为nan,输出相同错误结果

R语言plotly可视化:plotly可视化多个数据集归一化直方图(historgram)并在直方图中添加密度曲线kde(核密度估计的密度曲线density plot)

“通过向量的最大值对向量进行归一化”是啥意思?