Spaces:
Runtime error
Runtime error
import numpy as np | |
class GuidedFilter(): | |
def __init__(self, source, reference, r=64, eps= 0.05**2): | |
self.source = source; | |
self.reference = reference; | |
self.r = r | |
self.eps = eps | |
self.smooth = self.guidedfilter(self.source,self.reference,self.r,self.eps) | |
def boxfilter(self,img, r): | |
(rows, cols) = img.shape | |
imDst = np.zeros_like(img) | |
imCum = np.cumsum(img, 0) | |
imDst[0 : r+1, :] = imCum[r : 2*r+1, :] | |
imDst[r+1 : rows-r, :] = imCum[2*r+1 : rows, :] - imCum[0 : rows-2*r-1, :] | |
imDst[rows-r: rows, :] = np.tile(imCum[rows-1, :], [r, 1]) - imCum[rows-2*r-1 : rows-r-1, :] | |
imCum = np.cumsum(imDst, 1) | |
imDst[:, 0 : r+1] = imCum[:, r : 2*r+1] | |
imDst[:, r+1 : cols-r] = imCum[:, 2*r+1 : cols] - imCum[:, 0 : cols-2*r-1] | |
imDst[:, cols-r: cols] = np.tile(imCum[:, cols-1], [r, 1]).T - imCum[:, cols-2*r-1 : cols-r-1] | |
return imDst | |
def guidedfilter(self,I, p, r, eps): | |
(rows, cols) = I.shape | |
N = self.boxfilter(np.ones([rows, cols]), r) | |
meanI = self.boxfilter(I, r) / N | |
meanP = self.boxfilter(p, r) / N | |
meanIp = self.boxfilter(I * p, r) / N | |
covIp = meanIp - meanI * meanP | |
meanII = self.boxfilter(I * I, r) / N | |
varI = meanII - meanI * meanI | |
a = covIp / (varI + eps) | |
b = meanP - a * meanI | |
meanA = self.boxfilter(a, r) / N | |
meanB = self.boxfilter(b, r) / N | |
q = meanA * I + meanB | |
return q |