并行化高斯模糊链

问题描述 投票:1回答:1

我有这个代码(qzxswpoi的重新版本):

this

哪里:

void HessianDetector::detectOctaveKeypoints(const Mat &firstLevel, ...)
{
   vector<Mat> blurs (par.numberOfScales+3, Mat());
   blurs[1] = firstLevel;
   for (int i = 1; i < par.numberOfScales+2; i++){
       float sigma = par.sigmas[i]* sqrt(sigmaStep * sigmaStep - 1.0f);
       blurs[i+1] = gaussianBlur(blurs[i], sigma);
   }
...

所以,正如你所看到的,每个Mat gaussianBlur(const Mat input, const float sigma) { Mat ret(input.rows, input.cols, input.type()); int size = (int)(2.0 * 3.0 * sigma + 1.0); if (size % 2 == 0) size++; GaussianBlur(input, ret, Size(size, size), sigma, sigma, BORDER_REPLICATE); return ret; } 都依赖于blurs[i+1],所以它无法并行化。我的问题是:有没有相同的方法来获得相同的结果,但使用blurs[i]而不是firstLevel?所以它应该看起来像这样:

blurs[i]

可能吗?

for (int i = 1; i < par.numberOfScales+2; i++){ float sigma = //something; blurs[i+1] = gaussianBlur(firstLevel, sigma); } 回答让我觉得这是可能的,但我无法理解如何实现这个:

卷积过滤器如果连续在同一图像上应用多个过滤器,如高斯模糊,然后是Gabor过滤器,则可以将它们组合在一起。使所有过滤器具有相同的大小并对其进行卷积。然后将结果应用于图像。 Math表示效果与之前的组合相同

c++ opencv blur gaussianblur
1个回答
0
投票

这是可能的(您可以并行化)。我有完全相同的问题,并以这种方式解决它(使用python代码查看我的问题的答案)。

This

© www.soinside.com 2019 - 2024. All rights reserved.