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))
|