Exemple #1
0
int main(int argv, char** argc) {
    printf("\n\nRunning code for question 1.11:\n\n");

    int		train_area1[4] = {150-1,330-1,264-1,328-1};

    /*read images from file*/
    pnm_img	* kande1 = pnm_read(IMG_IN_DIR "kande1.pnm"),
              * kande2 = pnm_read(IMG_IN_DIR "kande2.pnm");

    pnm_img	* train_img =pnm_subimage(kande1, train_area1);
    mtrx	* train_set = img2train_set(train_img);
    vect	* s_mean = sample_mean(train_set);
    mtrx	* s_cov = sample_cov(train_set, s_mean);


    double* map = (double*)malloc(kande2->width*kande2->height*sizeof(double));
    pdf_map(kande2, s_mean,s_cov,&map);

    vect* w_mean = weighted_avg_pos(kande2, map);

    pnm_pixmap p = {0,255,0};
    for (int x = -2; x<4; x++)
        for (int y=-2; y<4; y++) {
            pnm_set_pixel(kande2, (*w_mean->data)+x, *(w_mean->data+1)+y, &p);
        }
    //	pnm_write(kande1, IMG_OUT_DIR"cas10center.pnm");

    mtrx* w_cov = weighted_2dcov(map, w_mean, kande2);

    FILE* fp = fopen(TEX_OUT_DIR"c11.tex", "w");
    vect2tex(w_mean, "celevenwmean", fp);
    mtrx2tex(w_cov, "celevenwcov", fp);
    fclose(fp);

    gplot_img2splot(kande2, 0 ,TEX_OUT_DIR"case11.kande2.gnuplot.dat");
    gplot_pdf2splot(w_mean, w_cov, kande2, 5, TEX_OUT_DIR"case11.pdf.gnuplot.dat");

    gsl_matrix_free(train_set);
    gsl_matrix_free(s_cov);

    gsl_vector_free(s_mean);
    pnm_destroy(kande1);
    pnm_destroy(train_img);
}
Exemple #2
0
image_u8_t *image_u8_copy(const image_u8_t *in)
{
    uint8_t *buf = malloc(in->height*in->stride*sizeof(uint8_t));
    memcpy(buf, in->buf, in->height*in->stride*sizeof(uint8_t));

    // const initializer
    image_u8_t tmp = { .width = in->width, .height = in->height, .stride = in->stride, .buf = buf };

    image_u8_t *copy = calloc(1, sizeof(image_u8_t));
    memcpy(copy, &tmp, sizeof(image_u8_t));
    return copy;
}

void image_u8_destroy(image_u8_t *im)
{
    if (!im)
        return;

    free(im->buf);
    free(im);
}

////////////////////////////////////////////////////////////
// PNM file i/o

image_u8_t *image_u8_create_from_pnm(const char *path)
{
    pnm_t *pnm = pnm_create_from_file(path);
    if (pnm == NULL)
        return NULL;

    image_u8_t *im = NULL;

    switch (pnm->format) {
        case PNM_FORMAT_GRAY: {
            im = image_u8_create(pnm->width, pnm->height);

            for (int y = 0; y < im->height; y++)
                memcpy(&im->buf[y*im->stride], &pnm->buf[y*im->width], im->width);

            break;
        }

        case PNM_FORMAT_RGB: {
            im = image_u8_create(pnm->width, pnm->height);

            // Gray conversion for RGB is gray = (r + g + g + b)/4
            for (int y = 0; y < im->height; y++) {
                for (int x = 0; x < im->width; x++) {
                    uint8_t gray = (pnm->buf[y*im->width*3 + 3*x+0] +    // r
                                    pnm->buf[y*im->width*3 + 3*x+1] +    // g
                                    pnm->buf[y*im->width*3 + 3*x+1] +    // g
                                    pnm->buf[y*im->width*3 + 3*x+2])     // b
                        / 4;

                    im->buf[y*im->stride + x] = gray;
                }
            }

            break;
        }
    }

    pnm_destroy(pnm);
    return im;
}