题目背景
顿顿在学习了数字图像处理后,想要对手上的一副灰度图像进行降噪处理。不过该图像仅在较暗区域有很多噪点,如果贸然对全图进行降噪,会在抹去噪点的同时也模糊了原有图像。因此顿顿打算先使用邻域均值来判断一个像素是否处于较暗区域,然后仅对处于较暗区域的像素进行降噪处理。
题目描述
输入格式
输出格式
输入输出样例
思路及代码
可以用二维前缀和的形式求出领域和
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll N=605;
int n,l,r,t,ans;
double a[N][N];
double sum[N][N];
int main()
{
cin>>n>>l>>r>>t;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
double num;
cin>>num;
a[i][j]=num;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
//遍历每一个元素(i,j)的领域并进行判断
double nnum=0;
double nvalue=0;
int x1=max(1,i-r);
int x2=min(n,i+r);
int y1=max(1,j-r);
int y2=min(n,j+r);
nnum=(x2-x1+1)*(y2-y1+1);
nvalue=sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1];
nvalue=nvalue/nnum;
if(nvalue<=t){
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}