强度直方图++
Intensity Histogram ++
本文关键字:直方图 更新时间:2023-10-16
我正在为灰度图像编写我自己的强度直方图,其中bin的数量被传递到函数中。这就是我目前所拥有的:
std::vector<unsigned int> Image::histogram(const int bins)
{
std::vector<unsigned int> histogram(bins ,0);
for (unsigned int i(0); i < bins; i++)
{
for (unsigned int j(0); j < m_height * m_width; ++j)
{
if (i == m_p_image[j])
{
histogram[i]++;
}
}
}
return histogram;
}
当每个计数都被添加到直方图中时,这对256个仓非常有效,但对于128个仓,它错过了图像的后半部分,我知道如果仓大小小于256,我需要实现一种将点分组在一起的方法,但我不确定如何做到这一点。
您的代码让我觉得不必要的笨拙。没有真正需要外环。
然而,要回答你问的问题,通常的方法是使用线性插值——也就是说,找到一个值在输入范围内的比例位置,然后在输出范围内增加相同的比例位置。
for (j =0; j<height * width; j++) {
double input_pos = image[j] / 256.0;
int output_pos = int(input_pos * bin_count);
++histogram[output_pos];
}
假设这些是颜色,可以(如果选择)应用伽玛曲线,而不是进行线性插值。这样做的原因是,如果你想对你如何看待颜色进行建模,而不仅仅是基于输入数字本身的直方图。两者之间的区别是基于这样一个事实,即视觉是对数的,而不是线性的,因此线性直方图(尤其是如果与可能的输入值数量相比,你使用的仓相对较少)不能非常准确地代表我们所看到的。
相关文章:
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 二进制图像的空间直方图
- 如何在c++中仅使用for循环打印此代码的垂直直方图
- 创建直方图以显示每个类别/箱中带有星号的项目数量
- 打印带C++的直方图
- 将直方图的 2D 数组传递给函数 (C++)?
- 如何在OpenCV 3.4.7中计算CV_32FC1 cv::GpuMat图像的(范围)直方图
- 如何平行化直方图添加?
- 根C++直方图中的错误
- 动态分配许多 Boost::直方图对象
- 使用 OpenCV 原始指针和 lambda 作为直方图的不同结果
- 如何计算图像中每个块的直方图,然后将它们连接起来?
- C++:使用数组、指针和 for 循环制作直方图。我就在那里,我可能想得太辛苦了
- 将两个 1D 直方图合并为一个
- 使用STD :: MAP在直方图峰周围的平均值
- 使用标准库或Boost库从一组数据中计算直方图
- OPENCV MAT问题:直方图和此循环之间的差异
- 优化直方图更新
- 在OPENCV中归一化函数中的直方图
- 从直方图OPENCV中的峰中获取色调值