私はこのコードを持っています(これの再訪バージョン):
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);
}
出来ますか?
この答えは可能だと思いますが、これをどのように実装できるか理解できません:
たたみ込みフィルター ガウスぼかし、ガボール フィルターのように、同じ画像に複数のフィルターを連続して適用する場合は、それらを組み合わせることができます。すべてのフィルターを同じサイズにして畳み込みます。次に、結果を画像に適用します。数学によると、効果は前の組み合わせと同じです