libcvd-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libcvd-members] libcvd configure configure.in cvd_src/bayer.cxx...


From: Gerhard Reitmayr
Subject: [libcvd-members] libcvd configure configure.in cvd_src/bayer.cxx...
Date: Sun, 31 Oct 2010 12:05:43 +0000

CVSROOT:        /cvsroot/libcvd
Module name:    libcvd
Changes by:     Gerhard Reitmayr <gerhard>      10/10/31 12:05:43

Modified files:
        .              : configure configure.in 
        cvd_src        : bayer.cxx 
Added files:
        test           : bayer_test.cxx 

Log message:
        fixes to bayer conversion, no more strange patterns in the output

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libcvd/configure?cvsroot=libcvd&r1=1.154&r2=1.155
http://cvs.savannah.gnu.org/viewcvs/libcvd/configure.in?cvsroot=libcvd&r1=1.155&r2=1.156
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd_src/bayer.cxx?cvsroot=libcvd&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/libcvd/test/bayer_test.cxx?cvsroot=libcvd&rev=1.1

Patches:
Index: configure
===================================================================
RCS file: /cvsroot/libcvd/libcvd/configure,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -b -r1.154 -r1.155
--- configure   19 Oct 2010 14:01:59 -0000      1.154
+++ configure   31 Oct 2010 12:05:39 -0000      1.155
@@ -12705,6 +12705,7 @@
 test/v4l1buffer_rgb                    videodisplay v4l1buffer                 
END
 test/qtbuffer_yuvrgb            videodisplay qtbuffer                  END
 test/font                       videodisplay                    END
+test/bayer_test                                                                
                                        END
 ENDPROGS
 testprogs="`cat config.dep_testprogs | tr '\n' ' ' `"
 

Index: configure.in
===================================================================
RCS file: /cvsroot/libcvd/libcvd/configure.in,v
retrieving revision 1.155
retrieving revision 1.156
diff -u -b -r1.155 -r1.156
--- configure.in        19 Oct 2010 14:02:00 -0000      1.155
+++ configure.in        31 Oct 2010 12:05:41 -0000      1.156
@@ -1099,6 +1099,7 @@
 test/v4l1buffer_rgb                    videodisplay v4l1buffer                 
END
 test/qtbuffer_yuvrgb            videodisplay qtbuffer                  END
 test/font                       videodisplay                    END
+test/bayer_test                                                                
                                        END
 ENDPROGS
 AC_SUBST(testprogs, ["`cat config.dep_testprogs | tr '\n' ' ' `"])
 

Index: cvd_src/bayer.cxx
===================================================================
RCS file: /cvsroot/libcvd/libcvd/cvd_src/bayer.cxx,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- cvd_src/bayer.cxx   15 Apr 2010 11:24:29 -0000      1.9
+++ cvd_src/bayer.cxx   31 Oct 2010 12:05:42 -0000      1.10
@@ -113,17 +113,19 @@
 
        static inline void odd_left(T (*out)[3], const T * previous, const T * 
row, const T * next){
                T prev0 = R::get(previous[0]);
+               T prev1 = R::get(previous[1]);
                T prev2 = R::get(previous[2]);
                T row0 = R::get(row[0]);
                T row1 = R::get(row[1]);
                T row2 = R::get(row[2]);
                T next0 = R::get(next[0]);
+               T next1 = R::get(next[1]);
                T next2 = R::get(next[2]);
                out[0][0] = (prev0 + next0)/2;
                out[0][1] = row0;
                out[0][2] = row1;
                out[1][0] = (prev0 + next0 + prev2 + next2)/4;
-               out[1][1] = (row0+row2+prev0+next0)/4;
+               out[1][1] = (row0+row2+prev1+next1)/4;
                out[1][2] = row1;
        }
        static inline void odd_row(T (*out)[3], const T * previous, const T * 
row, const T * next){
@@ -146,15 +148,17 @@
        }
        static inline void odd_right(T (*out)[3], const T * previous, const T * 
row, const T * next){
                T prev0 = R::get(previous[0]);
+               T prev1 = R::get(previous[1]);
                T row_1 = R::get(row[-1]);
                T row0 = R::get(row[0]);
                T row1 = R::get(row[1]);
                T next0 = R::get(next[0]);
+               T next1 = R::get(next[1]);
                out[0][0] = (prev0 + next0)/2;
                out[0][1] = row0;
                out[0][2] = (row_1+row1)/2;
                out[1][0] = (prev0 + next0)/2;
-               out[1][1] = (row0+prev0+next0)/3;
+               out[1][1] = (row0+prev1+next1)/3;
                out[1][2] = row1;
        }
 
@@ -189,7 +193,7 @@
                out[0][2] = (prev_1+next_1+prev1+next1)/4;
                out[1][0] = (row0+row2)/2;
                out[1][1] = row1;
