Commit 73c83038 authored by Taddeüs Kroes's avatar Taddeüs Kroes

improc ass4: Added 1d Gaussian function to timer option.

parent 0c734114
#!/usr/bin/env python #!/usr/bin/env python
from numpy import zeros, arange, pi, e, ceil, meshgrid from numpy import zeros, arange, pi, e, ceil, meshgrid, array
from matplotlib.pyplot import imread, imshow, plot, xlabel, ylabel, show, \ from matplotlib.pyplot import imread, imshow, plot, xlabel, ylabel, show, \
subplot, xlim, savefig subplot, xlim, savefig
from mpl_toolkits.mplot3d import Axes3D from mpl_toolkits.mplot3d import Axes3D
from scipy.ndimage import convolve from scipy.ndimage import convolve, convolve1d
from time import time from time import time
from sys import argv, exit from sys import argv, exit
def exit_with_usage(): def exit_with_usage():
"""Print an error message with the program's usage and exit the program.""" """Print an error message with the program's usage and exit the program."""
print 'Usage: python %s timer REPEAT | diff SCALE' % argv[0] print 'Usage: python %s timer METHOD [ REPEAT ] | diff SCALE' % argv[0]
exit(1) exit(1)
def Gauss(s): def Gauss(s):
"""Create a sampled Gaussian function of scale s.""" """Sample a two-dimensional Gaussian function of scale s."""
size = int(ceil(3 * s)) size = int(ceil(3 * s))
r = 2 * size + 1 r = 2 * size
W = zeros((r, r)) W = zeros((r, r))
t = s ** 2. t = float(s) ** 2
a = 1 / (2 * pi * t) a = 1 / (2 * pi * t)
# Sample the Gaussian function # Sample the Gaussian function
...@@ -28,33 +28,68 @@ def Gauss(s): ...@@ -28,33 +28,68 @@ def Gauss(s):
# Make sure that the sum of all kernel values is equal to one # Make sure that the sum of all kernel values is equal to one
return W / W.sum() return W / W.sum()
if len(argv) < 2: def Gauss1(s):
"""Sample a one-dimensional Gaussian function of scale s."""
size = int(ceil(3 * s))
r = 2 * size
W = zeros((r,))
t = float(s) ** 2
a = 1 / (2 * pi * t)
# Sample the Gaussian function
W = array([a * e ** -((x - size) ** 2 / (2 * t)) for x in xrange(r)])
# Make sure that the sum of all kernel values is equal to one
return W / W.sum()
if __name__ == '__main__':
if len(argv) < 2:
exit_with_usage() exit_with_usage()
F = imread('cameraman.png') F = imread('cameraman.png')
#W1 = Gauss1(10)
#X = arange(W1.shape[0])
#G = convolve1d(F, W1, axis=0, mode='nearest')
#subplot(121)
#imshow(F, cmap='gray')
#subplot(122)
#imshow(G, cmap='gray')
#show()
#exit(0)
if argv[1] == 'timer':
if len(argv) < 3:
exit_with_usage()
method = argv[2]
if argv[1] == 'timer':
# Time for multiple scales # Time for multiple scales
S = [1, 2, 3, 5, 7, 9, 11, 15, 19] S = [1, 2, 3, 5, 7, 9, 11, 15, 19]
repeat = int(argv[2]) repeat = int(argv[3]) if len(argv) > 3 else 1
timings = [] n = 0
times = []
for i, s in enumerate(S): for i, s in enumerate(S):
t = 0 t = 0
for k in xrange(repeat): for k in xrange(repeat):
W = Gauss(s)
start = time() start = time()
convolve(F, W, mode='nearest')
if method == '1d':
convolve1d(F, Gauss1(s), axis=n, mode='nearest')
elif method == '2d':
convolve(F, Gauss(s), mode='nearest')
t += time() - start t += time() - start
timings.append(t / repeat) times.append(t / repeat)
xlim(S[0], S[-1]) xlim(S[0], S[-1])
xlabel('s') xlabel('s')
ylabel('time (s)') ylabel('time (s)')
plot(S, timings, 'o-') plot(S, times, 'o-')
elif argv[1] == 'diff': elif argv[1] == 'diff':
# Calculate and plot the convolution of the given scale # Calculate and plot the convolution of the given scale
if len(argv) < 3: if len(argv) < 3:
exit_with_usage() exit_with_usage()
...@@ -69,7 +104,7 @@ elif argv[1] == 'diff': ...@@ -69,7 +104,7 @@ elif argv[1] == 'diff':
# Gauss function (3D plot) # Gauss function (3D plot)
x = arange(W.shape[0]) x = arange(W.shape[0])
X, Y = meshgrid(x, x) Y, X = meshgrid(x, x)
ax = subplot(132, projection='3d') ax = subplot(132, projection='3d')
stride = s / 4 stride = s / 4
ax.plot_surface(X, Y, W, rstride=stride, cstride=stride, cmap='jet') ax.plot_surface(X, Y, W, rstride=stride, cstride=stride, cmap='jet')
...@@ -81,4 +116,4 @@ elif argv[1] == 'diff': ...@@ -81,4 +116,4 @@ elif argv[1] == 'diff':
subplot(133) subplot(133)
imshow(G, cmap='gray') imshow(G, cmap='gray')
show() show()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment