[Top][All Lists]
[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;
+}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libcvd-members] libcvd configure configure.in cvd_src/bayer.cxx...,
Gerhard Reitmayr <=