From: Thomas T. <tt...@bi...> - 2000-05-18 14:24:03
|
Robert L Krawitz wrote: > Thomas, could you play around with your new matrix some more? It's > not in, because having only one matrix caused problems, but it does > look promising. It really bloats the executable, though. I have a number of things I'm trying. The simplest is to change the ditherpoint call that does the black decision to use not x and row but x+50 and/or row+50. Given that the matrix is not very correlated with itself, this should give okay results. The second is that I'm generting a new matrix now. It has somewhat reduced noise, but more interesting may be the change in selected initial points. The current matrix has starting points selected for minimum autocorrelation when shifted 1/2 H or V, the new matrix will shoot for 1/3 or 2/3 H and V. This gives 9 uses for a single matrix: enough for cCmMyYkK and yet another independent use. I could also try making another, smaller matrix, for the decision to 'print black': maybe something as small as 31 on a side or as large as 151. The last option would be to generate a number of matrices to be used for a single purpose each. I'm afraid this will give huge bloat. I think I'll try the options in the above order. How do people feel about these large matrices appearing in CVS? If no one objects, I'll put the new matrix in when it is ready and produces useful results. Robert, do you think 199 x 199 is big enough for a release version or would you prefer 251 x 251 or 257 x 257 ? That would make full of the 16 bits internal resolution at least. As for the sharpening that is inherent in Floyd-Steinberg: I didn't think about that myself, but read about it in one of Ulichney's papers. But I think I understand, and maybe I can even explain: Error diffusion does the following: Input -> Approximation -> Simulation -> Delay -> Subtract from next input values. Essentially, this is what error diffusion does: except FS does things a little more abstract and talks about 'error': instead of simulating and then subtracting from other input values, FS takes a shortcut and subtracts a value immediately from _coming_ input values if a dot is printed. In any case, the approximated version (which is much like the original) is delayed and blurred (by diffusing into other cells) as it is subtracted from the input. And what happens if a blurred version of X is subtracted from the original X: X is sharpened by making the low frequency components weaker. The process is also called 'unsharp mask'. Thomas |