OpenCV-Hinweise (10): Häufig verwendete Kantenerkennungsoperatoren – Laplace, LoG

Im achten Artikel dieser Serie haben wir die Schlussfolgerungen der ersten und zweiten Ableitung am Rande der Analyse vorgestellt:

  • Die erste Ableitung erzeugt normalerweise dickere Kanten im Bild;

  • Die zweite Ableitung reagiert stark auf feine Details wie dünne Linien, isolierte Punkte und Rauschen;

  • Die Ableitung zweiter Ordnung erzeugt beim Übergang von Graustufensteigungen und Graustufenstufen eine Doppelkantenreaktion;

  • Anhand des Vorzeichens der zweiten Ableitung lässt sich bestimmen, ob der Übergang am Rand von hell nach dunkel oder von dunkel nach hell erfolgt.

Der Ableitungsoperator erster Ordnung (z. B. der Sobel-Operator) bestimmt den Rand des Bildes durch Ableitung des Bildes. Punkte mit höheren Absolutwerten entsprechen den Rändern des Bildes. Wenn wir weiterhin die zweite Ableitung finden, entspricht der Punkt mit dem höheren Absolutwert des ursprünglichen Werts dem Nulldurchgangspunkt . Daher können Kanten auch durch Finden des Nulldurchgangs der zweiten Ableitung erkannt werden. In manchen Fällen kann es einfacher sein, den Nulldurchgang der zweiten Ableitung zu finden.

f12c651c13c056ae7acd2081aa7c0623.jpeg
Erste Ableitung und zweite Ableitung.png

Teil 11. Laplace-Operator

Wir haben zuvor eingeführt, dass der Laplace - Operator der zweiten Ableitung durch Differentialnäherung vereinfacht werden kann und seine Formel lautet

Sein Faltungskern:

57e0c539c5566711cef771dfa5cea3a6.jpeg
Laplace-Kernel.png

Dies ist sein 4-Nachbarschafts-Faltungskern.

11.1 Erweiterung des Laplace-Operators

Der Laplace-Operator ist ein isotroper Operator mit Rotationsinvarianz.

Nachdem der 4-Nachbarschafts-Laplace-Operator um 45° gedreht und zum ursprünglichen Operator addiert wurde, erhält man den 8-Nachbarschafts-Operator.

ab148dcc87d6b1e88c31b8ef81fb513a.jpeg
Erweiterter Laplace-Operator.png

Dies ist sein 8-Nachbarschafts-Faltungskern. Dieser Operator stellt die Differenz zwischen der Summe von 8 Pixeln in einem Kreis um ein Pixel und dem 8-fachen des mittleren Pixels dar, wie das Ergebnis der Laplace-Berechnung ergibt.

Darüber hinaus gibt es zwei Laplace-Faltungskerne, nämlich die Umkehrung des 4-Nachbarschafts-Faltungskerns und des 8-Nachbarschafts-Faltungskerns.

0312d8d0fabac7a0ec2d776042af4bd4.jpeg
Erweiterter Laplace-Operator 2.png

21.2 Unschärfeerkennung von Bildern

Die Schritte zur Unschärfeerkennung auf Bildern mithilfe der Laplace-Transformation lauten ungefähr wie folgt:

  • Führen Sie eine Laplace-Transformation am Bild durch und erkennen Sie horizontale und vertikale Kanten

  • Ermitteln Sie dann die Varianz des Ausgabebildes nach der Laplace-Transformation

  • Wenn das Bild klar genug ist, ist die Varianz des Ausgabebildes größer als der angegebene Schwellenwert

  • Wenn das Bild relativ unscharf ist, erkennt die Laplace-Transformation nicht genügend Details im Bild und es gibt weniger Kanten, was zu einem Ausgabebild mit einer Varianz führt, die unter einem bestimmten Schwellenwert liegt.

Dieser Prozess erfordert die Auswahl eines geeigneten Schwellenwerts.

Der Laplace-Operator kann Bereiche in einem Bild hervorheben, die schnelle Gradientenänderungen enthalten, die häufig mit Kanten verbunden sind. Wenn daher die Varianz eines Bildes hoch ist, deutet dies darauf hin, dass das Bild eine große Bandbreite an Kantenreaktionen aufweist, einschließlich kantenähnlicher und nichtkantiger Kanten, was für ein normal fokussiertes Bild repräsentativ ist. Wenn die Varianz jedoch gering ist, bedeutet dies, dass die Kantenreaktion im Bild gering ist und fast keine Kanten vorhanden sind. Daher können Sie durch Vergleich der Varianz mit dem voreingestellten Schwellenwert feststellen, ob das Bild unscharf ist.

Befolgen Sie die obigen Schritte, um eine Fuzzy-Erkennungsfunktion zu implementieren:

bool isImageBlurry(const char* inputFile, double threshold)
{
    Mat src = imread(inputFile);
    if (src.empty()) {
        printf("Image not loaded\n");
        return false;
    }

    Mat gray;
    cvtColor(src, gray, COLOR_BGR2GRAY);
    Mat dst, absDst;
    cv::Laplacian(gray, dst, CV_16S, 3);
    cv::convertScaleAbs(dst, absDst);

    Mat mean, stddev;
    double m = 0, sd = 0;
    meanStdDev(absDst, mean, stddev);
    m = mean.at<double>(0, 0);
    sd = stddev.at<double>(0, 0);
    double result = sd * sd;
    std::cout << "m: " << m << std::endl;
    std::cout << "StdDev: " << result << std::endl;
    return result <= threshold;
}

Schreiben Sie dann ein Programm, um festzustellen, ob dieses Bild verschwommen ist

