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

16

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 auf dem Bild tun möchte

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

Ist das überhaupt möglich?

Bildbeschreibung hier eingeben

Jackobsen
quelle
Dilatation scheint der naheliegende erste Schritt zu sein, um diese unscharfen Kanten auszugleichen?
Paul R
Ja, ich denke, dies ist der erste Schritt jeder Kombination, die ich ausprobiert habe.
2
Ich denke, Sie müssen Ihr Problem genauer definieren. Zum Beispiel, wenn Sie meinen, wie Sie es lesbarer machen können, dann ist eine kleine Erweiterung wahrscheinlich ausreichend. Wenn Sie genau rekonstruieren möchten, wie es vor einem Verzerrungsprozess ausgesehen hat, ist dies nicht möglich, da Ihr morphologischer Algorithmus die Formen der verwendeten Schriftart nicht kennt.
So12311
Um es lesbarer zu machen, habe ich ein Imdilatat mit [0 1 0; 1 1 1; 0 1 0]. Ich bin auf der Suche nach etwas, durch das der Text dem Original sehr nahe kommt.
Jackobsen

Antworten:

6

Wenn Sie morphologisch transformierte Bilder hinzufügen / subtrahieren möchten, können Sie die Anzahl der Signalpixel in der Nähe jedes Pixels und den Schwellenwert basierend auf dieser Anzahl zählen.

img = imread('http://i.stack.imgur.com/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;

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

Wenn Sie dann eine 3x3-Maske mit einem Loch in der Mitte verwenden, erhalten Sie Folgendes:

Bildbeschreibung hier eingeben

Jonas
quelle
3

Dies ist ein interessantes Problem, das es zu lösen gilt! Versuchen Sie es mit einem Medianfilter . Weitere Informationen finden Sie in der Referenz hier und hier .

Obwohl ich nicht meine Hände gelegt habe, um Ihr Problem zu simulieren, ist dies ein Vorschlag. Mein Bauchgefühl sagt, dass es Ihnen großen Nutzen bringen könnte, denn es ist bekannt, dass es Geräuschen vom Typ Salz und Pfeffer entgegenwirkt. In Ihrem Fall haben die Bilder zusätzliche weiße Punkte um den Rand, die je nach der Seite des Alphabets entweder in volles Weiß oder in volles Schwarz umgewandelt werden. So sieht es nach der Medianfilterung aus:

Bildbeschreibung hier eingeben

Dipan Mehta
quelle
1

Wenn Sie sich aus irgendeinem Grund auf die Verwendung morphologischer Operationen beschränken, können Sie ein "Abstimmungsschema" für orientierte Abschlussoperationen in Betracht ziehen.

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

1 0 0
1 1 0
0 1 1

ist wirklich nicht anders als eine Nachbarschaft wie diese

0 1 0
1 1 0
1 1 0

Dies kann zu Problemen führen, da Dehnung und Erosion nicht direktional beeinflusst werden, wenn Sie dies wünschen. Sie können also die am besten geeignete richtungsabhängige morphologische Operation finden, indem Sie Kernel wie diese verwenden:

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-Kerneln besser, aber ich denke, die Idee ist klar genug. Grundsätzlich ist die Idee eines Eckenerkennungskerns etwas gedehnt, sodass 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

Dies führt natürlich zu einer großen Anzahl von Kerneln, aber wenn die Grundidee für Sie vielversprechend ist, können Sie die Technik so optimieren, dass der am besten passende Kernel in einem Durchgang gefunden wird.

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

  1. Wenden Sie auf jedes Pixel (x, y) mehrere morphologische Operatoren an. Berechnen Sie für jeden Operator sowohl das Ergebnis der morphologischen Operation als auch den Grad, in dem die Eingabe mit dem Kernel übereinstimmt. ("Grad" = Anzahl der übereinstimmenden Pixel)
  2. Wählen Sie das morphologische Ergebnis für den Kernel, das der tatsächlichen Ein / Aus-Pixelkonfiguration am ehesten entspricht.

Die Größe des Kernels muss an die Größe der Eingabe angepasst werden. Anstatt einen größeren Kernel zu verwenden, könnten Sie einen "verteilten" Kernel verwenden, um die Anzahl der Operationen zu verringern. Der folgende Kernel ist nur ein 3 x 3-Kernel mit einem Radius größer als 1.

1 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1 0 0 0
0 0 0 0 0 0 0
1 0 0 0 0 0 1
Überdenken
quelle