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)
00064 {
00065
00066 addProperty< QVImage<uChar,3> >("Input image", inputFlag|outputFlag);
00067 addProperty< CulebrillaContainer >("Culebrillas container", inputFlag);
00068 addProperty< QSet<Culebrilla> >("Planar culebrillas", inputFlag);
00069
00070
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
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
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