ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСмы отслСТивания двиТущихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ВычислСния, связанныС с Π³Ρ€Π°Ρ„ичСской ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΡΠ²Π»ΡΡŽΡ‚ΡΡ достаточно рСсурсоёмкими. Π’ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠ³Π΄Π° Ρƒ Π½Π°Ρ имССтся нСсколько Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ двиТСния ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² Π±Ρ‹ΡΡ‚Ρ€Ρ‹Ρ… вычислСниях станСт критичСской. ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π² всС способы ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ я ΠΎΡΡ‚ановился Π½Π° ΡΠΏΠΎΡΠΎΠ±Π΅ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс BlobCounter. Π­Ρ‚ΠΎΡ‚ способ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСмы отслСТивания двиТущихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠ˜ΠΠ˜Π‘Π’Π•Π Π‘Π’Π’Πž ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π― И ΠΠΠ£ΠšΠ˜ Π ΠžΠ‘Π‘Π˜Π™Π‘ΠšΠžΠ™ Π€Π•Π”Π•Π ΠΠ¦Π˜Π˜ ΠšΠΠ€Π•Π”Π Π ИНЀОРМАЦИОННЫΠ₯ Π‘Π˜Π‘Π’Π•Πœ ΠšΠ£Π Π‘ΠžΠ’ΠΠ― Π ΠΠ‘ΠžΠ’Π По Ρ‚Π΅ΠΌΠ΅: Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСмы отслСТивания двиТущихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для Π·Π°Π΄Π°Ρ‡ обСспСчСния бСзопасности ВюмСнь 2012

ОписаниС

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π—Π°Π΄Π°Ρ‡ΠΈ

НСобходимо ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ систСму видСонаблюдСния для обСспСчСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ уровня бСзопасности. МоТно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ основныС прСимущСства систСм видСонаблюдСния ΠΏΠ΅Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ срСдствами бСзопасности. Π­Ρ‚ΠΎ автоматичСскоС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ событий, ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ нСсанкционированного проникновСния Π½Π° ΠΎΡ…Ρ€Π°Π½ΡΠ΅ΠΌΡƒΡŽ Ρ‚Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΡ€ΠΈΡŽ, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний Π·Π° ΡΡ‡Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², наглядноС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ всСй ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ тСсной ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ подсистСмами бСзопасности. Π‘Ρ€Π΅Π΄ΠΈ нСдостатков Ρ‚Π°ΠΊΠΈΡ… систСм ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Π½Π΅Π±Π»Π°Π³ΠΎΠΏΡ€ΠΈΡΡ‚Π½Ρ‹Ρ… ΠΏΠΎΠ³ΠΎΠ΄Π½Ρ‹Ρ… условиях, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΡƒΠΌΠ°Π½.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ снабТСна ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ обнаруТСния двиТСния (Motion detector) ΠΈ Π°Π²Ρ‚оматичСски ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° информация являСтся ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Ссли Π½Π° Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… зафиксировано появлСниС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мСсто хранСния Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹Ρ…. НапримСр, это Π±Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π° Π²Π°ΡˆΠ΅ΠΉ Π΄Π°Ρ‡Π΅, офисС, ΠΊΠΎΡ‚Ρ‚Π΅Π΄ΠΆΠ΅ ΠΈΠ»ΠΈ просто участкС появились люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΌ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой начнётся сохранСниС Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС информация с Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚авляСт интСрСса, Ρ‚ΠΎ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΅Ρ‘ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла.

Для дальнСйшСй Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΡΠΊΡ€Π°Π½ мобильного Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ сам Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΌΠΎΠ³ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ дальнСйшиС дСйствия. НапримСр: Π²Ρ‹Π·ΠΎΠ² ΠΏΠΎΠ»ΠΈΡ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° вашС имущСство находится ΠΏΠΎΠ΄ ΡƒΠ³Ρ€ΠΎΠ·ΠΎΠΉ ΠΈΠ»ΠΈ остановки ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… дСйствий, Ссли ΠΊ Π²Π°ΠΌ Π·Π°Π±Π΅ΠΆΠ°Π»ΠΈ Π΄Π΅Ρ‚ΠΈ, случайно ΠΏΠ΅Ρ€Π΅Π±Ρ€ΠΎΡΠΈΠ²ΡˆΠΈΠ΅ мяч Ρ‡Π΅Ρ€Π΅Π· Π²Π°ΡˆΡƒ ΠΎΠ³Ρ€Π°Π΄Ρƒ.

