Entfernen des Hintergrundrauschens eines Captcha-Bildes durch Replizieren des Zerhackungsfilters von TesserCap

Ich habe ein Captcha-Bild, das so aussieht:

Verwenden eines Dienstprogramms namensTesserCap Von McAfee aus konnte ich einen "Chopping" -Filter auf das Bild anwenden. (Bevor ich es ausführte, stellte ich sicher, dass das Bild nur zwei Farben enthält: Weiß und Schwarz.) Die Ergebnisse der Verwendung dieses Filters mit dem Wert 2 im Textfeld haben mich sehr beeindruckt. Es entfernte genau den größten Teil des Rauschens, behielt jedoch den Haupttext bei, was zu folgendem führte:

Ich wollte so etwas auf einem meiner eigenen Skripte implementieren, also versuchte ich herauszufinden, welche Bildverarbeitungsbibliothek TesserCap verwendete. Ich konnte nichts finden. es stellt sich heraus, dass es seinen eigenen Code verwendet, um das Bild zu verarbeiten. Ich las dannDieses Whitepaper das erklärt genau, wie das programm funktioniert. Es gab mir die folgende Beschreibung, was dieser Zerhackungsfilter tut:

Wenn die fortlaufende Anzahl von Pixeln für bestimmte Graustufenwerte geringer ist als die im numerischen Feld angegebene Anzahl, ersetzt der Zerhackungsfilter diese Sequenzen durch 0 (schwarz) oder 255 (weiß), je nach Benutzerauswahl. Das CAPTCHA wird sowohl in horizontaler als auch in vertikaler Richtung analysiert und entsprechende Änderungen vorgenommen.

Ich bin nicht sicher, ob ich verstehe, was es tut. Mein Skript ist in Python, also habe ich versucht, mit PIL die Pixel so zu manipulieren, wie in diesem Zitat beschrieben. Es klingt ein bisschen einfach, aber ich habe versagt, wahrscheinlich weil ich nicht genau wusste, was der Filter tat:

 (Dies ist aus einem etwas anderen Captcha gemacht, das ein kreisförmiges Muster verwendet.)

Ich habe auch versucht zu sehen, ob es mit ImageMagick's convert.exe einfach gemacht werden kann. Ihre -chop-Option ist etwas völlig anderes. Die Verwendung von -median zusammen mit einigen -morphologischen Befehlen half dabei, das Rauschen zu verringern, aber es traten unangenehme Punkte auf, und die Buchstaben wurden sehr verzerrt. Es war nicht annähernd so einfach wie das Zerhacken mit TesserCap.

Meine Frage lautet also: Wie implementiere ich den Chopping-Filter von TesserCap in Python, sei es mit PIL oder ImageMagick? Dieser Zerhackungsfilter funktioniert viel besser als alle Alternativen, die ich ausprobiert habe, aber ich kann ihn scheinbar nicht replizieren. Ich habe stundenlang daran gearbeitet und noch nichts herausgefunden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage