
Recientemente en Habré se publicó un artículo con la filmación del cielo nocturno
"La vida nocturna del cielo o en busca de las Perseidas" . Pero los propios autores no pudieron detectar los meteoros por la gran cantidad de satélites, que en este caso son objetos falsos. No pude pasar, decidí procesar el video y ver si hay Perseidas en él o no.
Para comenzar, construí un video sin un fondo estrella usando la herramienta BackgroundCubtractorMOG2 de OpenCV. Para suprimir las respuestas de "ruido" causadas por la compresión de video, apliqué un filtro de promedio con una ventana de 3x3 a cada cuadro, y apliqué la operación de
apertura a la imagen de objetos en movimiento para suprimir pequeñas respuestas. Sin filtrado preliminar, los "correctores" eran claramente visibles en el mapa de movimiento. Eliminé los primeros tres cuadros del procesamiento, porque el algoritmo BackgroundSubtractorMOG2 en ellos aún no ha acumulado información de tráfico.
codigoint generate_meteor_lines() { cv::VideoCapture cap; cap.open(videoname); if(!cap.isOpened()) { printf("can not open video file\n"); return -1; } cv::namedWindow("foreground image", cv::WINDOW_NORMAL); cv::BackgroundSubtractorMOG2 bg_model; double learning_rate = 0.1; bg_model.setBool("detectShadows", false); bg_model.setDouble("backgroundRatio", 0.95); bg_model.setInt("history", 5); bg_model.setInt("fVarInit", 20); cv::Mat img, fgmask, fgimg; std::cerr << "\n"; for(int frames_count = 0;; ++frames_count) { cap >> img; if(img.empty()) { break; } cv::blur(img, img, cv::Size(3, 3)); if(fgimg.empty()) { fgimg.create(img.size(), img.type()); } bg_model(img, fgmask, learning_rate); fgimg = cv::Scalar::all(0); img.copyTo(fgimg, fgmask); cv::threshold(fgimg, fgimg, 20, 255, cv::THRESH_BINARY); cv::Mat mask(cv::Mat::ones(3, 3, CV_8UC1)); mask.at<char>(0, 0) = 0; mask.at<char>(2, 0) = 0; mask.at<char>(0, 2) = 0; mask.at<char>(2, 2) = 0; cv::erode(fgimg, fgimg, mask); cv::dilate(fgimg, fgimg, mask); if(frames_count > 3) { detect_lines(fgimg); } imshow("foreground image", fgimg); std::cerr << "Frame ##" << frames_count << "\n"; char k = (char)cv::waitKey(30); if(k == 27) { break; } } return 0; }
Video después de restar el fondo
Después de verlo, quedó claro que hay meteoros en el video, pero su velocidad es mucho mayor (según
Wikipedia , la velocidad aparente del meteorito Perseida es de aproximadamente 59 km / s) que la velocidad de los satélites, y aparecen en uno o dos cuadros consecutivos en forma de una línea corta. Entonces, el ojo simplemente no tiene tiempo de reaccionar ante el fondo de estrellas brillantes.
Meteorito después de restar el fondo Además, para que sea más conveniente buscar meteoros, hice un detector simple basado en la transformación de Hough, que destacó los meteoros en el video original.
Código std::vector<cv::Vec4i> detect_lines(cv::Mat& img) { cv::Mat coi; std::vector<cv::Vec4i> lines; cv::extractChannel(img, coi, 0); double rho_res = 1; double theta_res = CV_PI / 180; double ithreshold = 50; double minLinLength = 50; double maxLineGap = 2; cv::HoughLinesP(coi, lines, rho_res, theta_res, ithreshold, minLinLength, maxLineGap); draw_line_circles(lines, img); return lines; }
E incluso con retroiluminación, es difícil ver si hubo un meteorito o no. Solo si se ve en modo de cuadro congelado. Pero después de aplicar todos los rastros de meteoros a la imagen de fondo, tenemos una imagen más holística. Se ve que la mayoría de los objetos "vuela" desde la esquina inferior derecha de la imagen.
Todos los meteoros detectados Pero, ¿existe realmente la constelación de Perseo?
No soy un gran conocedor del cielo estrellado, así que tomé una captura de pantalla del
programa Stellarium con las Perseidas en el centro. Seleccioné manualmente una cantidad de estrellas que podría igualar en la imagen de fondo "promedio" del video y una captura de pantalla del Stellarium. Basado en las coordenadas de los puntos de enlace, construí un polinomio bidimensional de tercer grado y conté la posición de la fuente Perseida desde la imagen de referencia hasta el fondo del video. La fuente de las Perseidas, para mi sorpresa, resultó estar en la esquina inferior derecha.
'Cielo de referencia' con etiquetas de estrellas Imagen de Perseida con etiquetas de estrellas Por lo tanto, los autores del artículo no fueron en vano buscando. Perseidas fueron!