
Recentemente, em Habré, foi publicado um artigo com as filmagens do céu noturno
"A vida noturna do céu ou em busca de Perseidas" . Mas os próprios autores não conseguiram detectar os meteoros devido ao grande número de satélites, que neste caso são objetos falsos. Não consegui passar, decidi processar o vídeo e ver se há Perseids nele ou não.
Para começar, criei um vídeo sem fundo estrela usando a ferramenta BackgroundCubtractorMOG2 da OpenCV. Para suprimir as respostas de "ruído" causadas pela compactação de vídeo, apliquei um filtro de média com uma janela 3x3 em cada quadro e apliquei a operação de
abertura à imagem de objetos em movimento para suprimir pequenas respostas. Sem filtragem preliminar, as "damas" eram claramente visíveis no mapa de movimento. Eu removi os três primeiros quadros do processamento, porque o algoritmo BackgroundSubtractorMOG2 neles ainda não acumulou informações de tráfego.
códigoint 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; }
Vídeo depois de subtrair o plano de fundo
Após a visualização, ficou claro que existem meteoros no vídeo, mas sua velocidade é muito maior (de acordo com a
Wikipedia , a velocidade aparente do meteoro Perseid é de cerca de 59 km / s) que a velocidade dos satélites, e eles aparecem em um ou dois quadros consecutivos na forma de uma linha curta. Portanto, o olho simplesmente não tem tempo para reagir a eles contra o fundo de estrelas brilhantes.
Meteoro depois de subtrair o fundo Além disso, para tornar mais conveniente a pesquisa de meteoros, criei um detector simples baseado na transformação de Hough, que destacou os meteoros no vídeo 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 mesmo com a luz de fundo, é difícil ver se houve um meteoro ou não. Somente se visualizado no modo de quadro congelado. Mas depois de aplicar todos os traços de meteoros à imagem de fundo, temos uma imagem mais holística. É visto que a maioria dos objetos "voa" a partir do canto inferior direito da imagem.
Todos os meteoros detectados Mas existe realmente a constelação de Perseu?
Como não sou um conhecedor forte do céu estrelado, tirei uma captura de tela do
programa Stellarium com os Perseids no centro. Selecionei manualmente um número de estrelas que poderia corresponder à imagem de fundo "média" do vídeo e uma captura de tela do Stellarium. Com base nas coordenadas dos pontos de amarração, construí um polinômio bidimensional do terceiro grau e contei a posição da fonte Perseid da imagem de referência ao fundo do vídeo. A fonte Perseid, para minha surpresa, acabou por estar no canto inferior direito.
'Céu de referência' com marcas de estrela Imagem de Perseid com etiquetas em estrela Portanto, os autores do artigo não foram em vão à procura. Perseids foram!