私は以下のCコードをより迅速に処理する方法を探しています。私は640x480の画像を持っていて、画像の他のすべての行と列を取り除くことで、2倍にぼかしたいと思っています。私は以下のコードを添付しました。コードを最適化する方法はありますか?イメージデシメーション(C++)のより高速(最適化)ソリューション
#define INPUT_NUM_ROW 480
#define INPUT_NUM_COL 640
#define OUTPUT_NUM_ROW 240
#define OUTPUT_NUM_COL 320
unsigned char inputBuf[INPUT_NUM_ROW* INPUT_NUM_COL];
unsigned char outputBuf[OUTPUT_NUM_ROW* OUTPUT_NUM_COL];
void imageDecimate(unsigned char *outputImage , unsigned char *inputImage)
{
/* Fill in your code here */
for (int p = 0; p< OUTPUT_NUM_ROW; p++) {
for (int q = 0; q < OUTPUT_NUM_COL; q++) {
outputImage[p*OUTPUT_NUM_COL + q] = inputImage[(p*INPUT_NUM_COL+q)*2];
// cout << "The pixel at " << p*OUTPUT_NUM_COL+q << " is " << outputImage[p*OUTPUT_NUM_COL+q] << endl;
}
}
}
ほとんどのイメージには、更新が必要な多くのヘッダーフィールドがあります。投稿されたコードは、実際のデータ/ピクセルフィールドのみを処理しています。ほとんどのピクセルフィールドは、(ヘッダー情報に応じて)3または4バイトの長さです。画像を圧縮するときは、行の1/2と列の1/2を任意に削除しないでください。はるかに良いアプローチは、行のペアの平均です。次に、(別のループで)平均列のペアを作成し、各列(ピクセル)が3または4バイトで構成されていることを覚えておいてください。また、(ほとんどの画像で)行のバイト数は4の倍数になることに注意してください。 – user3629249
画像に含まれているヘッダーフィールドと、ピクセルの平均化が正しく行われているため、エイリアシングが目立たなくなります。しかし、私はより多くのコード最適化を探していました。 –