2017-04-12 6 views
0

Ich habe eine massive Reihe von lauten Bildern von Zeichnungen, die Menschen erstellt haben. Ich hätte gerne eine Funktion, um sie auf NUR die Zeichnung zu schneiden.Batch-Trim-Bildrauschen

Hier sind einige Beispiele:

banana cherry

wegen des Lärms -trim nicht

ich hier auch nicht funktioniert versucht, verknüpft das Beispiel zu verwenden (www.imagemagick.org/ Verwendung/crop/# trim_blur), aber es war ineffektiv wegen unterschiedlicher Geräuschpegel sowohl innerhalb als auch zwischen den Bildern.

Zuletzt habe ich versucht, den Kontrast zu erhöhen, um die Wahrscheinlichkeit der Linien der tatsächlichen Zeichnung zu erkennen, aber aus ähnlichen Gründen zu den oben genannten (unterschiedliche Geräuschpegel), schärfte es nur die Linien in einem Teil jedes Bildes.

Wenn jemand irgendwelche Ideen hat, würde ich gerne sie hören!

+0

Normalerweise würde eine Kombination von Unschärfe und Schärfe ausreichen, um die interessierende Region in einem verrauschten Bild zu isolieren. Allerdings zeigen beide Beispiele gültige Markierungen an den äußersten Bildkanten (oben rechts von Banane und unten rechts von Kirsche). Können wir annehmen, dass alle Markierungen an den Kanten ignoriert werden sollten? – emcconville

+0

Ja, das ist eine sichere Annahme, dass Markierungen um den Rand ignoriert werden können, sie sind wahrscheinlich nur zufällige Markierungen. – JDW

Antwort

0

Nicht sicher, ob dies für alle Ihre Bilder arbeiten, denn es gibt einige Probleme mit ihnen:

  • Artefakte an den Rändern
  • ungleichmäßige Beleuchtung oder Schatten
  • Lärm
  • kontrastarm

aber Sie sollten einige Ideen für die Behandlung einiger der Probleme bekommen.


Um die Artefakte rund um die Kante loszuwerden, können Sie das Bild um 2 verkleinern.5% auf allen Seiten - im Wesentlichen eine zentrierte Ernte, wie folgt aus:

convert noisy1.jpg -gravity center -extent 95x95% trimmed.png 

enter image description here


Um die Schatten/ungleichmäßige Beleuchtung zu sehen, werde ich Ihr Bild auf eine Reihe von festen schwarzen feste normalisieren

convert noisy1.jpg -normalize result.png 

enter image description here

: weiß und Sie werden den Schatten unten links sehen

diese zu entfernen, würde ich Ihr Bild klonen und die niedrige Frequenz Durchschnitt über eine größere Fläche berechnen und dann subtrahieren, dass, so dass sich langsam ändernde Dinge entfernt werden:

convert noisy1.jpg \(+clone -statistic mean 25x25 \) -compose difference -composite -negate result.png 

, dass dies gibt, und dann können Sie Normalisieren versuchen es selbst zu sehen, dass der Schatten verschwunden ist:

enter image description here


Wenn ich eine Canny-Kantenerkennung an, dass jetzt bewerben, erhalte ich diese:

convert noisy1.jpg \(+clone -statistic mean 25x25 \) -compose difference -composite -normalize -negate -canny 0x1+10%+30% result.png 

enter image description here


ist hier ein sehr grobes, aber hoffentlich wirksam, kleines Skript der ganze Menge zu tun. Es überprüft die Parameter nicht. Speichern unter $HOME/cropper.

#!/bin/bash 
src=$1 
dst=cropped-$1 
tmp="tmp-$$.mpc" 
trimbox=$(convert "$1" -extent 95x95% -write "$tmp" \(+clone -statistic mean 25x25 \) -compose difference -composite -normalize -negate -canny 0x1+10%+30% -format %@ info:) 

convert "$tmp" -crop $trimbox "$dst" 
rm tmp-$$.* 

Machen Sie das Skript ausführbar mit:

chmod +x $HOME/cropper 

Und mit einem einzigen Bild wie folgt ausführen:

cd /path/to/some/images 
$HOME/cropper OneImage.jpg 

Wenn Sie Hunderte von Bildern haben, ich zum ersten Mal ein Backup machen würde, und dann tun sie alle parallel mit GNU Parallel

parallel $HOME/cropper {} ::: *.jpg 
+0

das hat wunderbar funktioniert, vielen Dank! Nachdem ich das Bild in Ihrem letzten Schritt hier erzeugt hatte, konnte ich einfach negieren und dann die Ausgabe trimmen, um das endgültige Ergebnis zu erzielen, das ich wollte. Fantastisch! Jetzt muss ich nur noch alles miteinander verbinden. – JDW

+0

Ich habe eine sehr simple kleine Skriptversion des Ganzen gemacht und unten hinzugefügt. Viel Glück! Bitte zuerst eine Sicherungskopie erstellen. –

+0

Danke Mark, ich werde dies eine kurze Zeit später geben, aber für den Fall, dass jemand anderen auf diesen Beitrag stößt und ihn nützlich finden könnte, habe ich diesen Befehl mit ziemlich guten Ergebnissen verwendet: 'for% i in (*.jpg) do magick konvertieren "% i" -Resize 10x10% -Gravitationszentrum -ausdehnung 95x95% (+ Klon -Statistik Mittelwert 25x25) -kompositorische Differenz -komposit -Normalisieren -Negative -canny 0x1 + 10% + 30% -Negat -trim "% I" ' – JDW