Advertisement
iggr

photo_combine_3_colors

Mar 13th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.50 KB | None | 0 0
  1. %matplotlib inline
  2. from skimage.io import imread, imshow, imsave
  3. from skimage import img_as_float
  4. import numpy as np
  5. import logging
  6.  
  7. logger = logging.getLogger()
  8. logger.setLevel(logging.DEBUG)
  9.  
  10. def read_and_split(image):
  11.     img = imread(image)
  12.     logger.debug("size of photo:", img.shape)
  13.     height_div_3 = img.shape[0] // 3
  14.     b = img[ : height_div_3, : ]
  15.     g = img[height_div_3 : 2 * height_div_3, : ]    
  16.     r = img[2 * height_div_3 : 3 * height_div_3, : ]
  17.     logger.debug(b.shape, g.shape, r.shape)
  18.     b, g, r = list(map(img_as_float, (b, g, r, )))
  19.     return b, g, r
  20.  
  21. def clip_border(b, g, r):
  22.     height, width = b.shape
  23.     centre_part = lambda x: x[height//20 : -height//20 , width//20 : -width//20]  
  24.     b = centre_part(b)
  25.     g = centre_part(g)
  26.     r = centre_part(r)
  27.     return b, g, r
  28.  
  29. def find_shift(canal_1, canal_2, axis, max_shift = 15):
  30.     min_corelation = 0
  31.     right_shift = 0
  32.     for shift in range(-max_shift, max_shift + 1):
  33.         canal_2_shift = np.roll(canal_2, shift, axis)
  34.         current_corelation = (canal_1 * canal_2_shift).sum()
  35.         if current_corelation > min_corelation:
  36.             min_corelation = current_corelation
  37.             right_shift = shift
  38.     return right_shift
  39.            
  40. def combine_image(r, g, b, gr_x, gr_y, gb_x, gb_y):
  41.     r_sh = np.roll(r, gr_x, axis = 0)
  42.     r_sh = np.roll(r_sh, gr_y, axis = 1)
  43.     b_sh = np.roll(b, gb_x, axis = 0)
  44.     b_sh = np.roll(b_sh, gb_y, axis = 1)
  45.     combined_img =  np.stack((r_sh, g, b_sh), 2)
  46.     return combined_img
  47.    
  48. def result_img(image):
  49.     b, g, r = read_and_split(image)
  50.     b, g, r = clip_border(b, g, r)
  51.     gr_x = find_shift(g, r, 0)
  52.     gr_y = find_shift(g, r, 1)
  53.     gb_x = find_shift(g, b, 0)
  54.     gb_y = find_shift(g, b, 1)
  55.     logger.debug(gr_x, gr_y)
  56.     logger.debug(gb_x, gb_y)
  57.     result_img = combine_image(r, g, b, gr_x, gr_y, gb_x, gb_y)
  58.     return result_img
  59.  
  60. def align(image, green_point_coord):
  61.     row_g, col_g = green_point_coord
  62.     b, g, r = read_and_split(image)
  63.     h_dif = b.shape[0]
  64.     b, g, r = clip_border(b, g, r)
  65.    
  66.     gb_x = find_shift(g, b, 0)
  67.     gb_y = find_shift(g, b, 1)
  68.     gr_x = find_shift(g, r, 0)
  69.     gr_y = find_shift(g, r, 1)
  70.        
  71.     print(gr_x, gr_y)
  72.     print(gb_x, gb_y
  73.          
  74.     row_b = row_g - gb_x - h_dif
  75.     col_b = col_g - gb_y
  76.     row_r = row_g - gr_x + h_dif
  77.     col_r = col_g - gr_y
  78.     return row_b, col_b, row_r, col_r
  79.  
  80. align("https://stepik.org/media/attachments/lesson/58182/00.png", (508, 237))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement