
في الآونة الأخيرة على حبري نُشر مقال عن تصوير سماء الليل
"الحياة الليلية للسماء أو بحثًا عن البرسيم" . لكن المؤلفين أنفسهم لم يتمكنوا من اكتشاف النيازك نفسها بسبب العدد الكبير من الأقمار الصناعية ، والتي في هذه الحالة هي أشياء كاذبة. لم أستطع المرور ، قررت معالجة الفيديو ، ومعرفة ما إذا كان هناك Perseids عليه أم لا.
للبدء ، أنشأت فيديو بدون خلفية نجمة باستخدام أداة BackgroundCubtractorMOG2 من OpenCV. لقمع استجابات "الضجيج" الناتجة عن ضغط الفيديو ، قمت بتطبيق مرشح متوسط مع نافذة 3x3 على كل إطار ، وقمت بتطبيق عملية
الفتح على صورة الأجسام المتحركة لقمع الاستجابات الصغيرة. بدون تصفية أولية ، كانت "الداما" مرئية بوضوح على خريطة الحركة. أزلت الإطارات الثلاثة الأولى من المعالجة ، لأن لم تجمع خوارزمية BackgroundSubtractorMOG2 عليها معلومات حركة المرور حتى الآن.
كود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; }
فيديو بعد طرح الخلفية
بعد المشاهدة ، أصبح من الواضح أن هناك نيازك على الفيديو ، ولكن سرعتها أعلى بكثير (وفقًا
لويكيبيديا ، فإن سرعة نيزك Perseid الظاهري تبلغ حوالي 59 كم / ثانية) من سرعة الأقمار الصناعية ، وتظهر على إطار واحد أو إطارين متتاليين في شكل خط قصير. لذا فإن العين ببساطة ليس لديها الوقت للتفاعل معها على خلفية النجوم الساطعة.
علاوة على ذلك ، من أجل جعل البحث عن النيازك أكثر سهولة ، قمت بعمل كاشف بسيط يعتمد على تحويل Hough ، والذي سلط الضوء على النيازك في الفيديو الأصلي.
كود 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; }
وحتى مع الإضاءة الخلفية ، من الصعب معرفة ما إذا كان هناك نيزك أم لا. فقط إذا تم عرضها في وضع إطار التجميد. ولكن بعد تطبيق كل آثار النيازك على صورة الخلفية ، لدينا صورة أكثر شمولية. يُلاحظ أن معظم الأشياء "تطير" من أسفل يمين الصورة.
ولكن هل هناك بالفعل كوكبة بيرسيوس؟
أنا لست خبيرا قويا في السماء المرصعة بالنجوم ، لذلك أخذت لقطة شاشة من
برنامج Stellarium مع Perseids في المركز. لقد اخترت يدويًا عددًا من النجوم التي يمكنني مطابقتها على صورة الخلفية "المتوسطة" من الفيديو ولقطة شاشة من Stellarium. استنادًا إلى إحداثيات نقاط التعادل ، قمت ببناء كثيرات الحدود ثنائية الأبعاد من الدرجة الثالثة واحتسبت موضع مصدر Perseid من الصورة المرجعية إلى الخلفية من الفيديو. لدهشتي أن مصدر بيرسيد اتضح أنه في الركن الأيمن السفلي.
"سماء مرجعية" مع علامات نجمة صورة البرسيم مع ملصقات نجمة لذا فإن مؤلفي المقالة لم يبحثوا دون جدوى. كانت البرسيم!