gpt4 book ai didi

c++ - 强度直方图++

转载 作者:行者123 更新时间:2023-11-30 05:34:17 25 4
gpt4 key购买 nike

我正在为灰度图像编写自己的强度直方图,其中将 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 个 bin 非常有效,因为每个计数都添加到直方图中,但是对于 128 个 bin,它错过了图像的后半部分,我知道如果 bin 大小小于 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];
}

鉴于这些是颜​​色,您可以(如果您选择)应用 Gamma 曲线而不是进行线性插值。这样做的原因是,如果你想对你如何看待颜色进行建模,而不是仅仅将直方图基于输入数字本身。两者之间的区别是基于这样一个事实,即视觉类似于对数而不是线性,因此线性直方图(特别是如果您使用的 bin 与可能的输入值数量相比相对较少)并不代表我们所看到的非常准确。

关于c++ - 强度直方图++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34317732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com