void TrackerMedianFlowImpl::check_NCC(const Mat& oldImage,const Mat& newImage,
        const std::vector<Point2f>& oldPoints,const std::vector<Point2f>& newPoints,std::vector<bool>& status){

    std::vector<float> NCC(oldPoints.size(),0.0);
    Size patch(30,30);
    Mat p1,p2;

	for (int i = 0; i < (int)oldPoints.size(); i++) {
		getRectSubPix( oldImage, patch, oldPoints[i],p1);
		getRectSubPix( newImage, patch, newPoints[i],p2);

        const int N=900;
        double s1=sum(p1)(0),s2=sum(p2)(0);
        double n1=norm(p1),n2=norm(p2);
        double prod=p1.dot(p2);
        double sq1=sqrt(n1*n1-s1*s1/N),sq2=sqrt(n2*n2-s2*s2/N);
        double ares=(sq2==0)?sq1/abs(sq1):(prod-s1*s2/N)/sq1/sq2;

		NCC[i] = (float)ares;
	}
	float median = getMedian(NCC);
	for(int i = 0; i < (int)oldPoints.size(); i++) {
        status[i] = status[i] && (NCC[i]>median);
	}
}
Example #2
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->openButton, SIGNAL(clicked()), this, SLOT(Open()));
    connect(ui->saveButton, SIGNAL(clicked()), this, SLOT(SaveImage()));
    connect(ui->SSDButton, SIGNAL(clicked()), this, SLOT(SSD()));
    connect(ui->SADButton, SIGNAL(clicked()), this, SLOT(SAD()));
    connect(ui->NCCButton, SIGNAL(clicked()), this, SLOT(NCC()));
    connect(ui->GTCheckBox, SIGNAL(clicked()), this, SLOT(GTOnOff()));
    connect(ui->gaussianButton, SIGNAL(clicked()), this, SLOT(Gaussian()));
    connect(ui->maxButton, SIGNAL(clicked()), this, SLOT(FindBestDisparity()));
    connect(ui->bilateralButton, SIGNAL(clicked()), this, SLOT(Bilateral()));
    connect(ui->segmentButton, SIGNAL(clicked()), this, SLOT(Segment()));
    connect(ui->renderButton, SIGNAL(clicked()), this, SLOT(Render()));
    connect(ui->renderSlider, SIGNAL(valueChanged(int)), this, SLOT(RenderSlider(int)));
    connect(ui->magicButton, SIGNAL(clicked()), this, SLOT(MagicStereo(int)));

    ui->GTCheckBox->setChecked(true);
    ui->pixelErrorLabel->setText("");
    ui->gaussianSigmaSpinBox->setValue(1.0);
    ui->biSigmaSSpinBox->setValue(1.0);
    ui->biSigmaISpinBox->setValue(20.0);
    ui->renderSlider->setValue(100);
    ui->SADOffsetBox->setValue(2);
    ui->SSDOffsetBox->setValue(2);
    ui->NCCOffsetBox->setValue(2);
    ui->segmentGridBox->setValue(20);
    ui->segmentColorSpinBox->setValue(20.0);
    ui->segmentSpatialSpinBox->setValue(6.0);
    ui->segmentIterBox->setValue(4);

    m_Image1Display.setParent(ui->tab);
    m_Image2Display.setParent(ui->tab_2);
    m_GTDisplay.setParent(ui->tab_4);
    m_DisparityDisplay.setParent(ui->tab_3);
    m_ErrorDisplay.setParent(ui->tab_5);
    m_RenderDisplay.setParent(ui->tab_6);
    m_SegmentDisplay.setParent(ui->tab_7);

    m_Image1Display.window = this;
    m_Image2Display.window = this;
    m_GTDisplay.window = this;
    m_DisparityDisplay.window = this;
    m_ErrorDisplay.window = this;
    m_RenderDisplay.window = this;
    m_SegmentDisplay.window = this;

    ui->tabWidget->setCurrentIndex(0);

    m_LastRow = 0;
    m_SegmentIteration = 0;
    m_MatchCost = NULL;



}
Example #3
0
		// Calculate Relative similarity of the patch (NN-Model)
		double TLDDetector::Sr(const Mat_<uchar>& patch)
		{
			double splus = 0.0, sminus = 0.0;
			Mat_<uchar> modelSample(STANDARD_PATCH_SIZE, STANDARD_PATCH_SIZE);
			for (int i = 0; i < *posNum; i++)
			{
				modelSample.data = &(posExp->data[i * 225]);
				splus = std::max(splus, 0.5 * (NCC(modelSample, patch) + 1.0));
			}
			for (int i = 0; i < *negNum; i++)
			{
				modelSample.data = &(negExp->data[i * 225]);
				sminus = std::max(sminus, 0.5 * (NCC(modelSample, patch) + 1.0));
			}

			if (splus + sminus == 0.0)
				return 0.0;
			return splus / (sminus + splus);
		}
Example #4
0
		// Calculate Conservative similarity of the patch (NN-Model)
		double TLDDetector::Sc(const Mat_<uchar>& patch)
		{
			double splus = 0.0, sminus = 0.0;
			Mat_<uchar> modelSample(STANDARD_PATCH_SIZE, STANDARD_PATCH_SIZE);
			int med = getMedian((*timeStampsPositive));
			for (int i = 0; i < *posNum; i++)
			{
				if ((int)(*timeStampsPositive)[i] <= med)
				{
					modelSample.data = &(posExp->data[i * 225]);
					splus = std::max(splus, 0.5 * (NCC(modelSample, patch) + 1.0));
				}
			}
			for (int i = 0; i < *negNum; i++)
			{
				modelSample.data = &(negExp->data[i * 225]);
				sminus = std::max(sminus, 0.5 * (NCC(modelSample, patch) + 1.0));
			}

			if (splus + sminus == 0.0)
				return 0.0;

			return splus / (sminus + splus);
		}