00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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), sumCulebrillas(0), sumMeanCulebrillaSize(0), iterations(0)
00064 {
00065
00066 addProperty< QVImage<uChar,3> >("Input image", inputFlag|outputFlag);
00067 addProperty< CulebrillaContainer >("Culebrillas container", inputFlag);
00068
00069
00070 addProperty< QVImage<uChar,3> >("Matching image", outputFlag);
00071 addProperty< QList< QList< QPointF > > >("Culebrillas", outputFlag);
00072
00073 addProperty< QList< QPointF > >("Culebrillas head", outputFlag);
00074 }
00075
00076 void CulebrillasDisplayer::iterate()
00077 {
00078 iterations++;
00079
00080
00081 const QVImage<uChar,3> image = getPropertyValue< QVImage<uChar,3> >("Input image");
00082 const CulebrillaContainer culebrillaContainer = getPropertyValue< CulebrillaContainer >("Culebrillas container");
00083 const int rows = image.getRows(), cols = image.getCols();
00084
00085 timeFlag("Read input property values");
00086
00087
00088 const int lastFrame = culebrillaContainer.getActualFrameNumber();
00089 QList< QList< QPointF > > culebrillas, planarCulebrillasPolylines;
00090 QList< QPointF > culebrillasHead, planarCulebrillasPolylinesHead;
00091
00092 double accum = 0;
00093 foreach(Culebrilla culebrilla, culebrillaContainer.getCulebrillas())
00094 {
00095 QList<QPointF> culebrillaPointList = culebrilla.getPointList();
00096 accum += culebrillaPointList.size();
00097 culebrillas.append(culebrillaPointList);
00098 culebrillasHead.append(culebrilla.getPointAtFrame(lastFrame));
00099 }
00100
00101 double totalNumCulebrillas = culebrillas.size(), meanCulebrillaSize = (totalNumCulebrillas>0)?accum / totalNumCulebrillas:0;
00102
00103 sumCulebrillas += totalNumCulebrillas;
00104 sumMeanCulebrillaSize += meanCulebrillaSize;
00105
00106
00107 std::cout << "Mean culebrillas:\t" << (totalNumCulebrillas / (double) iterations)
00108 << "\t; Mean mean culebrilla size =\t" << (meanCulebrillaSize / (double) iterations) << std::endl;
00109 setPropertyValue< QList< QList< QPointF > > >("Culebrillas", culebrillas);
00110 setPropertyValue< QList< QPointF > >("Culebrillas head", culebrillasHead);
00111
00112
00113 timeFlag("Export culebrillas as polylines");
00114 }
00115