使用したライブラリ
Q.8. Maxプーリング
ここでは平均値でなく最大値でプーリングせよ。
Q.7とほぼ同じですね。
struct RGB
{
RGB(int r, int g, int b)
{
this->r = r;
this->g = g;
this->b = b;
}
int r, g, b;
};
int main()
{
PPM ppm("imori.pnm");
int width = ppm.Get_width();
int height = ppm.Get_height();
PPM ppm2(width, height);
int N = 16;//分割数
int P = width / N;
auto grid_val = [&](int n, int m)//n,m:grid number
{
int maxr = 0, maxg = 0, maxb = 0;
int i0 = P * n;
int i1 = P * (n + 1);
int j0 = P * m;
int j1 = P * (m + 1);
for(int j=j0; j<j1; j++)
for (int i = i0; i < i1; i++)
{
if (ppm(i, j, 'r') > maxr) maxr = ppm(i, j, 'r');
if (ppm(i, j, 'g') > maxg) maxg = ppm(i, j, 'g');
if (ppm(i, j, 'b') > maxb) maxb = ppm(i, j, 'b');
}
return RGB(maxr, maxg, maxb);
};
for (int j = 0; j < height; j++)
for (int i = 0; i < width; i++)
{
int n = i / P;
int m = j / P;
RGB rgb = grid_val(n, m);
ppm2(i, j, 'r') = rgb.r;
ppm2(i, j, 'g') = rgb.g;
ppm2(i, j, 'b') = rgb.b;
}
ppm2.Flush("out.ppm");
return 0;
}