Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother to make the gray scale of each cell becomes the average gray scale (rounding down) of all the 8 surrounding cells and itself. If a cell has less than 8 surrounding cells, then use as many as you can.
Example 1:
Input: [[1,1,1], [1,0,1], [1,1,1]] Output: [[0, 0, 0], [0, 0, 0], [0, 0, 0]] Explanation: For the point (0,0), (0,2), (2,0), (2,2): floor(3/4) = floor(0.75) = 0 For the point (0,1), (1,0), (1,2), (2,1): floor(5/6) = floor(0.83333333) = 0 For the point (1,1): floor(8/9) = floor(0.88888889) = 0
Note:
- The value in the given matrix is in the range of [0, 255].
- The length and width of the given matrix are in the range of [1, 150].
class Solution: def isLegal(self,x,y,i,j): return (True if((i<x)and(j<y)and(i>=0)and(j>=0)) else False) def imageSmoother(self, M): """ :type M: List[List[int]] :rtype: List[List[int]] """ x=len(M) y=len(M[0]) returnM=copy.deepcopy(M) Filter=[[-1,-1],[-1,0],[-1,1],[0,-1],[0,0],[0,1],[1,-1],[1,0],[1,1]] for i in range(x): for j in range(y): legalPointNum=0 graySum=0 for fi in range(9): tmpi=i+Filter[fi][0] tmpj=j+Filter[fi][1] if(self.isLegal(x,y,tmpi,tmpj)): graySum+=M[tmpi][tmpj] legalPointNum+=1 returnM[i][j]=int(graySum/legalPointNum) return returnM