例题一:
1010矩阵A进行33均值滤波,得到矩阵B
求B
方法:
对于边框采用补边法较为方便,即拓展矩阵使之变为12*12的矩阵,边框初始化为0即可。
#include<iostream>
#include<iomanip>
using namespace std;
int main() {
float A[12][12];
float B[10][10];
//初始化原始10*10矩阵
for (int i = 1; i < 11; i++) {
for (int j = 1; j < 11; j++) {
A[i][j] = i - 1;
}
}
//初始化边框
for (int i = 0; i < 12; i++) {
A[0][i] = 0;
A[11][i] = 0;
}
for (int i = 0; i < 12; i++) {
A[i][0] = 0;
A[i][11] = 0;
}
//得到均值
for (int i = 1; i < 11; i++) {
for (int j = 1; j < 11; j++) {
B[i - 1][j - 1] = (A[i - 1][j - 1] + A[i - 1][j] + A[i - 1][j + 1]
+ A[i][j - 1] + A[i][j] + A[i][j + 1]
+ A[i + 1][j - 1] + A[i + 1][j] + A[i + 1][j + 1]) / 9;
}
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
cout << setw(8) << B[i][j] << " ";
}
cout << endl;
}
return 0;
}
结果:
例题二:
N*N的均值滤波
增加厚度为(N-1)/2的边框即可