并行化高斯模糊链
Parallelize chain of Gaussian Blurs
我有这段代码(重新访问版本(:
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滤波器,你可以 将它们组合在一起。使所有过滤器的大小相同并卷积 他们。然后将结果应用于图像。数学说效果将是 与之前的组合相同
这是
可能的(你可以并行化(。我遇到了完全相同的问题,并以这种方式解决了它(请参阅我对这个问题的回答,使用 python 代码(。
https://dsp.stackexchange.com/questions/667/image-pyramid-without-decimation/55654#55654
相关文章:
- 在C++上实现高斯赛德尔迭代方法
- C++:矩阵高斯消除不起作用:使用单维数组来存储元素
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 用于创建高斯随机数的 c++ 函数
- 将高斯模糊应用于灰度图像
- 高斯雅各比法
- 用高斯Seidel红色黑色求解1D泊松方程
- 如何改变高斯分布(提升)中的种子
- 并行化高斯模糊链
- 为什么在 C++ 中实现高斯勒让德算法没有产生结果
- 使用高斯模糊进行图像卷积,可以加速
- 高斯模糊的SSE优化
- 使用帧缓冲进行高斯模糊 2 遍
- 实现高斯模糊-如何计算卷积矩阵(核)
- 为什么EmguCV高斯模糊不返回与OpenCV高斯模糊相同的结果?
- 三维数据的高斯模糊
- 高斯模糊算法
- OpenCV中的高斯模糊:在边界外设置0常数
- 高斯模糊与FFT问题
- Opengl - 高斯模糊位移/错位问题