import cv2 import numpy as np def get_gabor_filters(): gabor1 = [ [-0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.50, -0.50, -0.50, -0.50, -0.50, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50], [-0.50, -0.50, -0.50, -0.50, -0.50, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50], [-0.50, -0.50, -0.50, -0.50, -0.50, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50], [-0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], ] gabor2 = [ [0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, 0.00, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, 0.00, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, 0.00, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], [0.50, 0.50, 0.50, 0.50, 0.50, -1.00, -1.00, 0.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50], [0.50, 0.50, 0.50, 0.50, 0.50, -1.00, -1.00, 0.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50], [0.50, 0.50, 0.50, 0.50, 0.50, -1.00, -1.00, 0.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50], [0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, 0.00, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, 0.00, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, 0.00, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25], ] gabor3 = [ [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [-0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [-0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], ] gabor4 = [ [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -1.00, -1.00, -1.00, -1.00, 0.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -1.00, -1.00, -1.00, -1.00, 0.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -1.00, -1.00, -1.00, -1.00, 0.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], ] gabor5 = [ [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [-0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [-0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], ] gabor6 = [ [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -1.00, -1.00, -1.00, -1.00, -1.00, -1.00, -1.00, -1.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -1.00, -1.00, -1.00, -1.00, -1.00, -1.00, -1.00, -1.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -1.00, -1.00, -1.00, -1.00, -1.00, -1.00, -1.00, -1.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, -0.50, 0.00, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25, -0.25], ] gabor_filter1 = np.array(gabor1,dtype=np.float) gabor_filter2 = np.array(gabor2,dtype=np.float) gabor_filter3 = np.array(gabor3,dtype=np.float) gabor_filter4 = np.array(gabor4,dtype=np.float) gabor_filter5 = np.array(gabor5,dtype=np.float) gabor_filter6 = np.array(gabor6,dtype=np.float) gabor_filters = [gabor_filter1,gabor_filter2,gabor_filter3,gabor_filter4,gabor_filter5,gabor_filter6] return gabor_filters def add_borders(pSrc, width): result = cv2.copyMakeBorder(pSrc,0,0,width,width,cv2.BORDER_REPLICATE,value=0) src_cols = pSrc.shape[1] result_cols = result.shape[1] result[:,0:width] = pSrc[:,src_cols-width:] result[:,result_cols - width:] = pSrc[:,0:width] return result def encode_image(image, gabor_filters): max_width = gabor_filters[-1].shape[1] max_width = (max_width - 1) / 2 max_width = int(max_width) resized = add_borders(image, int(max_width)) encode_image = np.zeros((image.shape[0]*len(gabor_filters), image.shape[1]),dtype=np.float) rows = image.shape[0] cols = image.shape[1] for (i,filter) in enumerate(gabor_filters): img1 = cv2.filter2D(resized,ddepth=cv2.CV_32F,kernel=filter) ret, img2 = cv2.threshold(img1,0,255,cv2.THRESH_BINARY) encode_image[i*rows:i*rows+rows , : ] = img2[:,max_width:max_width+cols] return encode_image if __name__ == '__main__': image = cv2.imread('/home/ubuntu/桌面/test.png',0) re = add_borders(image, 50) gabor_filters = get_gabor_filters() test = encode_image(image, gabor_filters) cv2.imshow("test",test) cv2.waitKey(0)