123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636 |
- #include "ImageTest.h"
- #include <string>
- #include <core/image/ippwrapper.h>
- #include <core/image/ImageT.h>
- #include <core/image/ImageT.h>
- #include <core/image/ColorImageT.h>
- #include "core/basics/cppunitex.h"
- using namespace std;
- using namespace NICE;
- CPPUNIT_TEST_SUITE_REGISTRATION( ImageTest );
- void ImageTest::setUp() {
- }
- void ImageTest::tearDown() {
- }
- void ImageTest::testFloatImage() {
- int width=10;
- int height=10;
- FloatImage fimg(width,height);
- fimg=0;
- for(int w=0;w<width;w++) {
- fimg(w,height/2) = -25*w;
- }
- for(int h=0;h<height;h++) {
- fimg(width/2,h) = 25*h;
- }
- // fimg.writeColored(ImageFile("test.png",ImageFile::PNG));
- }
- void printGrayImage2(Image *result)
- {
- printf("\n");
- for(int j=0; j<result->height(); ++j)
- {
- for(int i=0; i<result->width(); ++i)
- {
- if((*result)(i,j)<100) printf(" ");
- if((*result)(i,j)<10) printf(" ");
- printf("%i ",(*result)(i,j));
- }
- printf("\n");
- }
- }
- void ImageTest::testGrayImage()
- {
- Image image(4,3);
- CPPUNIT_ASSERT_EQUAL(4, image.width());
- CPPUNIT_ASSERT_EQUAL(3, image.height());
- // setPixel
- CPPUNIT_ASSERT_THROW(image.setPixel(4, 2, 11), ImageException);
- CPPUNIT_ASSERT_THROW(image.setPixel(3, 3, 12), ImageException);
- CPPUNIT_ASSERT_NO_THROW(image.setPixelSave(4, 2, 11));
- CPPUNIT_ASSERT_NO_THROW(image.setPixelSave(3, 3, 12));
- CPPUNIT_ASSERT_THROW(image.getPixel(4, 2), ImageException);
- CPPUNIT_ASSERT_THROW(image.getPixel(3, 3), ImageException);
- image.setPixel(0, 0, 11);
- image.setPixel(3, 2, 12);
- CPPUNIT_ASSERT_EQUAL(11, (int)image.getPixel(0, 0));
- CPPUNIT_ASSERT_EQUAL(12, (int)image.getPixel(3, 2));
- CPPUNIT_ASSERT_EQUAL(12, (int)*image.getPixelPointerXY(3, 2));
- // operator ==, !=
- {
- Image img(2,2);
- img.set(133);
- // Image::set test
- CPPUNIT_ASSERT_EQUAL(133, static_cast<int>(img.getPixel(0,0)));
- CPPUNIT_ASSERT_EQUAL(133, static_cast<int>(img.getPixel(1,0)));
- CPPUNIT_ASSERT_EQUAL(133, static_cast<int>(img.getPixel(0,1)));
- CPPUNIT_ASSERT_EQUAL(133, static_cast<int>(img.getPixel(1,1)));
- Image timg(3,2);
- CPPUNIT_ASSERT_THROW(timg==img, ImageException);
- CPPUNIT_ASSERT_THROW(timg!=img, ImageException);
- timg = img;
- CPPUNIT_ASSERT_EQUAL(true, timg==img);
- CPPUNIT_ASSERT_EQUAL(false, timg!=img);
- timg.setPixelQuick(1,1,0);
- CPPUNIT_ASSERT_EQUAL(false, timg==img);
- CPPUNIT_ASSERT_EQUAL(true, timg!=img);
- }
- // invert
- Image image2(image, GrayColorImageCommonImplementation::noAlignment);
- CPPUNIT_ASSERT_EQUAL(11, (int)image.getPixel(0,0));
- CPPUNIT_ASSERT_EQUAL(12, (int)image.getPixel(3,2));
- CPPUNIT_ASSERT_EQUAL(11, (int)image2.getPixel(0,0));
- CPPUNIT_ASSERT_EQUAL(12, (int)image2.getPixel(3,2));
- CPPUNIT_ASSERT_EQUAL(12, (int) image2.getPixel(3, 2));
- CPPUNIT_ASSERT_EQUAL(12, (int) image.getPixel(3, 2));
- CPPUNIT_ASSERT_EQUAL(true, image == image2);
- image2.invert();
- CPPUNIT_ASSERT_EQUAL(false, image == image2);
- CPPUNIT_ASSERT_EQUAL(255-11, (int)image2.getPixel(0,0));
- CPPUNIT_ASSERT_EQUAL(255-12, (int)image2.getPixel(3,2));
- // mirror
- Image image3 = Image(3,4);
- for(int j=0; j<image3.height(); ++j)
- for(int i=0; i<image3.width(); ++i)
- image3.setPixel(i,j, (i+1)+j*(image3.width()));
- image3.mirror(ippAxsVertical);
- CPPUNIT_ASSERT_EQUAL( 3, static_cast<int>(image3.getPixel(0,0)));
- CPPUNIT_ASSERT_EQUAL( 2, static_cast<int>(image3.getPixel(1,0)));
- CPPUNIT_ASSERT_EQUAL( 1, static_cast<int>(image3.getPixel(2,0)));
- image3.mirror(ippAxsVertical);
- image3.mirror(ippAxsHorizontal);
- CPPUNIT_ASSERT_EQUAL( 10, static_cast<int>(image3.getPixel(0,0)));
- CPPUNIT_ASSERT_EQUAL( 7, static_cast<int>(image3.getPixel(0,1)));
- CPPUNIT_ASSERT_EQUAL( 4, static_cast<int>(image3.getPixel(0,2)));
- CPPUNIT_ASSERT_EQUAL( 1, static_cast<int>(image3.getPixel(0,3)));
- image3.mirror(ippAxsHorizontal);
- image3.mirror(ippAxsBoth);
- CPPUNIT_ASSERT_EQUAL( 12, static_cast<int>(image3.getPixel(0,0)));
- CPPUNIT_ASSERT_EQUAL( 9, static_cast<int>(image3.getPixel(0,1)));
- CPPUNIT_ASSERT_EQUAL( 4, static_cast<int>(image3.getPixel(2,2)));
- CPPUNIT_ASSERT_EQUAL( 1, static_cast<int>(image3.getPixel(2,3)));
- // transpose
- Image image4 = Image(3,4);
- CPPUNIT_ASSERT_THROW(image4.transpose(), ImageException);
- for(int s=1; s<=8; ++s)
- {
- image4 = Image(s,s);
- for(int j=0; j<image4.height(); ++j)
- for(int i=0; i<image4.width(); ++i)
- image4.setPixel(i,j, (i+1)+j*(image4.width()));
- image4.transpose();
- for(int j=0; j<image4.height(); ++j)
- for(int i=0; i<image4.width(); ++i)
- CPPUNIT_ASSERT_EQUAL(static_cast<int>((j+1)+i*(image4.width())),
- static_cast<int>(image4.getPixel(i,j)));
- }
- // set
- image4.set(133);
- CPPUNIT_ASSERT_EQUAL(133, static_cast<int>(image4.getPixel(1,1)));
- CPPUNIT_ASSERT_EQUAL(133, static_cast<int>(image4.getPixel(2,2)));
- image4.set(0);
- CPPUNIT_ASSERT_EQUAL( 0, static_cast<int>(image4.getPixel(0,1)));
- CPPUNIT_ASSERT_EQUAL( 0, static_cast<int>(image4.getPixel(1,0)));
- image4.set(255);
- CPPUNIT_ASSERT_EQUAL(255, static_cast<int>(image4.getPixel(2,3)));
- CPPUNIT_ASSERT_EQUAL(255, static_cast<int>(image4.getPixel(2,0)));
- // copyRect
- image4 = Image(10,10);
- for(int y=0; y<image4.width(); ++y)
- for(int x=0; x<image4.width(); ++x)
- image4(x,y) = x+1+y*image4.width();
- Image* imgRect = image4.copyRect(Rect(2,3,4,3));
- CPPUNIT_ASSERT_EQUAL(4, static_cast<int>(imgRect->width()));
- CPPUNIT_ASSERT_EQUAL(3, static_cast<int>(imgRect->height()));
- for(int y=0; y<imgRect->height(); ++y)
- for(int x=0; x<imgRect->width(); ++x)
- CPPUNIT_ASSERT_EQUAL((x+3)+(y+3)*image4.width(), static_cast<int>(imgRect->getPixel(x,y)));
- imgRect = image4.copyRect(Rect(7,6,10,10));
- CPPUNIT_ASSERT_EQUAL( 3, static_cast<int>(imgRect->width()));
- CPPUNIT_ASSERT_EQUAL( 4, static_cast<int>(imgRect->height()));
- CPPUNIT_ASSERT_EQUAL( 68, static_cast<int>(imgRect->getPixel(0,0)));
- CPPUNIT_ASSERT_EQUAL( 69, static_cast<int>(imgRect->getPixel(1,0)));
- CPPUNIT_ASSERT_EQUAL( 70, static_cast<int>(imgRect->getPixel(2,0)));
- CPPUNIT_ASSERT_EQUAL( 98, static_cast<int>(imgRect->getPixel(0,3)));
- CPPUNIT_ASSERT_EQUAL( 99, static_cast<int>(imgRect->getPixel(1,3)));
- CPPUNIT_ASSERT_EQUAL(100, static_cast<int>(imgRect->getPixel(2,3)));
- }
- void ImageTest::testGrayImage16s()
- {
- GrayImage16s image(4,3);
- CPPUNIT_ASSERT_EQUAL(4, image.width());
- CPPUNIT_ASSERT_EQUAL(3, image.height());
- CPPUNIT_ASSERT_THROW(image.setPixel(4, 2, 11), ImageException);
- CPPUNIT_ASSERT_THROW(image.setPixel(3, 3, 12), ImageException);
- CPPUNIT_ASSERT_NO_THROW(image.setPixelSave(4, 2, 11));
- CPPUNIT_ASSERT_NO_THROW(image.setPixelSave(3, 3, 12));
- CPPUNIT_ASSERT_THROW(image.getPixel(4, 2), ImageException);
- CPPUNIT_ASSERT_THROW(image.getPixel(3, 3), ImageException);
- image.setPixel(0, 0, 11);
- image.setPixel(3, 2, 12);
- CPPUNIT_ASSERT_EQUAL(11, (int) image.getPixel(0, 0));
- CPPUNIT_ASSERT_EQUAL(12, (int) image.getPixel(3, 2));
- CPPUNIT_ASSERT_EQUAL(12, (int) *image.getPixelPointerXY(3, 2));
- GrayImage16s image2(image, GrayColorImageCommonImplementation::noAlignment);
- CPPUNIT_ASSERT_EQUAL(12, (int) image.getPixel(3, 2));
- CPPUNIT_ASSERT_EQUAL(12, (int) image2.getPixel(3, 2));
- }
- void ImageTest::testColorImage()
- {
- ColorImage image(4,3);
- CPPUNIT_ASSERT_EQUAL(4, image.width());
- CPPUNIT_ASSERT_EQUAL(3, image.height());
- CPPUNIT_ASSERT_THROW(image.setPixel(4, 2, 1, 11), ImageException);
- CPPUNIT_ASSERT_THROW(image.setPixel(3, 3, 2, 12), ImageException);
- CPPUNIT_ASSERT_NO_THROW(image.setPixelSave(4, 2, 11, 12, 13));
- CPPUNIT_ASSERT_NO_THROW(image.setPixelSave(3, 3, 11, 12, 13));
- CPPUNIT_ASSERT_THROW(image.getPixel(4, 2, 1), ImageException);
- CPPUNIT_ASSERT_THROW(image.getPixel(3, 3, 2), ImageException);
- image.setPixel(0, 0, 11, 12, 13);
- image.setPixel(3, 2, 25, 26, 27);
- CPPUNIT_ASSERT_EQUAL(11, (int) image.getPixel(0, 0, 0));
- CPPUNIT_ASSERT_EQUAL(12, (int) image.getPixel(0, 0, 1));
- CPPUNIT_ASSERT_EQUAL(13, (int) image.getPixel(0, 0, 2));
- CPPUNIT_ASSERT_EQUAL(25, (int) image.getPixel(3, 2, 0));
- CPPUNIT_ASSERT_EQUAL(26, (int) image.getPixel(3, 2, 1));
- CPPUNIT_ASSERT_EQUAL(27, (int) image.getPixel(3, 2, 2));
- CPPUNIT_ASSERT_EQUAL(25, (int) *image.getPixelPointerXY(3, 2));
- ColorImage image2(image, GrayColorImageCommonImplementation::noAlignment);
- CPPUNIT_ASSERT_EQUAL(26, (int) image.getPixel(3, 2, 1));
- CPPUNIT_ASSERT_EQUAL(26, (int) image2.getPixel(3, 2, 1));
- // set
- ColorImage image3(10,10);
- image3.set(15,64,253);
- for(int y=0; y<image3.height(); ++y)
- for(int x=0; x<image3.width(); ++x)
- {
- CPPUNIT_ASSERT_EQUAL( 15, static_cast<int>(image3.getPixelQuick(x,y,0)));
- CPPUNIT_ASSERT_EQUAL( 64, static_cast<int>(image3.getPixelQuick(x,y,1)));
- CPPUNIT_ASSERT_EQUAL(253, static_cast<int>(image3.getPixelQuick(x,y,2)));
- }
- // operator =, ==, !=
- {
- ColorImage img(2,2);
- img.set(0,0,0);
- img.setPixelQuick(1,1,0,133);
- ColorImage fimg(3,2);
- CPPUNIT_ASSERT_THROW(fimg==img, ImageException);
- CPPUNIT_ASSERT_THROW(fimg!=img, ImageException);
- ColorImage timg;
- timg = img;
- CPPUNIT_ASSERT_NO_THROW(img==timg);
- CPPUNIT_ASSERT_EQUAL(true, img==timg);
- CPPUNIT_ASSERT_EQUAL(false, img!=timg);
- timg.setPixelQuick(0,0,3,99);
- CPPUNIT_ASSERT_NO_THROW(img!=timg);
- CPPUNIT_ASSERT_EQUAL(true, img!=timg);
- CPPUNIT_ASSERT_EQUAL(false, img==timg);
- }
- // Kontruktor: create a ColorImageT from 3 Channel Images ImageT
- {
- // exception
- {
- Image chan1, chan2, chan3;
- chan1 = Image(5,6);
- chan2 = Image(6,7);
- chan3 = Image(7,8);
- CPPUNIT_ASSERT_THROW(ColorImage c(chan1,chan2,chan3), ImageException);
- }
- // <Ipp8u>
- {
- Image chan1(5,5), chan2(5,5), chan3(5,5);
- chan1.set(100);
- chan2.set(150);
- chan3.set(200);
- for(int y=0; y<chan1.height(); ++y)
- for(int x=0; x<chan1.width(); ++x)
- {
- CPPUNIT_ASSERT_EQUAL(100, static_cast<int>(chan1.getPixelQuick(x,y)));
- CPPUNIT_ASSERT_EQUAL(150, static_cast<int>(chan2.getPixelQuick(x,y)));
- CPPUNIT_ASSERT_EQUAL(200, static_cast<int>(chan3.getPixelQuick(x,y)));
- }
- ColorImage c(chan1,chan2,chan3);
- CPPUNIT_ASSERT_EQUAL(static_cast<int>(c.width()), static_cast<int>(chan1.width()));
- CPPUNIT_ASSERT_EQUAL(static_cast<int>(c.height()), static_cast<int>(chan1.height()));
- for(int y=0; y<c.height(); ++y)
- for(int x=0; x<c.width(); ++x)
- {
- CPPUNIT_ASSERT_EQUAL(100, static_cast<int>(c.getPixelQuick(x,y,0)));
- CPPUNIT_ASSERT_EQUAL(150, static_cast<int>(c.getPixelQuick(x,y,1)));
- CPPUNIT_ASSERT_EQUAL(200, static_cast<int>(c.getPixelQuick(x,y,2)));
- }
- }
- // FloatImage
- {
- FloatImage chan1(5,5), chan2(5,5), chan3(5,5);
- chan1.set( -50.0);
- chan2.set(1000.0);
- chan3.set( 1.0);
- for(int y=0; y<chan1.height(); ++y)
- for(int x=0; x<chan1.width(); ++x)
- {
- CPPUNIT_ASSERT_EQUAL( -50.0, static_cast<double>(chan1.getPixelQuick(x,y)));
- CPPUNIT_ASSERT_EQUAL(1000.0, static_cast<double>(chan2.getPixelQuick(x,y)));
- CPPUNIT_ASSERT_EQUAL( 1.0, static_cast<double>(chan3.getPixelQuick(x,y)));
- }
- ColorImageT<float> c(chan1,chan2,chan3);
- for(int y=0; y<c.height(); ++y)
- for(int x=0; x<c.width(); ++x)
- {
- CPPUNIT_ASSERT_DOUBLES_EQUAL( -50.0, static_cast<double>(c.getPixelQuick(x,y,0)), 0.0);
- CPPUNIT_ASSERT_DOUBLES_EQUAL(1000.0, static_cast<double>(c.getPixelQuick(x,y,1)), 0.0);
- CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, static_cast<double>(c.getPixelQuick(x,y,2)), 0.0);
- }
- }
- // Ipp16s
- {
- ImageT<Ipp16s> chan1(5,5), chan2(5,5), chan3(5,5);
- chan1.set(-255);
- chan2.set(+255);
- chan3.set( 0);
- for(int y=0; y<chan1.height(); ++y)
- for(int x=0; x<chan1.width(); ++x)
- {
- CPPUNIT_ASSERT_EQUAL(-255, static_cast<int>(chan1.getPixelQuick(x,y)));
- CPPUNIT_ASSERT_EQUAL(+255, static_cast<int>(chan2.getPixelQuick(x,y)));
- CPPUNIT_ASSERT_EQUAL( 0, static_cast<int>(chan3.getPixelQuick(x,y)));
- }
- ColorImageT<Ipp16s> c(chan1,chan2,chan3);
- for(int y=0; y<c.height(); ++y)
- for(int x=0; x<c.width(); ++x)
- {
- CPPUNIT_ASSERT_EQUAL(-255, static_cast<int>(c.getPixelQuick(x,y,0)));
- CPPUNIT_ASSERT_EQUAL(+255, static_cast<int>(c.getPixelQuick(x,y,1)));
- CPPUNIT_ASSERT_EQUAL( 0, static_cast<int>(c.getPixelQuick(x,y,2)));
- }
- }
- }
- // getChannel
- {
- // exception
- {
- ColorImage c(5,5);
- CPPUNIT_ASSERT_NO_THROW(c.getChannel(0));
- CPPUNIT_ASSERT_NO_THROW(c.getChannel(1));
- CPPUNIT_ASSERT_NO_THROW(c.getChannel(2));
- CPPUNIT_ASSERT_THROW(c.getChannel( 3), ImageException);
- CPPUNIT_ASSERT_THROW(c.getChannel( 4), ImageException);
- }
- // <Ipp8u>
- {
- ColorImage c(5,5);
- for(int y=0; y<c.height(); ++y)
- for(int x=0; x<c.width(); ++x)
- c.setPixelQuick(x,y, 100,150,200);
- Image* g0 = c.getChannel(0);
- Image* g1 = c.getChannel(1);
- Image* g2 = c.getChannel(2);
- for(int y=0; y<c.height(); ++y)
- for(int x=0; x<c.width(); ++x)
- {
- CPPUNIT_ASSERT_EQUAL(100, static_cast<int>(g0->getPixelQuick(x,y)));
- CPPUNIT_ASSERT_EQUAL(150, static_cast<int>(g1->getPixelQuick(x,y)));
- CPPUNIT_ASSERT_EQUAL(200, static_cast<int>(g2->getPixelQuick(x,y)));
- }
- }
- // FloatImage
- {
- ColorImageT<float> c(5,5);
- for(int y=0; y<c.height(); ++y)
- for(int x=0; x<c.width(); ++x)
- c.setPixelQuick(x,y, -1000.125, 1.32678, +999.999);
- FloatImage* g0 = c.getChannel(0);
- FloatImage* g1 = c.getChannel(1);
- FloatImage* g2 = c.getChannel(2);
- for(int y=0; y<c.height(); ++y)
- for(int x=0; x<c.width(); ++x)
- {
- CPPUNIT_ASSERT_DOUBLES_EQUAL(-1000.125, static_cast<double>(g0->getPixelQuick(x,y)), 0.001);
- CPPUNIT_ASSERT_DOUBLES_EQUAL(1.32678 , static_cast<double>(g1->getPixelQuick(x,y)), 0.00001);
- CPPUNIT_ASSERT_DOUBLES_EQUAL(999.999 , static_cast<double>(g2->getPixelQuick(x,y)), 0.001);
- }
- }
- // <Ipp16s>
- {
- ColorImageT<Ipp16s> c(5,5);
- for(int y=0; y<c.height(); ++y)
- for(int x=0; x<c.width(); ++x)
- c.setPixelQuick(x,y, -255, 0, +255);
- GrayImage16s* g0 = c.getChannel(0);
- GrayImage16s* g1 = c.getChannel(1);
- GrayImage16s* g2 = c.getChannel(2);
- for(int y=0; y<c.height(); ++y)
- for(int x=0; x<c.width(); ++x)
- {
- CPPUNIT_ASSERT_EQUAL(-255, static_cast<int>(g0->getPixelQuick(x,y)));
- CPPUNIT_ASSERT_EQUAL( 0, static_cast<int>(g1->getPixelQuick(x,y)));
- CPPUNIT_ASSERT_EQUAL(+255, static_cast<int>(g2->getPixelQuick(x,y)));
- }
- }
- }
- // mirror
- ColorImage image4(5,5);
- for(int y=0; y<image4.height(); ++y)
- for(int x=0; x<image4.width(); ++x)
- image4.setPixelQuick(x,y,1*(x+1+y*5),3*(x+1+y*5),6*(x+1+y*5));
- image4.mirror(ippAxsHorizontal);
- CPPUNIT_ASSERT_EQUAL( 21, static_cast<int>(image4.getPixelQuick(0,0,0)));
- CPPUNIT_ASSERT_EQUAL( 16, static_cast<int>(image4.getPixelQuick(0,1,0)));
- CPPUNIT_ASSERT_EQUAL( 11, static_cast<int>(image4.getPixelQuick(0,2,0)));
- CPPUNIT_ASSERT_EQUAL( 6, static_cast<int>(image4.getPixelQuick(0,3,0)));
- CPPUNIT_ASSERT_EQUAL( 1, static_cast<int>(image4.getPixelQuick(0,4,0)));
- CPPUNIT_ASSERT_EQUAL( 22, static_cast<int>(image4.getPixelQuick(1,0,0)));
- CPPUNIT_ASSERT_EQUAL( 17, static_cast<int>(image4.getPixelQuick(1,1,0)));
- CPPUNIT_ASSERT_EQUAL( 12, static_cast<int>(image4.getPixelQuick(1,2,0)));
- CPPUNIT_ASSERT_EQUAL( 7, static_cast<int>(image4.getPixelQuick(1,3,0)));
- CPPUNIT_ASSERT_EQUAL( 2, static_cast<int>(image4.getPixelQuick(1,4,0)));
- image4.mirror(ippAxsHorizontal);
- image4.mirror(ippAxsVertical);
- CPPUNIT_ASSERT_EQUAL( 5, static_cast<int>(image4.getPixelQuick(0,0,0)));
- CPPUNIT_ASSERT_EQUAL( 10, static_cast<int>(image4.getPixelQuick(0,1,0)));
- CPPUNIT_ASSERT_EQUAL( 15, static_cast<int>(image4.getPixelQuick(0,2,0)));
- CPPUNIT_ASSERT_EQUAL( 20, static_cast<int>(image4.getPixelQuick(0,3,0)));
- CPPUNIT_ASSERT_EQUAL( 25, static_cast<int>(image4.getPixelQuick(0,4,0)));
- CPPUNIT_ASSERT_EQUAL( 4, static_cast<int>(image4.getPixelQuick(1,0,0)));
- CPPUNIT_ASSERT_EQUAL( 9, static_cast<int>(image4.getPixelQuick(1,1,0)));
- CPPUNIT_ASSERT_EQUAL( 14, static_cast<int>(image4.getPixelQuick(1,2,0)));
- CPPUNIT_ASSERT_EQUAL( 19, static_cast<int>(image4.getPixelQuick(1,3,0)));
- CPPUNIT_ASSERT_EQUAL( 24, static_cast<int>(image4.getPixelQuick(1,4,0)));
- image4.mirror(ippAxsVertical);
- image4.mirror(ippAxsBoth);
- CPPUNIT_ASSERT_EQUAL( 25, static_cast<int>(image4.getPixelQuick(0,0,0)));
- CPPUNIT_ASSERT_EQUAL( 19, static_cast<int>(image4.getPixelQuick(1,1,0)));
- CPPUNIT_ASSERT_EQUAL( 13, static_cast<int>(image4.getPixelQuick(2,2,0)));
- CPPUNIT_ASSERT_EQUAL( 7, static_cast<int>(image4.getPixelQuick(3,3,0)));
- CPPUNIT_ASSERT_EQUAL( 1, static_cast<int>(image4.getPixelQuick(4,4,0)));
- CPPUNIT_ASSERT_EQUAL( 21, static_cast<int>(image4.getPixelQuick(4,0,0)));
- CPPUNIT_ASSERT_EQUAL( 17, static_cast<int>(image4.getPixelQuick(3,1,0)));
- CPPUNIT_ASSERT_EQUAL( 13, static_cast<int>(image4.getPixelQuick(2,2,0)));
- CPPUNIT_ASSERT_EQUAL( 9, static_cast<int>(image4.getPixelQuick(1,3,0)));
- CPPUNIT_ASSERT_EQUAL( 5, static_cast<int>(image4.getPixelQuick(0,4,0)));
- image4.mirror(ippAxsBoth);
- // transpose
- image4.transpose();
- for(int y=0; y<image4.height(); ++y)
- for(int x=0; x<image4.width(); ++x)
- {
- CPPUNIT_ASSERT_EQUAL( 1*(y+1+x*5), static_cast<int>(image4.getPixelQuick(x,y,0)));
- CPPUNIT_ASSERT_EQUAL( 3*(y+1+x*5), static_cast<int>(image4.getPixelQuick(x,y,1)));
- CPPUNIT_ASSERT_EQUAL( 6*(y+1+x*5), static_cast<int>(image4.getPixelQuick(x,y,2)));
- }
- // copyRect
- image4 = ColorImage(10,10);
- for(int y=0; y<image4.width(); ++y)
- for(int x=0; x<image4.width(); ++x)
- image4.setPixelQuick(x,y,x+1+y*image4.width(),(x+1+y*image4.width())/2,(x+1+y*image4.width())/3);
- ColorImage* imgRect = image4.copyRect(Rect(2,3,4,3));
- CPPUNIT_ASSERT_EQUAL(4, static_cast<int>(imgRect->width()));
- CPPUNIT_ASSERT_EQUAL(3, static_cast<int>(imgRect->height()));
- for(int y=0; y<imgRect->height(); ++y)
- for(int x=0; x<imgRect->width(); ++x)
- {
- CPPUNIT_ASSERT_EQUAL(((x+3)+(y+3)*image4.width())/1, static_cast<int>(imgRect->getPixelQuick(x,y,0)));
- CPPUNIT_ASSERT_EQUAL(((x+3)+(y+3)*image4.width())/2, static_cast<int>(imgRect->getPixelQuick(x,y,1)));
- CPPUNIT_ASSERT_EQUAL(((x+3)+(y+3)*image4.width())/3, static_cast<int>(imgRect->getPixelQuick(x,y,2)));
- }
- imgRect = image4.copyRect(Rect(7,6,10,10));
- CPPUNIT_ASSERT_EQUAL( 3, static_cast<int>(imgRect->width()));
- CPPUNIT_ASSERT_EQUAL( 4, static_cast<int>(imgRect->height()));
- CPPUNIT_ASSERT_EQUAL( 68/1, static_cast<int>(imgRect->getPixelQuick(0,0,0)));
- CPPUNIT_ASSERT_EQUAL( 68/2, static_cast<int>(imgRect->getPixelQuick(0,0,1)));
- CPPUNIT_ASSERT_EQUAL( 68/3, static_cast<int>(imgRect->getPixelQuick(0,0,2)));
- CPPUNIT_ASSERT_EQUAL( 69/1, static_cast<int>(imgRect->getPixelQuick(1,0,0)));
- CPPUNIT_ASSERT_EQUAL( 69/2, static_cast<int>(imgRect->getPixelQuick(1,0,1)));
- CPPUNIT_ASSERT_EQUAL( 69/3, static_cast<int>(imgRect->getPixelQuick(1,0,2)));
- CPPUNIT_ASSERT_EQUAL( 70/1, static_cast<int>(imgRect->getPixelQuick(2,0,0)));
- CPPUNIT_ASSERT_EQUAL( 70/2, static_cast<int>(imgRect->getPixelQuick(2,0,1)));
- CPPUNIT_ASSERT_EQUAL( 70/3, static_cast<int>(imgRect->getPixelQuick(2,0,2)));
- CPPUNIT_ASSERT_EQUAL( 98/1, static_cast<int>(imgRect->getPixelQuick(0,3,0)));
- CPPUNIT_ASSERT_EQUAL( 98/2, static_cast<int>(imgRect->getPixelQuick(0,3,1)));
- CPPUNIT_ASSERT_EQUAL( 98/3, static_cast<int>(imgRect->getPixelQuick(0,3,2)));
- CPPUNIT_ASSERT_EQUAL( 99/1, static_cast<int>(imgRect->getPixelQuick(1,3,0)));
- CPPUNIT_ASSERT_EQUAL( 99/2, static_cast<int>(imgRect->getPixelQuick(1,3,1)));
- CPPUNIT_ASSERT_EQUAL( 99/3, static_cast<int>(imgRect->getPixelQuick(1,3,2)));
- CPPUNIT_ASSERT_EQUAL(100/1, static_cast<int>(imgRect->getPixelQuick(2,3,0)));
- CPPUNIT_ASSERT_EQUAL(100/2, static_cast<int>(imgRect->getPixelQuick(2,3,1)));
- CPPUNIT_ASSERT_EQUAL(100/3, static_cast<int>(imgRect->getPixelQuick(2,3,2)));
- }
- void ImageTest::testImageTools()
- {
- Image image(2,3);
- image.setPixel(0,0, 50);
- image.setPixel(1,0, 66);
- image.setPixel(0,1,100);
- image.setPixel(1,1,111);
- image.setPixel(0,2,200);
- image.setPixel(1,2,211);
- // min, max, minmax
- CPPUNIT_ASSERT_EQUAL(50 , static_cast<int>(image.min()));
- CPPUNIT_ASSERT_EQUAL(211, static_cast<int>(image.max()));
- Ipp8u min = 0;
- Ipp8u max = 0;
- image.minmax(min,max);
- CPPUNIT_ASSERT_EQUAL(50 , static_cast<int>(min));
- CPPUNIT_ASSERT_EQUAL(211, static_cast<int>(max));
- // minIndex, maxIndex, minmaxIndex
- Coord IMin = image.minIndex();
- Coord IMax = image.maxIndex();
- CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(IMin.x));
- CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(IMin.y));
- CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(IMax.x));
- CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(IMax.y));
- image.minmaxIndex(IMin,IMax);
- CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(IMin.x));
- CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(IMin.y));
- CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(IMax.x));
- CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(IMax.y));
- // sum,mean,meanStdDev
- CPPUNIT_ASSERT_EQUAL(738, static_cast<int>(image.sum()));
- CPPUNIT_ASSERT_EQUAL(123, static_cast<int>(image.mean()));
- double mean, stddev;
- image.meanStdDev(mean, stddev);
- CPPUNIT_ASSERT_EQUAL(123, static_cast<int>(mean));
- CPPUNIT_ASSERT_DOUBLES_EQUAL(61.811542, stddev, 0.01);
- // transpose
- image = Image(3,4);
- CPPUNIT_ASSERT_THROW(image.transpose(), ImageException);
- for(int s=1; s<=8; ++s)
- {
- image = Image(s,s);
- for(int j=0; j<image.height(); ++j)
- for(int i=0; i<image.width(); ++i)
- image.setPixel(i,j, (i+1)+j*(image.width()));
- image.transpose();
- for(int j=0; j<image.height(); ++j)
- for(int i=0; i<image.width(); ++i)
- CPPUNIT_ASSERT_EQUAL(static_cast<int>((j+1)+i*(image.width())), static_cast<int>(image.getPixel(i,j)));
- }
- // abs
- GrayImage16s* img16s = new GrayImage16s(2,3);
- img16s->setPixel(0,0, -50);
- img16s->setPixel(1,0, 33);
- img16s->setPixel(0,1, 0);
- img16s->setPixel(1,1, -0);
- img16s->setPixel(0,2, 255);
- img16s->setPixel(1,2,-255);
- img16s->abs();
- CPPUNIT_ASSERT_EQUAL( 50, static_cast<int>(img16s->getPixel(0,0)));
- CPPUNIT_ASSERT_EQUAL( 33, static_cast<int>(img16s->getPixel(1,0)));
- CPPUNIT_ASSERT_EQUAL( 0, static_cast<int>(img16s->getPixel(0,1)));
- CPPUNIT_ASSERT_EQUAL( 0, static_cast<int>(img16s->getPixel(1,1)));
- CPPUNIT_ASSERT_EQUAL(255, static_cast<int>(img16s->getPixel(0,2)));
- CPPUNIT_ASSERT_EQUAL(255, static_cast<int>(img16s->getPixel(1,2)));
- }
- void ImageTest::testGrayImageBilinear()
- {
- Image image(4,3);
- for (int y = 0; y < image.height(); y++) {
- for (int x = 0; x < image.width(); x++) {
- image.setPixel(x, y, y * image.width() + x);
- }
- }
-
- for (int y = 0; y < image.height(); y++) {
- for (int x = 0; x < image.width(); x++) {
- CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(double(y * image.width() + x),
- image.getPixelBilinear(x, y), 1E-20);
- }
- }
- for (int y = 0; y < image.height()-1; y++) {
- for (int x = 0; x < image.width()-1; x++) {
- CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(
- double(y * image.width() + x) + 0.5,
- image.getPixelBilinear(float(x)+0.5, y), 1E-20);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(
- double(y * image.width() + x) + double(image.width()) / 2.0,
- image.getPixelBilinear(x, float(y) + 0.5), 1E-20);
- }
- }
- }
|