Kehidupan malam di langit atau mencari pengolahan Perseid

Baru-baru ini di Habré sebuah artikel diterbitkan dengan pembuatan film langit malam "Kehidupan malam di langit atau mencari Perseids . " Tetapi penulis sendiri tidak dapat mendeteksi meteor itu sendiri karena banyaknya satelit, yang dalam hal ini adalah objek palsu. Saya tidak bisa lewat, saya memutuskan untuk memproses video, dan melihat apakah ada Perseids di dalamnya atau tidak.

Untuk memulai, saya membuat video tanpa latar belakang bintang menggunakan alat BackgroundCubtractorMOG2 dari OpenCV. Untuk menekan respons "noise" yang disebabkan oleh kompresi video, saya menerapkan filter rata-rata dengan jendela 3x3 untuk setiap frame, dan menerapkan operasi pembukaan pada gambar objek yang bergerak untuk menekan respons kecil. Tanpa penyaringan awal, "catur" terlihat jelas di peta gerak. Saya menghapus tiga frame pertama dari pemrosesan, karena Algoritma BackgroundSubtractorMOG2 pada mereka belum mengumpulkan informasi lalu lintas.

kode
int 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 setelah mengurangi latar belakang


Setelah melihatnya menjadi jelas bahwa ada meteor pada video, tetapi kecepatan mereka jauh lebih tinggi (menurut Wikipedia , kecepatan nyata dari meteor Perseid adalah sekitar 59 km / s) daripada kecepatan satelit, dan mereka muncul pada satu atau dua frame berturut-turut dalam bentuk garis pendek. Jadi mata tidak punya waktu untuk bereaksi terhadap mereka dengan latar belakang bintang-bintang yang cerah.

Meteor setelah mengurangi latar belakang
Meteor


Selanjutnya, untuk membuatnya lebih mudah untuk mencari meteor, saya membuat detektor sederhana berdasarkan transformasi Hough, yang menyoroti meteor dalam video asli.

Kode
 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; } 



Dan bahkan dengan lampu latar, sulit untuk melihat apakah ada meteor atau tidak. Hanya jika dilihat dalam mode bingkai beku. Tetapi setelah menerapkan semua jejak meteor ke gambar latar belakang, kami memiliki gambar yang lebih holistik. Terlihat bahwa sebagian besar benda "terbang" dari kanan bawah gambar.

Semua meteor yang terdeteksi



Tetapi apakah benar-benar ada rasi Perseus?
Saya bukan ahli yang kuat dari langit berbintang, jadi saya mengambil screenshot dari program Stellarium dengan Perseids di tengah. Saya secara manual memilih sejumlah bintang yang dapat saya cocokkan dengan gambar latar “rata-rata” dari video dan tangkapan layar dari Stellarium. Berdasarkan koordinat titik ikatan, saya membangun polinomial dua dimensi dari tingkat ketiga dan menghitung posisi sumber Perseid dari gambar referensi ke latar belakang dari video. Sumber Perseid, yang mengejutkan saya, ternyata berada di sudut kanan bawah.

'Referensi langit' dengan tanda bintang



Gambar Perseid dengan Label Bintang



Jadi penulis artikel itu tidak sia-sia mencari. Para pengidap itu!

Source: https://habr.com/ru/post/id421463/


All Articles