Π’Π°ΠΊΠΆΠ΅ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ качСство Π²ΠΈΠ΄Π΅ΠΎ для Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Под качСством Π²ΠΈΠ΄Π΅ΠΎ подразумСваСтся Π½Π΅ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ самой видСозаписи (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, частота ΠΊΠ°Π΄Ρ€ΠΎΠ², Π±ΠΈΡ‚Ρ€Π΅ΠΉΡ‚, Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅), Π° ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΠΎ Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹ΠΌ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹. Если ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ двиТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π½ΠΈΠΌ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΎΠ±Π»Π°ΡΡ‚ΠΈ Π²ΠΈΠ΄Π΅ΠΎΡΡŠΡ‘ΠΌΠΊΠΈ ΠΈ Ρ‚Π΅ΠΌ самым информация ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ.

ΠŸΠΎΠ΄Π²Π΅Π΄Ρ‘ΠΌ ΠΈΡ‚ΠΎΠ³: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму, которая фиксируСт появлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ двиТСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Ссли Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ прСдусмотрСн для Π΄Π°Π½Π½ΠΎΠΉ систСмы.

ΠžΠ±Π·ΠΎΡ€ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² построСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы

Наша информационная систСма Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ двиТСния поэтому Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ поиска двиТСния (Motion Detection Algorithms).

Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² для обнаруТСния двиТСния Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π²ΠΈΠ΄Π΅ΠΎ. ВсС ΠΎΠ½ΠΈ основаны Π½Π° ΡΡ€Π°Π²Π½Π΅Π½ΠΈΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π° с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΊΠ°Π΄Ρ€ΠΎΠ² ΠΈΠ»ΠΈ с Ρ‡Π΅ΠΌ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΠΎΠ½. Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённых.

Π’ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ этих Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ AForge.NET.

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² являСтся сравнСниС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π° с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ. Π­Ρ‚ΠΎ примСняСтся Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… сТатия Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ лишь ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ измСнСния ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сами измСнСния, Π° Π½Π΅ Π²Π΅ΡΡŒ ΠΊΠ°Π΄Ρ€. Но ΡΡ‚ΠΎ Π½Π΅ ΡΠ°ΠΌΡ‹ΠΉ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΈΠ· ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² для обнаруТСния двиТСния.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π°Ρ Π΅ΡΡ‚ΡŒ RGB ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ Ρ†Π²Π΅Ρ‚Π° 24 Π±ΠΈΡ‚ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ (image), Ρ‡Π΅Ρ€Π½ΠΎ-бСлая копия (currentFrame) ΠΈ Ρ‡Π΅Ρ€Π½ΠΎ-бСлая копия ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π° (backgroundFrame). ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ Ρ‚Π΅ Ρ€Π΅Π³ΠΈΠΎΠ½Ρ‹, Π³Π΄Π΅ эти Π΄Π²Π° ΠΊΠ°Π΄Ρ€Π° Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. Для Ρ†Π΅Π»Π΅ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Difference ΠΈ Threshold Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

// созданиС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²

Difference differenceFilter = new Difference ();

IFilter thresholdFilter = new Threshold (15);

// Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Ρ€Π°Π·Π½ΠΈΡ†Ρ‹

differenceFilter.OverlayImage = backgroundFrame;

// примСняСм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹

Bitmap tmp1 = differenceFilter. Apply (currentFrame);

Bitmap tmp2 = thresholdFilter. Apply (tmp1);

На ΡΡ‚ΠΎΠΌ этапС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Π±Π΅Π»Ρ‹ΠΌΠΈ пиксСлами Π½Π° ΠΌΠ΅ΡΡ‚Π΅, Π³Π΄Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ отличаСтся ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π° Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ€ΠΎΠ³Π°. ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ пиксСли, ΠΈ Π΅ΡΠ»ΠΈ ΠΈΡ… ΡΡƒΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ большС, Ρ‡Π΅ΠΌ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΠΈΡΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ.

