Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!cs.utexas.edu!sun-barr!sun!imagen!daemon From: geof@apolling (Geof Cooper) Newsgroups: comp.lang.postscript Subject: Re: Adding noice to grayscales Message-ID: <3827@imagen.UUCP> Date: 23 May 89 20:03:19 GMT Sender: daemon@imagen.UUCP Lines: 44 In article <861@umecs.cs.umu.se> christer@zeus.UUCP (Christer Ericson) writes: >I would like to add some random noice to the grayscale when I'm filling an >area. I have tried to do something like this (simplified example); > > 60 45 { add rand 3 mod add 1 sub 3.0 div } setscreen > >but obviously the current screen is only accessed once before the filling and >not during the operation (as I would want it to work). No simple way. PostScript uses an imaging model that calls for a particular type of half-tone screen. It is not willing to half-tone using other digital techniques, such as convolution with random screens, etc.. As for adding random noise to the image, the only way that I can think of to do this is to generate the image, then superimpose a noise function on top of it. The noise function is just a "repeat" loop that turns a bit on or off at a random location (hopefully within the image). Here is some non-debugged code that illustrates the technique. I would expect this to take a LONG time to work for any real amount of noise. % SizeX and SizeY are the dimensions of the image that has % been imaged at the current origin. % The current origin should be pixel aligned using: % 0 0 moveto currentpoint transform round exch round itransform translate /xpix 1 0 idtransform dup mul exch dup mul add sqrt def /ypix 0 1 idtransform dup mul exch dup mul add sqrt def /SizeX SizeX xpix div round def /SizeY SizeY ypix div round def xpix ypix scale /sr { rand 2.15e9 div } bind def 1000 { sr SizeX mul round sr SizeY mul round moveto rand 16#4000000 ge {0}{1}ifelse setgray 0 1 rlineto 1 0 rlineto 0 -1 rlineto fill } bind repeat