Wie rekonstruiere ich Text aus einem Bild nur mit morphologischen Operationen?

  • Ich möchte den Text aus dem folgenden Bild so gut wie möglich rekonstruieren. Der schwierige Teil ist, dass ich es nur mit morphorogischen Operationen für das Bild machen möchte.

    Ich habe versucht, Erosion, Dilatation, Öffnen und Schließen zu verwenden, aber das Ergebnis ist nicht sehr gut.

    Ist dies überhaupt möglich?

    Wie rekonstruiere ich Text aus einem Bild nur mit morphologischen Operationen?

    13 December 2011
    Darren Kopp
3 answers
  • Wenn Sie bereit sind, morphologisch transformierte Bilder hinzuzufügen / zu subtrahieren usw., können Sie zählen, wie viele Signalpixel sich in der Nähe jedes Pixels befinden, und den Schwellenwert basierend auf dieser Anzahl.

     img = imread('https://bestecode.com/attachments/Answer/956/wicpc.png');
    
    n = false(3);n(4) = 1;
    s = false(3);s(6) = 1;
    w = false(3);w(2) = 1;
    e = false(3);e(8) = 1;
    
    %# note that you could convolve with a cross instead
    fourNeighbourCount = imerode(img,n) + imerode(img,s) + imerode(img,w) + imerode(img,3) + img;
     

    Wie rekonstruiere ich Text aus einem Bild nur mit morphologischen Operationen?

     %# require at least two neighbours
    img = fourNeighbourCount > 1;
     

    Wie rekonstruiere ich Text aus einem Bild nur mit morphologischen Operationen?

    Wenn Sie dann mit einer 3x3-Maske mit einem Loch in der Mitte konvolvieren, können Sie etwa Folgendes erhalten:

    Wie rekonstruiere ich Text aus einem Bild nur mit morphologischen Operationen?

    13 December 2011
    saint_groceon
  • Dies ist ein sehr interessantes Problem! Versuchen Sie einen Medianfilter . Siehe die Referenz hier und hier für weitere Details.

    Obwohl ich nicht die Hände darauf gelegt habe, Ihr Problem zu simulieren, ist dies ein Vorschlag. Mein Bauchgefühl sagt aus, dass es Ihnen einen großen Nutzen bringen kann, weil es bekannt ist, Salz-Pfeffer-Geräusche zu bekämpfen. In Ihrem Fall haben die Bilder zusätzliche weiße Punkte um die Umrandung, die je nach Seite des Alphabets entweder in volles Weiß oder in ganz Schwarz umgewandelt werden. So sieht es nach der Medianfilterung aus:

    Wie rekonstruiere ich Text aus einem Bild nur mit morphologischen Operationen?

    07 January 2012
    Darren Kopp
  • Wenn Sie sich aus bestimmten Gründen auf morphologische Operationen beschränken, können Sie die Verwendung eines "Abstimmungsschemas" für orientierte geschlossene Operationen in Betracht ziehen.

    Ein Problem bei morphologischen Operationen ist, dass sie die Direktionalität nicht wirklich berücksichtigen. Für das mittlere Pixel ist eine Umgebung wie diese

     1 0 0
    1 1 0
    0 1 1
     

    wirklich nicht anders als eine Nachbarschaft wie diese

     0 1 0
    1 1 0
    1 1 0
     

    Dies kann zu Problemen führen, da Dilatation und Erosion nicht direktional sind, wenn Sie möchten. Sie können also die am besten geeignete richtungsorientierte morphologische Operation mit Kerneln wie den folgenden finden:

     1 1 0   1 0 0   1 0 0
    0 1 0   1 1 0   1 1 0
    0 1 1   0 1 1   0 1 1 . . .
     

    Dies wäre mit 5 x 5 Kernels besser, aber ich denke, die Idee ist klar genug. Grundsätzlich ist die Idee eines Eckenerkennungskernels etwas gestreckt, so dass es sich um einen Liniensegmenterkennungskern handelt. Sie können es auch verwenden, um die am besten passenden Kurven zu finden:

     0 0 0 1 1
    0 0 1 1 0
    0 1 1 0 0 
    0 0 1 1 0
    0 0 0 1 1
     

    Offensichtlich führt dies zu einer großen Anzahl von Kerneln Wenn die Grundidee jedoch für Sie vielversprechend ist, können Sie die Technik so optimieren, dass der bestgeeignete Kernel in einem einzigen Durchgang gefunden wird.

    In jedem Fall if Wenn Sie mehrere Kernel und etwas Logik verwenden, erfordert jede Operation bei (x, y) mehr Berechnungen als ein herkömmlicher morphologischer Schritt:

    1. Bei jedem Pixel (x, y), wenden Sie jeweils mehrere morphologische Operatoren an. Berechnen Sie für jeden Operator sowohl das Ergebnis der morphologischen Operation als auch den Grad, zu dem die Eingabe dem Kernel entspricht. ("Degree" = Anzahl der Pixel, die übereinstimmen)
    2. Wählen Sie das morphologische Ergebnis für den Kernel aus, das der tatsächlichen Ein / Aus-Pixelkonfiguration am besten entspricht.

    Die Größe des Kernels muss an die Größe der Eingabe angepasst werden. Anstatt einen größeren Kernel zu verwenden, können Sie einen "Spread" -Kernel verwenden, um die Anzahl der Operationen zu reduzieren. Der folgende Kernel ist nur 3 x 3 K

    16 January 2012
    Lorin Hochstein