9b8eb97c13c08e62a3828da5bf4e23b7.jpeg
Verschwommenes Handybild.jpeg
int main(int argc,char *argv[])
{
    string fileName = ".../test.jpeg";
    bool result = isImageBlurry(fileName.c_str(),11.0);
    cout << "result =" << result <<endl;

    return 0;
}

Ausgabeergebnis:

m: 2.5213
StdDev: 6.31374
result = 1

Die Beschreibung ist ein verschwommenes Bild.

Der Laplace-Operator reagiert empfindlich auf Rauschen und eignet sich im Allgemeinen nicht für Bilder mit Rauschen.

Teil 22. LoG-Betreiber

Der Kantenerkennungsoperator LoG (Laplace of Gaussian) wurde 1980 gemeinsam von David Courtnay Marr und Ellen Hildreth vorgeschlagen. Er wird auch Marr-Hildreth-Operator genannt. Er findet den optimalen Filter für die Kantenerkennung basierend auf dem Signal-Rausch-Verhältnis des Bildes. Dieser Algorithmus führt zunächst eine Gaußsche Glättung des Bildes durch und faltet es dann mit dem Laplace-Operator. Warum das so ist, erklären wir später.

Sehen wir uns zunächst die Formel der zweidimensionalen Gaußschen Funktion an:

Die Ableitung erster Ordnung und die Ableitung zweiter Ordnung der Gaußschen Funktion werden in vielen Operatoren verwendet. Beispielsweise wird die Ableitung erster Ordnung auf den Canny-Operator angewendet, die Ableitung zweiter Ordnung auf den LoG-Operator und so weiter.

Leiten Sie einfach die erste Ableitung her:

Gleicher Grund:

Und leiten Sie seine zweite Ableitung her:

Gleicher Grund:

Durch Einsetzen der Gaußschen Funktion in den Laplace-Operator erhält man den LoG-Operator:

Der Marr-Hildreth-Algorithmus lautet wie folgt:

  1. Lassen Sie zunächst den LoG-Kernel mit einem Eingabebild falten:

  1. Finden Sie den Nulldurchgangspunkt von g(x,y) , um die Kantenposition von f(x,y) zu bestimmen. Da sowohl die Laplace-Transformation als auch die Faltung lineare Operationen sind, kann die obige Gleichung geändert werden

Unter diesen ist f(x,y) das Eingabebild und g(x,y) das Ausgabebild.

Dies erklärt nur das zuvor Gesagte: Der Algorithmus führt zunächst eine Gaußsche Glättung des Bildes durch und faltet es dann mit dem Laplace-Operator. Da der Gaußsche Filter zuerst zum Glätten des Bildes verwendet wird, können Rauschen und Details reduziert werden. Anschließend wird der Laplace-Operator verwendet, um eine Kantenerkennung am gefilterten Bild durchzuführen.

Sein Vorteil besteht darin, dass Rauschen effektiv entfernt werden kann und gleichzeitig die echten Kanten im Bild erhalten bleiben. Im Vergleich zum Laplace-Operator verfügt der LoG-Operator über bessere Kantenpositionierungsfunktionen und Störfestigkeit. Es weist jedoch auch einige Mängel auf und der Berechnungsaufwand ist relativ groß.

Das Bild unten ist ein dreidimensionales Bild des negativen LoG-Operators , der wie ein „mexikanisches Sombrero“ aussieht. Daher wird es in der Branche auch als mexikanisches Hut-Wavelet bezeichnet.

3517d727b1a02a119060a4680b95871b.jpeg
Dreidimensionales Bild des negativen LoG-Operators.png
2e12fb1c874fe7de46c4274dc675a9bf.jpeg
Mexikanischer Hut.jpg

Der negative LoG-Operator kann ungefähr durch eine 5*5-Vorlage dargestellt werden.

43182d64f239d42c3acfa12329710e7c.jpeg
LoG-Faltungskernel.png

Im Folgenden werden Gaußsche Unschärfe und Laplace-Transformation verwendet, um LoG zu implementieren:

int main(int argc,char *argv[])
{
    Mat src = imread(".../street.jpg");
    imshow("src",src);

    Mat dst, gray, edge;
    cv::GaussianBlur(src, dst, cv::Size(3, 3), 0 ,0); // 高斯模糊 去除噪声
    cv::cvtColor(dst, gray, cv::COLOR_BGR2GRAY); // 灰度化
    cv::Laplacian(gray, edge, CV_16S, 3); // 使用拉普拉斯算子提取边缘
    cv::convertScaleAbs(edge, edge);

    imshow("LoG", edge);

    waitKey(0);
    return 0;
}
0dc1f07bbececf39e1f5428be1a1abae.jpeg
LoG-Kantenerkennung.png

Teil 33. Zusammenfassung

In diesem Artikel werden der Laplace-Operator und der LoG-Operator vorgestellt, die beide Kantenoperatoren von Ableitungen zweiter Ordnung sind.

Insbesondere führt der LoG-Operator eine Gaußsche Filterung basierend auf dem Laplace-Operator ein, die den Einfluss von Rauschen bis zu einem gewissen Grad überwinden kann. Es weist jedoch immer noch gewisse Einschränkungen auf, aber die Einführung dieser Idee spielte eine positive Rolle in der späteren Bildmerkmalsforschung und wurde von vielen nachfolgenden Algorithmen übernommen.

[ Java- und Android-Technologie-Stack] Öffentliches Konto

Achten Sie auf Java/Kotlin-Server, Desktop, Android, maschinelles Lernen und clientseitige Intelligenz

Für weitere spannende Inhalte achten Sie bitte auf:

Supongo que te gusta

Origin blog.csdn.net/SLFq6OF5O7aH/article/details/134983116
Recomendado
Clasificación