Esempio n. 1
0
//#include "ransacLine.h"
int DispWay(Mat ImgL, Mat ImgR, String outputPath, int ID, Vec4i &line, cv::Mat &Result, cv::Mat &Disp, cv::Mat &Mask)
{
	int Height = ImgL.rows;
	int Width = ImgL.cols;

	Mat Obst;
	int hl;
	ImgL.copyTo(Obst);
	ImgL.copyTo(Result);
	cvtColor(ImgL, ImgL, CV_BGR2GRAY);
	cvtColor(ImgR, ImgR, CV_BGR2GRAY);
	image<uchar> *I1 = nullptr;
	mat2image(ImgL, I1);
	image<uchar> *I2 = nullptr;
	mat2image(ImgR, I2);
	// process
	image<uchar> *D1;
	image<uchar> *D2;
	computeDisparity(I1, I2, D1, D2);
	//Mat imgDisp1, imgDisp2;
	//computeDisparity(ImgL, ImgR, imgDisp1, imgDisp2);
	image<uchar> *vdipa;
	int threshold = 5;
	vdipa = v_disparity(D1, threshold);
	Mat	VDisp;
	VDisp.create(vdipa->height(), vdipa->width(), CV_8UC1);
	for (int i = 0; i < vdipa->height(); i++)
		for (int j = 0; j < vdipa->width(); j++)
			VDisp.at<uchar>(i, j) = vdipa->data[i*vdipa->width() + j];
	//imshow("VDisp", VDisp);
	//operate_vdisparity(VDisp, line);
	//cv::line(VDisp, Point(line[0], line[1]), Point(line[2], line[3]), Scalar(0, 0, 255), 1, CV_AA);
	//imshow("VDisp",VDisp);
	/*line = detectline(vdipa, outputPath, ID);*/
	line = detectline_in_vdisparity(vdipa, outputPath, ID); //by ransac
	float t = (line[3] - line[1]);
	float k = (line[2] - line[0]) / t;
	float b = line[0] - k*line[1];
	hl = -b / k;

	for (int j = 0; j < Width; j++)
	{
		Result.at<cv::Vec3b>(hl, j)[2] = 255;
	}
	for (int i = 0; i < Height; i++)
	{
		for (int j = 0; j < Width; j++)
		{
			int d_value = D1->data[i*Width + j];
			Disp.at<uchar>(i, j) = d_value;
			int v_value = k*i + b;
			//if (abs(d_value - v_value)<5 + v_value / 20)
			if (abs(d_value - v_value) < (float)v_value*0.2)
			{
				Result.at<cv::Vec3b>(i, j)[2] = 255;
			}
			if (abs(d_value - v_value) > (float)v_value*0.4 && d_value)
			{
				Mask.at<uchar>(i, j) = 0;
				Obst.at<cv::Vec3b>(i, j)[1] = 0;
				//Obst.at<cv::Vec3b>(i, j)[2] = 255;
			}
			else
			{
				Mask.at<uchar>(i, j) = 1;
			}

		}
	}
	stringstream ss;
	ss << ID;
	//imshow("Disp", Disp);
	imwrite(outputPath + ss.str() + "_Disp.png", Disp);

	imwrite(outputPath + "disparity\\" + ss.str() + "_Disp.png", Disp);
	//imshow("Obst", Obst);

	//imwrite(outputPath + ss.str() + "_DispRoad.png", Result);
	return hl;
}
Esempio n. 2
0
void StereoCapturer::computeStereo(float dt, bool display, bool save_Rectified){

	double min, max;
	cv::Mat imgD,imgD2;
	int i,w,h;
	char buffer[255];


	if(intrinsics.empty()||extrinsics.empty()){
		cerr<< "Missing intrinsic and extrinsic file, file paths required at constructor"<<endl;
		return;
	}

	while(true){
		if(current > finish){
			cout<<"End of frames"<<endl;
			return;
		}

		sprintf(buffer,"%s%i.%s",loadS1.data(),current,ext1.data());
		imgLeft = cv::imread(buffer,0);							//left Image
		if(imgLeft.data == NULL){
			cout<< "image "<< buffer<<" not found"<<endl;
			return;
		}

		sprintf(buffer,"%s%i.%s",loadS2.data(),current,ext2.data());
		imgRight = cv::imread(buffer,0);							//Right Image
		if(imgRight.data == NULL){
			cout<< "image "<< buffer<<" not found"<<endl;
			return;
		}


		cout<<"Read image "<<loadS1.data()<<current<<endl;

		boost::posix_time::ptime startTime, stopTime;


		startTime = boost::posix_time::microsec_clock::local_time();
		computeDisparity(imgDepth);
		stopTime = boost::posix_time::microsec_clock::local_time();
		boost::posix_time::time_duration dur = stopTime - startTime;
		double milliseconds = dur.total_milliseconds();
		cout<<"Time Passed "<<milliseconds<<" Milli seconds"<<endl;

		cout<<(int)imgDepth.step1(1)<<endl;

		cv::minMaxIdx(imgDepth, &min, &max);
		cout<<min<<"    "<<max<<endl;
		cout<<255 / (max-min)<<endl;
		cv::normalize(imgDepth,imgD,0, 255,NORM_MINMAX,CV_8UC1);
		cv::minMaxIdx(imgD, &min, &max);
		cout<<min<<"    "<<max<<endl;

		sprintf(buffer,"disparity/depthImage%i.png",current);
		imwrite(buffer,imgD);									//Viewing purposes
		sprintf(buffer,"disparity/depthImage%i.DMX",current);
		saveMat(imgDepth,buffer,dt);							//Processing purposes

		if(save_Rectified)
		{
			sprintf(buffer,"%sRectified%i.png",loadS1.data(),current);
			imwrite(buffer,imgLeftr);
			sprintf(buffer,"%sRectified%i.png",loadS2.data(),current);
			imwrite(buffer,imgRight);
		}
		if(display){

			w = imgRightr.size().width;
			h = imgRightr.size().height;
			Mat canvas;
			Mat tImage;
			canvas.create(h, w*2, CV_8UC3);

			Mat canvasPart = canvas(Rect(0, 0, w, h));
			cvtColor(imgLeftr, tImage, COLOR_GRAY2BGR);
			resize(tImage, canvasPart, canvasPart.size(), 0, 0, CV_INTER_AREA);
			Rect vroil(cvRound(roi1.x), cvRound(roi1.y),
					cvRound(roi1.width), cvRound(roi1.height));
			rectangle(canvasPart, vroil, Scalar(0,0,255), 3, 8);
			canvasPart = canvas(Rect(w, 0, w, h));
			cvtColor(imgRightr, tImage, COLOR_GRAY2BGR);
			resize(tImage, canvasPart, canvasPart.size(), 0, 0, CV_INTER_AREA);
			Rect vroir(cvRound(roi2.x), cvRound(roi2.y),
					cvRound(roi2.width), cvRound(roi2.height));
			rectangle(canvasPart, vroir, Scalar(0,0,255), 3, 8);




			for( i = 0; i < canvas.rows; i += 16 )
				line(canvas, Point(0, i), Point(canvas.cols, i), Scalar(0, 255, 0), 1, 8);

			//			imshow("left Image",imgLeftr);
			//			imshow("right Image", imgRightr);
			imshow("Rectified Images",canvas);
			imshow("Depth image",imgD);
			waitKey(0);
		}
		current++;
	}
}