直方图估计(来自图像像素的子集)

信息处理 图像处理 估计 直方图
2022-02-12 05:10:47

问题:如何在不迭代所有像素并将它们分箱的情况下找到灰度图像直方图。

描述: 假设我有大量没有共同场景和不同分辨率的图像。对于每个图像,我想计算直方图但为了节省处理时间,我只想要一个估计而不是找到完整的直方图。

一种或多或少明显的方法是以巧妙的方式仅获取像素的子集并使用它们来确定估计值。那么问题是如何对图像进行采样(取哪些像素),以使估计值真正具有代表性(类似于完整的直方图)。什么是好的采样技术可以使用?例如,最简单的可能是在随机位置抽取 N 个样本。我已经想到了一些方法,但如果有任何方法被证明可以给出很好的估计,或者如果没有,我会感兴趣,如果没有,在你的想法中什么可以工作。

除了(或补充)获取像素子集之外,我还没有想到其他不同的直方图估计方法。我很高兴指出任何可以提高估计或处理速度的东西。

我搜索了一段时间,但似乎没有科学论文或其他资源可以讨论这个问题。

1个回答

我认为随机抽样方法似乎无效,因为图像中的统计总体(像素强度)分布非常局部化。可能有更科学的方法,但如果您只需要粗略的近似估计,我想建议一种方法。方法如下:

  1. 使用低通蒙版模糊图像(平均相邻像素)[可选,如果您可以进行模糊计算]
  2. 下采样(使其变小 2 倍)模糊图像
  3. 计算图像的下采样模糊版本的直方图。

这是一个代码实验:

I=imread('coins.png');
Mask=ones(5,5);
tic
H1=imhist(I);
toc
I_Averaged=imfilter(I,Mask); %OPTIONAL STEP
I_DownSampled=I(1:3:end,1:3:end);
tic 
H2=imhist(I_DownSampled);
toc

结果:

  • 经过的时间是 0.003042 秒。%对于原始历史
  • 经过的时间是 0.000365 秒。%对于下采样历史

粗略直方图和原始图像直方图如下图所示:

1.Rough

在此处输入图像描述

  2.Original

在此处输入图像描述

几乎没有区别,计算速度提高了 8 倍。