Rose-Hulman Robotics Team

Changeset 474

Show
Ignore:
Timestamp:
03/26/09 05:58:24 (3 years ago)
Author:
spenceal
Message:

vision using dtrees, working at same accuracy as example dtree

Location:
trunk/software/rb/vision
Files:
3 added
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/software/rb/vision/examples/mkfile

    r372 r474  
    1313 
    1414%.o: %.cpp 
    15         g++ $CPPFLAGS -c -o $target $prereq 
     15        g++ $CFLAGS -c -o $target $prereq 
    1616 
    1717%.o: %.c 
  • trunk/software/rb/vision/main.c

    r469 r474  
    2323 
    2424#include "vision.h" 
     25#include "classify.h" 
    2526 
    2627int main(int argc, char **argv) { 
     
    5354                int data[3]; 
    5455                CV_READ_SEQ_ELEM(data, reader); 
    55                 printf("read: (%d, %d, %d)\n", data[0], data[1], data[2]); 
    5656                cvCircle(transformed, 
    5757                         cvPoint(data[1], data[2]), 
  • trunk/software/rb/vision/makefile

    r469 r474  
    1 CFLAGS=-p -pg -g -Wall -pedantic --std=gnu99 -fgnu89-inline -O3 $(shell pkg-config --cflags opencv gsl) 
    2 LDFLAGS=-lpython2.5 $(shell pkg-config --libs opencv gsl) 
    3 DLFLAGS=-shared -nostartfiles -fPIC 
     1CFLAGS  =-p -pg -g -Wall -pedantic --std=gnu99 -fgnu89-inline -O3 $(shell pkg-config --cflags opencv gsl) 
     2CPPFLAGS=-p -pg -g -Wall -pedantic -O3 $(shell pkg-config --cflags opencv gsl) 
     3LDFLAGS =-lpython2.5 $(shell pkg-config --libs opencv gsl) 
     4DLFLAGS =-shared -nostartfiles -fPIC 
    45 
    56PROG=main 
     
    1516#       #./$CPROG ./grass.jpeg 
    1617#       #./$CPROG ./notgrass.jpeg 
    17         ./$(CPROG) ./data/images/cimg4753.jpg 
     18        ./$(CPROG) ./data/classes/input.jpeg ./data/classes/classes.png 
    1819#       ./$(CPROG) ./tile.png 
    1920#       #./$CPROG ./lines.jpeg 
     
    2223#       #python $PROG.py test_image2.jpeg 
    2324 
    24 main: main.o vision.o 
     25main: main.o vision.o classify.o 
    2526        gcc -o $@ $+ $(LDFLAGS) 
    2627 
     28%.o: %.cpp 
     29        g++ $(CPPFLAGS) -c -o $@ $< 
     30 
    2731%.o: %.c 
    28         gcc $(CFLAGS) -c -o $@ $*.c 
     32        gcc $(CFLAGS) -c -o $@ $< 
    2933 
    3034_%: _%.c 
  • trunk/software/rb/vision/vision.c

    r469 r474  
    2727 
    2828#include "vision.h" 
     29#include "classify.h" 
    2930 
    3031IplImage *get_image() 
    3132{ 
    32         char *file = "rb/vision/data/images/cimg4753.jpg"; 
     33        char *file = "rb/vision/data/classes/input.jpeg"; 
    3334        IplImage *image = cvLoadImage(file, 1); 
    3435        if (!image) { 
     
    4849         
    4950        /* transform image */ 
    50         IplImage *transformed = cvCreateImage(size, img->depth, img->nChannels); 
    51         CvMat* mat= cvCreateMat( 3, 3, CV_32F ); 
    52         CvPoint2D32f from[] = { 
    53                 cvPoint2D32f(0           , size.height*0.12), 
    54                 cvPoint2D32f(0           , size.height-1), 
    55                 cvPoint2D32f(size.width-1, size.height-1), 
    56                 cvPoint2D32f(size.width-1, size.height*0.12) 
    57         }; 
    58         CvPoint2D32f to[] = { 
    59                 cvPoint2D32f(0              , -62           ), 
    60                 cvPoint2D32f(size.width*0.33, size.height-1), 
    61                 cvPoint2D32f(size.width*0.67, size.height-1), 
    62                 cvPoint2D32f(size.width-1   , -62            ) 
    63         }; 
    64         cvGetPerspectiveTransform(from, to, mat); 
    65         cvWarpPerspective(img, transformed, mat, CV_WARP_FILL_OUTLIERS, cvScalarAll(0)); 
    66         cvReleaseImage(&img); 
    67         return transformed; 
     51        //IplImage *transformed = cvCreateImage(size, img->depth, img->nChannels); 
     52        //CvMat* mat= cvCreateMat( 3, 3, CV_32F ); 
     53        //CvPoint2D32f from[] = { 
     54        //      cvPoint2D32f(0           , size.height*0.12), 
     55        //      cvPoint2D32f(0           , size.height-1), 
     56        //      cvPoint2D32f(size.width-1, size.height-1), 
     57        //      cvPoint2D32f(size.width-1, size.height*0.12) 
     58        //}; 
     59        //CvPoint2D32f to[] = { 
     60        //      cvPoint2D32f(0              , -62           ), 
     61        //      cvPoint2D32f(size.width*0.33, size.height-1), 
     62        //      cvPoint2D32f(size.width*0.67, size.height-1), 
     63        //      cvPoint2D32f(size.width-1   , -62            ) 
     64        //}; 
     65        //cvGetPerspectiveTransform(from, to, mat); 
     66        //cvWarpPerspective(img, transformed, mat, CV_WARP_FILL_OUTLIERS, cvScalarAll(0)); 
     67        //cvReleaseImage(&img); 
     68        //return transformed; 
     69        return img; 
    6870} 
    6971 
     
    8486 
    8587        /* Threshold image */ 
    86         print_time("Marking grass"); 
    87         CvMat *grass_mask = cvCreateMat(size.height, size.width, CV_8U); 
    88         CvMat *line_mask  = cvCreateMat(size.height, size.width, CV_8U); 
    89         cvInRangeS(hsv, cvScalar(30, 0, 80, 0), cvScalar(120,90,180,0), grass_mask); 
    90         cvInRangeS(hsv, cvScalar(100,60,140,0), cvScalar(120,90,254,0), line_mask); 
     88        print_time("Marking types"); 
     89        CvMat *classes = classify(hsv); 
     90        //CvMat *grass_mask = cvCreateMat(size.height, size.width, CV_8U); 
     91        //CvMat *line_mask  = cvCreateMat(size.height, size.width, CV_8U); 
     92        //cvInRangeS(hsv, cvScalar(30, 0, 80, 0), cvScalar(120,90,180,0), grass_mask); 
     93        //cvInRangeS(hsv, cvScalar(100,60,140,0), cvScalar(120,90,254,0), line_mask); 
    9194        // TODO, mark obstacles separately 
    9295 
    9396        /* Morphological operations */ 
    94         print_time("Expanding lines"); 
    95         int rad = (int)size.width*0.005; 
    96         IplConvKernel *se = cvCreateStructuringElementEx(rad, rad, rad/2, rad/2, CV_SHAPE_RECT, NULL); 
    97         cvDilate(line_mask, line_mask, se, 2); 
    98         cvReleaseStructuringElement(&se); 
     97        //print_time("Expanding lines"); 
     98        //int rad = (int)size.width*0.005; 
     99        //IplConvKernel *se = cvCreateStructuringElementEx(rad, rad, rad/2, rad/2, CV_SHAPE_RECT, NULL); 
     100        //cvDilate(line_mask, line_mask, se, 2); 
     101        //cvReleaseStructuringElement(&se); 
    99102 
    100103        /* Mark outputs */ 
    101         CvMat *output = cvCreateMat(input->height, input->width, CV_8U); 
    102         cvSet(output, cvRealScalar(RB_IGNORE), NULL); 
    103         cvSet(output, cvRealScalar(RB_GRASS),  grass_mask); 
    104         cvSet(output, cvRealScalar(RB_LINE ),  line_mask); 
     104        //CvMat *output = cvCreateMat(input->height, input->width, CV_8U); 
     105        //cvSet(output, cvRealScalar(RB_IGNORE), NULL); 
     106        //cvSet(output, cvRealScalar(RB_GRASS),  grass_mask); 
     107        //cvSet(output, cvRealScalar(RB_LINE ),  line_mask); 
    105108 
    106109        /* Release temporary data */ 
    107         cvReleaseMat(&grass_mask); 
    108         cvReleaseMat(&line_mask); 
     110        //cvReleaseMat(&grass_mask); 
     111        //cvReleaseMat(&line_mask); 
    109112        cvReleaseImage(&hsv); 
    110113        cvReleaseImage(&img); 
    111114 
    112         return output; 
     115        return classes; 
    113116} 
    114117 
    115118CvSeq *get_points(CvMat *classes) 
    116119{ 
    117         int test_data[][3] = { 
    118                 {RB_SKY,100,100}, {RB_GRASS,200,100}, {RB_OBSTICLE,300,100}, 
    119                 {RB_SKY,100,200}, {RB_GRASS,200,200}, {RB_OBSTICLE,300,200}, 
    120                 {RB_SKY,100,300}, {RB_GRASS,200,300}, {RB_OBSTICLE,300,300}, 
    121         }; 
     120        //int test_data[][3] = { 
     121        //      {RB_SKY,100,100}, {RB_GRASS,200,100}, {RB_OBSTICLE,300,100}, 
     122        //      {RB_SKY,100,200}, {RB_GRASS,200,200}, {RB_OBSTICLE,300,200}, 
     123        //      {RB_SKY,100,300}, {RB_GRASS,200,300}, {RB_OBSTICLE,300,300}, 
     124        //}; 
    122125 
    123126        CvMemStorage *storage = cvCreateMemStorage(0); 
  • trunk/software/rb/vision/vision.h

    r469 r474  
    2727        CvPoint end; 
    2828} CvLine; 
    29  
    30 /** 
    31  * Standard pixel values 
    32  * 
    33  * The classified image will be represented by these colors 
    34  */ 
    35 typedef enum rb_classes_t { 
    36         RB_SKY     , 
    37         RB_GRASS   , 
    38         RB_LINE    , 
    39         RB_OBSTICLE, 
    40         RB_PATH    , 
    41         RB_IGNORE  , 
    42         RB_NUM_CLASSES 
    43 } rb_classes_t; 
    44 const static CvScalar class_colors[256] = { 
    45         [RB_SKY     ] = {{0*255, 0*255, 1*255, 0}}, // Blue    
    46         [RB_GRASS   ] = {{0*255, 1*255, 0*255, 0}}, // Green   
    47         [RB_LINE    ] = {{1*255, 1*255, 1*255, 0}}, // White   
    48         [RB_OBSTICLE] = {{1*255, 0*255, 0*255, 0}}, // Red     
    49         [RB_PATH    ] = {{1*255, 0*255, 1*255, 0}}, // Purple  
    50         [RB_IGNORE  ] = {{0*255, 0*255, 0*255, 0}}  // Black   
    51 }; 
    5229 
    5330/** 
     
    12198void print_time(char *label); 
    12299 
    123  
    124100#endif