Advertisement
Guest User

Calculate mean across area in a 2D array

a guest
Feb 3rd, 2016
399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.31 KB | None | 0 0
  1. __author__ = 'gelez [email protected]'
  2.  
  3. import os
  4. import cv2
  5. import time
  6. import numpy as np
  7. import matplotlib.pyplot as plt
  8. from scipy.signal import convolve2d
  9.  
  10.  
  11.  
  12. def get_files_in_folder(folder):
  13.     imagespaths = []
  14.     for fl in os.listdir(folder):
  15.         if fl.endswith(".png"):
  16.             imagespaths.append(str(fl))
  17.     imagespaths.sort()
  18.     return imagespaths
  19.  
  20. def smooth_filt(src,area_size):
  21.     y, x = src.shape
  22.     x_lim = int(area_size[0]/2)
  23.     y_lim = int(area_size[1]/2)
  24.     result = np.zeros((y-2*y_lim, x-2*x_lim), dtype=np.float64)
  25.  
  26.     for x_i in range(x_lim, x-x_lim):
  27.         for y_i in range(y_lim, y-y_lim):
  28.             result[y_i-y_lim, x_i-x_lim] = np.mean(
  29.                 src[y_i-y_lim:y_i+area_size[1]-y_lim,x_i-x_lim:x_i+area_size[0]-x_lim])
  30.  
  31.     return result
  32.  
  33. def method1(src,kernel):
  34.     return convolve2d(src, kernel, mode='valid')
  35.  
  36. def method2(src,kernel):
  37.     src = src.astype(np.float64)
  38.     result = cv2.blur(src, kernel)
  39.     return result
  40.  
  41. def method3(src,kernel):
  42.     src_integral = cv2.integral(src)
  43.  
  44.     multvalue = 1.0/(kernel[0]*kernel[1])
  45.     src_integral = src_integral * multvalue
  46.  
  47.     array_kernel = src.shape
  48.     means_size_x = array_kernel[0] - kernel[0] + 1
  49.     means_size_y = array_kernel[1] - kernel[1] + 1
  50.     means = np.zeros((means_size_x, means_size_y))
  51.  
  52.     for x in range(means_size_x):
  53.         for y in range(means_size_y):
  54.             means[x,y] = src_integral[x,y] + src_integral[x + kernel[0], y + kernel[1]] \
  55.                 - src_integral[x,y + kernel[1]] - src_integral[x + kernel[0],y]
  56.     return means
  57.  
  58.  
  59. if __name__ == "__main__":
  60.     images_folder = "D:/video_data/video/2mintest/camera2mintest"
  61.     kernel = (3, 3)
  62.     convolve_kernel = np.ones(kernel)/(kernel[0]*kernel[1])
  63.  
  64.     images_paths = get_files_in_folder(images_folder)
  65.  
  66.     #compare results
  67.     # test_arr = np.ones((5, 5))
  68.     # test_arr = cv2.integral(test_arr)
  69.  
  70.     # test_arr = np.array([[1,2,3,4,5,6,7,8,9],
  71.     #                      [0.5,10,12,0.5,10,12,0.5,10,12],
  72.     #                      [15,10.5,3,15,10.5,3,15,10.5,3],
  73.     #                      [15,10.5,3,15,10.5,3,15,10.5,3],
  74.     #                      [15,10.5,3,15,10.5,3,15,10.5,3],
  75.     #                      [0.5,10,12,0.5,10,12,0.5,10,12],
  76.     #                      [0.5,10,12,0.5,10,12,0.5,10,12],
  77.     #                      [1,2,3,4,5,6,7,8,9],
  78.     #                      [1,2,3,4,5,6,7,8,9]])
  79.     # print "method1"
  80.     # method1_result = method1(test_arr, convolve_kernel)
  81.     # print method1_result
  82.     # print method1_result.shape
  83.     # print "method2"
  84.     # method2_result = method2(test_arr,kernel)
  85.     # print method2_result
  86.     # print method2_result.shape
  87.     # print "method3"
  88.     # method3_result = method3(test_arr,kernel)
  89.     # print method3_result
  90.     # print method3_result.shape
  91.  
  92.     method1_times = []
  93.     for i in range(len(images_paths)):
  94.         image = cv2.imread(images_folder + '/' + images_paths[i])
  95.         b_image = image[:, :, 0]
  96.         start_time = time.time()
  97.         result = method1(b_image, convolve_kernel)
  98.         time_interval = time.time()-start_time
  99.         method1_times.append(time_interval)
  100.     print "method1 ok"
  101.     method2_times = []
  102.     for i in range(len(images_paths)):
  103.         image = cv2.imread(images_folder + '/' + images_paths[i])
  104.         b_image = image[:, :, 0]
  105.         start_time = time.time()
  106.         result = method2(b_image, kernel)
  107.         time_interval = time.time()-start_time
  108.         method2_times.append(time_interval)
  109.     print "method2 ok"
  110.     method3_times = []
  111.     for i in range(len(images_paths)):
  112.         image = cv2.imread(images_folder + '/' + images_paths[i])
  113.         b_image = image[:, :, 0]
  114.         start_time = time.time()
  115.         result = method3(b_image, kernel)
  116.         time_interval = time.time()-start_time
  117.         method3_times.append(time_interval)
  118.     print "method3 ok"
  119.  
  120.     plt.figure(figsize=(10, 8))
  121.     plt.subplot(311)
  122.     plt.hist(np.array(method1_times), 20)
  123.     plt.ylabel("convolve2d",size = 20)
  124.  
  125.     plt.subplot(312)
  126.     plt.hist(np.array(method2_times), 20)
  127.     plt.ylabel("blur",size = 20)
  128.  
  129.     plt.subplot(313)
  130.     plt.hist(np.array(method3_times), 20)
  131.     plt.ylabel("integral",size = 20)
  132.     plt.xlabel("sec",size = 20)
  133.  
  134.     plt.savefig("D:/out.png", dpi=80)
  135.     plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement