【이미지 처리 100개 노크에 도전】Q.8. Max 풀링

10262 단어 C++이미지 처리

사용한 라이브러리



【화상 처리 100개 노크】 독자적인 화상 입출력 클래스를 만든다

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;
}

좋은 웹페이지 즐겨찾기