Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
    /* --------------- */
    /* --------------- */
}