Ich habe dieses Bild:Wie beschleunigen Frangi Filterung in opencv (C++)
Ich möchte mithilfe von Frangi Filter Anomalien auf diesem Bild erkennen. Code dafür habe ich hier: Frangi filter. Ich verwende diese Parameter für Frangi-Filter:
// 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
Anomalieerkennung funktioniert sehr gut. Das Problem ist die Geschwindigkeit der Berechnung. Die Zeit für das Filtern beträgt: 7 Sekunden. Was können mögliche Lösungen sein, um schneller voranzukommen und gleichzeitig eine gute Erkennung mit Frangi Filter zu erhalten?
EDIT 1: Der Code, wo die meiste Zeit ist innerhalb eines frangi2d Algorithmus für die Schleife verbringen:
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;
}
Das ist ein guter Punkt, aber ich habe es schon versucht und immer noch bringt mir nicht viel mehr Geschwindigkeit. Ich muss in einen Frangi-Filteralgorithmus gehen und ihn optimieren. – jok23
Ich habe auch einen Code hinzugefügt, wo die meiste Zeit in frangi2d funtion verbracht wird (for loop) – jok23