Обнаружение маркера полосы на наборе данных KITTI - PullRequest
0 голосов
/ 04 сентября 2018

Я только начал обработку изображений, и я ищу способы или идеи для обнаружения объектов. Моя конечная цель - выделить статические дорожные объекты, такие как указатели полосы движения и знаки со стрелками. На данный момент моя методология включает шумоподавление, выравнивание гистограммы, определение порогов и рисование контуров на изображении. Я прошу совета и помощи в фильтрации изображений и заранее всех благодарю.

Вопрос 1: Как удалить нежелательный фон, как видно из обработанного изображения 1, и сохранить маркеры полосы и знаки стрелки?

Исходное изображение 1:

Обработанное изображение 1:

Вопрос 2: Как видно на исходном изображении 2, воздействие света отличается от исходного изображения 1, и, следовательно, алгоритм не смог обнаружить маркеры полосы и знаки стрелки. Как сделать алгоритм более устойчивым к воздействию света?

Исходное изображение 2:

Обработанное изображение 2:

код:

// Load the image
Mat image = imread(imagePath,IMREAD_COLOR);

//Grayscale image
Mat imageGrayscale(image.size(),image.type());  
cvtColor(image,imageGrayscale,COLOR_BGR2GRAY);
fastNlMeansDenoising(imageGrayscale,imageGrayscale);
equalizeHist(imageGrayscale,imageGrayscale);

//Calculate the average grayscale intensity
int total=0, avgIntensity=0;
for(int i=0; i<imageGrayscale.rows; i++){
    for(int j=0; j<imageGrayscale.cols; j++){
        total += imageGrayscale.at<uchar>(i,j);
    }
}
avgIntensity = total/(imageGrayscale.rows*imageGrayscale.cols);

//Create a binary image
Mat imageBinary(image.size(),image.type());
threshold(imageGrayscale,imageBinary,avgIntensity*1.8,avgIntensity*3,THRESH_BINARY);

//Draw lines
//Mat imageCanny(image.size(),image.type());
//Canny(imageBinary,imageCanny,100,300,3);

//Find contours from the binary image
vector< vector<Point> >contours;
findContours(imageBinary,contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
for(int i=0; i<contours.size(); i++){
    drawContours(image,contours,i,Scalar(0,0,255),-1);
}

//Display the image
namedWindow("Image",WINDOW_AUTOSIZE);
imshow("Image",image);
waitKey(0);
...