• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

tests/testDemosaic.cpp

00001 #include "FCam/N900.h"
00002 #include <stdio.h>
00003 #include <math.h>
00004 
00005 using namespace FCam;
00006 
00007 int main(int argc, const char **argv) {
00008     N900::Sensor sensor;
00009 
00010     _Frame *_f = new _Frame; 
00011     _f->sensor = &sensor;  // Need sensor fields for demosaicing
00012     _f->whiteBalance = 5000;  // Need white balance estimate for demosaicing
00013 
00014     Frame f(_f);
00015 
00016     printf("Testing demosaic results on a white jaggy circle\n");
00017     Image circle(128, 128, RAW);
00018     short *data = (short *)circle(0,0);
00019     for (int y = 0; y < 128; y++) {
00020     for (int x = 0; x < 128; x++) {
00021         bool in = ((x-64)*(x-64) + (y-64)*(y-64)) < 2500;
00022         *data++ = in ? 1023 : 0;
00023     }
00024     }
00025 
00026     _f->image = circle;
00027     FCAM_IMAGE_DEBUG(f.image());
00028     saveDump(demosaic(f), "circle.tmp");
00029 
00030     printf("Testing demosaic results on a white anti-aliased circle\n");
00031     data = (short *)circle(0,0);
00032     for (int y = 0; y < 128; y++) {
00033     for (int x = 0; x < 128; x++) {
00034         float d = sqrtf(((x-64)*(x-64) + (y-64)*(y-64)));       
00035         *data++ = (d > 50 ? 0 : (d < 49 ? 1023 : (50 - d)*1023));
00036     }
00037     }
00038 
00039     saveDump(circle, "circle_in.tmp");
00040     saveDump(demosaic(f), "circle_out.tmp");
00041 
00042     printf("Testing demosaic on a subimage\n");
00043     Image canvas(200,200, RAW);
00044     for (int y=0; y < 200; y++) {
00045         for (int x=0; x < 200; x+=2) {
00046             ((short*)canvas(x,y))[0] = 0;
00047             ((short*)canvas(x,y))[1] = 1023;
00048         }
00049     }
00050     Image subCanvas = canvas.subImage(36,36,Size(128,128));    
00051     subCanvas.copyFrom(circle);
00052     FCAM_IMAGE_DEBUG(canvas);
00053     FCAM_IMAGE_DEBUG(subCanvas);
00054     saveDump(canvas, "circle_canvas_in.tmp");
00055     saveDump(subCanvas, "circle_sub_in.tmp");
00056     saveDump(demosaic(f), "circle_sub.tmp");
00057 
00058     printf("Testing demosaic speed\n");
00059     
00060     Image in(64*40, 48*40, RAW);
00061 
00062     _f->image = in;
00063 
00064     Time t1 = Time::now();
00065     
00066     for (int i = 0; i < 10; i++) {
00067     demosaic(f);
00068     }
00069     
00070     printf("%d\n", (Time::now() - t1)/10000);
00071 
00072     printf("Testing basic thumbnail generation \n");
00073 
00074     Image in2(2592,1968, RAW);
00075     for (unsigned int y=0; y < in2.height()-1; y+=2) {
00076         for (unsigned int x=0; x < in2.width()-1; x+=2) {
00077             *((short*)in2(x,y))   = 500 * ((x / 50) % 2) * ((y / 50) % 2); // G
00078             *((short*)in2(x+1,y)) = 500 * ((x / 25) % 2) * ((y / 25) % 2); // R
00079             *((short*)in2(x,y+1)) = 500 * ((x / 100) % 2) * ((y / 100) % 2); // B
00080             *((short*)in2(x+1,y+1))   = 500 * ((x / 50) % 2) * ((y / 50) % 2); // G
00081         }
00082     }
00083     saveDump(in2, "thumb_in.tmp");
00084     _f->image = in2;
00085     saveDump(makeThumbnail(f), "thumb_out.tmp");
00086 
00087     printf("Testing thumbnail speed, N900-asm 2592x1968 GRBG -> 640x480 \n");
00088 
00089     _f->image = in2;
00090     Time t3 = Time::now();
00091     for (int i=0; i<10; i++) {
00092     makeThumbnail(f);
00093     }
00094     printf("%d\n", (Time::now() - t3)/10000);
00095 
00096     printf("Testing thumbnail speed, generic 2591x1967 GRBG -> 640x480 \n");
00097     Image in3(2591,1967, RAW);
00098     _f->image = in3;
00099     Time t2 = Time::now();
00100     for (int i=0; i<10; i++) {
00101     makeThumbnail(f);
00102     }
00103     printf("%d\n", (Time::now() - t2)/10000);
00104 
00105 
00106     return 0;
00107 };

Generated on Thu Jul 15 2010 17:51:29 for FCam by  doxygen 1.7.1