2016-04-17 3 views
0

私のインストラクターは次のように書いています。「グレースケールのグレースケールにイメージを量子化する関数を書いてください。たとえばq = 8なら0-31,32-63,32、 224-255は224です。これはこれまでの私のコードです。イメージを量子化する

void quantize (int image[][MAXHEIGHT], int width, int height, int q) 
{ 
    const int temp = 256/q; 

    int startPixel, endPixel; 
    int indicator = temp; // where the pixels are divided, 0-31, 32-63, etc if q = 8 

    while (indicator <= 256) 
    { 
     startPixel = indicator - temp; 
     endPixel = indicator - 1; 
     cout << "start value is " << startPixel << " and end value is " << endPixel << endl; 

     for (int row = 0; row < height; row++) 
     { 
      for (int col = 0; col < width; col++) 
      { 
       if ((image[col][row] > startPixel) && (image[col][row] <= endPixel)); 
       { 
        image[col][row] = startPixel; 
       } 
      } 
     } 

     indicator += temp; 
    } 
} 

イメージを量子化しようとすると、イメージが完全に白くなるか、完全に黒くなります。私はこの機能を間違ってループしていると思うが、それを修正するために何をすべきか分からない。

+0

image [col] [row] = floor((double)image [col] [row]/temp)* temp'を使用して、ループのためにネストされていますか? – Carafini

答えて

2

エラーは、関数のヘッダーにあります。あなたは画像のコピーを渡しているので、あなたのコピーはあなたの関数の中で変更されますが、関数から外されるわけではありません。さらに、コードを大幅に簡素化することができます。

void quantize (int **image, int width, int height, int q) 
{ 
    const int r = 256/q; // Ensure your image is on [0 255] range 
    for (int row = 0; row < height; row++) 
     for (int col = 0; col < width; col++) 
     image[col][row] = (int) (image[col][row]/r); 
} 
+0

この関数は、0から31までのすべてのピクセルを作成しますが、ピクセルは32から63,1の間になりますか? –

+0

はい、申し訳ありませんが、イメージ強度を[0、7]から8段階に量子化したいとお伝えします。これはこの関数の機能です。 Adriano Carafiniがコメントで言ったように、あなたが望むものを達成するためには、 "r"を乗算すべきです – Javier

関連する問題