Пытался реализовать задачу здесь в python. Мне нужно было выполнить фильтрацию Гарбора по полутоновому изображению, а затем по Гауссу - по фильтру по Гарбору. Наблюдая за результатами кода Python и кода MATLAB, я обнаружил, что они совершенно разные.
В python есть функции cv2.filter2D cv2.GaussianBlur для фильтрации Garbor и Gaussian, так же как MATLAB имеет imgaborfilt и imgaussfilt. Использование функций python, как показано во фрагменте кода, возвращает матрицу из 0 и 1, в то время как MATLAB возвращает матрицу чисел с плавающей запятой.
def garbor_filters(wavelength, orientation):
ksize = 39
kern = cv2.getGaborKernel(ksize=(ksize, ksize), sigma = 0.5, theta=orientation, lambd=wavelength, gamma=math.sqrt(2), psi=0, ktype=cv2.CV_32F)
return kern
def compute_garbor(img, filter):
#filter: kernel obtained from the method above
filtered_img = cv2.filter2D(img, cv2.CV_8UC3, filter)
return filtered_img
def getgaussianFiltrdImg(imageGarbors, filters):
#filters: a tuple of wavelength and orientation
sigma = 0.5*filters[0]; #get wavelength
K = 3;
filtersize=2*math.ceil(2*K*sigma)+1
gau_img = cv2.GaussianBlur(imageGarbors, (filtersize,filtersize), K*sigma)
return gau_img
# call the methods
realimage = cv2.imread('kobi.png')
realimage = cv2.cvtColor(realimage, cv2.COLOR_BGR2GRAY)
img = rescale(realimage, 0.25, anti_aliasing=False)
imageGarbors=getImageGabor(img, (2.82,0))
imageGauss=getgaussianFiltrdImg(imageGarbors, (2.82,0))
Python возвращает только 0 и 1 в матрицах, а MATLAB возвращает значения продолжения. Что я делаю не так?