gpt4 book ai didi

c++ - 如何在 opencv (c++) 中加速 Frangi 过滤

转载 作者:行者123 更新时间:2023-11-28 05:16:14 25 4
gpt4 key购买 nike

我有这张图片:

enter image description here

我想使用 Frangi 过滤器检测此图像上的异常情况。我在这里得到它的代码:Frangi filter .我将此参数用于 frangi 过滤器:

  // Manualy edited parameters of frangi filter.
#define DEFAULT_SIGMA_START 1
#define DEFAULT_SIGMA_END 3
#define DEFAULT_SIGMA_STEP 1
#define DEFAULT_BETA_ONE 1.6
#define DEFAULT_BETA_TWO 1.2
#define DEFAULT_BLACKWHITE true

异常检测非常有效。问题是计算速度。过滤时间为:7秒。在使用 Frangi 过滤器保持良好检测的同时加快速度的可能解决方案是什么?

编辑 1:花费最多时间的代码是 frangi2d 算法内部的 for 循环:

for (float sigma = opts.sigma_start; sigma <= opts.sigma_end; sigma += opts.sigma_step) {
//create 2D hessians
Mat Dxx, Dyy, Dxy;
frangi2d_hessian(src, Dxx, Dxy, Dyy, sigma);

//correct for scale
Dxx = Dxx*sigma*sigma;
Dyy = Dyy*sigma*sigma;
Dxy = Dxy*sigma*sigma;

//calculate (abs sorted) eigenvalues and vectors
Mat lambda1, lambda2, Ix, Iy;
frangi2_eig2image(Dxx, Dxy, Dyy, lambda1, lambda2, Ix, Iy);

//compute direction of the minor eigenvector
Mat angles;
phase(Ix, Iy, angles);
ALLangles.push_back(angles);

//compute some similarity measures
lambda2.setTo(nextafterf(0, 1), lambda2 == 0);
Mat Rb = lambda1.mul(1.0 / lambda2);
Rb = Rb.mul(Rb);
Mat S2 = lambda1.mul(lambda1) + lambda2.mul(lambda2);

//compute output image
Mat tmp1, tmp2;
exp(-Rb / beta, tmp1);
exp(-S2 / c, tmp2);

Mat Ifiltered = tmp1.mul(Mat::ones(src.rows, src.cols, src.type()) - tmp2);
if (opts.BlackWhite) {
Ifiltered.setTo(0, lambda2 < 0);
}
else {
Ifiltered.setTo(0, lambda2 > 0);
}

//store results
ALLfiltered.push_back(Ifiltered);

cout << "Interation done" << endl;
}

最佳答案

你的图像有一个大的黑色区域,你可以选择一个 ROI 它,以便应用过滤器。

ROI 的选择可能基于预先处理图像寻找 ROI 的顶点。也许它已针对您的应用程序进行了修复。也许您可以使用其他信息来选择 ROI。

Rect region_of_interest = Rect(x, y, w, h);
Mat image_roi = image(region_of_interest);

关于c++ - 如何在 opencv (c++) 中加速 Frangi 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42580121/

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