661.图片平滑器

153 阅读1分钟

题目:
图像平滑器 是大小为 3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。

每个单元格的 平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。

如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值)。
算法:

func imageSmoother(img [][]int) [][]int {
	dicts := [][]int{[]int{1,0},[]int{-1,0},[]int{0,1},[]int{0,-1},[]int{-1,-1},[]int{-1,1},[]int{1,-1},[]int{1,1}}
	m, n := len(img), len(img[0])
	ans := make([][]int, m)

	for i := range img {
		ans[i] = make([]int, n)
		for j := range img[i] {
			sum := img[i][j]
			count := 1
			for k := range dicts {
				x := dicts[k][0] + i
				y := dicts[k][1] + j
				if 0 <= x && x < m && 0 <= y && y < n {
					sum = sum + img[x][y]
					count ++
				}
			}
			ans[i][j] = sum / count
		}
	}
	return ans
}