-               out[1][2] = (prev0 + next0)/2;
+               out[1][2] = (prev1 + next1)/2;
        }
        static inline void even_right(T (*out)[3], const T * previous, const T 
* row, const T * next){
                T prev_1 = R::get(previous[-1]);
@@ -206,7 +210,7 @@
                out[0][2] = (prev_1+next_1+prev1+next1)/4;
                out[1][0] = row0;
                out[1][1] = row1;
-               out[1][2] = (prev0 + next0)/2;
+               out[1][2] = (prev1 + next1)/2;
        }
 
        static inline void lower_left(T (*out)[3], const T * previous, const T 
* row){
@@ -240,6 +244,7 @@
        }
        static inline void lower_right(T (*out)[3], const T * previous, const T 
* row){
                T prev0 = R::get(previous[0]);
+               T prev1 = R::get(previous[1]);
                T row_1 = R::get(row[-1]);
                T row0 = R::get(row[0]);
                T row1 = R::get(row[1]);
@@ -247,7 +252,7 @@
                out[0][1] = row0;
                out[0][2] = (row_1+row1)/2;
                out[1][0] = prev0;
-               out[1][1] = (row0+prev0)/2;
+               out[1][1] = (row0+prev1)/2;
                out[1][2] = row1;
        }
 };
@@ -305,17 +310,19 @@
 
        static inline void odd_left(T (*out)[3], const T * previous, const T * 
row, const T * next){
                T prev0 = R::get(previous[0]);
+               T prev1 = R::get(previous[1]);
                T prev2 = R::get(previous[2]);
                T row0 = R::get(row[0]);
                T row1 = R::get(row[1]);
                T row2 = R::get(row[2]);
                T next0 = R::get(next[0]);
+               T next1 = R::get(next[1]);
                T next2 = R::get(next[2]);
                out[0][2] = (prev0 + next0)/2;
                out[0][1] = row0;
                out[0][0] = row1;
                out[1][2] = (prev0 + next0 + prev2 + next2)/4;
-               out[1][1] = (row0+row2+prev0+next0)/4;
+               out[1][1] = (row0+row2+prev1+next1)/4;
                out[1][0] = row1;
        }
        static inline void odd_row(T (*out)[3], const T * previous, const T * 
row, const T * next){
@@ -338,15 +345,17 @@
        }
        static inline void odd_right(T (*out)[3], const T * previous, const T * 
row, const T * next){
                T prev0 = R::get(previous[0]);
+               T prev1 = R::get(previous[1]);
                T row_1 = R::get(row[-1]);
                T row0 = R::get(row[0]);
                T row1 = R::get(row[1]);
                T next0 = R::get(next[0]);
+               T next1 = R::get(next[1]);
                out[0][2] = (prev0 + next0)/2;
                out[0][1] = row0;
                out[0][0] = (row_1+row1)/2;
                out[1][2] = (prev0 + next0)/2;
-               out[1][1] = (row0+prev0+next0)/3;
+               out[1][1] = (row0+prev1+next1)/3;
                out[1][0] = row1;
        }
 
@@ -432,6 +441,7 @@
        }
        static inline void lower_right(T (*out)[3], const T * previous, const T 
* row){
                T prev0 = R::get(previous[0]);
+               T prev1 = R::get(previous[1]);
                T row_1 = R::get(row[-1]);
                T row0 = R::get(row[0]);
                T row1 = R::get(row[1]);
@@ -439,7 +449,7 @@
                out[0][1] = row0;
                out[0][0] = (row_1+row1)/2;
                out[1][2] = prev0;
-               out[1][1] = (row0+prev0)/2;
+               out[1][1] = (row0+prev1)/2;
                out[1][0] = row1;
        }
 };

