examples/realtimePlanarRectificator/culebrillasdisplayer.cpp

00001 /*
00002  *      Copyright (C) 2007. PARP Research Group.
00003  *      <http://perception.inf.um.es>
00004  *      University of Murcia, Spain.
00005  *
00006  *      This file is part of the QVision library.
00007  *
00008  *      QVision is free software: you can redistribute it and/or modify
00009  *      it under the terms of the GNU Lesser General Public License as
00010  *      published by the Free Software Foundation, version 3 of the License.
00011  *
00012  *      QVision is distributed in the hope that it will be useful,
00013  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  *      GNU Lesser General Public License for more details.
00016  *
00017  *      You should have received a copy of the GNU Lesser General Public
00018  *      License along with QVision. If not, see <http://www.gnu.org/licenses/>.
00019  */
00020 
00024 
00025 #include <culebrillasdisplayer.h>
00026 
00028 
00029 QList<QPointF> denormalizePoints(const QVImage<uChar> &image, const QList<QPointF> &points)
00030         {
00031         const double rows = image.getRows(), cols = image.getCols(), factor = cols/2;
00032         QList<QPointF> pointFList;
00033         foreach(QPointF point, points)
00034                 pointFList.append(QPointF(cols/2 + point.x()*factor, rows/2 -point.y()*factor));
00035         return pointFList;
00036         }
00037 
00038 QList< QList<QPointF> > denormalizePointLists(const QVImage<uChar> &image, const QList< QList<QPointF> > &pointLists)
00039         {
00040         QList< QList<QPointF> > result;
00041         foreach( const QList<QPointF> pointList, pointLists)
00042                 result.append(denormalizePoints(image, pointList));
00043         return result;
00044         }
00045 
00046 QVImage<uChar,3> pasteImages(const QVImage<uChar,3> &image1, const QVImage<uChar,3> &image2)
00047         {
00048         Q_ASSERT(image1.getRows() == image2.getRows());
00049         Q_ASSERT(image1.getCols() == image2.getCols());
00050 
00051         const uInt rows = image1.getRows(), cols = image1.getCols();
00052         QVImage<uChar,3> result(cols*2, rows);
00053 
00054         Copy(image1, result);
00055         result.setAnchor(cols, 0);
00056         Copy(image2, result);
00057         result.resetROI();
00058         result.resetAnchor();
00059 
00060         return result;
00061         }
00062 
00063 CulebrillasDisplayer::CulebrillasDisplayer(const QString name): QVWorker(name)
00064         {
00065         // Input properties
00066         addProperty< QVImage<uChar,3> >("Input image", inputFlag|outputFlag);
00067         addProperty< CulebrillaContainer >("Culebrillas container", inputFlag);
00068         addProperty< QSet<Culebrilla> >("Planar culebrillas", inputFlag);
00069 
00070         // Output properties
00071         addProperty< QVImage<uChar,3> >("Matching image", outputFlag);
00072         addProperty< QList< QList< QPointF > > >("Culebrillas", outputFlag);
00073         addProperty< QList< QList< QPointF > > >("Planar culebrillas polylines", outputFlag);
00074 
00075         addProperty< QList< QPointF > >("Culebrillas head", outputFlag);
00076         addProperty< QList< QPointF > >("Planar culebrillas polylines head", outputFlag);
00077         }
00078 
00079 void CulebrillasDisplayer::iterate()
00080         {
00081         // 0. Read input property values.
00082         const QVImage<uChar,3>  image = getPropertyValue< QVImage<uChar,3> >("Input image");
00083         const CulebrillaContainer culebrillaContainer = getPropertyValue< CulebrillaContainer >("Culebrillas container");
00084         const QSet<Culebrilla> planarCulebrillas = getPropertyValue< QSet<Culebrilla> >("Planar culebrillas");
00085         const int rows = image.getRows(), cols = image.getCols();
00086 
00087         timeFlag("Read input property values");
00088 
00089         // 1. Export culebrillas as polylines.
00090         const int lastFrame = culebrillaContainer.getActualFrameNumber();
00091         QList< QList< QPointF > > culebrillas, planarCulebrillasPolylines;
00092         QList< QPointF > culebrillasHead, planarCulebrillasPolylinesHead;
00093 
00094         foreach(Culebrilla culebrilla, culebrillaContainer.getCulebrillas())
00095                 if (planarCulebrillas.contains(culebrilla))
00096                         {
00097                         planarCulebrillasPolylines.append(culebrilla.getPointList());
00098                         planarCulebrillasPolylinesHead.append(culebrilla.getPointAtFrame(lastFrame));
00099                         }
00100                 else    {
00101                         culebrillas.append(culebrilla.getPointList());
00102                         culebrillasHead.append(culebrilla.getPointAtFrame(lastFrame));
00103                         }
00104 
00105         setPropertyValue< QList< QList< QPointF > > >("Culebrillas", denormalizePointLists(image, culebrillas));
00106         setPropertyValue< QList< QList< QPointF > > >("Planar culebrillas polylines", denormalizePointLists(image, planarCulebrillasPolylines));
00107 
00108         setPropertyValue< QList< QPointF > >("Culebrillas head", denormalizePoints(image, culebrillasHead));
00109         setPropertyValue< QList< QPointF > >("Planar culebrillas polylines head", denormalizePoints(image, planarCulebrillasPolylinesHead));
00110 
00111         timeFlag("Export culebrillas as polylines");
00112         }
00113 

Generated on Thu Jul 17 17:23:27 2008 for QVision by  doxygen 1.5.3