Но Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠ°ΠΌΠ΅Ρ€ производят ΡˆΡƒΠΌΠ½Ρ‹Π΅ изобраТСния, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚Π°ΠΊΠΈΡ… мСстах, Π³Π΄Π΅ Π½Π΅Ρ‚ двиТСния Π²ΠΎΠΎΠ±Ρ‰Π΅. Для удалСния случайных ΡˆΡƒΠΌΠ½Ρ‹Ρ… пиксСлСй, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Erosion. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ сСйчас Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ€Π΅Π³ΠΈΠΎΠ½Ρ‹, Π³Π΄Π΅ Π±Ρ‹Π»ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅.

/ / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€

IFilter erosionFilter = new Erosion ();

/ / ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€

Bitmap tmp3 = erosionFilter. Apply (tmp2);

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ двиТСния Π³ΠΎΡ‚ΠΎΠ²! ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΎΠ² Π² ΡΠ»ΡƒΡ‡Π°Π΅ нСобходимости.

// Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ красного ΠΊΠ°Π½Π°Π»Π° ΠΎΡ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ изобраТСния

IFilter extrachChannel = new ExtractChannel (RGB.R);

Bitmap redChannel = extrachChannel. Apply (image);

// БлияниС красного ΠΊΠ°Π½Π°Π»Π° с Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΎΠ²

Merge mergeFilter = new Merge ();

mergeFilter.OverlayImage = tmp3;

Bitmap tmp4 = mergeFilter. Apply (redChannel);

// Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ красный ΠΊΠ°Π½Π°Π» Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ

ReplaceChannel replaceChannel = new ReplaceChannel (RGB.R);

replaceChannel.ChannelImage = tmp4;

Bitmap tmp5 = replaceChannel. Apply (image);

Рис.1

Из ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Рис. 1 ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ нСдостатки Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ двиТСтся ΠΏΠ»Π°Π²Π½ΠΎ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ нСбольшиС измСнСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ вСсь двиТущийся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ВсС становится Ρ…ΡƒΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ двиТСтся ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Ρ‚ΠΎΠ³Π΄Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π΅ Π΄Π°ΡΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π²ΠΎΠΎΠ±Ρ‰Π΅.

БущСствуСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. МоТно ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π½Π΅ Ρ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ, Π° Ρ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΊΠ°Π΄Ρ€ΠΎΠΌ видСозаписи. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ссли Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΊΠ°Π΄Ρ€Π΅, Ρ‚ΠΎ ΠΏΡ€ΠΈ сравнСниС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π° с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ Ρ†Π΅Π»Ρ‹ΠΉ двиТущийся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСзависимо ΠΎΡ‚ Π΅Π³ΠΎ скорости двиТСния. Однако, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ большой нСдостаток — Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ Ссли ΠΌΡ‹ ΠΏΠΎΠ²Π΅ΡΠΈΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ Π½Π° ΡΡ‚Π΅Π½Ρƒ? БистСма Π±ΡƒΠ΄Π΅Ρ‚ постоянно ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ двиТСния.

Как Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ случаС, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π°Ρ Π΅ΡΡ‚ΡŒ исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ RGB Π½Π° 24 Π±ΠΈΡ‚/пкс, Π½Π°Π·Π²Π°Π½Π½ΠΎΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΊΠ°Π΄Ρ€ΠΎΠΌ (image), Π΅Π³ΠΎ Ρ‡Ρ‘Ρ€Π½ΠΎ-бСлая копия (currentFrame) ΠΈ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€, Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Ρ‘Ρ€Π½ΠΎ-Π±Π΅Π»Ρ‹ΠΉ (backgroundFrame). Π’Π½Π°Ρ‡Π°Π»Π΅, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ видСозаписи ΠΊΠ°ΠΊ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€. И Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ с Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌ. Но ΡΡ‚ΠΎ даст Π½Π°ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΎΠΏΠΈΡΠ°Π» Π²Ρ‹ΡˆΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΌ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π½ΡƒΠΆΠ΅Π½. ΠœΡ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π€ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°Ρ‚ΡŒΡΡ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΊΠ°Π΄Ρ€Ρƒ (1 ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π½Π° ΠΊΠ°Π΄Ρ€). ΠŸΡ€ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ мСняСтся Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π°, Ρ†Π²Π΅Ρ‚Π° пиксСлСй Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΊΠ°Π΄Ρ€Π΅ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΊ ΠΏΠΈΠΊΡΠ΅Π»ΡΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ 1 ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π½Π° ΠΊΠ°Π΄Ρ€.

/ / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€

MoveTowards moveTowardsFilter = new MoveTowards ();

// ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΠΎΠ½ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€

moveTowardsFilter.OverlayImage = currentFrame;

Bitmap tmp = moveTowardsFilter. Apply (backgroundFrame);

// УдаляСм старый Ρ„ΠΎΠ½

backgroundFrame.Dispose ();

backgroundFrame = tmp;

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π»ΠΈ Π²Ρ‹ΡˆΠ΅. НСмного ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ для Π±ΠΎΠ»Π΅Π΅ интСрСсного Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° .

// Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²

FiltersSequence processingFilter = new FiltersSequence ();

processingFilter.Add (new Difference (backgroundFrame));

processingFilter.Add (new Threshold (15));

processingFilter.Add (new Opening ());

processingFilter.Add (new Edges ());

// примСняСм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€

Bitmap tmp1 = processingFilter. Apply (currentFrame);

// примСняСм красный ΠΊΠ°Π½Π°Π»

IFilter extrachChannel = new ExtractChannel (RGB.R);

Bitmap redChannel = extrachChannel. Apply (image);

// слияниС красного ΠΊΠ°Π½Π°Π»Π° с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ двиТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Merge mergeFilter = new Merge ();

mergeFilter.OverlayImage = tmp1;

Bitmap tmp2 = mergeFilter. Apply (redChannel);

// замСняСм красный ΠΊΠ°Π½Π°Π» Π½Π° ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ

ReplaceChannel replaceChannel = new ReplaceChannel (RGB.R);

replaceChannel.ChannelImage = tmp2;

Bitmap tmp3 = replaceChannel. Apply (image);

Рис.2

Π•ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ этой ΠΈΠ΄Π΅ΠΈ. Как Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… случаях, Ρƒ Π½Π°Ρ Π΅ΡΡ‚ΡŒ исходный ΠΊΠ°Π΄Ρ€ ΠΈ Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π½ΠΎ-бСлая копия ΠΈ ΠΊΠΎΠΏΠΈΡ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π΄Ρ€Π°. Но Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Pixellate ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΊΠ°Π΄Ρ€Ρƒ ΠΈ ΠΊ Ρ„ΠΎΠ½Ρƒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ.

// создаём Ρ„ΠΈΠ»ΡŒΡ‚Ρ€

IFilter pixellateFilter = new Pixellate ();

// примСняСм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€

Bitmap newImage = pixellateFilter (image);

Π’Π°ΠΊ, Ρƒ Π½Π°Ρ Π΅ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€Ρ‹ с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ Pixellate. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΊΠ°Π΄Ρ€Ρƒ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ — основной шаг ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ:

// создаётся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

FiltersSequence processingFilter = new FiltersSequence ();

processingFilter.Add (new Difference (backgroundFrame));

processingFilter.Add (new Threshold (15));

processingFilter.Add (new Dilatation ());

processingFilter.Add (new Edges ());

// примСняСм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€

Bitmap tmp1 = processingFilter. Apply (currentFrame);

ПослС слияния tmp1 ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΊΡ€Π°ΡΠ½Ρ‹ΠΌ ΠΊΠ°Π½Π°Π»ΠΎΠΌ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

Рис.3

ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, это выглядит Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅, Π½ΠΎ Ρƒ ΡΡ‚ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ большая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Часто Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚рСбуСтся, Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π² Ρ‚очности Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сдСлано, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ класс BlobCounter Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ АForge NET.

