Я только начал обработку изображений, и я ищу способы или идеи для обнаружения объектов. Моя конечная цель - выделить статические дорожные объекты, такие как указатели полосы движения и знаки со стрелками. На данный момент моя методология включает шумоподавление, выравнивание гистограммы, определение порогов и рисование контуров на изображении. Я прошу совета и помощи в фильтрации изображений и заранее всех благодарю.
Вопрос 1: Как удалить нежелательный фон, как видно из обработанного изображения 1, и сохранить маркеры полосы и знаки стрелки?
Исходное изображение 1:
![](https://i.stack.imgur.com/LOuvL.png)
Обработанное изображение 1:
![](https://i.stack.imgur.com/XseaT.png)
Вопрос 2: Как видно на исходном изображении 2, воздействие света отличается от исходного изображения 1, и, следовательно, алгоритм не смог обнаружить маркеры полосы и знаки стрелки. Как сделать алгоритм более устойчивым к воздействию света?
Исходное изображение 2:
![](https://i.stack.imgur.com/4kJSg.png)
Обработанное изображение 2:
![](https://i.stack.imgur.com/kQF0D.png)
код:
// 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);