Jump to content
Compvision.ru
Kvothe

Распознавание неба

Recommended Posts

Всем привет. Передо мной стоит задача распознать небо на фото. Использую Visual Studio и OpenCV. Из результата хорошо видно что область неба более темная, но что делать дальше? Результатом может быть просто выведение части изображения с небом в отдельный файл.  Возможно я спрашиваю что то совсем простое так как новичок в opencv. И за это прошу прощения. Заранее спасибо.

int main(int argc, char** argv)
{
	
	
	Mat src, src_gray;

	Mat grad;
	int scale = 1;
	int delta = 0;
	int ddepth = CV_64F;
	
	
	//int c;

	/// Load an image
	src = imread("1.jpg");;
	
	GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);

	/// Convert it to gray
	cvtColor(src, src_gray, CV_BGR2GRAY);

	
		/// Generate grad_x and grad_y
		Mat gradient_image;
		Mat grad_x, grad_y;
		Mat abs_grad_x, abs_grad_y;

		/// Gradient X
		//Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT );
		Sobel(src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_REPLICATE);
		convertScaleAbs(grad_x, abs_grad_x);

		/// Gradient Y
		//Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT );
		Sobel(src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_REPLICATE);
		convertScaleAbs(grad_y, abs_grad_y);
		pow(abs_grad_x, 2, abs_grad_x);
		pow(abs_grad_y, 2, abs_grad_y);
		add(abs_grad_x, abs_grad_y, grad);
		
		gradient_image = grad;


		double ret, thresh = threshold(src_gray, src_gray,50, 255, THRESH_BINARY);
		imshow("gray", ret);
		imshow("sobel", src_gray);
	//imshow("sobel", grad);
	//imwrite("image01_res2.jpg", grad);
	//imshow("cobel1", abs_grad_y);
	//imshow("cobel2", abs_grad_x);
	
	imshow("orig", src);
	

	
	waitKey(0);
	return 0;
}

 

32.JPG

image01_res22.jpg

Share this post


Link to post
Share on other sites

Надо искать небо исключительно на одном этом фото? Или задача стоит более обшно? А облака относятся к небу? Небо может быть розовым-закатным, пасмурным, вечерним, со звёздами? Оно будет на каждом изображении гарантировано? Или могут быть изображения без неба?

Странный подход, когда отбрасывается вся цветовая информация, казалось бы, небо голубое и это можно использовать.

Я бы начал разработку с классики: создания и разметки наиболее поного датасета. Тогда проблема станет видна во всей своей красе.

Share this post


Link to post
Share on other sites
9 часов назад, Nuzhny сказал:

Надо искать небо исключительно на одном этом фото? Или задача стоит более обшно? А облака относятся к небу? Небо может быть розовым-закатным, пасмурным, вечерним, со звёздами? Оно будет на каждом изображении гарантировано? Или могут быть изображения без неба?

Странный подход, когда отбрасывается вся цветовая информация, казалось бы, небо голубое и это можно использовать.

Я бы начал разработку с классики: создания и разметки наиболее поного датасета. Тогда проблема станет видна во всей своей красе.

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

house.jpg

image01_res2.jpg

sunset.jpg

image01_res2.jpg

Share this post


Link to post
Share on other sites

Я соглашусь с mult1plexer, сейчас нейросети дадут результат быстрый и устойчивый. Можно начать с U-net, для бинарной сегментации небо-не небо зайдёт хорошо и будет работать быстро. К тому же ему не нужен огромный датасет.

Если же хочется классического компьютерного зрения, то всё будет сложнее. Но это точно не уход в серый с градиентами. Я бы всё равно собрал небольшой датасет, обучил бы на нём очень быстрый decision tree из OpenCV, а дальше watershed. Decision tree можно обучать как просто на цвете пикселя, так и градиент туда добавить, если хочется.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×