BlobCounter blobCounter = new BlobCounter ();

// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²

blobCounter.ProcessImage (thresholdedImage);

Rectangle[] rects = BlobCounter. GetObjectRectangles ();

// создаём ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ для ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ изобраТСния

Graphics g = Graphics. FromImage (image);

// рисуСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

using (Pen pen = new Pen (Color.Red, 1))

{

foreach (Rectangle rc in rects)

{

g.DrawRectangle (pen, rc);

if ((rc.Width > 15) && (rc.Height > 15))

{

// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ большиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

}

}

}

g.Dispose ();

Рис.4

ОбъяснСниС Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°

ВычислСния, связанныС с Π³Ρ€Π°Ρ„ичСской ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΡΠ²Π»ΡΡŽΡ‚ΡΡ достаточно рСсурсоёмкими. Π’ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠ³Π΄Π° Ρƒ Π½Π°Ρ имССтся нСсколько Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ двиТСния ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² Π±Ρ‹ΡΡ‚Ρ€Ρ‹Ρ… вычислСниях станСт критичСской. ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π² всС способы ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ я ΠΎΡΡ‚ановился Π½Π° ΡΠΏΠΎΡΠΎΠ±Π΅ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс BlobCounter. Π­Ρ‚ΠΎΡ‚ способ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π² ΠΏΠ»Π°Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ срСдства. AForge.NET Framework

видСонаблюдСниС Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ графичСский ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ

AForge.NET ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° C# с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, разработанная для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² ΠΎΠ±Π»Π°ΡΡ‚ях машинного зрСния ΠΈ ΠΈΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Π΅ сСти, гСнСтичСскиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, нСчСткая Π»ΠΎΠ³ΠΈΠΊΠ°, ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ°, ΠΈ Ρ‚. Π΄.

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° состоит ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Β· AForge. Imaging — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ;

Β· AForge. Vision — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° машинного зрСния;

Β· AForge. Video — Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹Ρ…;

Β· AForge. Neuro — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° вычислСния Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй;

Β· AForge. Genetic — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программирования развития;

Β· AForge. Fuzzy — нСчСткая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° вычислСний;

Β· AForge. Robotics — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠΈ;

Β· AForge. MachineLearning — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° обучСния ΠΌΠ°ΡˆΠΈΠ½Ρ‹;

Β· ΠΈ Ρ‚. Π΄.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ обСспСчСнии, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ двиТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ находящиСся Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Imaging ΠΈ Video

Pixellate — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° изобраТСния, создаётся эффСкт изобраТСния с Π±ΠΎΠ»ΡŒΡˆΠΈΠΌΠΈ пиксСлями — pixellated ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ„Ρ„Π΅ΠΊΡ‚ достигнут, заполняя ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ изобраТСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ†Π²Π΅Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся срСдним Ρ‚ΠΎΠ½ΠΎΠΌ краски для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ установлСн свойствами PixelWidth ΠΈ PixelHeight.

Difference — Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ различия Π±Π΅Ρ€Π΅Ρ‚ Π΄Π²Π° изобраТСния (источник ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ налоТСния) Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль равняСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ разности ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ пиксСлями ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Dilatation — Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… пиксСлСй ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ пиксСлю изобраТСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. ΠžΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠ΅ пиксСли, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, структурируя элСмСнт: 1 — Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сосСда,-1 — Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

Π€ΠΈΠ»ΡŒΡ‚Ρ€, особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ изобраТСния, Π³Π΄Π΅ это позволяСт Π²Ρ‹Ρ€Π°Ρ‰ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ соСдинСния.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ происходит постоянноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… ΠΊΠ°Π΄Ρ€ΠΎΠ² всСми прСдставлСнными Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ.

I.Π“Π»Π°Π²Π°. РСализация

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ схСма систСмы

