123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- /*
- *
- * NICE-Core - efficient algebra and computer vision methods
- * - libimage - An image/template for new NICE libraries
- * See file License for license information.
- */
- #ifdef NICE_USELIB_CPPUNIT
- #include "TestImageFile.h"
- #include <string>
- #include <exception>
- #include <core/image/ColorImageT.h>
- #include <core/image/ImageOperators.h>
- #include <sstream>
- #ifdef NICE_USELIB_LIMUN_IOCOMPRESSION
- #include <iocompression/md5.h>
- #endif
- using namespace NICE;
- using namespace std;
- CPPUNIT_TEST_SUITE_REGISTRATION( TestImageFile );
- void TestImageFile::setUp() {
- }
- void TestImageFile::tearDown() {
- }
- void TestImageFile::testConstructor() {
- }
- void TestImageFile::testFloatPXM()
- {
- /*
- int width=32;
- int height=8;
- ColorImage c(width,height);
- for(int j=0;j<height;j++)
- for(int i=0;i<width;i++)
- {
- c.setPixel(i,j,0,i*j);
- c.setPixel(i,j,1,i*j+i);
- c.setPixel(i,j,2,i*j+j*3);
- }
- Image g(width,height);
- rgbToGray(c,&g);
- c.write(ImageFile("test-float.ppm"));
- ColorImageT<Ipp32f> newc;
- newc.read(ImageFile("test-float.ppm"));
- FloatImage newf(width,height);
- newf.read(ImageFile("test-float.ppm"));
- Image newg(width,height);
- convertBitDepth(newf,&newg);
- newg.write(ImageFile("test-floatcmp.ppm"));
- #ifdef NICE_USELIB_LIMUN_IOCOMPRESSION
- {
- std::stringstream inout; inout << g;
- std::stringstream inout1; inout1 << newg;
- CPPUNIT_ASSERT_EQUAL(inout.str(),inout1.str());
- }
- {
- std::stringstream inout; inout << c;
- std::stringstream inout1; inout1 << newc;
- CPPUNIT_ASSERT_EQUAL(inout.str(),inout1.str());
- }
- #endif
- system("rm test-float.ppm");
- */
- }
- void TestImageFile::testFloatImage()
- {
- /*
- int width=32;
- int height=8;
- ColorImage c(width,height);
- for(int j=0;j<height;j++) {
- for(int i=0;i<width;i++) {
- c.setPixel(i,j,0,i*j);
- c.setPixel(i,j,1,i*j+i);
- c.setPixel(i,j,2,i*j+j*3);
- }
- }
- Image g(width,height);
- rgbToGray(c,&g);
- c.write(ImageFile("test-float.png"));
- ColorImageT<Ipp32f> newc;
- newc.read(ImageFile("test-float.png"));
- ColorImage newc2(width,height);
- convertBitDepth(newc,&newc2);
- FloatImage newf(width,height);
- newf.read(ImageFile("test-float.png"));
- Image newg(width,height);
- convertBitDepth(newf,&newg);
- #ifdef NICE_USELIB_LIMUN_IOCOMPRESSION
- {
- std::stringstream inout; inout << g;
- std::stringstream inout1; inout1 << newg;
- CPPUNIT_ASSERT_EQUAL(inout.str(),inout1.str());
- }
- {
- std::stringstream inout; inout << c;
- std::stringstream inout1; inout1 << newc2;
- CPPUNIT_ASSERT_EQUAL(inout.str(),inout1.str());
- }
- #endif
- system("rm test-float.png");
- */
- }
- void TestImageFile::testColorImage() {
- int width=31;
- int height=8;
- ColorImage c(width,height);
- for(int i=0;i<width;i++) {
- for(int j=0;j<height;j++) {
- c.setPixel(i,j,0,i*j);
- c.setPixel(i,j,1,i*j+i);
- c.setPixel(i,j,2,i*j+j*3);
- }
- }
- c.write(ImageFile("test-color.png"));
- ColorImage newc;
- newc.read(ImageFile("test-color.png"));
- newc.write(ImageFile("test-color.ppm"));
- ColorImage newc2(width,height);
- newc2.read(ImageFile("test-color.ppm"));
- std::stringstream inout;
- for(int w=0;w<width;w++) {
- for(int h=0;h<height;h++) {
- for(int channel=0;channel<3;channel++) {
- int g_c = static_cast<int>(c.getPixel(w,h,channel));
- int g_newc = static_cast<int>(newc.getPixel(w,h,channel));
- int g_newc2 = static_cast<int>(newc2.getPixel(w,h,channel));
- CPPUNIT_ASSERT_EQUAL( g_c, g_newc );
- CPPUNIT_ASSERT_EQUAL( g_c, g_newc2 );
- }
- }
- }
-
- system("rm test-color.png test-color.ppm");
- }
- void TestImageFile::testGrayImage() {
- int width=9;
- int height=32;
- Image orig(width,height);
- for(int i=0;i<width;i++) {
- for(int j=0;j<height;j++) {
- orig.setPixel(i,j,i*j);
- }
- }
- orig.write(ImageFile("test.png"));
- ImageFile imgf ("test.png");
- CPPUNIT_ASSERT_EQUAL( width, (int)imgf.width() );
- CPPUNIT_ASSERT_EQUAL( height, (int)imgf.height() );
- // getHeader() for ImageMagick formats is not yet defined.
- // Therefore, we need the PNG library here to issue getHeader().
- ImageFile::Header imgfheader = imgf.getHeader();
- CPPUNIT_ASSERT_EQUAL( height, imgfheader.height );
- CPPUNIT_ASSERT_EQUAL( width, imgfheader.width );
- vector<Image> gray(4);
- gray[0].read(ImageFile("test.png"));
- gray[0].write(ImageFile("test.pgm"));
- gray[1].read(ImageFile("test.pgm"));
- gray[1].write(ImageFile("test.ppm"));
- gray[2].read(ImageFile("test.ppm"));
- ColorImage c(width,height);
- c.read(ImageFile("test.pgm"));
- c.write(ImageFile("testc.pgm"));
- gray[3].read(ImageFile("testc.pgm"));
- for(int i=0;i<4;i++)
- {
- for(int w=0;w<width;w++) {
- for(int h=0;h<height;h++) {
- int g_w = static_cast<int>(gray[i].getPixel(w,h));
- int g_orig = static_cast<int>(orig.getPixel(w,h));
- CPPUNIT_ASSERT_EQUAL( g_orig, g_w );
- }
- }
- }
- system("rm test.png test.pgm test.ppm testc.pgm");
- }
- void TestImageFile::testJPG_IO()
- {
- // Image
- {
- Image src(4,1);
- src(0,0) = 0;
- src(1,0) = 100;
- src(2,0) = 160;
- src(3,0) = 255;
- src.write(ImageFile("gray-out.jpg"));
- ImageFile imgf ("gray-out.jpg");
- CPPUNIT_ASSERT_EQUAL( src.width(), (int)imgf.width() );
- CPPUNIT_ASSERT_EQUAL( src.height(), (int)imgf.height() );
- Image in;
- in.read(ImageFile("gray-out.jpg"));
- for(int i=0; i<src.width(); ++i)
- CPPUNIT_ASSERT_EQUAL(static_cast<int>(src(i,0)),static_cast<int>(in(i,0)));
- system("rm gray-out.jpg");
- }
- // ImageT<Ipp32f>
- {
- ImageT<Ipp32f> src(5,1);
- src(0,0) = -10.5;
- src(1,0) = 0.0;
- src(2,0) = 199.75;
- src(3,0) = 255.0;
- src(4,0) = 300.5;
- src.write(ImageFile("gray-float-out.jpg"));
- ImageT<Ipp32f> in;
- in.read(ImageFile("gray-float-out.jpg"));
- CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0,static_cast<int>(in(0,0)), 0.0001);
- CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0,static_cast<int>(in(1,0)), 0.0001);
- CPPUNIT_ASSERT_DOUBLES_EQUAL(199.0,static_cast<int>(in(2,0)), 0.0001);
- CPPUNIT_ASSERT_DOUBLES_EQUAL(255.0,static_cast<int>(in(3,0)), 0.0001);
- CPPUNIT_ASSERT_DOUBLES_EQUAL(255.0,static_cast<int>(in(4,0)), 0.0001);
- system("rm gray-float-out.jpg");
- }
- // ColorImage
- {
- ColorImage src(4,1);
- src.setPixelQuick(0,0, 0, 0, 0);
- src.setPixelQuick(1,0, 100,100,100);
- src.setPixelQuick(2,0, 160,160,160);
- src.setPixelQuick(3,0, 255,255,255);
- src.write(ImageFile("color-out.jpg"));
- ImageFile imgf ("color-out.jpg");
- CPPUNIT_ASSERT_EQUAL( src.width(), (int)imgf.width() );
- CPPUNIT_ASSERT_EQUAL( src.height(), (int)imgf.height() );
- CPPUNIT_ASSERT_EQUAL( imgf.getHeader().channel, 3 );
- ColorImage in;
- in.read(ImageFile("color-out.jpg"));
- for(int i=0; i<src.width(); ++i)
- for(int c=0; c<3; ++c)
- CPPUNIT_ASSERT_EQUAL(static_cast<int>(src(i,0,c)),static_cast<int>(in(i,0,c)));
- system("rm color-out.jpg");
- }
- // ColorImageT<Ipp32f>
- {
- ColorImageT<Ipp32f> src(5,1);
- src.setPixelQuick(0,0, -10.5, -10.5, -10.5);
- src.setPixelQuick(1,0, 0.0, 0.0, 0.0);
- src.setPixelQuick(2,0, 199.75, 199.75, 199.75);
- src.setPixelQuick(3,0, 255.0, 255.0, 255.0);
- src.setPixelQuick(4,0, 300.5, 300.5, 300.5);
- src.write(ImageFile("color-float-out.jpg"));
- ColorImageT<Ipp32f> in;
- in.read(ImageFile("color-float-out.jpg"));
- for(int i=0; i<3; ++i) {
- CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0,static_cast<int>(in(0,0,i)), 0.0001);
- CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0,static_cast<int>(in(1,0,i)), 0.0001);
- CPPUNIT_ASSERT_DOUBLES_EQUAL(199.0,static_cast<int>(in(2,0,i)), 0.0001);
- CPPUNIT_ASSERT_DOUBLES_EQUAL(255.0,static_cast<int>(in(3,0,i)), 0.0001);
- CPPUNIT_ASSERT_DOUBLES_EQUAL(255.0,static_cast<int>(in(4,0,i)), 0.0001);
- }
- system("rm color-float-out.jpg");
- }
- }
- void TestImageFile::testInvalidFileName() {
- ImageFile image_file;
- ImageFile::Format fileformat = image_file.name2Format("nodothere");
- CPPUNIT_ASSERT_EQUAL(fileformat,ImageFile::FormatUnknown);
- }
- #endif
|