Index: test/bayer_test.cxx
===================================================================
RCS file: test/bayer_test.cxx
diff -N test/bayer_test.cxx
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ test/bayer_test.cxx 31 Oct 2010 12:05:42 -0000      1.1
@@ -0,0 +1,181 @@
+#include <cvd/image.h>
+#include <cvd/byte.h>
+#include <cvd/rgb.h>
+#include <cvd/colourspaces.h>
+#include <cvd/colourspace_convert.h>
+#include <cvd/image_io.h>
+
+#include <iostream>
+#include <sstream>
+
+using namespace std;
+using namespace CVD;
+
+template <typename T>
+Image<T> create_bayer( const ImageRef & size, const SubImage<byte> & pattern ){
+    assert(pattern.size() == ImageRef(2,2));
+    Image<T> result(size);
+    for( int y = 0; y < size.y; y += 2 ){
+        for(int x = 0; x < size.x; x +=2 ){
+            SubImage<T> sub = result.sub_image(ImageRef(x,y), ImageRef(2,2));
+            reinterpret_cast<SubImage<byte> &>(sub).copy_from(pattern);
+        }
+    }
+    return result;
+}
+
+template <typename T>
+inline ostream & operator<<( ostream & out, const Image<T> & im ){
+    const ImageRef & size = im.size();
+    for( int y = 0; y < size.y; y += 1 ){
+        for(int x = 0; x < size.x; x +=1 ){
+            out << int(im[y][x]) << " ";
+        }
+        out << endl;
+    }
+    return out;
+}
+
+template <typename T>
+Image<Rgb<byte> > create_test( const ImageRef & size, const Image<byte> & red, 
const Image<byte> & green, const Image<byte> & blue ){
+    
+    Image<Rgb<byte> > result(size.dot_times(ImageRef(3,2)));
+    
+    Image<byte> gray = create_bayer<byte>(size, red);
+    Image<T> bayer = create_bayer<T>(size, red);
+    
+    result.sub_image(ImageRef(0,0).dot_times(size), 
size).copy_from(convert_image<Rgb<byte> >(gray));
+    result.sub_image(ImageRef(0,1).dot_times(size), 
size).copy_from(convert_image<Rgb<byte> >(bayer));
+    
+    gray = create_bayer<byte>(size, green);
+    bayer = create_bayer<T>(size, green);
+
+    result.sub_image(ImageRef(1,0).dot_times(size), 
size).copy_from(convert_image<Rgb<byte> >(gray));
+    result.sub_image(ImageRef(1,1).dot_times(size), 
size).copy_from(convert_image<Rgb<byte> >(bayer));
+
+    gray = create_bayer<byte>(size, blue);
+    bayer = create_bayer<T>(size, blue);
+    
+    result.sub_image(ImageRef(2,0).dot_times(size), 
size).copy_from(convert_image<Rgb<byte> >(gray));
+    result.sub_image(ImageRef(2,1).dot_times(size), 
size).copy_from(convert_image<Rgb<byte> >(bayer));
+    
+    return result;
+}
+
+int main(int argc, char ** argv){
+
+    const ImageRef size(8,8);
+    const byte value = (argc>1)?atoi(argv[1]):255;
+    
+    ostringstream sout;
+    sout << int(value) << ".png";
+    const string postfix = sout.str();
+    
+    Image<byte> red(ImageRef(2,2));
+    Image<byte> green(ImageRef(2,2));
+    Image<byte> blue(ImageRef(2,2));
+
+    // bayer rggb
+    // RGRGRG
+    // GBGBGB
+    // RGRGRG
+    // GBGBGB
+    red[0][0] = value;
+    red[0][1] = 0;
+    red[1][0] = 0;
+    red[1][1] = 0;
+
+    green[0][0] = 0;
+    green[0][1] = value;
+    green[1][0] = value;
+    green[1][1] = 0;
+
+    blue[0][0] = 0;
+    blue[0][1] = 0;
+    blue[1][0] = 0;
+    blue[1][1] = value;
+
+    Image<Rgb<byte> > rggb = create_test<bayer_rggb>(size, red, green, blue);
+    // img_save(rggb, "rggb" + postfix);
+
+    // bayer gbrg
+    // GBGBGB
+    // RGRGRG
+    // GBGBGB
+    // RGRGRG
+    
+    red[0][0] = 0;
+    red[0][1] = 0;
+    red[1][0] = value;
+    red[1][1] = 0;
+
+    green[0][0] = value;
+    green[0][1] = 0;
+    green[1][0] = 0;
+    green[1][1] = value;
+
+    blue[0][0] = 0;
+    blue[0][1] = value;
+    blue[1][0] = 0;
+    blue[1][1] = 0;
+    
+    Image<Rgb<byte> > gbrg = create_test<bayer_gbrg>(size, red, green, blue);
+    // img_save(gbrg, "gbrg" + postfix);
+
+    // bayer bggr
+    // BGBGBG
+    // GRGRGR
+    // BGBGBG
+    // GRGRGR
+
+    red[0][0] = 0;
+    red[0][1] = 0;
+    red[1][0] = 0;
+    red[1][1] = value;
+
+    green[0][0] = 0;
+    green[0][1] = value;
+    green[1][0] = value;
+    green[1][1] = 0;
+
+    blue[0][0] = value;
+    blue[0][1] = 0;
+    blue[1][0] = 0;
+    blue[1][1] = 0;
+
+    Image<Rgb<byte> > bggr = create_test<bayer_bggr>(size, red, green, blue);
+    // img_save(bggr, "bggr" + postfix);
+    
+    // bayer grbg
+    // GRGRGR
+    // BGBGBG
+    // GRGRGR
+    // BGBGBG
+    
+    red[0][0] = 0;
+    red[0][1] = value;
+    red[1][0] = 0;
+    red[1][1] = 0;
+
+    green[0][0] = value;
+    green[0][1] = 0;
+    green[1][0] = 0;
+    green[1][1] = value;
+
+    blue[0][0] = 0;
+    blue[0][1] = 0;
+    blue[1][0] = value;
+    blue[1][1] = 0;
+    
+    Image<Rgb<byte> > grbg = create_test<bayer_grbg>(size, red, green, blue);
+    // img_save(grbg, "grbg" + postfix);
+    
+    Image<Rgb<byte> > all(ImageRef(3, 4*2).dot_times(size));
+    all.sub_image(ImageRef(0,0).dot_times(size), rggb.size()).copy_from(rggb);
+    all.sub_image(ImageRef(0,2).dot_times(size), gbrg.size()).copy_from(gbrg);
+    all.sub_image(ImageRef(0,4).dot_times(size), bggr.size()).copy_from(bggr);
+    all.sub_image(ImageRef(0,6).dot_times(size), grbg.size()).copy_from(grbg);
+
+    img_save(all, "all" + postfix);
+    return 0;
+}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]