# HG changeset patch # User Robert McIntyre # Date 1362642152 0 # Node ID b599a189433b85f29ca5b4b63c4524b5823fbdbf # Parent 9fa92af29c3a1ccb7c1c8aaad54ac7f0d15621df render video and images. diff -r 9fa92af29c3a -r b599a189433b images/gabor-50-10-0-3.png Binary file images/gabor-50-10-0-3.png has changed diff -r 9fa92af29c3a -r b599a189433b images/gabor-50-10-pi-over-2.png Binary file images/gabor-50-10-pi-over-2.png has changed diff -r 9fa92af29c3a -r b599a189433b images/gabor-50-10-pi-over-4.png Binary file images/gabor-50-10-pi-over-4.png has changed diff -r 9fa92af29c3a -r b599a189433b images/gabor-50-10.png Binary file images/gabor-50-10.png has changed diff -r 9fa92af29c3a -r b599a189433b images/gabor-50-4-pi-over3-3.png Binary file images/gabor-50-4-pi-over3-3.png has changed diff -r 9fa92af29c3a -r b599a189433b images/gabor-50-50.png Binary file images/gabor-50-50.png has changed diff -r 9fa92af29c3a -r b599a189433b org/gabor.org --- a/org/gabor.org Thu Mar 07 05:36:17 2013 +0000 +++ b/org/gabor.org Thu Mar 07 07:42:32 2013 +0000 @@ -16,7 +16,7 @@ (:import java.awt.image.BufferedImage) (:import ij.ImagePlus) (:import org.opencv.core.Mat) - (:use (cortex world sense util vision)) + (:use (cortex world sense util vision import)) (:import com.jme3.post.SceneProcessor) (:import (com.jme3.util BufferUtils Screenshots)) (:import java.nio.ByteBuffer) @@ -30,14 +30,21 @@ (cortex.import/mega-import-jme3) - +(use 'clojure.math.numeric-tower) (defn load-opencv "Load the opencv native library. Must be called before any OpenCV stuff is used." [] (clojure.lang.RT/loadLibrary "opencv_java249")) -(defn gabor-kernel [sigma aspect-ratio theta wavelength phase-offset] +(load-opencv) + +(defn gabor-kernel + ([sigma wavelength theta] + (gabor-kernel sigma wavelength theta 1 0)) + ([sigma wavelength] + (gabor-kernel sigma wavelength 0 1 0)) + ([sigma wavelength theta aspect-ratio phase-offset] ;; first, find the size of the kernel which is required (let [square #(expt % 2) @@ -75,7 +82,7 @@ mat (Mat. mat-width mat-width CvType/CV_32F)] (.put mat 0 0 (float-array (map gabor grid))) - mat)) + mat))) (defn draw-kernel! [kernel img-path] @@ -97,10 +104,73 @@ (.put new-mat 0 0 (float-array scaled-vals)) (org.opencv.highgui.Highgui/imwrite output new-mat)))) +;; some cool examples +#+end_src + + + + +[[../images/gabor-50-10.png]] + +#+begin_src clojure +(def img-base "/home/r/proj/cortex/images/") + +(draw-kernel! (gabor-kernel 50 10 0 1 0) + (str img-base "gabor-50-10.png")) +#+end_src + + +[[../images/gabor-50-10-pi-over-4.png]] + +#+begin_src clojure +(draw-kernel! (gabor-kernel 50 10 (/ Math/PI 4) 1 0) + (str img-base "gabor-50-10-pi-over-4.png")) +#+end_src + + +[[../images/gabor-50-10-pi-over-2.png]] + +#+begin_src clojure +(draw-kernel! (gabor-kernel 50 10 (/ Math/PI 2) 1 0) + (str img-base "gabor-50-10-pi-over-2.png")) +#+end_src + + +[[../images/gabor-50-50.png]] + + + +#+begin_src clojure +(draw-kernel! (gabor-kernel 50 50 0 1 0) + (str img-base "gabor-50-50.png")) + +#+end_src + +[[../images/gabor-50-10-0-3.png]] + +#+begin_src clojure +(draw-kernel! (gabor-kernel 50 10 0 3 0) + (str img-base "gabor-50-10-0-3.png")) +#+end_src + + + +[[../images/gabor-50-4-pi-over3-3.png]] +#+begin_src clojure +(draw-kernel! (gabor-kernel 50 4 (/ Math/PI 3) 3 0) + (str img-base "gabor-50-4-pi-over3-3.png")) +#+end_src + + + + + +#:name gabor-tail +#+begin_src clojure (defn show-kernel [kernel] (let [img-path "/home/r/proj/cortex/tmp/kernel.png"] (draw-kernel! kernel img-path) - (view (ImagePlus. output)))) + (view (ImagePlus. img-path)))) (defn print-kernel [kernel] (println (.dump kernel))) @@ -171,33 +241,36 @@ (import java.io.File) +(def base "/home/r/proj/cortex/render/gabor-1/") (defn brick-wall-game-run [record?] - (doto - (world - (doto (Node.) (.attachChild (floor*)) - (.attachChild (brick-wall*)) - ) - {"key-f" (fn [game value] - (if (not value) (add-element game (brick-wall*)))) - "key-space" (fire-cannon-ball )} - (fn [world] - (position-camera world - (Vector3f. 1.382548, 4.0383573, 5.994235) - (Quaternion. 0.0013082094, 0.98581666, -0.1676442, 0.0076932586)) + (let [capture-dir (File. base "main")] + + (.mkdir (File. base "main")) + (doto + (world + (doto (Node.) (.attachChild (floor*)) + (.attachChild (brick-wall*)) + ) + {"key-f" (fn [game value] + (if (not value) (add-element game (brick-wall*)))) + "key-space" (fire-cannon-ball )} + (fn [world] + (position-camera world + (Vector3f. 1.382548, 4.0383573, 5.994235) + (Quaternion. 0.0013082094, 0.98581666, -0.1676442, 0.0076932586)) - ;;(speed-up world) - - (if record? - (Capture/captureVideo - world - (File. - "/home/r/proj/cortex/render/gabor-1/main"))) + ;;(speed-up world) + + (if record? + (Capture/captureVideo + world capture-dir)) + (add-camera! world (.getCamera world) no-op)) - (fn [& _])) - (.start))) + (fn [& _])) + (.start)))) -(defn convolve-practice [kernel] +(defn convolve-preview [kernel] (let [input "/home/r/proj/cortex/render/gabor-1/main/0000032.png" @@ -205,7 +278,7 @@ i (org.opencv.highgui.Highgui/imread input) - kernel (gabor-kernel 10 1 (/ Math/PI 2) 10 0) + ;;kernel (gabor-kernel 10 1 (/ Math/PI 2) 10 0) new-mat (Mat.) @@ -218,13 +291,147 @@ (view (ImagePlus. input)) (view (ImagePlus. output)))) +(use 'clojure.java.shell) -(defn generate-gabor-images [] - (gabor-kernel 2.8 1 0 3.5 0) +(defn apply-gabor [kernel source dest] + (let [i (org.opencv.highgui.Highgui/imread source) + new-mat (Mat.)] + + (println dest) + (if (not (.exists (File. dest))) + (do + (org.opencv.imgproc.Imgproc/filter2D i new-mat CvType/CV_32F kernel) + (org.opencv.highgui.Highgui/imwrite dest new-mat) + (println "mogrify" "-modulate" "1000%" dest) + (sh "mogrify" "-modulate" "1000%" dest))))) +(import java.io.File) +(defn images [path] + (sort (rest (file-seq (File. path))))) + + + +(defn pics [file] + (images (str base file))) + +(defn generate-gabor-images [kernel name] + (draw-kernel! kernel (str base name ".png")) + + (.mkdir (File. (str base name))) + + (let [main (map #(.getCanonicalPath %) (pics "main")) + targets (map #(str base name "/" (format "%07d.png" %)) + (range 0 (count main)))] + (dorun (pmap (partial apply-gabor kernel) main targets)))) + + +(def banks + [[(gabor-kernel 2.8 3.5) "bank-1-1"] + [(gabor-kernel 2.8 3.5 (/ Math/PI 2)) "bank-1-1-rot"] + +;; [(gabor-kernel 3.6 4.6) "bank-1-2"] +;; [(gabor-kernel 4.5 5.6) "bank-2-1"] +;; [(gabor-kernel 6.3 7.9) "bank-3-1"] +;; [(gabor-kernel 7.3 9.1) "bank-3-2"] + + [(gabor-kernel 12.3 15.4) "bank-6-1"] + + +;; [(gabor-kernel 17 21.2) "bank-8-1"] +;; [(gabor-kernel 18.2 22.8) "bank-8-2"] + ]) + + +(defn make-all-images [] + (dorun (map (partial apply generate-gabor-images) banks))) + + + +(defn compile-left-right [] + (.mkdir (File. (str base "left-right"))) + (let [main (pics "main") + left (pics "bank-1-1") + right (pics "bank-1-1-rot") + left-kernel (repeat 20000 (File. (str base "bank-1-1.png"))) + right-kernel (repeat 20000 (File. (str base "bank-1-1-rot.png"))) + targets (map + #(File. (str base "left-right/" (format "%07d.png" %))) + (range 0 (count main)))] + + (dorun + (pmap + (comp + (fn [[main left right left-kernel right-kernel target]] + (println target) + (if (not (.exists (File. target))) + (sh "convert" + "-size" "1940x515" "xc:white" + main "-geometry" "+0+0" "-composite" + left "-geometry" "+650+0" "-composite" + right "-geometry" "+1300+0" "-composite" + left-kernel "-geometry" "+960+485" "-composite" + right-kernel "-geometry" "+1610+485" "-composite" + target))) + (fn [& args] (map #(.getCanonicalPath %) args))) + main left right left-kernel right-kernel targets)))) + + +(defn compile-big-small [] + (.mkdir (File. (str base "big-small"))) + (let [main (pics "main") + left (pics "bank-1-1") + right (pics "bank-6-1") + small-kernel (repeat 20000 (File. (str base "bank-1-1.png"))) + big-kernel (repeat 20000 (File. (str base "bank-6-1.png"))) + targets (map + #(File. (str base "big-small/" (format "%07d.png" %))) + (range 0 (count main)))] + + (dorun + (pmap + (comp + (fn [[main left right small-kernel big-kernel target]] + (println target) + (if (not (.exists (File. target))) + (sh "convert" + "-size" "1940x610" "xc:white" + main "-geometry" "+0+0" "-composite" + left "-geometry" "+650+0" "-composite" + right "-geometry" "+1300+0" "-composite" + small-kernel "-geometry" "+960+485" "-composite" + big-kernel "-geometry" "+1560+485" "-composite" + target))) + (fn [& args] (map #(.getCanonicalPath %) args))) + main left right small-kernel big-kernel targets)))) + + +(defn regen-everything [] + (make-all-images) + (compile-left-right) + (compile-big-small)) + + +#+end_src + +#+name: make-left-right +#+begin_src sh +#!/bin/sh + +ffmpeg -framerate 60 -i ./left-right/%07d.png -b:v 9000k\ + -c:v mpeg4 -r 60 gabor-rotation.avi + +#+end_src + + +#+name: make-big-small +#+begin_src sh +#!/bin/sh + +ffmpeg -framerate 60 -i ./big-small/%07d.png -b:v 9000k\ + -c:v mpeg4 -r 60 gabor-big-small.avi #+end_src @@ -233,4 +440,13 @@ * COMMENT Generate Source #+begin_src clojure :tangle ../src/cortex/gabor.clj <> +<> #+end_src + +#+begin_src clojure :tangle ../render/gabor-1/make-rotation.sh +<> +#+end_src + +#+begin_src clojure :tangle ../render/gabor-1/make-big-small.sh +<> +#+end_src