Halbtonbilder in Python

7

Ich arbeite an einem Projekt, bei dem ich jede Farbe in einem CYMK-Bild trennen und ein Halbtonbild erzeugen muss, das auf einem speziellen Halbtondrucker gedruckt wird. Die verwendete Methode ist analog zum Siebdruckverfahren, da das Verfahren nahezu identisch ist. Machen Sie ein Foto und brechen Sie jeden Farbkanal aus. Dann erzeuge einen Bildschirm für den Halbton. Bei jedem Farbdisplay muss der Bildschirm um 15-45 Grad (einstellbar) geneigt sein. Punktgröße und LPI müssen aus vom Benutzer konfigurierbaren Werten berechnet werden, um unterschiedliche Effekte zu erzielen. Dieser Prozess, der mir gesagt wurde, wird im Siebdruckverfahren verwendet, aber ich konnte keine Informationen finden, die die CYMK-Rasterung erklären. Ich finde genug, um auf eine einzelne Farbe zu reduzieren und ein neues Druckstil-Schwarz-Weiß-Bild zu erzeugen.

Ich würde vermuten, dass ich: 1. die Datei in ihre Farbkanäle aufteilen muss. 2. erzeuge ein monochromes Halbtonbild für diesen Kanal. 3. Neigen Sie das resultierende Halbtonbild um die Anzahl der Grad * Kanalnummer. Weiß jemand, ob dies der richtige Ansatz ist?

Kennt jemand einen vorhandenen Python-Code dafür? Oder von irgendwelchen guten Erklärungen für diesen Prozess oder Algorithmen?

    
user693336 13.05.2012, 13:47
quelle

2 Antworten

20

Früher habe ich ein Siebdruck-Studio betrieben (es war ein ziemlich kleines), und obwohl ich noch nie einen Farbseparationsdruck gemacht habe, bin ich mit den Prinzipien einigermaßen vertraut. So würde ich es angehen:

  1. Teilen Sie das Bild in C, M, Y, K.
  2. Drehen Sie jedes getrennte Bild um 0, 15, 30 und 45 Grad.
  3. Nimm den Halbton jedes Bildes (die Punktgröße ist proportional zur Intensität).
  4. Drehen Sie jedes Halbtonbild zurück.

Jetzt haben Sie Ihre farblich getrennten Bilder. Wie Sie bereits erwähnt haben, reduziert der Rotationsschritt Probleme bei der Punktausrichtung (die alles durcheinander bringen würden) und Dinge wie Moiré-Mustereffekte wird angemessen minimiert werden.

Dies sollte mit PIL ziemlich einfach zu programmieren sein.

Update 2:

Ich habe einen schnellen Code geschrieben, der das für Sie erledigt, er enthält auch eine Funktion GCA (unten beschrieben):

%Vor%

Dies wird dies drehen:

hinein (verwischen Sie Ihre Augen und bewegen Sie sich vom Monitor weg):

Beachten Sie, dass die Bildabtastung Pixel für Pixel erfolgen kann (wodurch die Auflösung des Originalbildes im endgültigen Bild erhalten bleibt). Tun Sie dies, indem Sie sample=1 setzen. In diesem Fall müssen Sie scale auf eine größere Zahl setzen, so dass es eine Anzahl möglicher Punktgrößen gibt. Dies führt auch zu einer größeren Ausgabebildgröße (Originalbildgröße * Skalierung ** 2, also Vorsicht!).

Bei der Konvertierung von RGB in CMYK ist der Kanal K (der schwarze Kanal) standardmäßig leer. Ob Sie den K -Kanal benötigen oder nicht, hängt von Ihrem Druckvorgang ab. Es gibt verschiedene mögliche Gründe, die Sie vielleicht wollen: ein besseres Schwarz als die Überlappung von CMY , Tinteneinsparung, verbesserte Trocknungszeit, weniger Tintenauslauf usw. Jedenfalls habe ich auch ein wenig Grey Component Replacement Funktion GCA , so können Sie den Prozentsatz von K channel setzen, den Sie CMY overlap ersetzen wollen (ich erkläre dies a etwas weiter in den Code-Kommentaren).

Hier ein paar Beispiele zur Veranschaulichung. Verarbeitung der letter F aus dem Bild mit sample=1 und scale=8 , also ziemlich hohe Auflösung.

Die 4 CMYK -Kanäle, mit percentage=0 , also leer K channel:

kombiniert zu produzieren:

CMYK channels, mit percentage=100 , also K channel wird verwendet. Sie können sehen, dass der Cyan-Kanal vollständig unterdrückt ist und die Magenta und Gelb-Kanäle viel weniger Tinte verwenden, im schwarzen Band am unteren Rand des Bildes:

    
fraxel 13.05.2012, 23:11
quelle
2

Meine Lösung verwendet ebenfalls PIL, stützt sich jedoch auf die intern unterstützte Dithering-Methode (Floyd-Steinberg). Erzeugt jedoch Artefakte, also überlege ich, seinen C-Code umzuschreiben.

%Vor%

Der implizite GCR PIL kann auch mit einem allgemeineren erweitert werden, aber ich habe versucht, eine einfache Lösung zu beschreiben, bei der auch Auflösung und Stichproben ignoriert werden.

    
user3425798 16.03.2014 13:50
quelle

Tags und Links