cv::Mat SIFT::sp_normalize_sift_len( Mat sift_arr ) { Mat siftlen(sift_arr.rows,1,CV_32F); Mat t=square(sift_arr); Mat x=sum_row(t); sqrt(x,siftlen); return siftlen; }
cv::Mat SIFT::sp_normalize_sift_arr( Mat sift_arr,float threshold ) { Mat siftlen=sp_normalize_sift_len(sift_arr); Mat normalize_ind1=compare(siftlen,threshold); Mat normalize_ind2=change(normalize_ind1); Mat sift_arr_hcontrast=search(sift_arr,normalize_ind1); sift_arr_hcontrast=sift_arr_hcontrast/repmat(search(siftlen,normalize_ind1),1,sift_arr.cols);//此处应为点除 Mat sift_arr_lcontrast=search(sift_arr,normalize_ind2); sift_arr_lcontrast=sift_arr_lcontrast/threshold; sift_arr_hcontrast= suppresss(sift_arr_hcontrast,0.2); sift_arr_lcontrast= suppresss(sift_arr_lcontrast,0.2); Mat tep(sift_arr_hcontrast.rows,1,CV_32F); sqrt(sum_row(square(sift_arr_hcontrast)),tep); sift_arr_hcontrast = sift_arr_hcontrast /repmat(tep, 1,sift_arr.cols); assign(sift_arr,normalize_ind1,sift_arr_hcontrast); assign(sift_arr,normalize_ind2,sift_arr_lcontrast); return sift_arr; }
void smooth(int dim, pixel *src, pixel *dst) { int m,n; /* ------- SET UP DST ARRAY -------- */ for (m=0; m<dim; m++) { for (n=0; n<dim; n++) { int qt = RIDX(m,n,dim); dst[qt].red = src[qt].red; dst[qt].green = src[qt].green; dst[qt].blue = src[qt].blue; } } /* --------------- */ pixel_sum *row_sums = malloc(3*dim*sizeof(pixel_sum)); pixel_sum *row0 = row_sums; pixel_sum *row1 = row0+dim; pixel_sum *row2; int i,j; sum_row(row0, dim, src); sum_row(row1, dim, src+dim); /* ------- COMPUTE AVERAGES FOR FIRST ROW -------- */ //avg_two_pixel_sums(dst++, row0++, row1++, 5); dst->red = (dst->red + row0->red + row1->red) / 5; dst->green = (dst->green + row0->green + row1->green) / 5; dst->blue = (dst->blue + row0->blue + row1->blue) / 5; dst++; row0++; row1++; for (i=1; i<dim-1; i++) { //avg_two_pixel_sums(dst++, row0++, row1++, 7); dst->red = (dst->red + row0->red + row1->red) / 7; dst->green = (dst->green + row0->green + row1->green) / 7; dst->blue = (dst->blue + row0->blue + row1->blue) / 7; dst++; row0++; row1++; } //avg_two_pixel_sums(dst++, row0, row1, 5); dst->red = (dst->red + row0->red + row1->red) / 5; dst->green = (dst->green + row0->green + row1->green) / 5; dst->blue = (dst->blue + row0->blue + row1->blue) / 5; dst++; /* --------------- */ /* ------- COMPUTE AVERAGES FOR MIDDLE ROWS -------- */ for (i=1; i<dim-1; i++) { row0 = row_sums + ((i-1)%3)*dim; row1 = row_sums + (i%3)*dim; row2 = row_sums + ((i+1)%3)*dim; /* ------- First element -------- */ sum_row(row2, dim, src + (i+1)*dim); //avg_three_pixel_sums(dst++, row0++, row1++, row2++, 7); dst->red = (dst->red + row0->red + row1->red + row2->red) / 7; dst->green = (dst->green + row0->green + row1->green + row2->green) / 7; dst->blue = (dst->blue + row0->blue + row1->blue + row2->blue) / 7; dst++; row0++; row1++; row2++; /* --------------- */ /* ------- Middle elements -------- */ for (j=1; j<dim-1; j++) { //avg_three_pixel_sums(dst++, row0++, row1++, row2++, 10); dst->red = (dst->red + row0->red + row1->red + row2->red) / 10; dst->green = (dst->green + row0->green + row1->green + row2->green) / 10; dst->blue = (dst->blue + row0->blue + row1->blue + row2->blue) / 10; dst++; row0++; row1++; row2++; } /* --------------- */ /* ------- Last elements -------- */ //avg_three_pixel_sums(dst++, row0, row1, row2, 7); dst->red = (dst->red + row0->red + row1->red + row2->red) / 7; dst->green = (dst->green + row0->green + row1->green + row2->green) / 7; dst->blue = (dst->blue + row0->blue + row1->blue + row2->blue) / 7; dst++; row0++; row1++; row2++; /* --------------- */ } /* --------------- */ row0 = row_sums + ((i-1)%3)*dim; row1 = row_sums + (i%3)*dim; /* ------- COMPUTE AVERAGES FOR LAST ROW -------- */ /* ------- First element -------- */ //avg_two_pixel_sums(dst++, row0++, row1++, 5); dst->red = (dst->red + row0->red + row1->red) / 5; dst->green = (dst->green + row0->green + row1->green) / 5; dst->blue = (dst->blue + row0->blue + row1->blue) / 5; dst++; row0++; row1++; /* --------------- */ /* ------- Middle elements -------- */ for (i=1; i<dim-1; i++) { //avg_two_pixel_sums(dst++, row0++, row1++, 7); dst->red = (dst->red + row0->red + row1->red) / 7; dst->green = (dst->green + row0->green + row1->green) / 7; dst->blue = (dst->blue + row0->blue + row1->blue) / 7; dst++; row0++; row1++; } /* --------------- */ /* ------- Last element -------- */ //avg_two_pixel_sums(dst, row0, row1, 5); dst->red = (dst->red + row0->red + row1->red) / 5; dst->green = (dst->green + row0->green + row1->green) / 5; dst->blue = (dst->blue + row0->blue + row1->blue) / 5; /* --------------- */ /* --------------- */ }