gpt4 book ai didi

直方图平滑

转载 作者:行者123 更新时间:2023-12-04 06:50:51 27 4
gpt4 key购买 nike

我有一个可能非常简单的问题,但我仍然不确定!

其实我只想平滑一个直方图,我不确定以下哪种方法是正确的。我会这样做吗:

vector<double> mask(3);
mask[0] = 0.25; mask[1] = 0.5; mask[2] = 0.25;

vector<double> tmpVect(histogram->size());
for (unsigned int i = 0; i < histogram->size(); i++)
tmpVect[i] = (*histogram)[i];

for (int bin = 1; bin < histogram->size()-1; bin++) {
double smoothedValue = 0;
for (int i = 0; i < mask.size(); i++) {
smoothedValue += tmpVect[bin-1+i]*mask[i];
}
(*histogram)[bin] = smoothedValue;
}

或者你通常会这样做吗?:
vector<double> mask(3);
mask[0] = 0.25; mask[1] = 0.5; mask[2] = 0.25;

for (int bin = 1; bin < histogram->size()-1; bin++) {
double smoothedValue = 0;
for (int i = 0; i < mask.size(); i++) {
smoothedValue += (*histogram)[bin-1+i]*mask[i];
}
(*histogram)[bin] = smoothedValue;
}

我的问题是:首先复制额外向量中的直方图是否合理,以便当我平滑 bin i 时我可以用原版 i-1值(value)还是我干脆做 smoothedValue += (*histogram)[bin-1+i]*mask[i]; ,以便我使用已经平滑的 i-1取而代之的是原始值。

问候和感谢您的回复。

最佳答案

你的直觉是对的:你需要一个临时向量。否则,您最终将使用部分旧值和部分新值,结果将不正确。用一个简单的例子在纸上自己尝试一下。

有两种方法可以编写此算法:

  • 先将数据复制到一个临时向量;然后从那个读取,并写入 histogram .这就是您在第一个代码片段中所做的。
  • 阅读自 histogram并写入临时向量;然后从临时向量复制回 histogram .

  • 为了防止不必要的数据复制,您可以使用 vector::swap .这是一个非常快的操作,可以交换两个向量的内容。使用上面的策略 2,这将导致:
    vector<double> mask(3);
    mask[0] = 0.25; mask[1] = 0.5; mask[2] = 0.25;

    vector<double> newHistogram(histogram->size());

    for (int bin = 1; bin < histogram->size()-1; bin++) {
    double smoothedValue = 0;
    for (int i = 0; i < mask.size(); i++) {
    smoothedValue += (*histogram)[bin-1+i]*mask[i];
    }
    newHistogram[bin] = smoothedValue;
    }

    histogram->swap(newHistogram);

    关于直方图平滑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3165107/

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