다음 C 코드를 처리하는보다 빠른 방법을 찾고 있습니다. 나는 640x480의 이미지를 가지고 있으며, 이미지의 다른 모든 행과 열을 제거함으로써 2의 요소로 그것을 줄이고 싶습니다. 다음 코드를 첨부했습니다. 코드를 최적화하는 더 좋은 방법이 있습니까?더 빠른 (최적화 된) 이미지 데시 메이션 솔루션 (C++)
int outputIndex;
int inputIndex;
for (int p = 0; p< OUTPUT_NUM_ROW; p++) {
inputIndex = p * INPUT_NUM_COL * 2;
outputIndex = p * OUTPUT_NUM_COL;
for (int q = 0; q < OUTPUT_NUM_COL; q++) {
outputImage[outputIndex] = inputImage[inputIndex];
inputIndex += 2;
outputIndex++;
// cout << "The pixel at " << p*OUTPUT_NUM_COL+q << " is " << outputImage[p*OUTPUT_NUM_COL+q] << endl;
}
}
}
당신은 너무 복사 할당 인라인 증가 할 수 있고, 당신은 또한 단지 inputIndex을 지정할 수 있습니다 :
#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
입니다. 이미지에 포함 된 헤더 필드와 픽셀의 평균을 구하면 오른쪽으로 향하게되므로 별칭이 눈에 띄지 않게됩니다. 그러나, 나는 더 많은 코드 최적화를 찾고 있었다. –