Рис.5

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 5 прСдставлСна ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ схСма систСмы с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ слСТСния Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‚ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ, Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ cΠΎ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ wi-fi. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ со ΡˆΠ½ΡƒΡ€Π°ΠΌΠΈ. ΠŸΡ€Π°Π²Π΄Π° Π² ΡΡ‚ΠΎΠΌ случаС придётся потратится Π½Π° ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ wi-fi Ρ€ΠΎΡƒΡ‚Π΅Ρ€.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Главная Ρ„ΠΎΡ€ΠΌΠ°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Π΅Π±-ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΊΠ°ΠΊΠΈΡ… Ρ€Π΅Π³ΠΈΠΎΠ½Π°Ρ… систСма опрСдСляСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ двиТСния:

Рис.6

Π’ ΠΌΠΎΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅ΡΡ‚ΡŒ Π΄Π²Π° класса Form1(сандартный класс) ΠΈ ImageProcessing (созданный ΠΌΠ½ΠΎΠΉ).

Для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ списка ΠΊΠ°ΠΌΠ΅Ρ€ Π² ΠΊΠ»Π°ΡΡΠ΅ Form1 прСдусмотрСна ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° GetCamList. Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ классы ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ AForge net.

private VideoCaptureDevice videoSource = null;

Π­Ρ‚ΠΎΡ‚ класс источника видСосигнала ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ устройства видСосъСмки Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ, USB Π²Π΅Π±-ΠΊΠ°ΠΌΠ΅Ρ€Π°, устройство Π·Π°Ρ…Π²Π°Ρ‚Π° изобраТСния Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ интСрфСйс DirectShow.

private void getCamList (ComboBox t)

{

try

{

videoDevices = new FilterInfoCollection (FilterCategory.VideoInputDevice);

t.Items.Clear ();

if (videoDevices.Count == 0)

throw new ApplicationException ();

DeviceExist = true;

foreach (FilterInfo device in videoDevices)

{

t.Items.Add (device.Name);

}

t.SelectedIndex = 0; //make dafault to first cam

}

catch (ApplicationException)

{

DeviceExist = false;

t.Items.Add («No capture device on your system»);

}

}

Π—Π΄Π΅ΡΡŒ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°Π΄Ρ€Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ся ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ ImageProcessing. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ отобраТаСтся Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ прилоТСния Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ pictureBox1.

void captureDevice_NewFrame (object sender, NewFrameEventArgs eventArgs)

{

Bitmap image = (Bitmap)eventArgs.Frame.Clone ();

Proc.ProcessFrame (ref image);

pictureBox1.Image = image;

}

Основная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… ΠΊΠ°Π΄Ρ€ΠΎΠ²:

public void ProcessFrame (ref Bitmap image)

{

max = 0;

if (backgroundFrame == null)

{

// создаём Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ„ΠΎΠ½Π°

backgroundFrame = processingFilter1. Apply (image);

//Π·Π°Π΄Π°Ρ‘ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€

width = image. Width;

height = image. Height;

//Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

return;

}

Bitmap tmpImage;

//примСняСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

tmpImage = processingFilter1. Apply (image);

if (++counter == 2)

{

counter = 0;

// структурируСм Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ

moveTowardsFilter.OverlayImage = tmpImage;

moveTowardsFilter.ApplyInPlace (backgroundFrame);

}

differenceFilter.OverlayImage = backgroundFrame;

// Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ для примСнСния ряда Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²

bitmapData = tmpImage. LockBits (new Rectangle (0, 0, width, height),

ImageLockMode.ReadWrite, PixelFormat. Format8bppIndexed);

differenceFilter.ApplyInPlace (bitmapData);

thresholdFilter.ApplyInPlace (bitmapData);

blobCounter.ProcessImage (bitmapData);

//ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ

Rectangle[] rects = blobCounter. GetObjectsRectangles ();

//снимаСм Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ

tmpImage.UnlockBits (bitmapData);

tmpImage.Dispose ();

pixelsChanged = 0;

if (rects.Length ≠0)

{

// создаём графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

Graphics g = Graphics. FromImage (image);

using (Pen pen = new Pen (Color.Red, 1))

{

int n = 0;

int t = 0;

//рисуСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

foreach (Rectangle rc in rects)

{

g.DrawRectangle (pen, rc);

if ((t < 10) && (rc.Width > 30) && (rc.Height > 30))

{

if ((max < rc. Width * rc. Height))

{

max = rc. Width * rc. Height;

cord_X = rc. X + rc. Width / 2;

cord_Y = rc. Y + rc. Height / 2;

}

cl.pictureBox2.Visible = true;

g.DrawImage (numbersBitmaps[n], rc. Left, rc. Top, 17, 19);

//n++;

t++;

}

h++;

if (h > 25)

{

h = 0;

// вычисляСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 25 ΠΊΠ°Π΄Ρ€ΠΎΠ²

speed = Math. Abs (cord_X — cord_X1) + Math. Abs (cord_Y — cord_Y1);

g.DrawString («Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ:» + speed + «pix/s», font1, br, f);

r = speed;

cord_X1 = cord_X;

cord_Y1 = cord_Y;

}

g.DrawString («Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ:» + r + «pix/s», font1, br, f);

if (calculateMotionLevel)

pixelsChanged += rc. Width * rc. Height;

}

}

g.Dispose ();

}

}

