Wednesday 9 August 2017

Moving average opencv


Penyaringan gambar dapat dikelompokkan menjadi dua tergantung pada efeknya: Low pass filters (Smoothing) Low pass filtering (alias smoothing), digunakan untuk menghilangkan noise frekuensi spasial tinggi dari citra digital. Filter low-pass biasanya menggunakan operator jendela bergerak yang mempengaruhi satu piksel gambar pada satu waktu, mengubah nilainya dengan beberapa fungsi dari area lokal (jendela) piksel. Operator bergerak di atas gambar untuk memengaruhi semua piksel pada gambar. Filter lolos tinggi (Edge Detection, Sharpening) Filter high-pass dapat digunakan untuk membuat gambar tampak lebih tajam. Filter ini menekankan detail halus pada gambar - kebalikan dari filter low-pass. High-pass filtering bekerja dengan cara yang sama seperti low-pass filtering, ia hanya menggunakan kernel konvolusi yang berbeda. Saat menyaring gambar, setiap piksel dipengaruhi oleh tetangganya, dan efek penyaringan bersih adalah memindahkan informasi di sekitar gambar. Dalam bab ini, gunakan gambar ini dengan baik: pencarian situs bogotobogo: pencarian situs bogotobogo: Penyaringan rata mudah dilakukan. Ini digunakan sebagai metode perataan gambar, mengurangi variasi intensitas antara satu pixel dan selanjutnya menghasilkan pengurangan noise pada gambar. Gagasan pemfilteran berarti hanya untuk mengganti setiap nilai piksel pada gambar dengan nilai rata-rata (rata-rata) tetangganya, termasuk dirinya sendiri. Ini memiliki efek menghilangkan nilai piksel yang tidak representatif dari lingkungannya. Penyaringan rata-rata biasanya dianggap sebagai filter konvolusi. Seperti konvolusi lainnya, ini berbasis di sekitar kernel, yang mewakili bentuk dan ukuran lingkungan untuk dijadikan sampel saat menghitung mean. Seringkali digunakan kernel 3 kali 3 kuadrat, seperti yang ditunjukkan di bawah ini: Mf adalah filter rata-rata: Filter2 () didefinisikan sebagai: Y filter2 (h, X) menyaring data di X dengan filter FIR dua dimensi di Matriks h. Ini menghitung hasilnya, Y, menggunakan korelasi dua dimensi, dan mengembalikan bagian tengah dari korelasi yang berukuran sama dengan X. Ia mengembalikan bagian Y yang ditentukan oleh parameter bentuk. Bentuk adalah string dengan salah satu dari nilai-nilai ini: penuh. Mengembalikan korelasi dua dimensi penuh. Dalam kasus ini, Y lebih besar dari X. sama. (Default) Mengembalikan bagian sentral dari korelasi. Dalam kasus ini, ukuran Y sama dengan X. valid. Mengembalikan hanya bagian korelasi yang dihitung tanpa tepi berlapis nol. Dalam kasus ini, Y lebih kecil dari X. Sekarang kita ingin menerapkan kernel yang didefinisikan pada bagian sebelumnya dengan menggunakan filter2 (): Kita dapat melihat gambar yang disaring (kanan) telah buram sedikit dibandingkan dengan input asli (kiri) . Seperti disebutkan sebelumnya, low pass filter bisa digunakan denoising. Mari kita mengujinya. Pertama, untuk membuat masukan sedikit kotor, kita menyemprot beberapa lada dan garam pada gambar, dan kemudian menerapkan filter rata-rata: Ini memiliki efek pada kebisingan garam dan merica tapi tidak banyak. Itu hanya membuat mereka kabur. Bagaimana dengan pencarian Matlabs built-in median filter bogotobogo pencarian situs: pencarian situs bogotobogo: Median filter - medfilt2 () Berikut adalah scriptnya: Jauh lebih baik. Berbeda dengan filter sebelumnya yang hanya menggunakan nilai rata-rata, kali ini kita menggunakan median. Median filtering adalah operasi nonlinier yang sering digunakan dalam pengolahan citra untuk mengurangi kebisingan garam dan lada. Perhatikan juga bahwa medfilt2 () adalah filter 2-D, jadi hanya bekerja untuk gambar grayscale. Untuk menghilangkan noise untuk gambar RGB, tolong lanjutkan ke akhir bab ini: Menghapus noise pada gambar RGB. Matlab menyediakan metode untuk membuat filter 2-D yang telah ditentukan. Fspecial (): h fspecial (type) menciptakan filter dua dimensi h dari tipe yang ditentukan. Ini mengembalikan h sebagai kernel korelasi, yang merupakan bentuk yang tepat untuk digunakan dengan imfilter (). Tipe adalah string yang memiliki salah satu dari nilai berikut: Pemrosesan Gambar dan Video Matlab OpenCV 3 - pengolahan video gambar Pengolahan gambar dan video OpenCV 3 dengan kalibrasi PythonCamera Dengan Kamera OpenCV telah ada sejak lama. Namun, dengan diperkenalkannya kamera lubang jarum murah di akhir abad 20, mereka menjadi kejadian biasa dalam kehidupan kita sehari-hari. Sayangnya, murahnya ini datang dengan harganya: distorsi yang signifikan. Untungnya, ini adalah konstanta dan dengan kalibrasi dan beberapa remapping kita bisa memperbaikinya. Selanjutnya, dengan kalibrasi Anda juga dapat menentukan hubungan antara unit alami (piksel) kamera dan unit dunia nyata (misalnya milimeter). Untuk distorsi OpenCV memperhitungkan faktor radial dan tangensial. Untuk faktor radial satu menggunakan rumus berikut: Jadi untuk titik piksel lama pada koordinat pada gambar masukan, posisinya pada gambar keluaran yang dikoreksi akan menjadi. Adanya distorsi radial bermanifestasi dalam bentuk efek 8220barrel8221 atau 8220fish-eye8221. Distorsi tangensial terjadi karena lensa pengambilan foto tidak sejajar dengan bidang pencitraan. Hal ini dapat dikoreksi melalui formula: Jadi kita memiliki lima parameter distorsi yang di OpenCV disajikan sebagai satu baris matriks dengan 5 kolom: Sekarang untuk konversi satuan kita menggunakan rumus berikut: Proses penentuan dua matriks ini adalah kalibrasi. Perhitungan parameter ini dilakukan melalui persamaan geometris dasar. Persamaan yang digunakan bergantung pada objek kalibrasi yang dipilih. Saat ini OpenCV mendukung tiga jenis objek untuk kalibrasi: Klasik hitam putih papan catur Pola lingkaran simetris Pola lingkaran asimetris Pada dasarnya, Anda perlu mengambil snapshot dari pola ini dengan kamera Anda dan biarkan OpenCV menemukannya. Setiap pola yang ditemukan menghasilkan persamaan baru. Untuk mengatasi persamaan yang Anda butuhkan setidaknya sejumlah snapshot pola yang telah ditentukan untuk membentuk sistem persamaan yang baik. Jumlah ini lebih tinggi untuk pola papan catur dan lebih sedikit untuk lingkaran. Misalnya, dalam teori pola papan catur membutuhkan setidaknya dua foto. Namun, dalam praktiknya, kita memiliki jumlah suara yang bagus dalam gambar masukan kita, jadi untuk hasil yang baik, Anda mungkin memerlukan setidaknya 10 snapshot bagus dari pola masukan pada posisi yang berbeda. Aplikasi sampel akan: Tentukan matriks distorsi Tentukan matriks kamera Ambil masukan dari daftar file Camera, Video dan Image Baca konfigurasi dari file XMLYAML Simpan hasilnya ke file XMLYAML Hitung kesalahan proyeksi ulang Kode sumber Anda juga dapat menemukan kode sumber di Samplescpptutorialcodecalib3dcameracalibration folder dari perpustakaan sumber OpenCV atau download dari sini. Program ini memiliki satu argumen: nama file konfigurasinya. Jika tidak ada yang diberikan maka akan mencoba membuka yang bernama 8220default. xml8221. Heres contoh file konfigurasi dalam format XML. Pada file konfigurasi Anda dapat memilih untuk menggunakan kamera sebagai input, file video atau daftar gambar. Jika Anda memilih yang terakhir, Anda perlu membuat file konfigurasi tempat Anda menghitung gambar yang akan digunakan. Inilah contohnya. Bagian penting yang perlu diingat adalah bahwa gambar perlu ditentukan menggunakan jalur absolut atau yang relatif dari direktori kerja application217 Anda. Anda mungkin menemukan semua ini di direktori sampel yang disebutkan di atas. Aplikasi dijalankan dengan membaca pengaturan dari file konfigurasi. Meski, ini adalah bagian penting dari itu, tidak ada kaitannya dengan pokok bahasan tutorial ini: kalibrasi kamera. Oleh karena itu, saya memilih untuk tidak memposting kode untuk bagian itu di sini. Latar belakang teknis bagaimana melakukan ini dapat Anda temukan di File Input and Output dengan menggunakan tutorial file XML dan YAML. Penjelasan Untuk ini I8217ve menggunakan input kelas OpenCV yang sederhana. Setelah membaca file I8217 ada sebuah fungsi post-processing tambahan yang memeriksa validitas input. Hanya jika semua input bagus maka variabel goodInput akan benar. Dapatkan masukan berikutnya, jika gagal atau kita memiliki cukup banyak - kalibrasikan. Setelah ini kita memiliki lingkaran besar dimana kita melakukan operasi berikut: dapatkan gambar berikutnya dari daftar gambar, kamera atau file video. Jika ini gagal atau kita memiliki cukup gambar maka kita menjalankan proses kalibrasi. Jika gambar kita keluar dari loop dan jika frame yang tersisa tidak terdistorsi (jika pilihan disetel) melalui perubahan dari mode DETEKSI ke CALIBRATED. Untuk beberapa kamera kita mungkin perlu membalik gambar input. Di sini kita melakukan ini juga. Temukan pola input saat ini. Pembentukan persamaan yang saya sebutkan di atas bertujuan untuk menemukan pola utama dalam input: dalam kasus papan catur ini adalah sudut-sudut kotak dan lingkaran, dengan baik, lingkaran itu sendiri. Posisi ini akan membentuk hasil yang akan dituliskan ke vektor pointBuf. Bergantung pada jenis pola masukan Anda gunakan fungsi findChessboardCorners atau findCirclesGrid. Untuk kedua dari mereka Anda melewati gambar saat ini dan ukuran papan dan Anda akan mendapatkan posisi dari pola. Selanjutnya, mereka mengembalikan variabel boolean yang menyatakan jika pola itu ditemukan pada input (kita hanya perlu memperhitungkan gambar-gambar di mana ini benar). Kemudian lagi jika kamera kita hanya mengambil gambar kamera saat waktu tunda masukan dilewati. Hal ini dilakukan agar pengguna bisa memindahkan papan catur dan mendapatkan gambar yang berbeda. Gambar serupa menghasilkan persamaan yang serupa, dan persamaan serupa pada tahap kalibrasi akan membentuk masalah yang tidak baik, sehingga kalibrasi akan gagal. Untuk gambar persegi posisi sudut hanya perkiraan. Kita bisa memperbaiki ini dengan memanggil fungsi cornerSubPix. Ini akan menghasilkan hasil kalibrasi yang lebih baik. Setelah ini kita menambahkan hasil input yang valid ke vektor imagePoints untuk mengumpulkan semua persamaan ke dalam satu wadah. Akhirnya, untuk visualisasi umpan balik, kita akan menarik poin yang ditemukan pada gambar masukan menggunakan fungsi findChessboardCorners. Tampilkan status dan hasil ke pengguna, ditambah kontrol command line dari aplikasi. Bagian ini menunjukkan output teks pada gambar. Jika kita berlari kalibrasi dan mendapat matriks kamera8217 dengan koefisien distorsi, kita mungkin ingin mengoreksi gambar dengan menggunakan fungsi undistort: ​​Kemudian kita menunggu kunci input dan jika ini kita ubah pemindahan distorsi, jika kita mulai lagi deteksi Proses, dan akhirnya untuk kunci ESC kita berhenti dari aplikasi: Tunjukkan penghapusan distorsi untuk gambar juga. Saat Anda bekerja dengan daftar gambar, tidak mungkin mengeluarkan distorsi di dalam lingkaran. Oleh karena itu, Anda harus melakukan ini setelah loop. Mengambil keuntungan dari ini sekarang saya akan memperluas fungsi undistort, yang sebenarnya merupakan panggilan pertama initUndistortRectifyMap untuk menemukan matriks transformasi dan kemudian melakukan transformasi dengan menggunakan fungsi remap. Karena, setelah perhitungan peta kalibrasi yang sukses perlu dilakukan hanya sekali, dengan menggunakan bentuk yang diperluas ini, Anda dapat mempercepat aplikasi Anda: Kalibrasi dan simpan Karena kalibrasi hanya perlu dilakukan satu kali per kamera, masuk akal untuk menyimpannya setelah Kalibrasi yang sukses Dengan cara ini nanti Anda bisa memasukkan nilai-nilai ini ke dalam program Anda. Karena ini pertama-tama kami membuat kalibrasi, dan jika berhasil kami simpan hasilnya menjadi file XML atau YAML bergaya OpenCV, tergantung pada ekstensi yang Anda berikan di file konfigurasi. Karena itu pada fungsi pertama kita hanya membagi dua proses ini. Karena kita ingin menyimpan banyak variabel kalibrasi, kita akan membuat variabel-variabel ini di sini dan meneruskan keduanya ke fungsi kalibrasi dan penyelamatan. Sekali lagi, saya tidak akan menunjukkan bagian tabungan seperti yang tidak banyak kesamaan dengan kalibrasi. Jelajahi file sumber untuk mengetahui bagaimana dan apa: Kami melakukan kalibrasi dengan bantuan fungsi calibrateCamera. Ini memiliki parameter berikut: Titik objek. Ini adalah vektor vektor Point3f yang untuk setiap gambar masukan menggambarkan bagaimana seharusnya tampilan pola. Jika kita memiliki pola planar (seperti papan catur) maka kita bisa mengatur semua koordinat Z menjadi nol. Ini adalah kumpulan poin dimana poin penting ini ada. Karena, kami menggunakan satu pola untuk semua gambar masukan yang bisa kami hitung ini sekali dan kalikan saja untuk semua tampilan masukan lainnya. Kami menghitung titik sudut dengan fungsi calcBoardCornerPositionitions sebagai: Dan kemudian kalikan sebagai: Titik gambar. Ini adalah vektor vektor Point2f yang untuk setiap gambar masukan berisi koordinat titik penting (sudut untuk papan catur dan pusat lingkaran untuk pola lingkaran). Kami telah mengumpulkan ini dari findChessboardCorners atau findCirclesGrid function. Kita hanya perlu meneruskannya. Ukuran gambar diperoleh dari kamera, file video atau gambar. Matriks kamera. Jika kita menggunakan opsi rasio aspek tetap yang perlu kita tetapkan ke nol: Matriks koefisien distorsi. Inisialisasi dengan nol. Untuk semua pandangan fungsi akan menghitung rotasi dan vektor terjemahan yang mengubah titik objek (diberikan dalam ruang koordinat model) ke titik gambar (diberikan di ruang koordinat dunia). Parameter ke-7 dan ke-8 adalah vektor output dari matriks yang ada pada posisi ke-i vektor rotasi dan translasi untuk titik ke-i menunjuk ke titik gambar ke-i. Argumen terakhir adalah bendera. Anda perlu menentukan di sini pilihan seperti memperbaiki rasio aspek untuk focal length, asumsikan nol distorsi tangensial atau untuk memperbaiki titik utama. Fungsi mengembalikan kesalahan re-proyeksi rata-rata. Angka ini memberikan perkiraan presisi yang baik dari parameter yang ditemukan. Ini harus mendekati nol mungkin. Dengan adanya matriks intrinsik, distorsi, rotasi dan translasi, kita dapat menghitung kesalahan untuk satu tampilan dengan menggunakan titik proyek untuk pertama-tama mengubah titik objek ke titik gambar. Kemudian kita hitung norma absolut antara apa yang kita dapatkan dengan transformasi dan algoritma pencarian cornercircle. Untuk menemukan kesalahan rata-rata, kita menghitung mean aritmetika dari kesalahan yang dihitung untuk semua gambar kalibrasi. Biarlah ada pola papan catur masukan yang memiliki ukuran 9 X 6. I8217 ini menggunakan kamera IP AXIS untuk membuat beberapa snapshot dari papan dan menyimpannya ke dalam direktori VID5. Saya meletakkan ini di dalam folder imagesCameraCalibration dari direktori kerja saya dan membuat file VID5.XML berikut yang menjelaskan gambar mana yang akan digunakan: Kemudian lewati imagesCameraCalibrationVID5VID5.XML sebagai masukan dalam file konfigurasi. Berikut adalah pola papan catur yang ditemukan saat runtime aplikasi: Setelah menerapkan penghapusan distorsi yang kami dapatkan: Karya yang sama untuk pola lingkaran asimetris ini dengan mengatur lebar masukan menjadi 4 dan tinggi sampai 11. Kali ini saya menggunakan umpan kamera langsung dengan menentukan ID-nya (822018221) untuk input. Di sini, bagaimana pola yang terdeteksi seharusnya terlihat: Dalam kedua kasus di file XMLYAML keluaran tertentu, Anda akan menemukan matriks koefisien kamera dan distorsi: Tambahkan nilai ini sebagai konstanta pada program Anda, sebut initUndistortRectifyMap dan fungsi remap untuk menghilangkan distorsi dan nikmati distorsi secara gratis. Masukan untuk kamera murah dan berkualitas rendah. Anda dapat mengamati contoh runtime ini di YouTube di sini. Bantuan dan Tanggapan Anda tidak menemukan yang Anda cari Ajukan pertanyaan di forum QA. Jika Anda merasa ada sesuatu yang salah atau salah dalam dokumentasi, tolong ajukan laporan bug. Analisis Perotapan dan Pelacakan Objek calcOpticalFlowPyrLK Menghitung aliran optik untuk rangkaian fitur yang jarang menggunakan metode Lucas-Kanade yang berulang dengan piramida. C: void calcOpticalFlowPyrLK (InputArray prevImg InputArray nextImg InputArray prevPts InputOutputArray nextPts OutputArray status OutputArray err Ukuran winSize Size (21,21), int maxLevel 3, kriteria TermCriteria TermCriteria (TermCriteria :: COUNTTermCriteria :: EPS, 30, 0.01), flag int 0, double minEigThreshold 1e-4) Python: cv2. CalcOpticalFlowPyrLK (prevImg, nextImg, prevPts, nextPts, status, err, winSize, maxLevel, kriteria, flags, minEigThreshold) rarr nextPts, status, err C: void cvCalcOpticalFlowPyrLK (const CvArr prev const CvArr curr CvArr prevpyr CvArr currpyr. Const CvPoint2D32f prevfeatures CvPoint2D32f currfeatures int count CvSize winsize tingkat int char status float trackerror Kriteria CvTermCriteria int flag Python: cv. CalcOpticalFlowPyrLK (prev, curr, prevPyr, currPyr, prevFeatures, winSize, level, criteria, flags, guessesNone) - gt (currFeatures, status, trackerror) prevImg 8211 gambar masukan 8 bit pertama atau piramida yang dibangun dengan buildOpticalFlowPyramid (). NextImg 8211 gambar masukan kedua atau piramida dengan ukuran yang sama dan jenis yang sama seperti prevImg. PrevPts 8211 vector dari titik 2D dimana arus harus ditemukan koordinat titik harus berupa bilangan floating-point presisi tunggal. Vektor keluaran NextPts 8211 dari titik 2D (dengan koordinat floating-point presisi tunggal) yang berisi posisi baru masukan fitur input pada gambar kedua saat flag OPTFLOWUSEINITIALFLOW dilewati, vektor harus memiliki ukuran yang sama seperti pada input. Status 8211 vektor status keluaran (karakter unsigned) setiap elemen vektor diatur ke 1 jika aliran untuk fitur yang sesuai telah ditemukan, jika tidak, maka akan diset ke 0. err 8211 vektor output dari kesalahan setiap elemen vektor adalah Diatur ke kesalahan untuk fitur yang sesuai, jenis ukuran kesalahan dapat diatur dalam parameter bendera jika alirannya tidak ditemukan maka kesalahan tidak ditentukan (gunakan parameter status untuk menemukan kasus semacam itu). WinSize 8211 ukuran jendela pencarian di setiap tingkat piramida. MaxLevel 8211 0 berbasis jumlah piramida maksimal jika set ke 0, piramida tidak digunakan (level tunggal), jika diset ke 1, dua level digunakan, dan seterusnya jika piramida dilewatkan ke input maka algoritma akan menggunakan sebanyak level seperti Piramida memiliki tapi tidak lebih dari maxLevel. Kriteria 8211, menentukan kriteria penghentian algoritma pencarian berulang (setelah jumlah maksimum kriteria iterasi yang ditentukan. maxCount atau ketika jendela pencarian bergerak kurang dari kriteria. epsilon flag 8211 OPTFLOWUSEINITIALFLOW menggunakan estimasi awal, disimpan di nextPts jika bendera OPTFLOWLKGETMINEIGENVALS menggunakan nilai eigen minimum sebagai ukuran kesalahan (lihat deskripsi minEigThreshold) jika bendera tidak disetel, maka jarak L1 antara tambalan di sekitar titik awal dan titik yang dipindah-pindahkan. MinEigThreshold 8211 algoritma menghitung nilai eigen minimum dari matriks normal 2x2 dari persamaan aliran optik (matriks ini disebut matriks gradien spasial dalam Bouguet00), dibagi dengan jumlah piksel dalam sebuah jendela, digunakan sebagai ukuran kesalahan. Jumlah piksel di jendela jika nilai ini kurang dari minEigThreshold, maka fitur yang sesuai akan disaring dan alirannya adalah Tidak diproses, sehingga memungkinkan untuk menghapus poin buruk dan mendapatkan dorongan kinerja. Fungsi ini menerapkan versi iteratif yang jarang dari aliran optik Lucas-Kanade di piramida. Lihat Bouguet00. Fungsi ini diparalelkan dengan perpustakaan TBB. Contoh menggunakan algoritma aliran optik Lucas-Kanade dapat ditemukan di opencvsourcecodesamplescpplkdemo. cpp (Python) Contoh menggunakan algoritma aliran optik Lucas-Kanade dapat ditemukan di opencvsourcecodesamplespython2lktrack. py (Python) Contoh menggunakan pelacak Lucas-Kanade untuk homografi Pencocokan dapat ditemukan di opencvsourcecodesamplespython2lkhomography. py buildOpticalFlowPyramid Membangun piramida gambar yang dapat dilewatkan ke calcOpticalFlowPyrLK (). C: int buildOpticalFlowPyramid (InputArray img OutputArrayOfArrays piramida Ukuran winSize int maxLevel bool withDerivatives true, int pyrBorder BORDERREFLECT101, int derivBorder BORDERCONSTANT, bool tryReuseInputImage true) Python: cv2. BuildOpticalFlowPyramid (img, winSize, maxLevel, piramida, withDerivatives, pyrBorder, derivRorder, tryReuseInputImage) rarr retval, piramida img 8211 input gambar 8 bit. Piramida piramida 8211. WinSize 8211 ukuran jendela algoritma aliran optik. Harus tidak kurang dari winSize argumen calcOpticalFlowPyrLK (). Hal ini diperlukan untuk menghitung padding yang dibutuhkan untuk tingkat piramida. MaxLevel 8211 0 berbasis jumlah piramida maksimal. DenganDerivatives 8211 mengatur precompute gradien untuk setiap level piramida. Jika piramida dibangun tanpa gradien maka calcOpticalFlowPyrLK () akan menghitungnya secara internal. PyrBorder 8211 modus perbatasan untuk lapisan piramida. DerivBorder 8211 mode border untuk gradien. TryReuseInputImage 8211 meletakkan ROI masukan gambar ke dalam piramida jika memungkinkan. Anda bisa melewati false untuk memaksa penyalinan data. Jumlah level pada piramida yang dibangun. Bisa kurang dari maxLevel. CalcOpticalFlowFarneback Menghitung aliran optik padat menggunakan algoritma Gunnar Farneback8217s. C: void calcOpticalFlowFarneback (InputArray prev InputArray selanjutnya InputOutputArray flow, double pyrscale, int level, int winsize, int iterations, int polyn, double polysigma, flag int) C: void cvCalcOpticalFlowFarneback (const CvArr prev const CvArr next CvArr flow - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Python: cv2. CalcOpticalFlowFarneback (prev, next, pyrscale, level, winsize, iterations, polyn, polysigma, flags flow) aliran rarr prev 8211 gambar input single-channel 8-bit pertama. Gambar masukan kedua 8211 kedua dengan ukuran yang sama dan tipe yang sama seperti prev. Flow 8211 computed flow image yang memiliki ukuran sama dengan prev dan tipe CV32FC2. Parameter pyrscale 8211, menentukan skala gambar (lt1) untuk membangun piramida untuk setiap gambar pyrscale0.5 berarti piramida klasik, di mana setiap lapisan berikutnya dua kali lebih kecil dari yang sebelumnya. Tingkat 8211 jumlah lapisan piramida termasuk tingkat awal gambar1 berarti tidak ada lapisan tambahan yang dibuat dan hanya gambar asli yang digunakan. Winsize 8211 rata-rata ukuran jendela yang lebih besar meningkatkan ketahanan algoritma terhadap noise gambar dan memberi lebih banyak kesempatan untuk deteksi gerakan cepat, namun menghasilkan medan gerak yang lebih kabur. Iterasi 8211 jumlah iterasi yang dilakukan algoritma pada masing-masing level piramida. Polyn 8211 ukuran lingkungan piksel yang digunakan untuk menemukan ekspansi polinomial pada setiap piksel nilai yang lebih besar berarti bahwa gambar akan didekati dengan permukaan yang lebih halus, menghasilkan algoritma yang lebih kuat dan medan gerak yang lebih kabur, biasanya polyn 5 atau 7. polysigma 8211 standar deviasi dari Gaussian yang digunakan untuk menghaluskan derivatif digunakan sebagai dasar untuk ekspansi polinomial untuk polyn5. Anda bisa mengatur polysigma1.1. Untuk polyn7 Nilai yang bagus adalah polysigma1.5. Bendera flag operasi 8211 yang bisa menjadi kombinasi dari berikut ini: OPTFLOWUSEINITIALFLOW menggunakan aliran input sebagai perkiraan arus awal. OPTFLOWFARNEBACKGAUSSIAN menggunakan filter Gaussian dan bukan filter kotak dengan ukuran yang sama untuk estimasi aliran optik biasanya, opsi ini memberi arus yang lebih akurat daripada filter kotak, dengan biaya kecepatan rendah biasanya, winsize untuk jendela Gaussian harus diatur ke Nilai yang lebih besar untuk mencapai tingkat ketahanan yang sama. Fungsi ini menemukan aliran optik untuk setiap pixel prev menggunakan algoritma Farneback2003 sehingga Contoh menggunakan algoritma aliran optik yang dijelaskan oleh Gunnar Farneback dapat ditemukan pada opencvsourcecodesamplescppfback. cpp (Python) Contoh menggunakan algoritma aliran optik yang dijelaskan oleh Gunnar Farneback dapat dilakukan. Ditemukan pada perkiraan opencvsourcecodesamplespython2optflow. pyRigidTransform Menghitung transformasi affine yang optimal antara dua titik 2D. C: Mat perkiraanRigidTransform (InputArray src. InputArray dst. Bool fullAffine) Python: cv2. TentukanRigidTransform (src, dst, fullAffine) rarr retval src 8211 Masukan pertama titik 2D yang tersimpan di std :: vector atau Mat. Atau gambar yang tersimpan di Mat. Dst 8211 Input kedua titik 2D set dengan ukuran yang sama dan tipe yang sama dengan A. atau gambar lainnya. FullAffine 8211 Jika benar, fungsinya menemukan transformasi affine yang optimal tanpa batasan tambahan (6 derajat kebebasan). Jika tidak, kelas transformasi yang dipilih terbatas pada kombinasi terjemahan, rotasi, dan skala seragam (5 derajat kebebasan). Fungsi ini menemukan transformasi affine optimal Ab (matriks floating-point 2 x 3) yang mendekati transformasi affine terbaik antara: Two point set Dua gambar raster. Dalam kasus ini, fungsi pertama menemukan beberapa fitur pada gambar src dan menemukan fitur yang sesuai pada gambar dst. Setelah itu, masalahnya dikurangi menjadi kasus pertama. Dalam kasus set titik, masalahnya dirumuskan sebagai berikut: Anda perlu menemukan matriks 2x2 A dan 2x1 vektor b sehingga: di mana srci dan dsti adalah titik ke-i di src dan dst. Masing-masing Bahkan, fastAtan2 () dan fase () digunakan sehingga sudut dihitung diukur dalam derajat dan mencakup rentang penuh 0..360. Juga, topeng diisi untuk menunjukkan piksel dimana sudut yang dihitung valid. (Python) Contoh bagaimana melakukan teknik motion template dapat ditemukan di opencvsourcecodesamplespython2motempl. py calcGlobalOrientation Menghitung orientasi gerak global di wilayah yang dipilih. C: double calcGlobalOrientation (InputArray orientation InputArray mask InputArray mhi double timestamp durasi ganda) Python: cv2. CalcGlobalOrientation (orientasi, topeng, mhi, timestamp, durasi) rarr retval C: double cvCalcGlobalOrientation (const Orientasi CvArr const CvArr mask const cvArr mhi double timestamp durasi ganda) Python: cv. CalcGlobalOrientation (orientasi, topeng, mhi, timestamp, duration) rarr float orientation 8211 Motion gradient orientation image dihitung dengan fungsi calcMotionGradient (). Topeng topeng 8211. Ini mungkin merupakan gabungan dari topeng gradien yang valid, juga dihitung dengan calcMotionGradient (). Dan topeng dari suatu daerah yang arahnya perlu dihitung. Mhi 8211 Gambar riwayat gerak dihitung dengan updateMotionHistory (). Timestamp 8211 Timestamp dilewatkan ke updateMotionHistory (). Durasi 8211 Durasi maksimum dari sebuah lagu dalam milidetik, diteruskan ke updateMotionHistory (). Fungsi ini menghitung arah gerak rata-rata di wilayah yang dipilih dan mengembalikan sudut antara 0 derajat dan 360 derajat. Arah rata-rata dihitung dari histogram orientasi tertimbang, di mana gerakan baru-baru ini memiliki bobot lebih besar dan gerakan yang terjadi di masa lalu memiliki bobot yang lebih kecil, seperti yang tercatat dalam mhi. SegmentMotion Memisahkan gambar riwayat gerak ke beberapa bagian yang sesuai dengan gerakan independen yang terpisah (misalnya tangan kiri, tangan kanan). C: void segmentMotion (InputArray mhi. OutputArray segmask. VectorltRectgtamp boundingRects. Double timestamp. Double segThresh) boundingRects, double timestamp, double segThresh) titlePermalink to this definition Python: cv2. SegmentMotion (mhi, timestamp, segThresh. Segmask) rarr segmask, boundingRects C: CvSeq cvSegmentMotion (const CvArr mhi. CvArr segmask CvMemStorage storage double timestamp double segthresh) Python: cv. SegmentMotion (mhi, segmask, storage, timestamp, segthresh) rarr boundingRects mhi 8211 Motion history image. Segmask 8211 Image dimana topeng yang ditemukan harus disimpan, single-channel, 32-bit floating-point. BoundingRects 8211 Vector yang berisi ROI komponen gerak terhubung. Timestamp 8211 Waktu sekarang dalam milidetik atau unit lainnya. SegThresh 8211 Ambang batas segmentasi yang direkomendasikan sama dengan interval antara motion history 8220steps8221 atau lebih. Fungsi ini menemukan semua segmen gerakan dan menandai mereka di segmask dengan nilai individual (1,2). Ini juga menghitung vektor dengan ROI komponen gerak yang terhubung. Setelah itu arah gerak untuk setiap komponen dapat dihitung dengan calcGlobalOrientation () menggunakan topeng yang diekstrak dari komponen tertentu. Menemukan pusat objek, ukuran, dan orientasi. C: RotatedRect CamShift (InputArray probImage Rectamp window Kriteria TermCriteria) Python: cv2. CamShift (probImage, window, criteria) rarr retval, jendela C: int cvCamShift (const CvArr probimage CvRect window Kriteria CvTermCriteria CvConnectedComp comp Kotak CvBox2D NULL) Python: cv. CamShift (probimage, window, criteria) - gt (int, comp, box) Terkadang gambar latar bisa sangat buram, karena mengandung statistik latar belakang rata-rata. BackgroundSubtractorMOG kelas BackgroundSubtractorMOG. Latar belakang latar belakang latar belakang berbasis Gaussian Mixture-basedForeground Segmentation. Kelas mengimplementasikan algoritma yang dijelaskan pada P. KadewTraKuPong dan R. Bowden, Model campuran latar belakang adaptif yang disempurnakan untuk pelacakan real-time dengan deteksi bayangan. Proc. Lokakarya Eropa ke-2 tentang Sistem Pengawasan Berbasis Video Tingkat Lanjut, 2001: personal. ee. surrey. ac. ukPersonalR. Bowdenpublicationsavbs01avbs01.pdf BackgroundSubtractorMOG :: BackgroundSubtractorMOG C: BackgroundSubtractorMOG. BackgroundSubtractorMOG () C: BackgroundSubtractorMOG. BackgroundSubtractorMOG (int sejarah. Int nmixtures. Latar belakang gandaRasio double noiseSigma 0) Python: cv2. BackgroundSubtractorMOG (sejarah, nmixtures, backgroundRatio. NoiseSigma) rarr ltBackgroundSubtractorMOG objectgt history 8211 Panjang sejarah. Nmixtures 8211 Jumlah campuran Gaussian. Background Rasio 8211 Rasio latar belakang. NoiseSigma 8211 Kekuatan bising. Konstruktor default menyetel semua parameter ke nilai default. BackgroundSubtractorMOG :: operator () Memperbarui model latar belakang dan mengembalikan latar depan topeng C: void BackgroundSubtractorMOG. Operator () (gambar InputArray OutputArray fgmask double learningRate 0) BackgroundSubtractorMOG2 Algoritma Segmentasi Berbasis Gaussian MixForeground. Kelas BackgroundSubtractorMOG2. Public BackgroundSubtractor Berikut adalah anggota penting dari kelas yang mengendalikan algoritma, yang dapat Anda atur setelah membangun instance kelas: Jumlah komponen campuran maksimum yang diizinkan. Jumlah sebenarnya ditentukan secara dinamis per pixel. Ambang batas menentukan apakah komponen cukup signifikan untuk dimasukkan ke dalam model latar belakang (sesuai dengan TB1-cf dari kertas yang ada kertasnya). Cf0.1 gt TB0.9 adalah default Untuk alpha0.001. Itu berarti bahwa mode harus ada untuk sekitar 105 frame sebelum dianggap latar depan. Ambang batas jarak Mahalanobis kuadrat yang membantu menentukan kapan sampel mendekati komponen yang ada (sesuai dengan Tg). Jika tidak dekat dengan komponen apapun, komponen baru dihasilkan. 3 sigma gt Tg339 adalah default. Nilai Tg yang lebih kecil menghasilkan lebih banyak komponen. Nilai Tg yang lebih tinggi dapat menghasilkan sejumlah kecil komponen namun bisa tumbuh terlalu besar. Varian awal untuk komponen yang baru dihasilkan. Ini mempengaruhi kecepatan adaptasi. Nilai parameter didasarkan pada perkiraan standar deviasi standar dari gambar. OpenCV menggunakan 15 sebagai nilai yang masuk akal. Parameter yang digunakan untuk lebih mengendalikan varians. Parameter yang digunakan untuk lebih mengendalikan varians. Parameter reduksi kompleksitas. Parameter ini mendefinisikan jumlah sampel yang dibutuhkan untuk menerima untuk membuktikan komponen yang ada. CT0.05 adalah nilai default untuk semua sampel. Dengan menetapkan CT0 Anda mendapatkan algoritma yang sangat mirip dengan algoritma StaufferampGrimson standar. Nilai untuk menandai piksel bayangan pada topeng latar depan output. Nilai defaultnya adalah 127. Shadow threshold. Bayang-bayang terdeteksi jika pixel adalah versi latar belakang yang lebih gelap. Tau adalah ambang batas yang menentukan seberapa gelap bayangannya. Tau 0,5 berarti jika pixel lebih dari dua kali lebih gelap maka tidak bayangan. Lihat Prati, Mikic, Trivedi, Cucchiarra, Mendeteksi Bayangan Bergerak. . IEEE PAMI, 2003. Kelas menerapkan pengurangan latar belakang model campuran Gaussian yang dijelaskan di: Z. Zivkovic, model campuran Gausian adaptif yang adaptif untuk pengurangan latar belakang. Pengenalan Pola Konferensi Internasional, Inggris, Agustus 2004, zoranzPublicationszivkovic2004ICPR. pdf. Kodenya sangat cepat dan melakukan juga deteksi bayangan. Jumlah komponen Gausssian disesuaikan per pixel. Z. Zivkovic, F. van der Heijden, Estimasi Sensitivitas Adaptif Efisien per Gambar Pixel untuk Tugas Pengurangan Latar Belakang. Pola Pengakuan Letters, vol. 27, tidak 7, halaman 773-780, 2006. Algoritma yang serupa dengan algoritma StaufferampGrimson standar dengan pilihan tambahan dari jumlah komponen Gaussian berdasarkan: Z. Zivkovic, F. van der Heijden, Pembelajaran tanpa rekursif rekursif terhadap model campuran hingga akhir, IEEE Trans . Pada Analisis Pola dan Kecerdasan Mesin, vol.26, no.5, halaman 651-656, 2004. BackgroundSubtractorMOG2 :: BackgroundSubtractorMOG2 C: BackgroundSubtractorMOG2. BackgroundSubtractorMOG2 () C: BackgroundSubtractorMOG2. BackgroundSubtractorMOG2 (int sejarah. Float varThreshold bool bShadowDetection true) history 8211 Panjang sejarah. Ambang batas ambang batas Mahalanobis kuadrat untuk menentukan apakah itu digambarkan dengan baik oleh model latar belakang (lihat Cthr). Parameter ini tidak mempengaruhi pembaruan latar belakang. Nilai khasnya bisa berupa 4 sigma, yaitu varThreshold4416 (lihat Tb). Parameter yang menentukan apakah deteksi bayangan harus diaktifkan (benar atau salah). BackgroundSubtractorMOG2 :: operator () Memperbarui model latar belakang dan menghitung topeng foreground C: void BackgroundSubtractorMOG2. Operator () (gambar InputArray OutputArray fgmask double learningRate -1) BackgroundSubtractorMOG2 :: getBackgroundImage Mengembalikan background image C: void BackgroundSubtractorMOG2. GetBackgroundImage (OutputArray backgroundImage)

No comments:

Post a Comment