Mercurial > cortex
diff org/gabor.org @ 359:744ae7ef9b14
gabor filter looks right.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Thu, 07 Mar 2013 02:37:49 +0000 |
parents | b72fea69b2e1 |
children | fc5bb270596a |
line wrap: on
line diff
1.1 --- a/org/gabor.org Wed Mar 06 18:50:35 2013 +0000 1.2 +++ b/org/gabor.org Thu Mar 07 02:37:49 2013 +0000 1.3 @@ -33,9 +33,70 @@ 1.4 1.5 ;;r 1.6 1.7 - (org.opencv.core.MatOfFloat. (float-array [1])) 1.8 + (org.opencv.core.MatOfFloat. (float-array [0.5])) 1.9 )) 1.10 1.11 +(defn gabor-kernel [sigma aspect-ratio theta wavelength phase-offset] 1.12 + 1.13 + ;; first, find the size of the kernel which is required 1.14 + (let [square #(expt % 2) 1.15 + rotated (fn [[x y]] 1.16 + [(+ (* x (Math/cos theta)) (* y (Math/sin theta))) 1.17 + (- (* y (Math/cos theta)) (* x (Math/sin theta)))]) 1.18 + 1.19 + gaussian (fn [[x y]] 1.20 + (let [[x' y'] (rotated [x y])] 1.21 + (Math/exp (- (/ (+ (square x') 1.22 + (square (* aspect-ratio y'))) 1.23 + (* 2 (square sigma))))))) 1.24 + sinusoid (fn [[x y]] 1.25 + (let [[x' y'] (rotated [x y])] 1.26 + (Math/cos 1.27 + (+ (* 2 Math/PI (/ x' wavelength)) 1.28 + phase-offset)))) 1.29 + 1.30 + half-width (max 1.31 + (int (* 5 (/ sigma aspect-ratio))) 1.32 + (int (* 5 sigma)) 1.33 + (int (* 5 (/ aspect-ratio sigma)))) 1.34 + 1.35 + grid (let [axis (range (- half-width) (inc half-width))] 1.36 + (for [y (reverse axis) x axis] (vector x y))) 1.37 + 1.38 + scale (reduce + (map gaussian grid)) 1.39 + 1.40 + gabor (fn [[x y :as coord]] 1.41 + (* (sinusoid coord) (gaussian coord) scale)) 1.42 + 1.43 + mat-width (+ 1 (* 2 half-width)) 1.44 + mat (Mat. mat-width mat-width CvType/CV_32F)] 1.45 + 1.46 + 1.47 + (.put mat 0 0 (float-array (map gabor grid))) 1.48 + mat 1.49 + 1.50 + ;;(map gabor grid) 1.51 + 1.52 + )) 1.53 + 1.54 + 1.55 +(defn show-kernel [kernel] 1.56 + (let [output "/home/r/proj/cortex/tmp/kernel.png"] 1.57 + (org.opencv.highgui.Highgui/imwrite output kernel) 1.58 + (view (ImagePlus. output)))) 1.59 + 1.60 +(defn print-kernel [kernel] 1.61 + (println (.dump kernel))) 1.62 + 1.63 + 1.64 + 1.65 + 1.66 + 1.67 + 1.68 + 1.69 + 1.70 + 1.71 + 1.72 (defn convolve-practice [] 1.73 (let [input "/home/r/proj/cortex/images/dominos.jpg" 1.74