【Leetcode刷题第五天】661. 图片平滑器[JAVA] 大家一起来刷题吧~
题目描述:
图像平滑器 是大小为 3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。
每个单元格的 平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。
如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值)
给你一个表示图像灰度的 m x n 整数矩阵 img ,返回对图像的每个单元格平滑处理后的图像 。
示例 1:
输入:img = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[0, 0, 0],[0, 0, 0], [0, 0, 0]]

示例 2:

输入: img = [[100,200,100],[200,50,200],[100,200,100]]
输出: [[137,141,137],[141,138,141],[137,141,137]]
下面画图来解释一下:

以每个小方块为中心构造九宫格,超出原本九宫格的范围不记(即为0),只计算在原本九宫格的平均值。例如在第一张图中,sum/4 。第二张图中,sum/6。以此类推~
代码如下:
class Solution {
public int[][] imageSmoother(int[][] img) {
int m=img.length;
int n=img[0].length;
int ret[][]=new int[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
int sum=0;
int s=0;
for(int x=i-1;x<=i+1;x++){
for(int y=j-1;y<=j+1;y++){
if(x>=0&&y>=0&&x<m&&y<n){
sum+=img[x][y];
s++;
}
}
}
ret[i][j]=sum/s;
}
}
return ret;
}
}
总结:
可以自己多动手画一下图,思路会更清晰~
本文介绍了LeetCode中的第661题,题目要求实现一个图像平滑器,该平滑器使用3x3的过滤器对图像进行平均处理。代码示例给出了Java解决方案,通过遍历矩阵并计算每个单元格周围的有效像素值的平均值来实现平滑处理。文章强调理解边界条件和计算平均值的方法是解决问题的关键。
557

被折叠的 条评论
为什么被折叠?



