【发布时间】:2017-08-27 01:30:27
【问题描述】:
我有这个代码(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);
}
有可能吗?
This 回答让我认为这是可能的,但我不明白我该如何实现:
卷积过滤器如果您在同一张图像上应用多个过滤器 连续地,像高斯模糊,然后是 Gabor 滤波器,你可以 将它们组合在一起。使所有过滤器大小相同并进行卷积 他们。然后将结果应用到图像上。数学说效果会是 和之前的组合一样
【问题讨论】:
-
你想要lazy evaluation。这可以通过expression templates 来实现。
标签: c++ opencv blur gaussianblur