Π’ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΠΎΠΌ исходном ΠΊΠΎΠ΄Π΅ происходит сравнСниС ΠΊΠ°Π΄Ρ€ΠΎΠ² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ. Π’ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ мСста различия этих ΠΊΠ°Π΄Ρ€ΠΎΠ² обводятся Π² ΠΊΡ€Π°ΡΠ½Ρ‹Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ. Π’Π΅ΠΌ самым ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ появлСниС Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ΠΎΠ·Π°ΠΏΠΈΡΠΈ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Ρ‘ΠΌ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ появившСгося ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

НаправлСниС двиТСния Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ слСдуСт ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ манипулятору Ссли ΠΎΠ½ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ для Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΠΌΠ΅Ρ€Ρ‹.

Π”Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС Π½Π΅ ΡΡ€Π°Π·Ρƒ опрСдСляСт Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя для создания сцСны (Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π΄Ρ€Π°), поэтому Ссли Π²Ρ‹ Π²Π΄Ρ€ΡƒΠ³ повСситС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ, ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ систСма Π²ΠΎΠΉΠ΄Ρ‘Ρ‚ Π² ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ²ΡˆΠΈΠΉΡΡ Ρ€Π΅ΠΆΠΈΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π½Π΅Ρ‚ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ двиТСния.

class UnmanagedImage;

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ этого класса это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния Π² Π½Π΅ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΠΎΠΉ памяти, просто ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π΅ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π³Π΄Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сохранСно.

ИспользованиС нСуправляСмых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколько ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ изобраТСния. Π’ Ρ‚Π°ΠΊΠΎΠΌ сцСнарии использовании управляСмых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² .NET ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ каТдая ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ исходного Π²ΠΈΠ΄Π° записи изобраТСния, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ сдСлана. Π‘Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ/Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ способа ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прямой доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ управляСмого изобраТСния.

Π‘Π»ΠΎΠΊ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°:

True false

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

Мною Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΊΠ°ΠΊ информационная систСма опрСдСляСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ двиТСния. Π’ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Aforge net присутствуСт Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Robotics для управлСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ. Π‘Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ обнаруТСния двиТСния.

II.Π“Π»Π°Π²Π°. Π˜Ρ‚ΠΎΠ³

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΈΡ‚ΠΎΠ³Π° ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ рассмотрСны основныС аспСкты создания систСмы способной Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ двиТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π”ΡƒΠΌΠ°ΡŽ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Ρ…Π²Π°Ρ‚ΠΈΡ‚ для создания домашнСй систСмы видСонаблюдСния.

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

1. Алгоритмы опрСдСлСния двиТСния: http://www.codeproject.com/Articles/10 248/Motion-Detection-Algorithms

2. Π‘Π°ΠΉΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Aforge net: http://www.aforgenet.com/framework/

3. БистСмы слСТСния: http://www.bestreferat.ru/referat-64 402.html

4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: http://www.codeproject.com/Articles/45 735/Laser-Guided-Tic-Tac-Toe-Game-using-Webcam-For-Vis

5. ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π² C#: http://www.rsdn.ru/article/dotnet/CSThreading1.xml

6. ИспользованиС Π²Π΅Π±-ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹: http://www.aforgenet.com/articles/lego_pan_tilt_camera/

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