Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
if(oldMode == 1)
{
cudaMemcpyToSymbol(c_areaOriginX, areaOriginArrayX,
areaNum*sizeof(float));
cudaMemcpyToSymbol(c_areaOriginY, areaOriginArrayY,
areaNum*sizeof(float));
}
else
{
//�cc��Y��a��3��3���ʂ�I��a��?��A��I�GG��?�AA��I��E�uu��d�vv�ZZ
float* areaOriginArrayXInverseTrans = (float*)malloc(sizeof(float) *
areaNum);
float* areaOriginArrayYInverseTrans = (float*)malloc(sizeof(float) *
areaNum);
//�TT�[[�``�GG��?�AA��I��?��A�ee��?�vv��?�[[�gg��I���L�__��a��R��-
��I��I��I�AA areaSize - tempNum
int moveAreaX = areaSizeX - h_tempNumX;
int moveAreaY = areaSizeY - h_tempNumY;
//�vv�ZZ
int blockSizeX = 2;
dim3 blockSize(blockSizeX, blockSizeX);
dim3 gridSize( (uint)(moveAreaX/ blockSize.x), (uint)(moveAreaY*areaNum/
blockSize.y));
if(oldMode == 1)
{
d_calcCorrelationLattice<<<gridSize, blockSize>>>(d_output, d_template,
d_drImage, moveAreaX, moveAreaY);
}
else
{
d_calcCorrelationLattice<<<gridSize, blockSize>>>(d_output, d_template,
d_drImageOriginal, moveAreaX, moveAreaY);
}
//��?��E��d�zz�XX�gg��E�RR�ss�[[
cudaMemcpy(output, d_output, outputSize, cudaMemcpyDeviceToHost);
/*
printf("\n frame ID :%d \n", frameID);
frameID++;
if((frameID % 2) ==0 ){
printf("\n frame index:%d \n", frameID/2);
printf("\n");
for(int j=0; j<moveAreaY; j++){
for(int i=0; i<moveAreaX; i++){
double d = output[(i + j*moveAreaX)*4+3];
if(d<0)d=0;
printf("%d ", (int)(d*d*100));
// printf("%3.2f ", d);
}
printf("\n");
}
}
fprintf(stderr, "There is score.\n");
*/
/*
{
printf("print search area value\n");
int numX = h_tempNumX;
int numY = h_tempNumY;
// int numX = 768;
// int numY = 768;
ushort* d_testResult;
int testSize = sizeof(ushort)*numX*numY;
cudaMalloc((void**) &d_testResult, testSize);
int blockSizeXTest = 1;
dim3 blockSizeTest(blockSizeX, blockSizeX);
dim3 gridSizeTest((uint)(1), (uint)(1));
d_test<<<gridSizeTest, blockSizeTest>>>(d_testResult, d_template,
d_drImage, numX, numY);
//��?��E��d��u��e��e�zz��n��d��?��u����
for(int i=0; i<areaNum; i++)
{
resultX[i] = -1;
resultY[i] = -1;
resultScore[i] = -1;
}
CountTime* ct = new CountTime();
for(int i=0; i<moveAreaX*moveAreaY*areaNum; i++)
{
int area = (int)output[i*4];
float x = output[i*4 +1];
float y = output[i*4 +2];
float correlation = output[i*4 +3];
float score = 0;
printf("\nTemplateMatch correlation:%d\n", correlation);
if(correlation > 0){
score = (100 * correlation * correlation);
printf("\nTemplateMatch i:%d, score:%d\n", i, score);
ct->makeLog1("TemplateMatch ",score,correlation);
}
//��E��o�AA�TT�uu�ss�NN�ZZ��?�vv�ZZ
cudaMemcpyToSymbol(c_areaOriginSubX, resultX, areaNum*sizeof(float));
cudaMemcpyToSymbol(c_areaOriginSubY, resultY, areaNum*sizeof(float));
int blockSizeXSub = 8;
dim3 blockSizeSub(blockSizeXSub, blockSizeXSub);
dim3 gridSizeSub((uint)(calcSize/ blockSizeSub.x+1), (uint)
(calcSize*areaNum/blockSizeSub.y+1));//��O��I��A��?��A�����e��E�����BB
if(oldMode == 1)
{
d_calcCorrelationSub<<<gridSizeSub, blockSizeSub>>>(d_outputSub,
d_template, d_drImage);
}
else
{
d_calcCorrelationSub<<<gridSizeSub, blockSizeSub>>>(d_outputSub,
d_template, d_drImageOriginal);
}
//��?��E��d�zz�XX�gg��E�RR�ss�[[
cudaMemcpy(outputSub, d_outputSub, outputSizeSub, cudaMemcpyDeviceToHost);
float score = 0;
if(correlation > 0){
score = (100 * correlation * correlation);
}
if(score > resultScore[area])
{
resultX[area] = x;
resultY[area] = y;
resultScore[area] = score;
}
}
if(oldMode == 1)
{
for(int i=0; i<areaNum;i++)
{
resultScore[i] = (int)resultScore[i];
}
}
else
{
// Start measurement Distortion Correction of Marker Coordinate
Processing (translatePoint()).
CountTime* countTimeTrans_ = new CountTime();
countTimeTrans_->setStartCount();
free(outputSub);
cudaFree(d_outputSub);
outputSub = 0;
d_outputSub = 0;