[pypy-commit] extradoc extradoc: some morphology

hakanardo noreply at buildbot.pypy.org
Wed Sep 12 17:06:56 CEST 2012


Author: Hakan Ardo <hakan at debian.org>
Branch: extradoc
Changeset: r4800:f482dd01f80d
Date: 2012-09-12 17:06 +0200
http://bitbucket.org/pypy/extradoc/changeset/f482dd01f80d/

Log:	some morphology

diff --git a/talk/dls2012/demo/analytics.py b/talk/dls2012/demo/analytics.py
--- a/talk/dls2012/demo/analytics.py
+++ b/talk/dls2012/demo/analytics.py
@@ -3,6 +3,7 @@
 from io import view
 from background import Background
 from foreground import foreground
+from detect import find_objects
 
 class Tracker(ReloadHack):
     def __init__(self):
@@ -12,5 +13,6 @@
         self.background.update(frame)
         fg = foreground(frame, self.background.image)
         #view(self.background.image)
+        find_objects(fg)
         view(255 * fg)
 
diff --git a/talk/dls2012/demo/detect.py b/talk/dls2012/demo/detect.py
new file mode 100644
--- /dev/null
+++ b/talk/dls2012/demo/detect.py
@@ -0,0 +1,41 @@
+from reloader import autoreload
+from io import view
+
+def morph(fg, r, fn):
+    res = fg.new()
+    for y in xrange(fg.height):
+        for x in xrange(fg.width):
+            #res[x, y] = max(fg[x+dx, y+dy] 
+            #                for dx in xrange(-r, r+1) 
+            #                for dy in xrange(-r, r+1))
+            res[x, y] = fg[x, y]
+            for dx in xrange(-r, r+1):
+                for dy in xrange(-r, r+1):
+                    res[x, y] = fn(res[x, y], fg[x+dx, y+dy])
+    return res
+
+def morph(fg, r, fn):
+    xres = fg.new()
+    for y in xrange(fg.height):
+        for x in xrange(fg.width):
+            xres[x, y] = fg[x, y]
+            for dx in xrange(-r, r+1):
+                xres[x, y] = fn(xres[x, y], fg[x+dx, y])
+    res = fg.new()
+    for y in xrange(fg.height):
+        for x in xrange(fg.width):
+            res[x, y] = xres[x, y]
+            for dy in xrange(-r, r+1):
+                res[x, y] = fn(res[x, y], xres[x, y+dy])
+    return res
+
+def erode(fg, r=1):
+    return morph(fg, r, min)
+
+def dilate(fg, r=1):
+    return morph(fg, r, max)
+
+ at autoreload
+def find_objects(fg):
+    seg = erode(dilate(fg, 3), 4)
+    view(255*seg, 'd')
diff --git a/talk/dls2012/demo/image.py b/talk/dls2012/demo/image.py
--- a/talk/dls2012/demo/image.py
+++ b/talk/dls2012/demo/image.py
@@ -19,6 +19,7 @@
     def __init__(self, w, h, typecode='d', data=None):
         self.width = w
         self.height = h
+        self.typecode = typecode
         if data is None:
             self.data = array(typecode, [0]) * (w*h)
         else:


More information about the pypy-commit mailing list