【问题标题】:How to calculate image histogram without normalizing data in Matlab如何在 Matlab 中不标准化数据的情况下计算图像直方图
【发布时间】:2017-11-22 00:56:20
【问题描述】:

我有一张图片I,其像素强度在 0-1 范围内。我可以通过标准化来计算图像直方图,但我发现曲线与原始数据的直方图并不完全相同。这会给后面的峰值查找过程带来一些问题(见附图)。

我的问题是在 Matlab 中,有什么方法可以在不对数据进行归一化的情况下绘制图像直方图,以便保持曲线形状不变?当像素强度不在 0-1 范围内时,这将有利于那些原始图像。目前,如果我不对数据进行标准化,我无法计算它们的直方图。

附上归一化和直方图计算的Matlab代码。任何建议将不胜感激!

h = imhist(mat2gray(I));

【问题讨论】:

  • 你试过histogram吗?
  • 我很困惑。我在这里看到 2 个直方图。一个具有大约 160 到 240 之间的值,另一个看起来像归一化后的直方图。如果无法计算,您是如何得到第一个直方图的?
  • @Piglet 我在这里列出的数据是原始数据属于 0-1 范围的数据。我还有其他数据,原始数据不能属于 0-1 范围。这只是一个说明前后曲线不同的例子。
  • 当然曲线在归一化前后是不同的。这就是这背后的全部想法。您将其扩展到整个价值范围。请澄清你的问题。不清楚你想要什么。你为什么首先标准化?你不会得到任何新的信息。你只是冒着新高峰的风险。 “我无法计算他们的直方图”是什么意思。你收到错误消息还是什么?
  • @Piglet 很抱歉造成混乱。我的意思是我无法计算它们的直方图是因为 imhist 函数无法拍摄任何强度不属于 0-1 范围的图像。我只是尝试使用直方图而不是使用 imhist 并且它有效。谢谢!

标签: matlab image-processing histogram normalization


【解决方案1】:

这个线程中描述规范化或强制转换的 imhist 答案是完全正确的。或者,您可以使用 MATLAB 中的 histogram 函数,它可以处理非标准化浮点数据:

A = 255*rand(500,500);
histogram(A);

【讨论】:

    【解决方案2】:

    Documentation of imhist 告诉我们该函数检查输入的数据类型并相应地缩放值。因此,如果不使用您附加的数据进行测试,这可能会起作用:

    h = imhist(uint8(I));
    

    或者,您可以使用 mat2gray 的参数将整数表示法缩放为浮点表示法

    h = imhist(mat2gray(I, [0,255]));
    

    或者只是分割它。

    h = imhist(I/255);
    

    【讨论】:

      猜你喜欢
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2011-09-17
      • 2021-11-30
      相关资源
      最近更新 更多