def minProcess(image, view=False): """MinProcess using filter only shape [3,3] Using the minimal value of neighborhood as the filting result Args: image: The original image view: The flag to decided to show the result image Set to False default Returns: rets: The list contains the filted image """ from hw2_filter import extending extendingImage = extending(image, 3, 3) height = extendingImage.shape[0] width = extendingImage.shape[1] filterHeight = 3 filterWidth = 3 correlateImage = np.zeros((height, width), dtype=int) for x in range(height-(filterHeight-1)): for y in range(width-(filterWidth-1)): myList = [extendingImage[x+i][y+j] for i in range(filterHeight) for j in range(filterWidth)] retList = sorted(myList) correlateImage[x+int((filterHeight-1)/2)][y+int((filterWidth-1)/2)] = int(retList[0]) if view: show(image, correlateImage, "minProcess") return correlateImage
def harmonicProcess(sourceImage, view=False): """HarmonicProcess using filter only shape [3,3] Args: sourceImage: The original image view: The flag to decided to show the result image Set to False default Returns: rets: The list contains the filted image """ from hw2_filter import extending filter_size = [3] rets = [] for size in filter_size: # extending extendingImage = extending(sourceImage, size, size) height, width = extendingImage.shape import math # calculating correlateImage = np.zeros((height, width), dtype=extendingImage.dtype) for x in range(height-(size-1)): for y in range(width-(size-1)): sum = 0 for j in range(size): for k in range(size): if extendingImage[x+j][y+k] == 0.0: sum = sum + math.inf else: sum = sum + 1/(extendingImage[x+j][y+k]) correlateImage[x+int((size-1)/2)][y+int((size-1)/2)] = 1/sum # cutting tarImage = np.zeros(sourceImage.shape, dtype=float) for x in range(tarImage.shape[0]): for y in range(tarImage.shape[1]): tarImage[x][y] = int((correlateImage[x+size-1][y+size-1])) ret = np.zeros(sourceImage.shape, dtype=int) for x in range(ret.shape[0]): for y in range(ret.shape[1]): if math.isinf(tarImage[x][y]): ret[x][y] = 255 else: ret[x][y] = int(size*size*tarImage[x][y]) rets.append(ret) if view: show4(sourceImage, rets, "harmonic") return rets
def geometric_meanProcess(image, view=False): """Geometic_meanProcess using filter only shape [3,3] Args: image: The original image view: The flag to decided to show the result image Set to False default Returns: rets: The list contains the filted image """ from hw2_filter import extending extendingImage = extending(image, 3, 3) height = extendingImage.shape[0] width = extendingImage.shape[1] filterHeight = 3 filterWidth = 3 correlateImg = np.zeros((height, width), dtype=extendingImage.dtype) for x in range(height-(filterHeight-1)): for y in range(width-(filterWidth-1)): sum = 1 for j in range(filterHeight): for k in range(filterWidth): sum = sum * extendingImage[x+j][y+k] correlateImg[x+int((filterHeight-1)/2)][y+int((filterWidth-1)/2)] = sum # import math tarImage = np.zeros((image.shape[0], image.shape[1]), dtype=int) for x in range(tarImage.shape[0]): for y in range(tarImage.shape[1]): tarImage[x][y] = int(pow(correlateImg[x+filterHeight-1][y+filterWidth-1], 1/9)) if view: show(image, tarImage, "geometric_mean") return tarImage