DE69517855T2 - Verfahren zur Erzeugung einer Schwellenmatrix - Google Patents
Verfahren zur Erzeugung einer SchwellenmatrixInfo
- Publication number
- DE69517855T2 DE69517855T2 DE69517855T DE69517855T DE69517855T2 DE 69517855 T2 DE69517855 T2 DE 69517855T2 DE 69517855 T DE69517855 T DE 69517855T DE 69517855 T DE69517855 T DE 69517855T DE 69517855 T2 DE69517855 T2 DE 69517855T2
- Authority
- DE
- Germany
- Prior art keywords
- matrix
- dot
- value
- pixel
- values
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 239000011159 matrix material Substances 0.000 title claims description 227
- 238000000034 method Methods 0.000 title claims description 126
- 238000012986 modification Methods 0.000 claims description 6
- 230000004048 modification Effects 0.000 claims description 5
- 239000003086 colorant Substances 0.000 claims description 3
- 239000003755 preservative agent Substances 0.000 claims 1
- 230000002335 preservative effect Effects 0.000 claims 1
- 239000012634 fragment Substances 0.000 description 52
- 238000012216 screening Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 12
- 238000012937 correction Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 11
- 238000001914 filtration Methods 0.000 description 9
- 230000008859 change Effects 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 5
- 238000010276 construction Methods 0.000 description 5
- 238000009792 diffusion process Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 230000033458 reproduction Effects 0.000 description 3
- 238000001228 spectrum Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000003384 imaging method Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000005428 wave function Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- ORQBXQOJMQIAOY-UHFFFAOYSA-N nobelium Chemical compound [No] ORQBXQOJMQIAOY-UHFFFAOYSA-N 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/40—Picture signal circuits
- H04N1/405—Halftoning, i.e. converting the picture signal of a continuous-tone original into a corresponding signal showing only two levels
- H04N1/4051—Halftoning, i.e. converting the picture signal of a continuous-tone original into a corresponding signal showing only two levels producing a dispersed dots halftone pattern, the dots having substantially the same size
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Image Processing (AREA)
- Facsimile Image Signal Circuits (AREA)
- Controls And Circuits For Display Device (AREA)
Description
- Diese Erfindung bezieht sich auf die Erzeugung von Schwellenwertmatrizen, die verwendet werden, um Halbtonbilder auf einer Vielzahl von digitalen Anzeige- oder Druckeinrichtungen zu erzeugen. Die digitale Halbtonrasterung wird üblicherweise entweder durch Verwendung einer Schwellenwertmatrix(threshold array) oder durch Verwendung von Fehlerverteilungs-(error diffusion) Techniken ausgeführt. Schwellenwertmatrixtechniken sind schnell, leicht zu implementieren und an einen großen Bereich digitaler Halbtonrastersysteme anpassbar. Fehlerverteilungstechniken können eine bessere Reproduktionstreue durch Eliminieren großer Artefakte aus dem Halbtonbild erreichen, erfordern aber mehr Verarbeitungszeit und können in vielen vorhandenen Bildhalbtonrastersystemen nicht verwendet werden. Ein großer Teil der heutzutage ausgeführten Halbtonrasterung wird elektronisch unter Verwendung eines Digitalcomputers oder anderer spezieller digitaler Hardware ausgeführt. Die digitale Halbtonrasterung wird bei der Präparation von Platten für Druckpressen, bei xerographischen und Tintenstrahltischdruckern, bei Computer-CRT-Anzeigen oder bei anderen Bildwiedergabeeinrichtungen verwendet.
- Durch das gut bekannte Verfahren der Halbtonrasterung werden Bilder mit grauen Zwischenschattierungen auf Einrichtungen reproduziert, die nur Pixel erzeugen können, die schwarz oder weiß sind. Die Halbtonrasterung erzeugt eine Grauschattierung mit einem feinen Schwarz-Weiß-Muster derart, daß das Verhältnis der schwarzen Fläche zur Gesamtfläche in diesem Muster die Grauschattierung bestimmt. Je feiner das Schwarz-Weiß-Muster ist, desto mehr nimmt der Betrachter die gewünschte Grauschattierung wahr und desto weniger nimmt er oder sie das Schwarz-Weiß-Muster wahr.
- Das mit Hilfe einer Schwellenwertmatrix ausgeführte Verfahren der digitalen Halbtonrasterung ist gut bekannt. Das auf Schwellenwerten basierende Halbtonrastern verwendet die folgenden Schritte: (1) Abtasten des zu reproduzierenden Bildes bei jedem Pixel (picture element) des Ausgabegeräts, um einen Bildgrauwert zu erlangen; (2) Gewinnen eines Referenzgrauwerts aus einer Schwellenwertmatrix für dieses Pixel; (3) Vergleichen des Bildgrauwerts mit dem Referenzgrauwert; und (4) Verwenden der Ausgabe dieses Vergleichs zum Festlegen der Farbe (Schwarz oder Weiß) des Gerätepixels.
- Schwellenwertmatrizen bestehen typischerweise aus einer rechteckigen Matrix von Referenzgrauwerten. Diese rechteckige Matrix wird wiederholt aneinandergelegt (tiled), um das Raster der digitalen Ausgabeeinrichtung derart zu überdecken, daß jedes Pixel der Ausgabeeinrichtung exakt einem Referenzgrauwert in einer der ausgelegten Kopien der Schwellenwertmatrix entspricht.
- Ein Vorteil der Schwellenwertmatrixhalbtonrasterung besteht darin, daß die für jedes Pixel erforderliche Berechnung gering ist. Es ist lediglich erforderlich, die zwei Grauwerte abzurufen und sie zu vergleichen. Dies ist bedeutsam, weil bei einer hochauflösenden Ausgabeeinrichtung, wie beispielsweise einer, die bei der Vorbereitung von Platten für Druckpressen verwendet wird, es sein kann, daß diese 500 Mio Pixel pro Seite verarbeiten muß.
- Ein weiterer Vorteil der Schwellenwertmatrixhalbtonrasterung ist die wachsende installierte Basis digitaler Anzeigeeinrichtungen, die es dem Benutzer gestattet, eine Schwellenwertmatrix zu spezifizieren, die für die Halbtonrasterung eines Bildes verwendet werden soll. So kann der Besitzer einer derartigen Einrichtung einen zu verwendenden schwellenwert-basierten Halbton auswählen, ohne daß er die Hardware zu ändern braucht.
- Eine schwellenwertmatrix-basierte Halbtonrasterung wurde weitgehend verwendet, um die herkömmliche raster-basierte photografische Halbtonrasterung nachzubilden. Während raster-basierte Verfahren grundsätzlich ausreichend sind, sind sie stets mit Problemen behaftet. Ein Problem besteht darin, daß dann, wenn vier Halbtonbilder auf nicht sichtbare Weise miteinander kombiniert werden, wie beispielsweise bei einem 4-Farb-Druck, die Rasterwinkel sehr sorgfältig kontrolliert werden müssen, um "Moire"-Muster zu vermeiden. Moire-Muster bewirken einen unerwünschten sichtbaren Effekt. Ein weiteres Problem besteht darin, daß die rasterbasierten Verfahren ein feines, aber regelmäßiges Gitter von kleinen Punkten (Dots) in dem Halbtonbild erzeugen. Diese Matrix von Punkten ist bei naher Betrachtung sichtbar und wird zu einem Reproduktionsartifakt, der nicht in dem ursprünglichen Bild enthalten ist. Derartige Artifakte werden noch mehr sichtbar, wenn zwei oder mehr gerasterte Bilder kombiniert werden, wie bei Farbreproduktionen. Diese Muster können ärgerlich sein, wenn das Bild aus der Nähe betrachtet wird.
- Eine andere, zueinander in Beziehung stehende Gruppe von digitalen Halbtonrastertechniken wurde über die Jahre entwickelt. Beispiele sind Fehlerverteilung (error diffusion), FM-Rasterung (FM-screening) oder stochastisches Rastern. All diese Techniken erzeugen in gewisser Weise ähnliche Ergebnisse, und sie werden im folgenden als stochastische Halbtonrasterung bezeichnet. Bei diesen Techniken wird ein semi-zufälliger Prozeß verwendet, um ein Muster von sehr kleinen, anscheinend zufällig angeordneten Punkten zu erzeugen, während noch der mittlere Abstand zwischen diesen Punkten ebenso wie die Gesamtdichte des Schwarzen gegenüber dem Weißen genau kontrolliert wird. Eine Zusammenfassung der auf Fehlerverteilung und Schwellenwertmatrizen basierenden Halbtonrasterung findet sich in "Digital Halftoning" von Robert Ulichney, veröffentlicht von M. I. T. Press, 1987.
- Stochastische Halbtonrastertechniken können teilweise verwendet werden, um die Probleme der auf der Schwellenwertmatrix basierenden Halbtonrasterung zu lösen. Die unerwünschten Punktmuster sind viel weniger sichtbar und die Moire-Muster werden beträchtlich reduziert. Andererseits erfordern die stochastischen Halbtonrastertechniken grundsätzlich ein Mehrfaches an Berechnungszeit gegenüber Schwellenwertmatrixverfahren, und es ist nicht kosteneffizient, sto chastische Halbtonrasterverfahren auf einer bereits vorhandenen schwellenwertmatrix-basierten Anzeigeeinrichtung zu installieren.
- Eine derartige stochastische Halbtonrastertechnik ist beschrieben in "A Markovian Framework for Digital Halftoning" von Robert Geist, Robert Reynolds und Derryl Suggs in den ACM Transactions of Graphics, Band 12, Nr. 2 (April 1993). Dieser Artikel erläutert die Halbtonrasterung auf der Grundlage zufälliger Prozesse, welche Ergebnisse erbringt, die ähnlich der Fehlerverteilung (error diffusion) sind. Ein Nachteil dieses Verfahrens besteht darin, daß es nicht auf einer Schwellenwertmatrix basiert und die Berechnung extrem zeitaufwendig sind. Darüber hinaus vermeiden die Verfahren von Geist et al. nicht vollständig jene Muster, die auftreten, wenn Punktprofile aneinandergelegt werden, um eine große Fläche zu überdecken.
- Eine andere stochastische Halbtonrastertechnik wurde gelehrt in "Digital Halftoning Using a Blue Noise Mask" von Mista und Parker in The SPIE Conference Proceedings, San Jose, 1991, und in einem begleitenden Papier "The Construction and Evaluation of Halftone Patterns With Manipulated Power Spectra" von Mista, Ulichney und Parker in den Conference Proceedings for Raster Imaging and Digital Typography, 1992. In diesen Artikeln lehren Mista et al. ein Verfahren zum Konstruieren von Punktprofilen mit einer verringerten Anzahl von störenden Mustern, welche einen gewünschten Grauwert reproduzieren. Mista et al. beschreiben darüber hinaus ein spezielles Verfahren des Zusammensetzens einer Schwellenwertmatrix aus Punktprofilbestandteilen. Jedoch sind die Profile von Mista et al. noch nicht so sanft (smooth), wie es für viele Anwendungen erforderlich ist.
- Darüber hinaus ist in einem Artikel mit dem Titel "Modified Approach to 'the Construction of a Blue Noise Mask" von M. Yao et al., Journal of Electronic Imaging, Band 3, Nr. 1, Januar 1994 (US), Seite 92 bis 97, XP000420587 ein Verfahren zum Erzeugen einer Blaues-Rauschen-Maske (Blue Noise Mask) beschrieben, das einen binären Muster-Leistungs spektrum-Manipulieralgorithmus (BIPPSMA - binary pattern power spectrum manipulating algorithm) verwendet, das auf einer einzigen Filteroperation basiert, die die visuelle Abschätzung der Gleichmäßigkeit und der Anisotropie des menschlichen Betrachtungssystems nachbildet, jedoch nur ein einziges Filter einrichtet.
- Die Erfindung umfaßt ein Verfahren des Anzeigens eines aus einer Mehrzahl von Pixeln gebildeten Bildes auf einer digitalen Anzeige, wie es in den anhängigen Ansprüchen angegeben ist.
- Fig. 1A, 1B und 1C zeigen in graphischer Form die verschiedenen zweidimensionalen Matrizen, die bei der Erfindung verwendet werden, und ihre Beziehung zueinander an einem bestimmten Punkt in dem erfindungsgemäßen Verfahren.
- Fig. 2 ist ein Ablaufdiagramm, das den Gesamtablauf der Steuerung zwischen den verschiedenen Prozeduren zeigt, die bei dem erfindungsgemäßen Verfahren verwendet werden.
- Fig. 3 ist ein Schaubild, das den Punktzuwachs (dot gain) auf einem hypothetischen Abschnitt eines Punktprofils veranschaulicht.
- Das Verfahren dieser Erfindung kann unter Verwendung einer beliebigen verschiedener Arten von Berechnungseinrichtungen ausgeführt werden, welche einen Scanner, einen Computer und eine Rasteranzeigeeinrichtung einschließen. Der erste Schritt des erfindungsgemäßen Verfahrens besteht darin, eine Schwellenwertmatrix vorzubereiten. Diese Schwellenwertmatrix wird üblicherweise unter Verwendung eines Computers oder einer speziellen Digitalhardware berechnet. Die Schwellenwertmatrix besteht aus einer rechteckigen Matrix von Referenzgrauwerten, die in der unten angegebenen Weise vorbereitet werden. Die Schwellenwertmatrix kann in einem temporären oder einem permanenten Speicher gehalten werden, der dem Computer zugeordnet ist oder auf andere Computer, beispielsweise auf einem Netzwerk verteilt ist oder durch eine Verteilung auf Disketten, wie es im Stand der Technik bekannt ist. Die Schwellenwertmatrix wird zum Halbtonrastern ursprünglicher Bilder mit Hilfe von Fachleuten gut bekannten Verfahren verwendet.
- Die Schwellenwertmatrix dieser Erfindung wird durch Zusammensetzen einer Reihe von "Punktprofilen" erzeugt. Ein Punkt- oder Fleckprofil (dot profile) ist eine Matrix von binären Werten, wie beispielsweise 0 und 1. Es hat die gleiche Breite und Höhe wie die Schwellenwertmatrix. Ein Punktprofil entspricht dem Muster der schwarzen und weißen Pixel, die sich ergeben, wenn eine Schwellenwertmatrix zum Halbtonrastern eines konstanten Grauwertes verwendet wird. Eine Schwellenwertmatrix erbringt ein bestimmtes Punktprofil für einen gegebenen Grauwert. Normalerweise werden beim Halbtonrastern mit einer Schwellenwertmatrix Punktprofile aus der Matrix erzeugt. Das erfindungsgemäße Verfahren kehrt diesen Prozeß um, indem es mit einem Satz von gewünschten Punktprofilen beginnt und davon ausgehend eine Schwellenwertmatrix konstruiert, die diese Punktprofile erbringt, wenn sie verwendet wird, um konstante Grauwerte zu rastern. Jedem der Punktprofile, die beim Zusammensetzen der Schwellenwertmatrix verwendet werden, ist ein Grauwert zugeordnet. Der Grauwert ist derjenige, der das zugeordnete Punktprofil ergibt, wenn er mit der Schwellenwertmatrix verglichen wird.
- Es gibt bestimmte Einschränkungen für Punktprofile, welche verwendet werden müssen, weil dann, wenn ein binärer Wert an einer gegebenen Position in einem Punktprofil für einen bestimmten Grauwert schwarz ist, dieser gleiche binäre Wert für sämtliche Punktprofile, die sämtlichen dunkleren Grauwerten entsprechen, schwarz sein muß. In ähnlicher Weise müssen dann, wenn ein Binärwert an einer gegebenen Position in einem Punktprofil für einen gegebenen Zwischengrauwert weiß ist, sämtliche Binärwerte in der gleichen Position für Punktprofile hellerer Grauwerte ebenfalls weiß sein. Eine der Aufgaben der Erfindung besteht darin, einen Satz von Punktprofilen zu erzeugen, die diesen Einschränkungen entsprechen.
- Eine weitere Aufgabe besteht darin, daß jedes der Punktprofile dann, wenn es in dunkle und helle Farbwerte auf der vorgesehenen Ausgabeeinrichtung übersetzt wird, zu einem Muster von dunklen und hellen Punkten (dots) führt, das entweder allein oder dann, wenn es mit anderen Kopien seiner selbst zusammengesetzt wird, frei von sichtbaren Mustern ist und noch den Farbwert, der dem Punktprofil zugeordnet ist, genau reproduziert.
- Die Konstruktion der Punktprofile gemäß dem erfindungsgemäßen Verfahren wird in einer speziellen Sequenz ausgeführt. Es wird eine Ordnung der zugeordneten Grauwerte konstruiert, und die Punktprofile werden in dieser Reihenfolge konstruiert. Das erste Punktprofil in dieser Ordnung wird konstruiert, indem zunächst ein Zufalls- oder Pseudozufallszahlengenerator oder ein anderes gut bekanntes Verfahren verwendet wird, um einen zufälligen oder pseudo-zufälligen Wert (im folgenden bloß Zufallswert genannt) im Bereich von -1 bis 1 für jede Position in dem Punktprofil zu berechnen. Diese Zufallswerte werden in einer separaten Matrix gespeichert, welche die gleichen Dimensionen wie die Schwellenwertmatrix hat. Diese Matrix wird die "Zustandsmatrix" 100 genannt, die in Fig. 1A gezeigt ist. Ein Punktprofil kann aus dieser Zustandsmatrix abgeleitet werden, indem das Vorzeichen der Werte in der Matrix betrachtet wird. Ein Zustandsmatrixwert kleiner als 0 ergibt einen zugehörigen Binärwert von 0 und ein Zustandsmatrixwert größer als oder gleich 0 erzeugt einen Binärwert 1. Diese Werte sind in der Punktprofilmatrix 200 in Fig. 1B gezeigt, in der eine schwarze Zelle den Binärwert 0 und eine weiße Zelle den Binärwert 1 anzeigt. Da die Werte in der Zustandsmatrix gemäß Fig. 1A zufällig sind, sind auch die Anfangswerte in der Punktprofilmatrix gemäß Fig. 1B zufällig, sie sind aber zu fällige Binärwerte im Unterschied zu zufälligen reellen Werten.
- Der nächste Schritt bei dem erfindungsgemäßen Verfahren besteht darin, eine dritte Matrix von reellen Werten zu erzeugen, die gefilterte Punktprofilmatrix genannt wird und in Fig. 1C dargestellt ist, indem dunklere Grauschattierungen verwendet werden, um geringere reelle Werte darzustellen und hellere Grauschattierungen, um größere reelle Werte darzustellen. Diese Matrix wird gewonnen, indem ein digitales Filter auf das Punktprofil angewendet wird. Das digitale Filter ist typischerweise ein Gauss'sches-Tiefpaßfilter, und somit zeigt die Darstellung des gefilterten Punktprofils 300, die in Fig. 1C gezeigt ist, wie das Punktprofil für einen menschlichen Betrachter aussehen könnte, wenn es verschwommen ist.
- Der nächste Schritt bei dem erfindungsgemäßen Verfahren stellt jeden Wert in der Zustandsmatrix um einen Betrag ein, der proportional zu der Differenz zwischen dem zugeordneten Grauwert des Punktprofils und dem zugehörigen Wert in der gefilterten Punktprofilmatrix ist. Zusätzliche Terme können zu dieser Einstellung hinzugefügt werden, wie weiter unten erläutert wird. Der Endeffekt dieser Einstellung besteht darin, daß Zustandswerte höhe eingestellt werden, wenn das gefilterte Punktprofil zu dunkel ist, und geringer eingestellt werden, wenn es zu hell ist. Aufgrund dieser Einstellungen wird dann, wenn das nächste Mal ein Punktprofil aus der Zustandsmatrix gewonnen wird, der lokale Durchschnittsgrauwert an jedem Punkt näher an dem zugehörigen Grauwert sein.
- Der oben umrissene Prozeß kann viele Male wiederholt werden, um immer bessere Korrekturen an der Zustandsmatrix und dem sich ergebenden Punktprofil zu erreichen. Ab einem bestimmten Punkt bewirken weitere Korrekturen der Zustandsmatrix keine nützlichen Differenzen bei dem sich ergebenden Punktprofil. An diesem Punkt kann ein anderes Digitalfilter verwendet werden und der Prozeß kann wiederum wiederholt werden, bis keine weiteren Korrekturen nützlich sind. Viele verschiedene Digitalfilter können aufeinanderfolgend verwendet werden, um die Schwellenwertmatrix auf verschiedene Weise zu korrigieren. Insbesondere wurde gefunden, daß es vorteilhaft ist, Tiefpaßfilter variierender Grenzfrequenzen zu verwenden. Tiefpaßfilter mit höheren Grenzfrequenzen werden zuerst verwendet, da sie dazu neigen, Variationen des Durchschnittsgrauwerts über die Skala von 3-5 Pixeln zu beseitigen. Tiefpaßfilter mit geringeren Grenzfrequenzen werden später verwendet, da sie dazu neigen, zu sichern, daß der Gesamtdurchschnittsgrauwert genau ist. Es wird wenigstens ein Filter verwendet. Es gibt keine Grenze für die Anzahl der zusätzlichen Filter. Die obigen Schritte erzeugen ein erstes Punktprofil, welches eines von vielen ist. Nachfolgende Punktprofile werden auf die gleiche Weise konstruiert mit der Ausnahme, daß bei nachfolgenden Erzeugungstechniken verschiedene Elemente des Punktprofils in Übereinstimmung mit den bereits konstruierten Punktprofilen darauf beschränkt werden können, entweder schwarz oder weiß zu bleiben. Das Verfahren gemäß der Erfindung ist an diese Einschränkungen angepaßt, indem es die Zustandswerte für die eingeschränkten Elemente entweder auf +1 oder -1 hält, was davon abhängt, ob die Elemente darauf beschränkt sind, weiß oder schwarz zu sein. An diesen eingeschränkten Zustandswerten werden keine Einstellungen vorgenommen, und somit hält das sich ergebende Punktprofil die eingeschränkten Werte für diese Elemente aufrecht.
- Wenn jeweils ein neues Punktprofil abgeschlossen ist, werden die Elemente in der Schwellenwertmatrix aktualisiert, so daß sie das neue Punktprofil umfassen. Nachdem sämtliche der Punktprofile abgeschlossen worden sind, ist die Schwellenwertmatrix ebenfalls abgeschlossen. Da die Punktprofile sorgfältig derart konstruiert wurden, daß sie den gleichen Durchschnittsgrauwert an sämtlichen Punkten erbringen, reproduziert die sich ergebende Schwellenwertmatrix genau einheitlich graue Bilder ebenso wie andere Bilder bei einem Minimum unerwünschter sichtbarer oder regulärer Muster der Punkte (dots).
- Die Technik gemäß der Erfindung fordert, daß es eine Darstellung der Schwellenwertmatrix gibt, welche im Computerspeicher verwendet wird. Es gibt viele derartige mögliche Darstellungen, aber das Verfahren eines bevorzugten Ausführungsbeispiels verwendet eine spezielle. Eine Schwellenwertmatrix ist eine rechteckige Matrix von Referenzgrauwerten, die beispielsweise W Elemente breit und H Elemente hoch ist. Jeder Referenzgrauwert wird durch eine ganze Zahl, beispielsweise von 0 bis 250 dargestellt. Wie es im Stand der Technik bekannt ist, können geringere oder größere Bereiche von ganzzahligen Werten mit bestimmten Vorteilen verwendet werden. Jede der einen Referenzgrauwert darstellenden ganzen Zahlen wird in einem Computerspeicher gespeichert, der ausreichend viele Bits aufweist, um den höchsten Wert darzustellen. Wenn 255 der größte Wert ist, werden 8 Bits benötigt, und die Einheit des verwendeten Speichers ist 8 Bits (1 Byte). In der folgenden Beschreibung wird angenommen, daß die Einheiten der Schwellenwertmatrix Bytes sind, obwohl es klar ist, daß eine beliebige Größe geeignet sein kann. Die Anordnung der Referenzgrauwerte im Speicher besteht vorzugsweise in einer herkömmlichen zweidimensionalen Matrix, wobei die Elemente der Matrix in aufeinanderfolgenden Plätzen des Computerspeichers derart abgelegt werden, daß die Adresse eines Elements in Spalte C und Zeile R gleich der Basisadresse der Schwellenwertmatrix + C + (RxW) ist.
- Zusätzlich zu der Schwellenwertmatrix verwendet das Verfahren gemäß der Erfindung drei weitere Matrizen. Diese sind die Zustandsmatrix, die Kernel-Matrix und die gefiltere Punktprofilmatrix. Die Zustandsmatrix ist die Matrix der Zustandswerte für jeden Ort in der Schwellenwertmatrix, wie sie in Fig. 1A gezeigt ist. Die gefilterte Punktprofilmatrix ist in Fig. 1C gezeigt. Die Kernel-Matrix hält ein Faltungskernel (convolution kernel) für ein Digitalfilter, das verwendet wird, um die gefilterte Punktprofilmatrix aus einem Punktprofil zu gewinnen. Der Gegenstand der Faltungskernels wird in dem gut bekannten Referenzbuch "Digital Image Processing" von Kenneth R. Castleman, Prentice Hall, 1979, erörtert.
- Dort, wo im laufenden Text auf einen variablen Namen oder einen C-Sprachcode Bezug genommen wird, ist er kursiv gedrückt, z. B. Code. Diese drei zusätzlichen Matrizen werden als zweidimensionale Matrizen von Gleitkommawerten dargestellt, deren Typ float in den C-Sprachfragmenten des Computerbefehlscodes ist, der bei der Erfindung verwendet und im folgenden angegeben ist. Die Dimensionen dieser Matrizen sind die gleichen wie die Dimensionen der Schwellenwertmatrix. Das Layout der Elemente in diesen Matrizen ist ebenfalls das gleiche wie das Layout der Elemente in der Schwellenwertmatrix, wobei der einzige Unterschied darin besteht, daß die Anzahl der zum Speichern der Gleitkommawerte in diesen Matrizen erforderlichen Bits größer als die 8 Bits ist, die erforderlich sind, um die Werte der Schwellenwertmatrix zu speichern. Entsprechend sind korrespondierende Elemente in zwei beliebigen der Matrizen stets um die gleiche Anzahl von Elementen vom Beginn der Matrix entfernt. Man beachte, daß das Punktprofil nicht explizit im Speicher als fünfte Matrix gespeichert ist, da ihre Elemente auf einfache Weise zu einem beliebigen Zeitpunkt berechnet werden können, indem die Elemente in der Zustandsmatrix gemäß Fig. 1A mit Null verglichen werden.
- Die oben genannten Matrizen sind vorzugsweise globale Variablen in einem Computerprogramm, so daß sämtlicher Befehlscode auf sie zugreifen kann. Auch die Variablen width und height, welche die Dimensionen sämtlicher dieser Matrizen zur Verfügung stellen, sind ebenfalls globale Variablen des Programms.
- Die Erfindung wird anhand von Fragmenten eines "Pseudobefehlscodes" und Fragmenten des Befehlscodes in der Programmiersprache C spezifiziert. Ein Pseudobefehlscode ist eine Fachleuten gut bekannte Notation zum Spezifizieren der Gesamtorganisation einer Reihe von Schritten in einem Compu terprogramm. Die Struktur des Pseudobefehlscodes ist die einer prototypischen höheren Programmiersprache mit der Ausnahme, daß einige der einzelnen Schritte englischsprachige Beschreibungen dessen sind, was sie ausführen. Der Pseudobefehlscode nimmt die Stelle der manchmal verwendeten schwerfälligeren Ablaufdiagramme ein. Wenn es für den fachlich versierten Praktiker hilfreich ist, werden einige dieser englischen Beschreibungen in den Pseudobefehlscode näher erläutert und es werden die geeigneten C-Programmiersprach- Befehlscodefragmente zur Verfügung gestellt.
- Die Programmiersprache C, möglicherweise die üblichste Programmiersprache, die heutzutage verwendet wird, ist Fachleuten gut bekannt. Eine typischer Referenz ist "C: A Reference Manual" von Harbison und Steele, Prentice-Hall, 1984.
- Das Befehlscodefragment 1 zeigt einen Pseudobefehlscode, der die Steuerung des Computerprogramms auf der obersten Ebene zusammenfaßt.
- Codefragment 1:
- 1. userParams = Benutzereingabe;
- 2. Weise Speicher für Matrizen zu;
- 3. Initialisiere Schwellenwertmatrix auf überall Nullen;
- 4. MakeThresholdArray(userParams, 0, 1);
- 5. Schreibe Schwellenwertmatrix hinaus zur Platte;
- Die von diesem Befehlscode ausgeführten Schritte sind die folgenden.
- Schritt 1 ist für den Benutzer vorgesehen, damit dieser bestimmte Parameter auswählt, welche umfassen: die Größe der Schwellenwertmatrix; wie oft jedes Digitalfilter auf jedes Punktprofil angewendet werden soll; die Anzahl der anzuwendenden verschiedenen Digitalfilter; und die Charakteristika jedes dieser Filter.
- Schritt 2 dient dazu, den Speicher zuzuweisen, der für die verschiedenen in dem Programm verwendeten Matrizen benötigt wird; die Schwellenwertmatrix, die Zustandmatrix, die Kernel-Matrix und möglicherweise weitere. Die Speicherzuweisung wird durch Fachleuten gutbekannte Mittel ausgeführt.
- Schritt 3 dient dazu, den Inhalt der Schwellenwertmatrix auf durchgängig Null zu initialisieren.
- Schritt 4 besteht darin, die Prozedur MakeThresholdArray mit den vom Benutzer gelieferten Parametern aufzurufen, um die Schwellenwertmatrix zu berechnen. Es werden außerdem die Werte 0 und 1 weitergeleitet. Diese Werte zeigen an, daß die Prozedur Punktprofile für den gesamten Bereich der Grauwerte erzeugen soll.
- Schritt 5 besteht darin, die vollständige Schwellenwertmatrix hinaus zu einer Plattendatei zu schreiben. Dieser Schritt kann fortgelassen werden, sofern das Computerprogramm Teil eines Halbtonrasterungssystems ist, das die Schwellenwertmatrix direkt aus dem Computerspeicher verwendet.
- Der verbleibende Teil des Programms ist in vier Einheiten oder Prozeduren aufgeteilt. Fachleute auf dem Gebiet der Computerprogrammierung sind mit Prozeduren als selbständige Einheiten von Computerbefehlen, die zu verschiedenen zeitpunkten aufgerufen werden können, um jeweils die gleiche Aufgabe, aber mit verschiedenen Parameter auszuführen, vertraut. Moderne Programmiersprachen bewirken, daß ein separater Computerspeicher für die temporäre Speicherung, die bei jedem Aufruf einer Prozedur verwendet wird, zugewiesen wird. So kann eine Prozedur sich selbst rekursiv solange aufrufen, wie es irgendeine Beendigungsbedingung für diese Selbstbezugnahme gibt.
- Fig. 2 ist ein Ablaufdiagramm, das den Gesamtsteuerungsfluß zwischen den Prozeduren zeigt. Das Hauptprogramm 10 ruft die Prozedur MakeThresholcMrray 12 auf, welche die gesamte Konstruktion der Schwellenwertmatrix handhabt. Ihre Parameter werden von dem Benützer über das Hauptprogramm gewonnen, wie es oben angegeben ist. Die MakeThresholdArray- Prozedur 12 bestimmt die Reihenfolge der Berechnung der Punktprofile anhand ihrer zugeordneten Grauwerte. Sie ruft die MakeDotProfile-Prozedur 14 auf, um die aktuelle Konstruktion des jeweiligen Punktprofils auszuführen.
- Der Zweck der MakeDotProfile-Prozedur 14 besteht darin, ein einzelnes Punktprofil zu konstruieren und die Informationen aus diesem Punktprofil in die Schwellenwertmatrix einzugeben. Das Punktprofil existiert als Vorzeichen der Werte in der Zustandmatrix. Die MakeDotProfile-Prozedur 14 hat als Parameter den Grauwert für das zu konstruierende Punktprofil, die Schwellenwertmatrix, die aufgebaut wird, und wenige weitere, welche später beschrieben werden. Diese Prozedur hat darüber hinaus Zugriff auf sämtliche Parameter der MakeThresholdArray-Prozedur 12. Die MakeDotProfil-Prozedur 14 konstruiert eine Reihe von Digitalfiltern, indem sie eine MakeDigitalFilter-Prozedur 16 aufruft und sie anwendet, um nachfolgende Korrekturen an dem Punktprofil über die Zustandmatrix zu machen, in dem eine ApplyFilter-Prozedur 18 aufgerufen wird.
- Die MakeDigitalFilter-Prozedur 16 konstruiert das Faltungskernel für ein Digitalfilter und speichert es in einer zweidimensionale Matrix von reellen Werten, die Kernel-Matrix genannt wird. Sie nimmt als Parameter verschiedene Gleitkommawerte, die verschiedene Charakteristika des Faltungskernels beschreiben, wie in der nachfolgenden detaillierten Beschreibung der Befehlscodefragmente zu sehen ist.
- Die ApplyFilter-Prozedur 18 wendet wiederholt ein Digitalfilter auf das Punktprofil an und macht Korrekturen an der Zustandsmatrix auf der Grundlage der gefilterten Werte. Sie nimmt als Parameter die Anzahl, wie oft dieser Prozeß wiederholt werden soll, ein Digitalfilter, eine Zustandsmatrix und weitere Werte, die spätere diskutiert werden. Die genaue Arbeitsweise jeder der vier Prozeduren, die in Fig. 2 gezeigt sind, wird im folgenden beschrieben.
- Die MakeThresholdArray-Prozedur wird im Befehlscodefragment 2 unten ausgeführt (die Zeilennummern sind nicht Teil der Sprache, sondern sind nur zur Bezugnahme eingeschlossen).
- Codefragment 2:
- 1. struct UserParameters;
- 2. typedefint Integer;
- 3. typedeffloat Real;
- 4. void MakeThresholdArray(
- struct UserParameters *userParams,
- Real lowDotDens, Real highDotDens)
- Zeilen 1-3 definieren Datentypen, die bei diesem und anderen Codefragmenten in der Sprache C, die später beschrieben werden, verwendet werden sollen. Zeile 4 zeigt die Parameter der Prozedur. Der Parameter userParams ist ein Zeiger auf eine Struktur, die sämtliche von dem Benutzer des Programms spezifizierten Parameter enthält. Da dieser Zeiger bloß zu einer anderen Prozedur weitergeleitet und nicht auf andere Weise verwendet wird, ist der Inhalt dieser Struktur an diesem Punkt nicht von Interesse. Die Parameter lowDot- Dens und highDotDens spezifizieren einen Bereich von Punktdichten, über welchen die Prozedur Punktprofile berechnen soll. Der Ausdruck "Punktdichte" bezieht sich im Kontext dieses Programms auf das Verhältnis der weißen Punkte zur Gesamtzahl der Punkte in einem Punktprofil. Die Prozedur erzeugt Punktprofile für Punktdichten innerhalb dieses Bereichs, aber nicht für die Endpunkte dieses Bereichs.
- Die Spezifikation der Punktdichte eines bestimmten Punktprofils ist von der Spezifikation des Grauwerts getrennt, der dieses Punktprofil aus der Schwellenwertmatrix extrahiert. Man könnte erwarten, daß der Grauwert aus der Punktdichte durch Multiplikation mit 255 berechnet werden könnte, was das Erfordernis zum Weiterleiten dieser Werte als separate Werte an die MakeDotProfil-Prozedur erübrigt. Jedoch kann das Phänomen des Punktzuwachses auf tatsächlichen physikalischen Einrichtungen, die bei der Halbtonrasterung verwendet werden, bewirken, daß der beobachtete Durchschnittsgrauwert des reproduzierten Punktprofils signifikant dunkler oder heller ist, als er aus der Punktdichte allein erwartet würde. Indem dem Programm gestattet wird, einen Grauwert zu spezifizieren, der von dem 255-fachen der Punktdichte abweicht, können Korrekturen für den Punktzuwachs auf tatsächlichen Geräten gemacht werden. Die Fähigkeit, eine derartige Korrektur auszuführen, wird bei dem vorliegenden Computerprogramm durch die DotDensToGray-Prozedur implementiert, die in Zeile 7 des obigen Codefragments verwendet wird. Sofern keine Korrektur erforderlich ist, kann diese Prozedur so codiert werden, daß sie einfach ihr Argument zurückgibt. Andererseits kann die Prozedur DotDensToGray eine Übertragungsfunktion implementieren, die bei gegebener Punktdichte des Punktprofils, das auf einen bestimmten Gerät angezeigt wird, einen bei diesem Gerät beobachteten tatsächlichen Grauwert zurückgibt, der im Bereich von 0 bis 1 normiert ist. Diese Übertragungsfunktion kann durch Interpolieren zwischen in einer Tabelle im Computerspeicher gespei cherten Werten oder durch Fachleuten gut bekannte andere Techniken implementiert werden.
- Codefragment 2 arbeitet wie folgt. Zeile 6 berechnet die Punktdichte für ein Punktprofil in der Mitte des angeforderten Punktdichtebereichs. Zeilen 7, 8 und 9 berechnen die zugehörigen Grauwerte für diese Punktdichte und die Punktdichten an beiden Enden des angeforderten Bereichs. Zeilen 10, 11 und 12 berechnen in der Schwellenwertmatrix zu speichernde Werte für die Punktprofile bei der niedrigen, mittleren und hohen Position in dem angeforderten Punktdichtebereich. Zeile 13 überprüft, daß der Schwellenwert für das mittlere Punktprofil (wenn er auf eine ganze Zahl gerundet ist) sich von dem Schwellenwert an beiden Enden des Bereichs unterscheidet. Sofern sich der Wert unterscheidet, so werden die Zeilen 14, 15 und 16 ausgeführt. Zeile 14 ruft die Make- DotProfil-Prozedur auf, um das Punktprofil für die mittlere Punktdichte in dem angeforderten Bereich zu konstruieren. Zeilen 15 und 16 sind dann rekursive Aufrufe zu der Make- ThresholdArray-Prozedur zum Konstruieren der verbleibenden Punktprofile in dem angeforderten Bereich.
- Die rekursive Ausführung der MakeThresholdArray-Prozedur erzeugt implizit eine Reihenfolge, in welcher Punktprofile konstruiert werden. Diese Ordnung kann verbal wie folgt zusammengefaßt werden. Zunächst wird das Punktprofil für den mittleren Punktdichtewert 1/2 erzeugt. Dies teilt die verbleibenden Punktdichtewerte in zwei Bereiche auf, jeweils einen auf jeder Seite von 1/2. Diese werden auf die gleiche Weise wie der Gesamtbereich verarbeitet: Das mittlere Grau wird zuerst verarbeitet (dies ist 1/4 für den unteren Bereich und 3/4 für den oberen), und die Unterbereiche an jeder Seite werden verarbeitet, usw. Für diese Ordnung, die äquivalent einem zuvor geordneten Durchlaufen eines binären Baums ist, wurde gefunden, daß sie bei dem bevorzugten Ausführungsbeispiel gut arbeitet, aber es können auch andere Ordnungen der Punktdichtewerte, wie sie Fachleuten bekannt sind, ebenfalls in befriedigender Weise verwendet werden.
- Beispielsweise kann ein iterativer Aufruf von MakeThreshold- Array anstelle eines rekursiven Aufrufs verwendet werden.
- Die Arbeitsweise der MakeDotProfil-Prozedur wird jetzt erläutert. Der gesamte logische Ablauf dieser Prozedur ist in dem folgenden Pseudobefehlscodefragment 3 veranschaulicht.
- Codefragment 3:
- Zeile 1 zeigt die Parameter der Prozedur, die userParams, dotDens, lowTVal, highTVal und thrshVal sind. Andere Variablen, wie beispielsweise die Schwellenwertmatrix, sind als globale Variablen verfügbar.
- Die Bedeutung dieser Parameter ist folgende. Der Parameter userParams hat die gleiche Bedeutung wie oben. Der Parameter dotDens ist die Punktdichte des zu erzeugenden Punktprofils. Der Parameter thrshval ist der Wert, der in der Schwellenwertmatrix gespeichert werden soll, um das Punktprofil, das gerade konstruiert wird, darzustellen. Sofern der Grauwert, thrshval, mit der sich ergebenden Schwellenwertmatrix verglichen wird, sollte sich das Punktprofil, das gerade konstruiert wird, ergeben. Der Parameter lowTVal ist der größte bis dahin in der Schwellenwertmatrix gespeicherte Wert, der kleiner als thrshval ist. HighTVal ist der kleinste bis dahin in der Schwellenwertmatrix gespeicherte Wert, der größer als thrshVal ist. Aufgrund der rekursiven Reihenfolge, in welcher die Punktprofile berechnet werden, sind lowTVal und highTVal gerade die Schwellenwerte für die Endpunkte des aktuellen Bereichs der Punktdichten, die berechnet werden.
- Der erste Schritt des Codefragments 3, Zeile 2, dient dazu, die Werte in der Zustandsmatrix mit zufälligen Gleitkommawerten im Bereich von -1 bis +1 zu initialisieren, aber nur dann, wenn das zugehörige Element des Punktprofils uneingeschränkt ist. Wenn das Punktprofilelement eingeschränkt ist, ist der Zustandswert -1, sofern das Element auf schwarz beschränkt ist, und 1, sofern das Element auf weiß beschränkt ist. Um zu bestimmen, ob ein gegebenes Punktprofilelement eingeschränkt ist, wird der Wert des zugehörigen Elements in der Schwellenwertmatrix mit den Paramtern lowTVal und highTVal verglichen. Wenn das Schwellenwertelement geringer als lowRange ist, ist das Punktprofilelement auf schwarz beschränkt; sofern es größer als oder gleich dem highRange ist, ist das Punktprofilelement darauf beschränkt, weiß zu sein. Anderenfalls ist das Punktprofilelement uneingeschränkt.
- Das unten genannte Codefragment 4 in der Programmiersprache C demonstriert einen Weg zum Ausführen dieses Initialisierungsprozesses. Das Codefragment unterstellt, daß die folgenden Variablen die folgenden Werte vor seiner Ausführung haben: thrPtr ist die Adresse im Computerspeicher des ersten Elements in der Schwellenwertmatrix; thrEnd ist die Adresse des ersten Bits unmittelbar nach dem letzten Element in der Schwellenwertmatrix; statePtr ist die Adresse des ersten Elements der Zustandsmatrix; und lowTVal und highTVal sind die oben erwähnten Parameter.
- Codefragment 4:
- Die Zeilen 3, 5 und 6 dieses Codefragments 4 führen kollektiv die Tests aus um nachzusehen, ob ein Element eingeschränkt ist und ob es auf den eingeschränkten Wert gesetzt ist. Zeile 5 stellt den zufälligen uneingeschränkten Wert ein. Die Funktion random, die in Zeile 5 verwendet wird, ist eine C-Bibliotheksfunktions, die eine zufällige ganze Zahl in dem durch eine vorzeichenlose ganze 32-Bit-Zahl ausdrückbaren Werten zurückgibt. Durch Teilen durch die Hexadezimalkonstante 0x3fffffff und Subtrahieren von 1, wird diese in einen Gleitkommawert im Bereich von -1 bis +1 konvertiert.
- Im Ergebnis des Ausführens des obigen Codefragments erscheint die Zustandsmatrix wie die Zustandsmatrix 100 gemäß Fig. 1A. Die Elemente 103 und 104 entsprechen den Elementen, die darauf beschränkt sind, weiß bzw. schwarz zu sein. Es wird wieder auf das Codefragment 3 Bezug genommen;
- die Zeile 3 initialisiert die Variable kernelSize für die Hauptschleife, die aus den Zeilen 4 bis 8 besteht. Die Variable kerneisize ist die Größe des Faltungskernels, das verwendet werden soll, um das Digitalfilter zu implementieren. Der Anfangswert von kernelsize wird aus einem Feld in der Struktur userParams gewonnen.
- Zeile 5 ruft die MakeDigitalFilter-Prozedur auf, um die Kernel-Matrix aufzufüllen. An die MakeDigitalFilter-Prozedur werden die Variablen kernelSize und dotDens weitergeleitet. Eine alternative Implementierung leitet andere in der userparams-Struktur gespeicherte Felder weiter, sofern dies gewünscht wird.
- Zeile 6 ruft die ApplyFilter-Prozedur auf, welche wiederholte Korrekturen an der Zustandsmatrix mit dem in Zeile 5 konstruierten Filter vornimmt.
- Zeile 7 berechnet die mittlere quadratische Abweichung (RMS - root mean square) sämtlicher Einträge in der Zustandsmatrix und skaliert dann sämtliche der Einträge, die den unbeschränkten Pixeln entsprechen, mit Hilfe des Kehrwerts dieses Werts. Der Zweck dieses Schrittes besteht darin, den RMS-Wert der Zustandsmatrix gleich 1 zu halten. Die Werte in dieser Matrix werden üblicherweise geringer, nachdem die Einstellungen vom Aufrufen der ApplyFilter gemacht worden sind, und solange dies nicht kompensiert worden ist, wird der RMS-Wert beinah zu Null nach der wiederholten Ausführung der Hauptschleife, was wiederum numerische Instabilitäten in den ausgeführten Berechnungen verursacht.
- Zeile 8 skaliert die Kernel-Größe um einen Faktor hinauf, der von dem Benutzer geliefert und in der Struktur userParams gespeichert wird. Dieser Faktor liegt typischerweise im Bereich von 2 bis 4. Kleinere Werte dieses Faktors führen zu Punktprofilen, die geringfügig sanfter erscheinen, aber längere Ausführungszeiten des Programms bewirken.
- Dies schließt die Ausführung der Hauptschleife der Prozedur ab. An diesem Punkt bestimmen die Vorzeichen der Werte in der Zustandsmatrix ein Punktprofil, das die gewünschte Eigenschaft hat, frei von störenden Mustern zu sein, wenn es physisch als Muster von schwarzen und weißen Punkten realisiert wird. Zeile 10 überträgt diese Informationen in der Zustandsmatrix in die Schwellenwertmatrix. Dies wird durch das folgenden Codefragment 5 ausgeführt. Codefragment 5 unterstellt, daß die folgenden Variablen die folgenden Werte vor seiner Ausführung haben: thrPtr ist die Adresse des ersten Elements in der Schwellenwertmatrix im Computerspeicher; thrEnd ist die Adresse des ersten Bits unmittelbar nach dem letzten Element in der Schwellenwertmatrix;
- statePtr ist die Adresse des ersten Elements der Zustandsmatrix; und thrshVal, lowTVal und highTVal sind die oben erwähnten Parameter.
- Codefragment 5:
- Codefragment 5 überprüft jedes Element der aktuellen Schwellenwertmatrix. Wenn der in einem gegebenen Speicherplatz in der Schwellenwertmatrix gefundene Wert zwischen den Parametern lowTVal und highTVal liegt, dann wird dieser Speicherplatz in der Schwellenwertmatrix entweder bei seinem ursprünglichen Wert belassen oder auf thrshval gesetzt, was von dem Vorzeichen des entsprechenden Werts in der Zustandsmatrix abhängig ist. Andere Werte in der Schwellenwertmatrix werden unverändert gelassen. Die Plätze in der Schwellenwertmatrix mit Werten zwischen lowTVal und highTVal entsprechen exakt denjenigen Elementen des Punktprofils, die nicht beschränkt sind. Indem es nur diesen speziellen Elementen in der Schwellenwertmatrix gestattet wird, sich zu ändern, werden die eingeschränkten Elemente des Punktprofils unverändert gelassen. Jene Elemente in der Schwellenwertmatrix, die den unbeschränkten Elementen in dem Punktprofil entsprechen, haben sämtlich den Wert lowTVal. Dies beruht darauf, daß keine Werte zwischen lowTVal und highTVal bis zu diesem Punkt in der Schwellenwertmatrix gespeichert worden sind. Nach diesem Punkt wird, da thrshval größer ist als lowTVal und geringer als highTVal ist, ein Vergleichen dieser Schwellenwertmatrix mit thrshval impliziert durch die Zustandsmatrix für die unbeschränkten Elemente zu dem gleichen Muster von schwarzen und weißen Punkten führen.
- Dies schließt die Beschreibung der MakeDotProfil- Prozedur ab.
- Ein Digitalfilter wird im Computerspeicher als zweidimensionale Matrix von Gleitkommawerten mit den gleichen Dimensionen wie bei der Schwellenwertmatrix dargestellt. Die Einträge in dieser Matrix repräsentieren das Faltungskernel des zu implementierenden Filters. Es ist übliche und wünschenswerte Praxis, das Zentrum des Faltungskernels bei den Koordinaten (0,0) anzuordnen. Da das gewünschte Faltungskernel gemäß der vorliegenden Erfindung überall um das Zentrum herum Einträge ungleich Null aufweist, erfordert dies, daß Einträge ungleich Null bei negativen Indizes in der das Faltungskernel repräsentierenden zweidimensionalen Matrix gespeichert werden. Negative Indizes sind normalerweise in der Programmiersprache C nicht erlaubt, so daß diese Einschränkung überwunden wird, indem die Breite der Matrix zu einem negativen Spaltenindex hinzuaddiert wird und indem die Höhe der Matrix zu einem negativen Zeilenindex hinzuaddiert wird. So sind die Indizes noch korrekt bis zu einem Mehrfachen der Breite (oder der Höhe) der Matrix und negative Indizes werden vermieden. Der Versatz dieser Einträge um Mehrfache der Breite oder Höhe der Matrix wird berücksichtigt, wenn das Faltungskernel verwendet wird.
- Diese Einstellung arbeitet gut, wenn die Breite und die Höhe des Faltungskernels geringer sind als die Hälfte der Breite bzw. der Höhe der Schwellenwertmatrix. Wenn jedoch diese Bedingung nicht erfüllt ist, so würden Elemente des Faltungskernels von dessen linker und rechter (oder oberer und unterer) Kante in die gleichen Orte in der Matrix abgebildet werden. Dies wird aufgelöst, indem die Beiträge der verschiedenen Seiten miteinander addiert werden und dieser Wert in der Matrix gespeichert wird.
- Die bei der vorliegenden Erfindung verwendeten Faltungskernels sind Gaußsche Kernels. D. h., die Elemente in der Zeile R und in der Spalte C der Kernel-Matrix sind durch die Formel gegeben:
- exp(-(C*C + D*D)/(radius*radius)),
- wobei diese Formel im Syntax der Programmiersprache C ausgedrückt ist, exp die Exponentialfunktion ist und radius der Radius ist, bei welchem der Wert des Kernels auf l/e = 0,3679 abfällt. Obwohl gefunden wurde, daß diese Formel bei der vorliegenden Erfindung funktioniert, erkennt ein Fachmann, daß andere Formeln ebensogut verwendet werden können. Beispielsweise könnte eine radiale Wellenfunktion mit exponentiellen Abfall vom Zentrum zu der obigen Formel hinzuaddiert werden, um die Halbtonpunktgröße und -beabstandung zu steuern. Die Formel für diese Komponente wäre:
- wfactor*cos (sqrt (C*C+D*D) /wl) *exp (-sqrt (C*C+D*D) *decay) wobei cos die Cosinusfunktion ist, wl die gewünschte Punktbeabstandung mal 6,28 ist, sqrt die Quadratwurzelfunktion ist, decay steuert, wie starr die Punktbeabstandung ist, und wfactor den Gesamteinfluß der radialen Wellenfunktion steuert. Andere Formeln stellen ebenfalls nützliche Faltungskernels unter verschiedenen Umständen zur Verfügung.
- Die tatsächlichen von der MakeDigitalFilter-Prozedur ausgeführten Schritte werden durch das folgende Codefragment 6 in der Sprache C spezifiziert. Die folgenden Variablen sind Parameter der Prozedur: kernelSize ist der gewünschte Radius des Faltungskernels und dotDens ist die Punktdichte für das erzeugte Punktprofil. Die globale Variable kernel ist die Adresse des ersten Elements in der Kernel-Matrix.
- Codefragment 6:
- Zeile 1 berechnet die sogenannte "Minoritätsdichte", welche die Dichte der Farbe der Punkte ist, die in der Minorität gegenüber der anderen Farbe der Punkte ist. Die Minoritätsdichte steht in inverser Beziehung zum Durchschnittsabstand zwischen den Punkten der Minoritätsfarbe. Es wurde gefunden, daß die Kernel-Größe um einen Faktor vergrößert werden sollte, der gleich dem Abstand der Minoritätsfarbpunkte ist. Dies wird in Zeile 3 berücksichtigt. Zeile 2 berechnet die gewünschte Fläche des Faltungskernels, bevor die Minoritätsbeabstandung berücksichtigt wird. Zeile 3 berechnet den Multiplizierer alpha, der in der Exponentialfunktion verwendet wird, um die gewünschte Größe des Faltungskernels zu erreichen. Da das Gaußsche Kernel sich Null annähert, je weiter es vom Zentrum entfernt berechnet wird, ohne tatsächlich Null zu erreichen, muß ein Abschneidepunkt eingerichtet werden, hinter welchem das Gaußsche Kernel als Null angesehen wird. Zeile 4 spezifiziert den maximalen Fehler, der durch Setzen dieses Abschneidepunkts gestattet wird, auf 10 4. Zeile 5 berechnet den Radius, über welchem das Kernel berechnet wird, um die Fehlergrenze in Zeile 4 zu erreichen. Zeile 6 initialisiert die globale Variable gaussSum, welche die Summe der Einträge in dem Faltungskernel bei Abschluß dieser Prozedur ist. Dieser Wert wird später in dem Programm verwendet. Zeile 8 initialisiert sämtliche Einträge in dem Faltungskernel auf Null. Zeilen 9, 10 und 11 bilden eine Doppelschleife, die sämtliche Orte im Faltungskernel aufzählt, bei welchen die Werte berechnet werden müssen. Die Variablen ix und iy sind die Koordinaten eines gegebenen Ortes. Zeilen 11 und 12 berechnen den Wert g, die Gaußsche Funktion für den gegebenen Ort. Zeilen 13 bis 18 berechnen den Zeilen- und Spaltenindex in der Kernel-Matrix aus den Variablen ix und iy. Diese Berechnung berücksichtigt solche ix und iy, die möglicherweise negativ sein können, oder solche ix und iy, die jenseits der Größe der Kernel-Matrix sind. Zeile 17 fügt die berechnete Gaußsche Funktion zu dem richtigen Eintrag in der Kernel-Matrix hinzu. Zeile 20 addiert die berechnete Gaußsche Funktion zu der Variable gaussSum.
- Dies schließt die Beschreibung der Prozedur MakeDigital- Filter ab. Bei ihrem Abschluß ist in der Kernel-Matrix das gewünschte Faltungskernel gespeichert und die Variable gaussSum speichert die Summe der Einträge in der Kernel- Matrix.
- Die Gesamtlogik dieser Prozedur wird in dem folgenden Pseudocodefragment 7 angegeben. Die Abkürzung "gefilterte Matrix" wird im folgenden für die Matrix des "gefilterten Punktprofils" verwendet.
- Codefragment 7:
- Zeile 1 des Pseudocodefragments 7 zeigt die benutzerspezifizierten Parameter userParams der Prozedur, welche dot- Dens, die Dichte der weißen Punkte in dem gewünschsten Punktprofil, und lowTVal und highTVal umfassen, welche die gleichen Bedeutungen wie bei der Prozedur MakeDotProfil haben.
- Zeile 2 steuert die Ausführungshauptschleife der Prozedur, die aus den Zeilen 3 bis 7 besteht. Diese Schleife wird userParams-> nIters Male ausgeführt. Dies ist ein Feld in der Benutzerparameterstruktur, die von dem Benutzer spezifiziert wird.
- Zeile 3 ist der erste Schritt in der Hauptschleife der Prozedur. Bei diesem Schritt wird die gefilterte Matrix initialisiert, so daß sie das (ungefilterte) Punktprofil darstellt. Die Plätze in dieser Matrix werden für jene Punkte, die in dem aktuellen Punktprofil schwarz wären, auf Null gesetzt, sowie für Punkte, die in dem aktuellen Punktprofil weiß wären, auf Eins. Das aktuelle Punktprofil wird aus den Vorzeichen der Werte in der Zustandsmatrix berechnet. Deutlicher gesagt, wird an denjenigen Plätzen, an denen die Zustandsmatrix größer oder gleich Null ist, eine 1 in die gefilterte Matrix eingegeben; an anderen Plätzen wird eine Null eingegeben.
- In Fig. 1B zeigt die gefilterte Matrix 200 den Zustand der gefilterten Matrix an diesem Punkt. Weiße Rechtecke entsprechen dem in der gefilterten Matrix gespeicherten Wert 1 und dunkelgraue Quadrate entsprechen dem Wert 0. Element 201 (mit dem Wert 0) in dieser Matrix entspricht dem Element 101 (mit einem negativen Wert) in der Zustandsmatrix 100, die in Fig. 1A gezeigt ist. In gleicher Weise entspricht das Element 202 in der Punktprofilmatrix in Fig. 1B (mit dem Wert 1) dem Element 102 (mit einem positiven Wert) in der Zustandsmatrix 100 in Fig. 1A.
- Zeile 4 wendet den Digitalfilter auf die gefilterte Matrix an. Um das Erscheinen von "Säumen" an den Kanten der sich ergebenden Punktprofile, wenn diese aneinander zusammengesetzt werden, zu vermeiden, wird die Filterung so ausgeführt, als ob sowohl das Faltungskernel als auch die Matrix umlaufend ("wrap around") an den Kanten gefiltert würden. Oder anders ausgedrückt, die linken Ränder jeder Matrix werden als mit den rechten Rändern zusammenhängend betrachtet und in gleicher Weise werden die oberen Ränder jeder Matrix als mit den unteren Rändern zusammenhängend angesehen. Das Faltungskernel wurde bereits auf eine Weise erzeugt, die mit diesem Ziel konsistent ist. Bei der gefilterten Matrix kann dies ausgeführt werden, indem eine modulare Arithmetik verwendet wird, um die Matrixindizes, die aus einer gegebenen Matrix herausfallen könnten, in den vorhandenen Bereich der Werte zu bringen.
- Um dieses Konzept näher zu erläutern, sei das folgende Codefragment 8 betrachtet, das die gefilterten Werte in der Variable filteredvalue bei den durch die Variablen kx und ky gegebenen Koordinaten berechnet.
- Codefragment 8:
- Zeile 5 multipliziert den Eintrag in der gefilterten Matrix am Ort (ix, iy) mit dem Ort (kx-ix, ky-iy) in der Kernel-Matrix. Die Koordinaten in dem letztgenannten Ausdruck liegen wahrscheinlich außerhalb des erlaubten Bereichs von 0 bis Breite-1 für die erste Koordinate und 0 bis Höhe-1 für die zweite Koordinate für irgendwelche Werte von kx und ky. Dies ist der Punkt, an dem die modulare Arithmetik ins Spiel gebracht wird. Das obige Codefragment wird wie folgt modifiziert, um dies zu berücksichtigen:
- Codefragment 9:
- Zeilen 5 bis 10 führen die modulare Arithmetikoperation durch, die kx - ix in den Bereich von 0 bis width und ky - iy in den Bereich von 0 bis height bringt.
- Da das Codefragment 9 außerdem demonstriert, wie die Digitalfilterung ausgeführt wird, sind weitere Kommentare angebracht. Die zwei verschachtelten Schleifen (Zeilen 3 und 4) zählen einen Bereich von Indizes von -gRadius bis gRadius auf. Dies ist der gleiche Wert, der in Zeile 5 des Codefragments 6 berechnet wurde, das oben für die Prozedur MakeDigitalFilter beschrieben wurde. Da die Einträge in der Kernel- Matrix außerhalb dieses Radius gleich Null sind, kann Zeit eingespart werden, indem diese Berechnungen nur innerhalb eines Quadrates dieses Radius durchgeführt werden. Jedoch ist es für gRadius möglich, daß er größer oder gleich der Hälfte der Dimensionen der Schwellenwertmatrix ist, wobei in diesem Falle die Grenze der Aufzählung von 0 bis Breite-1 in der horizontalen Richtung und 0 bis Höhe-1 in der vertikalen Richtung zu sein hätte. Das obige Codefragment berechnet den gefilterten Wert nur für den Ort (kx, ky). Um die gesamte Matrix zu filtern, muß dieser Befehlscode für sämtliche Werte von kx und ky ausgeführt werden. Die gefilterten Werte können nicht in die gefilterte Matrix zurückgespeichert werden, wenn sie berechnet worden sind. Statt dessen müssen sie in einer temporären Matrix gespeichert und zurückkopiert werden, nachdem sämtliche Werte berechnet worden sind.
- Das obige Codefragment nimmt im wesentlichen eine gewichtete Summe der ungefilterten Werte im Umkreis des Radius gRadius um den durch kx, ky gegebenen Ort. Diese Summe ergibt, wenn sie durch die Summe der Werte in der Kernel- Matrix dividiert wird, einen gewichteten Durchschnittsgrauwert für Pixel in einem Kreis um den Ort (kx, ky) herum. Die sich näher am Mittelpunkt des Kreises befindenden Werte werden höher gewichtet; die weiter entfernt liegenden Werte werden geringer gewichtet. Die exakte Wichtung wird durch das Faltungskernel bestimmt, dessen Formel oben angegeben wurde. So ersetzt die Operation der Filterung ein gegebenes ungefiltertes Element durch eine gewichtete Summe des ur sprünglichen ungefilterten (d. h. Punktprofil-)Werts in einer Fläche, die durch das Faltungskernel und die Position des gegebenen Elements bestimmt wird. Im Falle eines Gaußschen Kernels ist die Fläche ein Kreis, und die Größe des Kernels variiert mit dem Parameter kerneisize, der in der Prozedur MakeDotProfile berechnet worden ist.
- Ein anderer Weg, die digitale Filterungsoperation auszuführen, verwendet eine zweidimensionale schnelle Fouriertransformation oder "2D-FFT". Die 2D-FFT wird unter Verwendung von Schritten ausgeführt, die Fachleuten gut bekannt sind. Beispielsweise ist ein expliziter Computerbefehlscode für eine 2D-FFT in "Numerical Recipes" von Press et al., Cambridge University Press, 1986, angegeben.
- Mit der 2D-FFT wird die Filteroperation unter Verwendung der folgenden Schritte erreicht. Zunächst wird die 2D-FFT der ungefilterten Werte, die anfänglich in der gefilterten Matrix gespeichert sind, berechnet und in einer ersten Hilfsmatrix komplexer Zahlen gespeichert. Als zweites wird die 2D-FFT der Kernel-Matrix berechnet und in einer zweiten Hilfsmatrix komplexer Zahlen gespeichert (dieser Schritt kann außerhalb der Hauptschleife durchgeführt werden, da die Kernel-Matrix sich innerhalb der Grenzen dieser Schleife nicht ändert). Drittes wird jedes Element der ersten Hilfsmatrix mit dem Element in der entsprechenden Position in der zweiten Hilfsmatrix multipliziert. Der abschließende Schritt besteht darin, die inverse 2D-FFT an der ersten Hilfsmatrix auszuführen, die Ergebnisse in die gefilterte Matrix zurückzuspeichern. Dies schließt den Filterprozeß ab. Wenn die Größe des Faltungskernels (gRadlus) groß ist, ist dieses Verfahren schneller als das im Codefragment 9 und in den folgenden Abschnitten erläuterte Verfahren. Außerdem simuliert das FFT-Verfahren automatisch den gewünschten Umlauf(wrap-around)-Effekt.
- Nach der Filterung erscheint die gefilterte Matrix als gefiltertes Punktprofil 300 in Fig. 1C. Hier entsprechen dunklere Grauwerte den Werten nahe 0 und hellere Grauwerte den Werten nahe gausssum, welches die Summe sämtlicher Ein träge in dem Faltungskernel ist. Beispielsweise ist das Element 303 in dieser gefilterten Punktprofilmatrix die gewichtete Summe der Elemente in der ungefilterten Punktprofilmatrix 200 in Fig. 1B, die in dem Kreis mit den Teilen 204A und 204B enthalten sind. Der Kreis ist in zwei Teile, 204A auf der linken Seite und 204B auf der rechten Seite, aufgeteilt. Dies veranschaulicht, wie die wrap-around-Merkmale der digitalen Filterungsberechnungen arbeiten. Sofern der Kreis in einem Stück vorhanden wäre, würde der linke Rand des Kreises über den linken Rand der Matrix hinausgehen. Dies entspricht den Orten in dem Kreis, die negative x-Koordinaten an dem linken Rand haben. Der obige modulare arithmetische Code korrigiert diese negativen Indizes, indem er die Breite der Matrix zu diesen hinzuaddiert, so daß sie auf der rechten Seite der Matrix erscheinen, wie es in dem Kreisteil 204B gezeigt ist.
- Zeile 5 in den Pseudocodefragment 7 führt Einstellungen an den Werten der Zustandsmatrix aus. Der exakte Mechanismus für diese Einstellungen ist in dem folgenden Codefragment 10 in der Sprache C angegeben. Von den folgenden Variablen wird angenommen, daß sie vor der Ausführung des Fragments eingestellt sind: thrshPtr ist ein Zeiger auf erste Element in der Schwellenwertmatrix; endThrsh ist ein Zeiger auf das erste Element nach dem Ende der Schwellenwertmatrix;
- statePtr ist ein Zeiger auf das erste Element in der Zustandsmatrix; und filtPtr ist ein Zeiger auf das erste Element in der gefilterten Matrix. Die Variablen lowTVal, highTVal und dotDens sind Parameter der Prozedur. Die Variable gaussSum wurde in der obigen Prozedur MakeDigitalFilter berechnet.
- Codefragment 10:
- Zeilen 1 und 2 dieses Codefragments definieren Konstanten, kGamma und hyst, die später in dem Befehlscode verwendet werden. Zeile 3 berechnet die Variable grayAvg, d. h. den Wert, der in jedem Element der gefilterten Matrix gespeichert würde, sofern die gewünschte Punktdichte in sämtlichen Flächen erreicht würde. Dieses Element wird durch Multiplizieren der gewünschten Punktdichte mit der Summe der Einträge in dem Faltungskernel berechnet. Zeile 4 steuert die Schleife, die aus den Zeilen 5 bis 13 besteht. Diese Schleife zählt jeden Ort in der Schwellenwertmatrix durch.
- Zeile 5 ruft den Wert aus dem aktuellen Ort in der Schwellenwertmatrix ab und speichert ihn in der Variable tv. Zeile 6 führt eine Überprüfung an tv durch, um nachzusehen, ob der zugehörige Ort in dem Punktprofil unbeschränkt ist, und wenn dies der Fall ist, werden die Zeilen 7 bis 10 ausgeführt. Zeile 7 ruft den Wert aus dem aktuellen Ort in der Zustandsmatrix ab und speichert ihn in state. Zeile 8 berechnet den Wert des ungefilterten Punktprofils an dem aktuelle Ort und speichert ihn in dotColor.
- Zeile 9 berechnet eine Einstellung an der Zustandsmatrix an dem aktuellen Ort. Diese Einstellung besteht aus zwei Teilen. Der erste Teil ist die Differenz zwischen dem gewünschten gefilterten Wert und dem aktuellen gefilterten Wert, grayAvg - *filtptr. Dieser Teil der Einstellung bildet einen korrigierenden Einfluß, der Flächen des Punktprofils, die zu dunkel sind, heller macht und umgekehrt. Der zweite Teil der Einstellung, hyst*(2*dotColor - I), bildet einen bewahrenden Einfluß, der dazu führt, daß ein weißer Punkt weiß und ein schwarzer Punkt schwarz bleibt. Die Variable hyst ist eine Hysteresekonstante, die den Betrag dieses Einflusses steuert.
- Die Notwendigkeit des korrigierenden Einflusses ist klar: er ist es, der die Flächen des Punktprofils, die zu dunkel oder zu hell sind, ausgleicht, so daß schließlich ein Punktprofil erzeugt wird, das frei von störenden Mustern ist.
- Der bewahrende Einfluß ist subtiler. Ein Zweck des bewahrenden Einflusses besteht darin, die iterativen Einstellungen zu veranlassen, zu einem definierten Wert zu konvergieren. So wird die Möglichkeit des Korrigierens des Punktprofils bei einer Iteration der Hauptschleife der Prozedur, nur um sie dahin zurückzukorrigieren, wo sie bei einer vorhergehenden Schleife war, vermieden.
- Ein zweiter Zweck des bewahrenden (konservativen) Einflusses ist es, daß er die ursprünglichen Werte der Zustandsmatrix so weit wie möglich intakt hält, wenn sie nicht durch den korrigierenden Einfluß überschrieben werden. Dies ist deshalb wünschenswert, weil die Zustandsmatrix mit zufälligen Werten initialisiert wird, und es wünschenswert ist, diesen zufälligen Einfluß in der Punktanordnung des endgültigen Punktprofils zu bewahren. Eine zufällige Punktanordnung reduziert die störenden Muster in dem Punktprofil und vom überlappen von Punktmustern bewirkte Moire-Muster weiter. Ein weiterer Vorteil des konservativen Einflusses ist es, daß dann, wenn mehrere verschiedene Digitalfilter aufeinanderfolgend angewendet werden, die von den ersten Filtern ausgeführte vorteilhafte Arbeit nicht durch das Anwenden späterer Filter zunichte gemacht wird.
- Der korrigierende Einfluß und der konservative Einfluß sind entgegengesetzte numerische Größen. Im allgemeinen setzt sich der korrigierende Einfluß immer dann durch, wenn der Fehler in der gewichteten Summe der Elemente in dem Punktprofil um ein bestimmtes Pixel herum größer als die Variable hyst ist.
- Man beachte, daß dann, wenn die Zustandsmatrix mit irgendeinem nicht zufälligen Muster initialisiert würde, der konservative Einfluß dieses Muster soweit wie möglich bewahren würde, während der korrigierende Einfluß Korrekturen an dem Durchschnittsgrauwert des Punktprofils machen würde. Dies kann beim Ausgleichen von Punktprofilen von Vorteil sein, die auftreten, wenn mehr als eine nicht-identische Halbtonzelle in einer Schwellenwertmatrix eingeschlossen ist. In einem solchen Fall ist das anfängliche Muster eine Matrix von Halbtonpunkten wie bei der herkömmlichen Rasterung. So ist die vorliegende Erfindung auch nützlich bei dem Eliminieren von Mustern aus anderen Arten von Schwellenwertmatrizen ebenso wie von zufälligen Schwellenwertmatrizen.
- Zeile 10 modifiziert den Wert in der Zustandsmatrix gemäß der gerade ausgeführten Einstellung. Dies wird ausgeführt, indem der Wert in der Zustandsmatrix auf einen gewichteten Mittelwert des aktuellen Werts mit der Einstellung gesetzt wird. Man beachte, daß adjustment mit 10/gausssum multipliziert wird, um den großen Werten von adjustment entgegenzuwirken, welche bei größeren Faltungskernels auftreten. Auf diese Weise wird der Wert in der Zustandsmatrix graduell eingestellt über eine Anzahl von Iterationen in der Hauptschleife in der Richtung der Einstellung (adjustment). Dies ist erforderlich, da somit nicht zuviele Elemente in der Zustandsmatrix ihr Vorzeichen bei einer einzigen Iteration der Hauptschleife ändern. Dies sichert, daß die Werte in der Zustandsmatrix zu stabilen Werten hin konvergieren, wenn die Hauptschleife der Prozedur ausgeführt wird.
- Man beachte außerdem, daß dann, wenn ein Pixel in dem Punktprofil schwarz ist und der in der gefilterten Matrix berechnete Mittelwert zu hell ist, die Einstellung derart ist, daß das Pixel in dem Punktprofil schwarz bleibt. Dasselbe gilt für ein weißes Pixel in einer Fläche, bei der der Mittelwert zu dunkel ist. Nur Pixel, die schwarz sind, in einer Fläche, die zu dunkel ist, oder die weiß sind in einer Fläche, die zu hell ist, können sich ändern. Darüber hinaus können sich nur Pixel ändern, die nicht beschränkt sind. Von diesen Pixeln wird nur der Anteil, bei dem die obige Einstellung bewirkt, daß der Wert des zugehörigen Elements in der Zustandsmatrix sein Vorzeichen ändert, ausgewählt, um ihre Farbe umzukehren. Da die Anfangswerte in der Zustandsmatrix zufällig sind, hat diese Auswahl eine zufällige Komponente zusätzlich zu einer deterministischen Komponente.
- Es wurde gefunden, daß das oben beschriebene Verfahren auf digitalen Ausgabeeinrichtungen gut arbeitet, bei denen der Punktzuwachs gut kontrolliert wird. Der Punktzuwachs ist ein physikalisches Phänomen, bei dem die Farbe eines Punkts (dots), der einen zentralen Punkt umgibt, die Farbe dieses zentralen Punkts beeinflußt. Bei einer idealen digitalen Ausgabeeinrichtung wäre die Farbe jedes Punktes vollständig unabhängig von derartigen Einflüssen. Jedoch können die meisten tatsächlichen Geräte dieses Idealziel nicht erreichen. Der Punktzuwachs (dot gain) kann eine substantielle Änderung in dem tatsächlichen Durchschnittsgrauwert eine Gruppe von Punkten gegenüber dem theoretischen in dem obigen Programm berechneten Wert bewirken. So kann der korrigierende Einfluß des Befehlscodes in der Prozedur ApplyFilter nicht in der Lage sein, Differenzen der Grauwerte infolge des Punktzuwachses zu korrigieren. Lokale Variationen im Punktzuwachs können dann bei einigen Ausgabeeinrichtungen störende Muster bewirken.
- Einige wenige geringfügige Modifikationen an den obigen Prozeduren können dieses Problem beseitigen. Die erste Modifikation besteht darin, einen zweiten Aufruf der ApplyFilter nach dem ersten Aufruf in Zeile 6 im Codefragment 3 einzufügen. Dieser sei Zeile 6.5 genannt. Zu den zwei Aufrufen wird darüber hinaus ein fünfter Parameter hinzugefügt, welcher 0 für den ersten Aufruf und 1 für den zweiten ist. Zu der ApplyFilter im Codefragment 7 muß dieser fünfte Parameter in Zeile 1 hinzugefügt werden. (Siehe Codefragment 11 unten.) Die abschließende Modifikation besteht darin, daß ein Schritt zwischen den Zeilen 3 und 4 im Codefragment 7 eingefügt wird, der den Punktzuwachs eines typischen Ausgabegeräts modelliert.
- Grundsätzlich gibt es drei Arten des Punktzuwachses: schwarzer Punktzuwachs; weißer Punktzuwachs; oder beides. Sämtliche dieser Arten können durch einen Parameter für den schwarzen Punktzuwachs und einen Parameter für den weißen Punktzuwachs modelliert werden. Der Punktzuwachsmodellierungscode modifiziert Elemente in der gefilterten Matrix wie folgt. Ein schwarzes (0) Element wird inkrementiert, indem der weiße Punktzuwachsfaktor mal der Anzahl der weißen Pixel, die horizontal oder vertikal zu ihm benachbart sind, hinzugefügt wird. Ein weißes (1) Element wird dekrementiert, indem der schwarze Punktzuwachsfaktor mal der Anzahl von schwarzen Pixeln, die horizontal oder vertikal zu ihm benachbart sind, subtrahiert wird. Die vorliegende Erfindung kann beispielsweise einen weißen Punktzuwachsfaktor von 0 (d. h. kein weißer Punktzuwachs) und einen schwarzen Punktzuwachsfaktor von 0,12 verwenden.
- Die Punktzuwachsmodellierberechnungen sind in Fig. 3A gezeigt. Element 406 ist ein hypothetisches weißes Pixel, das von neun Pixeln in der gezeigten Weise umgeben ist. Der schwarze Punktzuwachs am Pixel 406 wird berechnet, indem die Anzahl der schwarzen Pixel gezählt wird, die horizontal oder vertikal benachbart sind. Es gibt drei derartige Pixel 402, 403 und 404. Obwohl Pixel 401 schwarz ist, wird es nicht gezählt, da es diagonal und nicht horizontal oder vertikal be nachbart ist. Darüber hinaus wird auch Pixel 405 nicht gezählt, obwohl es horizontal benachbart ist, da es weiß ist.
- Somit der ist der gesamte schwarze Punktzuwachs gleich dem Dreifachen des schwarzen Punktzuwachsparameters (0,12) bzw. 0,36. Dieser Wert wird von dem Wert des weißen Pixels, der zuvor 1 war, subtrahiert, um den Endwert 0,64 zu ergeben, wie er für das Mittelpixel 406A in Fig. 3B gezeigt ist. Sofern das Pixel 406 schwarz wäre, gäbe es für dieses Pixel keine Einstellung hinsichtlich des schwarzen Punktzuwachses.
- Fig. 3C zeigt eine weiße Punktzuwachsberechnung an einem hypothetischen Pixel 409. In diesem Fall gibt es ein horizontal oder vertikal benachbartes weißes Pixel, das Pixel 408, so daß der gesamte weiße Punktzuwachs gleich dem weißen Punktzuwachsparameter 0,12 mal 1 ist, was 0,12 ergibt. Dieser Wert wird zu dem Wert 0 des schwarzen Pixels 406 in Fig. 3A addiert, was den Endwert 0,12 ergibt, wie es im Pixel 409A in Fig. 3D gezeigt ist. Sofern das Pixel 409 weiß wäre, gäbe es keine Einstellung eines weißen Punktzuwachses. Diese modifizierten Elemente werden in einer Hilfsmatrix gespeichert, welche bei Berechnung sämtlicher Werte in die gefilterte Matrix zurückkopiert wird. Sobald dieser Modellierbefehlscode ausgeführt ist, werden die Elemente in der gefilterten Matrix in der üblichen Weise gefiltert. Wenn der Einstellschritt (Zeile 5 in Codefragment 7) ausgeführt ist, werden die Korrekturen an dem auf dem modellierten Punktzuwachs basierenden Punktprofil im Unterschied zu den strikten Mittelwerten der Grauwerte durchgeführt. So kann der Punktzuwachs auf diese Weise korrigiert werden.
- Der modifizierte Pseudocode für MakeDotProfile ist der folgende:
- Codefragment 11:
- Der modifizierte Pseudocode für ApplyFilter ist der folgende:
- Codefragment 12:
- Man beachte, daß die Ausführung des Punktzuwachsmodellierbefehlscodes durch den fünften Parameter gesteuert wird. So wird bei dem ersten Aufruf von ApplyFilter aus Zeile 6 des Codefragments 3 der Punktzuwachsmodelliercode nicht ausgeführt, wohingegen er bei dem zweiten Aufruf ausgeführt wird. Dies gestattet es, daß das Punktprofil alternativ für eine Sanftheit sowohl bei Vorhandensein des Punktzuwachses auf der Ausgabeeinrichtung als auch bei seinem Fehlen eingestellt wird. Es wurde gefunden, daß diese Abwechslungstechnik die Muster reduziert, die bei einem gegebenen Punktprofil auf Einrichtungen mit sowohl hohem als auch niedrigem Punktzuwachs auftreten.
- Dies ist wichtig, da die tatsächliche Menge des Punktzuwachses auf einer gegebenen Einrichtung in Abhängigkeit von Umgebungsfaktoren wie der Temperatur und der Feuchtigkeit oftmals über die Grenzen der Steuermöglichkeiten des Benutzers hinaus variieren kann. Durch Konstruieren eines Punktprofils, das sowohl bei Vorhandensein als auch bei dem Fehlen des Punktzuwachses sanft erscheint, wurde gefunden, daß dieses Punktprofil auf Einrichtungen mit einem Bereich der Punktzuwachsparameter gut reproduziert wird.
- Es ist manchmal vorteilhaft, die Punktzuwachsmodellierung bei dem ersten Aufruf von ApplyFilter einzuschalten und sie beim zweiten Aufruf auszuschalten. Es ist darüber hinaus manchmal vorteilhaft, die Punktzuwachsmodellierung bei aufeinanderfolgenden Wiederholungen der Prozedur ApplyFilter in der Hauptschleife ein- und auszuschalten. Andere Sequenzen, welche die Modellierung ein- oder ausschalten, können ebenfalls verwendet werden. Darüber hinaus wurde gefunden, daß überragende Ergebnisse erlangt werden, indem sämtliche Punktzuwachsmodifikationen fortgelassen werden, wenn Schwellenwertmatrizen für Einrichtungen mit geringem oder fehlendem Punktzuwachs erzeugt werden.
- Unter Verwendung der Technik gemäß der Erfindung werden Punktprofile erzeugt, die frei von störenden Mustern sind. Sie lassen sich ohne Säume zusammensetzen (tile) und können mit einer beliebigen gewünschten Punktdichte konstruiert werden. Darüber hinaus werden die Punktprofile mit der zusätzlichen Einschränkung erzeugt, daß einige Elemente schwarz bleiben, während andere weiß bleiben. Eine Mehrzahl derartiger Punktprofile mit geeigneten Einschränkungen können zu einer einzigen Schwellenwertmatrix zusammengesetzt werden, welche dann, wenn sie mit den ursprünglichen Grauwerten verglichen wird, die sie bildenden Punktprofile erbringt. Eine derartige Schwellenwertmatrix kann bei einer Vielzahl von digitalen Anzeigeeinrichtungen verwendet werden, um eine hervorragende Halbtonrasterung zu erreichen, die frei von störenden Mustern und Moire-Effekten ist. Darüber hinaus können die Punktprofile selbst vorteilhaft verwendet werden, wenn es erwünscht ist, gleichmäßige Grautöne auf einer digitalen Anzeigeeinrichtung zu reproduzieren.
- Die Erfindung wurde anhand eines auf einem Digitalcomputer ablaufenden Programmes beschrieben, aber Fachleute werden erkennen, daß andere Ausführungsbeispiele möglich sind, wie solche, die spezielle digitale Hardware benutzen. Darüber hinaus wurde bei der Beschreibung des Computerprogramms in vielen Fällen eine digitale Anzeigeeinrichtung vorausgesetzt, die schwarze oder weiße Punkte erzeugt. Jedoch wird ein Fachmann erkennen, daß die gleichen Techniken auf beliebige digitale Anzeigeeinrichtungen angewendet werden können, die nur einen vorgegebenen Satz von Farben einer beliebigen Art oder einen fest vorgegebenen Satz von Grauschattierungen reproduzieren.
- Wie es Fachleuten klar ist, können viele Änderungen an den oben beschriebenen Einrichtungen und Verfahren von fachlich versierten Praktikern ausgeführt werden, ohne vom Umfang der Erfindung abzuweichen, welcher nur so eingegrenzt werden sollte, wie es in den folgenden Ansprüchen angegeben ist.
Claims (5)
1. Ein Verfahren zum Anzeigen eines aus einer Mehrzahl von
Pixeln, die jeweils eine bestimmte Farbe aufweisen,
gebildeten Bildes auf einer digitalen Anzeigeeinrichtung unter
Verwendung einer Schwellenwertmatrix, die aus einer Mehrzahl
von Punkt-Profilen gebildet wird, wobei die Punkt-Profile
aus einer Mehrzahl von schwarzen oder weißen Pixeln gebildet
sind, wobei bestimmte Pixel in bestimmten Punkt-Profilen
darauf beschränkt sind, entweder schwarz oder weiß zu sein,
wobei das Verfahren eine Mehrzahl von Digitalfiltern
verwendet und die folgenden Schritte umfaßt:
(a) Zuweisen eines Werts zu jedem nicht beschränkten
Pixel eines der Punkt-Profile, wobei jeder derartige Wert als
eine der beiden Farben schwarz oder weiß interpretierbar
ist;
(b) in Abhängigkeit davon, ob eine Funktion eines
Digitalfilterwerts an einem vorgegebenen Pixel sich von einem
vorgegebenen gewünschten Wert an diesen Pixel unterscheidet,
Einstellen des diesem Pixel zugewiesenen Werts derart, daß
in einigen Fällen der eingestellte Wert als die andere der
beiden Farben interpretierbar ist; und
(c) Wiederholen des Schritts (b) für weitere Pixel in
dem Punkt-Profil, bis das gesamte Punkt-Profil abgedeckt
ist;
(d) Ändern des digitalen Filters und Wiederholen der
Schritte (b) und (c) für das gleiche Punkt-Profil;
(e) Wiederholen der Schritte (a) bis (d) für jedes der
Punkt-Profile in der Schwellenwertmatrix, wodurch die sich
ergebenden Punkt-Profile in wesentlichen frei von Artefakten
sind;
(f) Zusammensetzen der Punkt-Profile zu einer
Schwellenwertmatrix, die aus einem Satz von Referenzgrauwerten
gebildet ist;
(g) Abtasten des zu reproduzierenden Bildes an jedem
Pixel der Anzeigeeinrichtung, um einen Bildgrauwert zu
erlangen;
(h) Auswählen eines Referenzgrauwerts für dieses Pixel
aus der Schwellenwertmatrix, der dem abgetasteten
Bildgrauwert für dieses Pixel entspricht;
(i) Vergleichen des Bildgrauwerts für dieses Pixel mit
dem Referenzgrauwert für dieses Pixel, um die anzuzeigende
Farbe des Pixels zu gewinnen;
(j) Anzeigen eines Bildes auf der digitalen
Anzeigeeinrichtung einschließlich jedes der Pixel mit der durch den
Vergleich des Schrittes (i) bestimmten Farbe.
2. Das Verfahren nach Anspruch 1, wobei die in Schritt (a)
zugewiesenen Werte zufällige Werte sind.
3. Das Verfahren nach Anspruch 1, wobei die Einstellung des
einem bestimmten Pixel zugewiesenen Werts aus einem
korrigierenden Einfluß und einem bewahrenden Einfluß
zusammengesetzt ist.
4. Das Verfahren nach Anspruch 1, wobei die Einstellung
jedes Pixels separat modifiziert wird, um eine
Punkt-Verstärkung zu kompensieren.
5. Das Verfahren nach Anspruch 4, wobei die
Modifikation der Einstellung jedes Pixels separat
modifiziert wird, um ein Punkt-Profil zu erzeugen, das
sowohl bei Vorhandensein als auch bei Fehlen der
Punktverstärkung weich erscheint.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US23649394A | 1994-04-29 | 1994-04-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69517855D1 DE69517855D1 (de) | 2000-08-17 |
DE69517855T2 true DE69517855T2 (de) | 2001-03-01 |
Family
ID=22889735
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69517855T Expired - Fee Related DE69517855T2 (de) | 1994-04-29 | 1995-03-07 | Verfahren zur Erzeugung einer Schwellenmatrix |
Country Status (5)
Country | Link |
---|---|
US (1) | US5737452A (de) |
EP (1) | EP0680196B1 (de) |
JP (2) | JPH0870384A (de) |
CA (1) | CA2146104A1 (de) |
DE (1) | DE69517855T2 (de) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11154240A (ja) | 1997-11-20 | 1999-06-08 | Nintendo Co Ltd | 取込み画像を用いて画像を作成するための画像作成装置 |
DE19802850A1 (de) * | 1998-01-26 | 1999-07-29 | Siemens Ag | Bildrekonstruktionsverfahren für die 3D-Rekonstruktion |
US6208431B1 (en) * | 1998-03-31 | 2001-03-27 | International Business Machines Corporation | Method of eliminating artifacts in display devices |
JPH11346311A (ja) * | 1998-06-01 | 1999-12-14 | Matsushita Electric Ind Co Ltd | 階調再現方法 |
US6435969B1 (en) | 1998-11-03 | 2002-08-20 | Nintendo Co., Ltd. | Portable game machine having image capture, manipulation and incorporation |
US6753978B1 (en) | 1999-09-22 | 2004-06-22 | Sharp Laboratories Of America, Inc. | Higher order error diffusion of digital halftoning |
US6671068B1 (en) | 1999-09-30 | 2003-12-30 | Sharp Laboratories Of America, Inc. | Adaptive error diffusion with improved edge and sharpness perception |
US6512597B1 (en) * | 1999-11-17 | 2003-01-28 | Lexmark International, Inc. | Method and apparatus for correcting unadjusted threshold arrays for halftoning by use of parameterized transfer functions that generate adjusted threshold arrays at run time |
US6707576B1 (en) | 1999-12-02 | 2004-03-16 | Sharp Laboratories Of America, Inc. | Noise modulation error diffusion of digital halftoning |
US7277204B2 (en) * | 2003-07-31 | 2007-10-02 | Kodak Il Ltd. | Stochastic halftone screening method |
US20090034006A1 (en) * | 2007-08-03 | 2009-02-05 | Blondal Daniel J | Stochastic halftone images based on screening parameters |
KR101296681B1 (ko) * | 2008-09-24 | 2013-08-16 | 삼성전자주식회사 | 영상 처리 방법 및 이를 이용한 화상형성장치 |
US10372315B2 (en) | 2010-04-30 | 2019-08-06 | American Teleconferencing Services, Ltd | Location-aware conferencing with calendar functions |
US10268360B2 (en) | 2010-04-30 | 2019-04-23 | American Teleconferencing Service, Ltd. | Participant profiling in a conferencing system |
US9106794B2 (en) | 2010-04-30 | 2015-08-11 | American Teleconferencing Services, Ltd | Record and playback in a conference |
US8626847B2 (en) | 2010-04-30 | 2014-01-07 | American Teleconferencing Services, Ltd. | Transferring a conference session between client devices |
US9189143B2 (en) | 2010-04-30 | 2015-11-17 | American Teleconferencing Services, Ltd. | Sharing social networking content in a conference user interface |
USD656942S1 (en) | 2010-04-30 | 2012-04-03 | American Teleconferencing Services, Ltd. | Display screen portion with an animated image |
USD656507S1 (en) | 2010-04-30 | 2012-03-27 | American Teleconferencing Services, Ltd. | Display screen portion with an animated image |
US9419810B2 (en) | 2010-04-30 | 2016-08-16 | American Teleconference Services, Ltd. | Location aware conferencing with graphical representations that enable licensing and advertising |
US9082106B2 (en) | 2010-04-30 | 2015-07-14 | American Teleconferencing Services, Ltd. | Conferencing system with graphical interface for participant survey |
USD656941S1 (en) | 2010-04-30 | 2012-04-03 | American Teleconferencing Services, Ltd. | Display screen portion with an animated image |
USD656504S1 (en) | 2010-04-30 | 2012-03-27 | American Teleconferencing Services, Ltd. | Display screen portion with an animated image |
USD656505S1 (en) | 2010-04-30 | 2012-03-27 | American Teleconferencing Services, Ltd. | Display screen portion with animated image |
USD642586S1 (en) | 2010-04-30 | 2011-08-02 | American Teleconferencing Services, Ltd. | Portion of a display screen with a user interface |
USD642587S1 (en) | 2010-04-30 | 2011-08-02 | American Teleconferencing Services, Ltd. | Animated graphical user interface for a portion of a display screen |
USD656506S1 (en) | 2010-04-30 | 2012-03-27 | American Teleconferencing Services, Ltd. | Display screen portion with an animated image |
US9560206B2 (en) | 2010-04-30 | 2017-01-31 | American Teleconferencing Services, Ltd. | Real-time speech-to-text conversion in an audio conference session |
US10594958B2 (en) * | 2017-10-20 | 2020-03-17 | GM Global Technology Operations LLC | Camera imager binning technique |
NO344712B1 (en) * | 2018-08-08 | 2020-03-16 | Missing Ink As | Halftoning method |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5150429A (en) * | 1987-12-17 | 1992-09-22 | Eastman Kodak Company | Image processor with error diffusion modulated threshold matrix |
US5309526A (en) * | 1989-05-04 | 1994-05-03 | At&T Bell Laboratories | Image processing system |
US5020119A (en) * | 1989-06-26 | 1991-05-28 | Eastman Kodak Company | System for producing serrated, alternating pixel pattern on character boundaries |
US5027078A (en) * | 1989-10-10 | 1991-06-25 | Xerox Corporation | Unscreening of stored digital halftone images by logic filtering |
US5210602A (en) * | 1991-02-25 | 1993-05-11 | International Business Machines Corporation | Coupled-color error diffusion |
US5150428A (en) * | 1991-04-01 | 1992-09-22 | Eastman Kodak Company | Method for generating halftone image data with randomly selected threshold array |
US5255085A (en) * | 1991-10-25 | 1993-10-19 | Eastman Kodak Company | Adaptive technique for providing accurate tone reproduction control in an imaging system |
US5313287A (en) * | 1993-04-30 | 1994-05-17 | Hewlett-Packard Company | Imposed weight matrix error diffusion halftoning of image data |
-
1995
- 1995-03-07 DE DE69517855T patent/DE69517855T2/de not_active Expired - Fee Related
- 1995-03-07 EP EP95301455A patent/EP0680196B1/de not_active Expired - Lifetime
- 1995-03-31 CA CA002146104A patent/CA2146104A1/en not_active Abandoned
- 1995-04-25 JP JP7123023A patent/JPH0870384A/ja active Pending
-
1996
- 1996-12-17 US US08/755,803 patent/US5737452A/en not_active Expired - Lifetime
-
2005
- 2005-06-06 JP JP2005165167A patent/JP2005333657A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
JPH0870384A (ja) | 1996-03-12 |
US5737452A (en) | 1998-04-07 |
EP0680196A3 (de) | 1996-12-04 |
JP2005333657A (ja) | 2005-12-02 |
DE69517855D1 (de) | 2000-08-17 |
CA2146104A1 (en) | 1995-10-30 |
EP0680196A2 (de) | 1995-11-02 |
EP0680196B1 (de) | 2000-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69517855T2 (de) | Verfahren zur Erzeugung einer Schwellenmatrix | |
DE69225574T2 (de) | Farbbildverarbeitung | |
DE60101013T2 (de) | Farbtransformationsverfahren zum Abbilden von Farben in Bildern | |
DE69132353T2 (de) | Verfahren und gerät zur halbtonwiedergabe von grautonbildern unter verwendung einer maskierung mit blauem rauschen | |
DE69133044T2 (de) | Punktgrössensteuerverfahren bei digitaler Halbtonrasterung mit mehrzelligen Schwellenmatrix | |
DE69431294T2 (de) | Bildverarbeitungsverfahren und -system | |
DE69714149T2 (de) | Verfahren zum Rastern eines digitalen Mehrkanal-Farbbildes | |
DE69822545T2 (de) | Bildverbesserung unter Benutzung einer Flächeninterpolation | |
DE69310293T2 (de) | Umscharte Maske mit Farbtabelle | |
DE69738441T2 (de) | Stochastische Halbtonrasterung | |
DE68927471T2 (de) | Verfahren zur Schattierung eines graphischen Bildes | |
DE69715106T2 (de) | Anti-Alias-Unterpixel-Zeichenpositionierung mit Grauwertmaskierungstechniken | |
DE69915385T2 (de) | Schmalbandige anisotropische stochastische halbtonmuster und verfahren zu deren erzeugung und verwendung | |
DE69617408T2 (de) | Digitale rasterung mit spreizspektrum | |
DE69622961T2 (de) | Verfahren und Vorrichtung zur Darstellung von Zeichen | |
DE69706763T2 (de) | Verfahren und Vorrichtung zum selektiven Bearbeiten von abgetasteten Bildvorlagen | |
DE10136357A1 (de) | Kombinierte Punktdichten- und Punktgrößen-Modulation | |
DE3022454A1 (de) | Optisches abbildesystem mit computererzeugtem bild fuer einen bodenfesten flugsimulator | |
DE60127016T2 (de) | Verfahren und Gerät zur Durchführung einer lokalen Farbkorrektur | |
DE69424451T2 (de) | Halbtonzitteroptimierungstechniken | |
DE69021668T2 (de) | Adressenwandlung zur erweiterten Punktauflösung. | |
DE69226574T2 (de) | Verfahren und Gerät zur Reduktion des benötgten Speicherumfangs in einem digitalen Halbltonrasterungssystem | |
DE69416202T2 (de) | Bildelementfehlerdiffusionsverfahren | |
DE69229085T2 (de) | System zur Bildverarbeitung | |
DE3718521C2 (de) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8339 | Ceased/non-payment of the annual fee |