0

画像をスムージングするために、特定の中央のピクセルの周りのすべてのピクセルを要約してから、平均を作成する必要があります。これは、基本的には新しいピクセルです。現在、2つの問題があります。

1)それらを要約する良い方法は何ですか?と

2)コーナーピクセルを回避するにはどうすればよいですか?

これは私がこれまでにしたことですが、それは良いことではないと思います。

for(i = 0; i < image1->nx; i++)
{
    for(j = 0; j < image1->ny; j++)
    {
        if(i == 0 || j == 0 || i == image1->nx - 1 || j == image1->ny - 1)
        {                                                                  
            image2->image[i][j] = image1->image[i][j];
        }
        else
        {
            int average = 0;
            average += image1->image[i][j];
            average += image1->image[i+1][j];
            average += image1->image[i][j+1];
            average += image1->image[i+1][j+1];
            average += image1->image[i-1][j];
            average += image1->image[i-1][j+1];
            average += image1->image[i-1][j-1];
            average += image1->image[i][j-1];
            average += image1->image[i+1][j-1];
            average /= 9;
            image2->image[i][j] = average;
        }
    }
}

Cの構造体は次のようなものです。

struct pgm_image
{
    int nx;             // row number
    int ny;             // cell number
    unsigned char image[N1][N2]; // image information
};
4

1 に答える 1

1

これは正しく見えます。少し短くするために、for ループを使用できると思います。

int min = -1;
int max = 1;
int average = 0;
int amount = 0;
for(int k = min; k <= max; k++){
    for(int l = min; l <= max; l++){
        amount++;
        average += image1->image[i+k][j+l];
    }
}
average /= amount;
image2->image[i][j] = average;

まだ乱雑に見えますが、このように最小変数と最大変数を変更することで滑らかな「半径」を変更できます。

于 2012-12-16T20:25:20.147 に答える