661. Image Smoother

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:

    1. The value in the given matrix is in the range of [0, 255].
    2. 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

 

posted @ 2017-10-19 20:29  bernieloveslife  阅读(107)  评论(0编辑  收藏  举报