WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   gabor patch - matplotlib vizard problem (https://forum.worldviz.com/showthread.php?t=5242)

 VirtuallyInsane 12-02-2014 08:52 AM

gabor patch - matplotlib vizard problem

Hello everyone,

just having troubles with a little class that makes a little gabor patch using some math, matplotlib, and vizmatplot. I would like to rotate the gabor patch (actually looks more like a bar) by pressing keys (left and right arrow) and update this every time a key was pressed.

However, "repainting" the gabor takes soooo much time... Has anyone some insight into what I am doing wrong and how to speed this up?

Many thanks in advance and kind regards!

Code:

```import matplotlib, sys matplotlib.use("Agg") import matplotlib.backends.backend_agg as agg import pylab, math import numpy as np import matplotlib.pyplot as plt import matplotlib.cm as cm import random, viz, vizmatplot, vizact viz.go() class GaborPatch():     """ http://www.science-emergence.com/ImageProcessing/ImageProcessingPython/PlotGaborFilterMatplotlib/"""     def __init__(self):         self.F = 0.0         self.ANGLE = 90         self.theta = math.radians(self.ANGLE) # Converts angle x from degrees to radians.         self.sigma_x = 1.0         self.sigma_y = 30.0         self.radius = 100                 self.M = np.zeros((self.radius*2, self.radius*2))         # viz.ON or viz.OFF     def onSensorDown(self, key):         if key == viz.KEY_RIGHT:             self.ANGLE += 10             print(self.ANGLE)             #pylab.clf()             self.Gabor()         if key == viz.KEY_LEFT:             self.ANGLE -= 10             print(self.ANGLE)             #pylab.clf()             self.Gabor()                 def ChangeBase(self, x, y, theta):         self.x_theta = x * math.cos(self.theta) + y * math.sin(self.theta)         self.y_theta = y * math.cos(self.theta) - x * math.sin(self.theta)         return self.x_theta, self.y_theta     def GaborFunction(self, x, y, theta, f, sigma_x, sigma_y):         r1 = self.ChangeBase(x, y, theta)[0] / sigma_x         r2 = self.ChangeBase(x, y, theta)[1] / sigma_y         arg = - 0.5 * (r1**2 + r2**2)         return math.exp(arg) * math.cos(2*math.pi*f*self.ChangeBase(x, y, theta)[0])     def Gabor(self):         self.theta = math.radians(self.ANGLE)         x = -float(self.radius)         for i in range(self.radius*2):             y = -float(self.radius)             for j in range(self.radius*2):                 self.M[i, j] = self.GaborFunction(x, y, self.theta, self.F, self.sigma_x, self.sigma_y)                 y = y + 1             x = x + 1         # Normalization from 0 to 255         self.M[:, :] = ((self.M[:, :] - self.M.min()) * 255) / (self.M.max() - self.M.min())                 self.Plot()                     def Plot(self):         # Create a figure with size 8 x 8 inches, resolution 80 dots per inch and         # set color of drawing background to black = 'k'         self.fig = pylab.figure(figsize=[8, 8], dpi=100, facecolor='k')         # gca stands for 'get current axis'         self.ax = self.fig.gca()         self.ax.axis('off')         plt.imshow(self.M, cmap=cm.Greys_r)         plt.hold(False)         #enable rendering of plot by passing the pyplot figure to vizmatplot         plt.grid()         matplot = vizmatplot.Show(self.fig)         #enable display of draw rate         matplot.showDrawRate(viz.OFF) # viz.ON or viz.OFF def main():     patch = GaborPatch()     patch.Gabor()     viz.callback(viz.KEYDOWN_EVENT, patch.onSensorDown) main()```

 VirtuallyInsane 12-02-2014 08:57 AM

sorry, the code needs the vizmatplot.py file that can be downloaded here in order to work:

http://kb.worldviz.com/articles/483

 All times are GMT -7. The time now is 03:50 AM.