annotate src/rlm/vision.clj @ 0:78a630e650d2

initial import
author Robert McIntyre <rlm@mit.edu>
date Tue, 18 Oct 2011 00:57:08 -0700
parents
children
rev   line source
rlm@0 1 (ns rlm.vision
rlm@0 2 (:use [clojure.contrib def trace])
rlm@0 3 (:use [rlm image-utils])
rlm@0 4 (:use [cantor])
rlm@0 5 (:import java.awt.image.BufferedImage
rlm@0 6 [ij ImagePlus IJ]
rlm@0 7
rlm@0 8 ))
rlm@0 9
rlm@0 10 (defn select-last [& args]
rlm@0 11 (last args))
rlm@0 12
rlm@0 13
rlm@0 14 ;this is to finally get these stupid color problems out of the way!
rlm@0 15
rlm@0 16 (defmulti gen-color (fn [& args]
rlm@0 17 (class (last args))))
rlm@0 18
rlm@0 19
rlm@0 20
rlm@0 21
rlm@0 22 (defmethod gen-color (class 5)
rlm@0 23 ([r g b]
rlm@0 24 (gen-color (vector r g b 255)))
rlm@0 25 ([r g b a]
rlm@0 26 (gen-color (vector r g b a))))
rlm@0 27
rlm@0 28 (defmethod gen-color (class :black)
rlm@0 29 [key]
rlm@0 30 (get {:black (gen-color {:r 0 :g 0 :b 0})
rlm@0 31 :white (gen-color {:r 255 :g 255 :b 255})}
rlm@0 32 key
rlm@0 33 (gen-color {:r 0 :g 0 :b 0})))
rlm@0 34
rlm@0 35 (defmethod gen-color (class [5 10 255 50])
rlm@0 36 [[r g b a]]
rlm@0 37 (gen-color {:r r :g g :b b :a a}))
rlm@0 38
rlm@0 39 (defmethod gen-color (class {:r 5 :g 10 :b 255 :a 50})
rlm@0 40 [{:keys [r g b a] :or {r 0 g 0 b 0 a 255}}]
rlm@0 41 (let [r (int (rem r 256))
rlm@0 42 g (int (rem g 256))
rlm@0 43 b (int (rem b 256))
rlm@0 44 a (int (rem a 256))
rlm@0 45 ]
rlm@0 46 (+
rlm@0 47 (bit-shift-left a 24)
rlm@0 48 (bit-shift-left r 16)
rlm@0 49 (bit-shift-left g 8)
rlm@0 50 b)))
rlm@0 51
rlm@0 52 (def color (memoize gen-color))
rlm@0 53
rlm@0 54
rlm@0 55
rlm@0 56
rlm@0 57 (defn black-lattice [x y]
rlm@0 58 (if (and
rlm@0 59 (< (rem y 500) 10)
rlm@0 60 (< (rem x 500) 10)) (color :black) (color :white)))
rlm@0 61
rlm@0 62
rlm@0 63
rlm@0 64 (defn snake-problem-2 [x y]
rlm@0 65 (let [E (+ 4 (* 3 (java.lang.Math/cos x)) (java.lang.Math/cos (* 3 x)))
rlm@0 66 E (int (* E 255/9))]
rlm@0 67
rlm@0 68 (color E E E)))
rlm@0 69
rlm@0 70
rlm@0 71
rlm@0 72 (defn function->image [[xmin xmax] [ymin ymax] f]
rlm@0 73 (let [width (- xmax xmin)
rlm@0 74 height (- ymax ymin)
rlm@0 75 image (BufferedImage. width height BufferedImage/TYPE_INT_RGB)]
rlm@0 76
rlm@0 77 (doall
rlm@0 78 (for [y (range ymin ymax) x (range xmin xmax)]
rlm@0 79 (.setRGB image (- x xmin) (- y ymin) (f x y))))
rlm@0 80
rlm@0 81 (ImagePlus. "functionally-generated" image)))
rlm@0 82
rlm@0 83 (defn better-function->image [[xmin xmax] [ymin ymax] f]
rlm@0 84
rlm@0 85 (let [width (- xmax xmin)
rlm@0 86 height (- ymax ymin)
rlm@0 87 image (BufferedImage. width height BufferedImage/TYPE_INT_RGB)
rlm@0 88 set-color (fn [[x y]] (.setRGB image (- x xmin) (- y ymin) (f x y)))
rlm@0 89 domain (for [x (range xmin xmax) y (range ymin ymax)] [x y])]
rlm@0 90
rlm@0 91 (dorun (pmap set-color domain))
rlm@0 92 (ImagePlus. "functionally-generated" image)))
rlm@0 93
rlm@0 94
rlm@0 95
rlm@0 96
rlm@0 97
rlm@0 98 (def a-face (normalize (cross
rlm@0 99 (vec3 1 0 0)
rlm@0 100 (sub
rlm@0 101 (vec3 0 0 (/ (* 2 (expt 3 1/2))))
rlm@0 102 (vec3 (/ (- (sqrt 3)) 2) (- 1/2) 0)))))
rlm@0 103
rlm@0 104 (def c-face (mul (normalize (cross
rlm@0 105 (vec3 (/ (sqrt 3) 2) 3/2 0)
rlm@0 106 (sub
rlm@0 107 (vec3 0 0 (/ (* 2 (expt 3 1/2))))
rlm@0 108 (vec3 (/ (- (sqrt 3)) 2) (- 1/2) 0)))) -1))
rlm@0 109
rlm@0 110
rlm@0 111 (def b-face (mul (normalize
rlm@0 112 (cross
rlm@0 113 (vec3 (/ (sqrt 3) 2) (- 3/2) 0)
rlm@0 114 (sub
rlm@0 115 (vec3 0 0 (/ (* 2 (expt 3 1/2))))
rlm@0 116 (vec3 (/ (sqrt 3) 2) (- 1/2) 0)))) -1))