From 4c0678cf77945c4b3aa1633866588998a14242fd Mon Sep 17 00:00:00 2001 From: David Ashby Date: Tue, 12 Jan 2021 20:19:48 -0500 Subject: [PATCH] start working out how the color versions of these work... --- README.md | 2 ++ color_quant.go | 74 ++++++++++++++++++++++++++++++++++++++++++++ example/cricket.jpg | Bin 0 -> 72804 bytes main.go | 31 +++++++++++++++++++ quantizer.go | 22 ------------- 5 files changed, 107 insertions(+), 22 deletions(-) create mode 100644 color_quant.go create mode 100644 example/cricket.jpg diff --git a/README.md b/README.md index 7bec301..a4cda23 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,5 @@ This repo implements a number of the dithering methods detailed on >8) + i, + uint8(g>>8) + i, + uint8(b>>8) + i, + uint8(a >> 8), + } +} + +// naivePalette smashes each pixel to its closest color in the pallette. +func naivePalette(p color.Palette) quantizerFunction { + return func(_, _ int, c color.Color) color.Color { + return p[p.Index(c)] + } +} + +// randomNoisePalette injects random noise into the quantization step +func randomNoisePalette(p color.Palette) quantizerFunction { + return func(_, _ int, c color.Color) color.Color { + // the randomization here is tuned for the sixteen-color palette for now. + // I think the proper theory here is probably "only try and randomize within one palette swatch in either direction". + // it might be possible to instead permute the color selected _from the palette_ (i.e. modify the result of p.Index(c))... + // ...but I think for that to work you'd need a proper "ordering" for the colors. + noise := rand.Intn(64) - 32 + if noise < 0 { + noise = 0 + } + rc := permuteColor(c, uint8(noise)) + return p[p.Index(rc)] + } +} + +// color permutation algo: https://en.wikipedia.org/wiki/Ordered_dithering#Algorithm +func colorBayer(level int, p color.Palette) quantizerFunction { + b := newBayer(level) + r := len(p) + return func(x, y int, c color.Color) color.Color { + v := float64(r) * (b.valueAt(x, y) - 0.5) + rc := permuteColor(c, uint8(v)) + return p[p.Index(rc)] + } +} diff --git a/example/cricket.jpg b/example/cricket.jpg new file mode 100644 index 0000000000000000000000000000000000000000..baa49ede67acce01e6c16f6e590b57dbeacd30e2 GIT binary patch literal 72804 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≠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 CLqZP# literal 0 HcmV?d00001 diff --git a/main.go b/main.go index 8130549..7d676d6 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "fmt" "image" + "image/color" _ "image/jpeg" "image/png" "math/rand" @@ -10,6 +11,27 @@ import ( "time" ) +type coord struct { + x, y int +} + +// provided x, y, and color at location, return a color +type quantizerFunction func(int, int, color.Color) color.Color + +// apply sequentially applies a quantizing function to an image and returns the result +func apply(i image.Image, f quantizerFunction) image.Image { + out := image.NewRGBA(image.Rect(0, 0, i.Bounds().Max.X, i.Bounds().Max.Y)) + + b := out.Bounds() + for y := b.Min.Y; y < b.Max.Y; y++ { + for x := b.Min.X; x < b.Max.X; x++ { + out.Set(x, y, f(x, y, i.At(x, y))) + } + } + + return out +} + func main() { if len(os.Args) == 1 || len(os.Args) > 4 || os.Args[1] == "help" { fmt.Printf(`usage: %s @@ -38,17 +60,26 @@ func main() { new = apply(i, noOp) case "naive": new = apply(i, naiveBW) + case "palette": + new = apply(i, naivePalette(sixteencolors)) case "randomnoise": rand.Seed(time.Now().UnixNano()) new = apply(i, randomNoise) + case "noisepalette": + rand.Seed(time.Now().UnixNano()) + new = apply(i, randomNoisePalette(sixteencolors)) case "bayer0": new = apply(i, bayerDithering(0, false)) + case "bayer0p": + new = apply(i, colorBayer(0, sixteencolors)) case "bayer0n": new = apply(i, bayerDithering(0, true)) case "bayer1": new = apply(i, bayerDithering(1, false)) case "bayer1n": new = apply(i, bayerDithering(1, true)) + case "bayer1p": + new = apply(i, colorBayer(1, sixteencolors)) case "simpleerror": new = apply(i, simpleErrorDiffusion()) case "floydsteinberg": diff --git a/quantizer.go b/quantizer.go index 248b999..9ab3236 100644 --- a/quantizer.go +++ b/quantizer.go @@ -1,28 +1,10 @@ package main import ( - "image" "image/color" "math/rand" ) -// provided x, y, and color at location, return a color -type quantizerFunction func(int, int, color.Color) color.Color - -// apply sequentially applies a quantizing function to an image and returns the result -func apply(i image.Image, f quantizerFunction) image.Image { - out := image.NewRGBA(image.Rect(0, 0, i.Bounds().Max.X, i.Bounds().Max.Y)) - - b := out.Bounds() - for y := b.Min.Y; y < b.Max.Y; y++ { - for x := b.Min.X; x < b.Max.X; x++ { - out.Set(x, y, f(x, y, i.At(x, y))) - } - } - - return out -} - // noOp just clones colors from one image to another, to validate file handling. func noOp(_, _ int, c color.Color) color.Color { return c @@ -57,10 +39,6 @@ type bayer struct { matrix map[coord]float64 } -type coord struct { - x, y int -} - func (b *bayer) valueAt(x, y int) float64 { return b.matrix[coord{x: x % b.side, y: y % b.side}] }