class StereoPlotTest : public IKeyHandler
{
private:
Flag close;
Flag pause;
Flag gray;
private:
Bool supportOnKey() {return TRUE;}
void onKey(String port, Key key)
{
switch (key)
{ case K_Esc:
close.set();
break;
case K_P:
if (pause.check()) pause.reset();
else pause.set();
break;
case K_G:
if (gray.check()) gray.reset();
else gray.set();
break;
default:
break;
}
}
public:
void runWithID(Image frameL,Image frameR)
{
Log log(moduleName, "Program.run");
// offsets to make things move
Float pointOffset = 0.0f;
// initialize view point controller
Point3D position = Point3D(0.0f, 12.f, 12.0f); // a 175cm man
ViewPointController controller(ViewPoint(position, RotateAngles(), 75.0f));
controller.setDefaultKeyHandler(this);
controller.setSensitivity(3);
// initialize plotter
StereoPlot plot;
plot.setAntiAliasing(0);
// main loop
Timer offsetTimer;
UInt imageCount = 0;
Image image, imageInfo;
Float HRadius =2.0f ,WRadius = 5.0f;
Module3D BufObject;
PointsArray ArrayPlot=BufObject.ArrayWithIndex(frameL,frameR,HRadius,WRadius);
Array<Point3DIndexType> HNode = ArrayPlot.Harris;
Array<Point3DIndexType> WNodeMin = ArrayPlot.WaterMin;
Array<Point3DIndexType> WNodeMax = ArrayPlot.WaterMax;
UInt line_num = HNode.size();
Image frame1;
frame1.copy(frameL);
TrianglePlot TriangleC=BufObject.TriangleArray(frameL,frameR,HRadius,WRadius);
// create windows
Window window;
window.setKeyHandler(&controller);
window.create("3D Plot");
while (!close.check())
{
// set the view point
plot.setViewPoint(controller.viewPoint());
if (!pause.check())
{
// plot points
//show the waternode
Array<Point3D> WaterNode(WNodeMin.size());
for (UInt i = 0; i < WNodeMin.size(); i++)
{
WaterNode[i] = WNodeMin[i].Coordi3D;
}
plot.plotPoints("watershed min node", WaterNode, ColorRGB(0,0,255), 0.01f);
Array<Point3D> WaterNodemax(WNodeMax.size());
for (UInt i = 0; i < WNodeMax.size(); i++)
{
WaterNodemax[i] = WNodeMax[i].Coordi3D;
}
plot.plotPoints("watershed max node", WaterNodemax, ColorRGB(255,0,0), 0.01f);
Array<Point3D> HarrisNode(HNode.size());
for (UInt i = 0; i < HNode.size(); i++)
{
HarrisNode[i] = HNode[i].Coordi3D;
}
plot.plotPoints("harris node", HarrisNode, ColorRGB(0,255,0), 0.01f);
Array<Line3D> lines(line_num);
UInt linesCount = 0;
for ( UInt l = 0,i = 0; i < WNodeMin.size(); i++)
{
for (UInt k = 0;k < HNode.size(); k++)
{
if( HNode[k].Coordi3D.x >0 &&HNode[k].MinIndex > 0 && WNodeMin[i].MinIndex == HNode[k].MinIndex)
{
lines[l].p1 = WNodeMin[i].Coordi3D;
lines[l].p2 = HNode[k].Coordi3D;
l++;
linesCount++;
}
}
}
plot.plotLines("spiral",lines, ColorRGB(0,0,255), 0.01f);
Array<Line3D> linesmax(line_num);
for ( UInt l = 0,i = 0; i < WNodeMax.size(); i++)
{
for (UInt k = 0;k < HNode.size(); k++)
{
if( HNode[k].Coordi3D.x >0 &&HNode[k].MaxIndex > 0 && WNodeMax[i].MaxIndex == HNode[k].MaxIndex)
{
linesmax[l].p1 = WNodeMax[i].Coordi3D;
linesmax[l].p2 = HNode[k].Coordi3D;
l++;
//console::print("here");
//waitKey();
}
}
}
plot.plotLines("spiral max",linesmax, ColorRGB(0,255,0), 0.01f);
plot.plotTextures("min",TriangleC.TriMin3D,TriangleC.TriMin2D,frame1);
plot.plotTextures("max",TriangleC.TriMax3D,TriangleC.TriMax2D,frame1);
}
// query the rendered frame
while (!plot.getImageFrame(image, imageCount)) thread::waitTime(1);
// show the frame
if (gray.check())
{
Image imageGray;
image.convertTo(imageGray, PF_ByteGray);
window.writeImageFrame(imageGray);
}
else window.writeImageFrame(image);
// update offsets and wait time
Float offsetTime = offsetTimer.check();
offsetTimer.start();
if (!pause.check())
{
pointOffset += 0.01f * offsetTime;
}
thread::waitTime(1);
}
}
代码排版
最新推荐文章于 2025-02-12 08:29:30 发布