ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
ΠΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅/ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ — ΡΡΠΎ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅/Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π²Π΅Π΄Π΅Ρ ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ²Π΅ΡΠ°ΠΌΠΈ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΊΠΈΠΌ ΡΠ²Π΅ΡΠΎΠ²ΡΠΌ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ΅Π΄Π½Π΅ΠΉ ΡΡΠΊΠΎΡΡΠΈ ΠΏΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΎΡΠΌΡΠ»ΠΎΠΉ. Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π Π΅ΡΠ΅ΡΠ°Ρ
ΠΠΎΡΡΠ½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΠΊΠ° ΠΊ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅: 23 ΡΡΡΠ°Π½ΠΈΡΡ, 1 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, 12 ΡΠΈΡΡΠ½ΠΊΠΎΠ².
Π¦Π΅Π»Ρ ΡΠ°Π±ΠΎΡΡ — ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΊΡΡΡΠ° ΠΈ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π°Π²ΡΠΊΠΎΠ² Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ .
Π―ΡΠΊΠΎΡΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΡ, ΠΌΠ°ΡΡΠΈΡΠ° ΡΡΠΊΠΎΡΡΠ΅ΠΉ, Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π±ΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ, Π³ΡΠ°Π΄Π°ΡΠΈΠΈ ΡΠ΅ΡΠΎΠ³ΠΎ, Π½Π΅Π³Π°ΡΠΈΠ², Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ², ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ.
1. ΠΠΈΡΡ Π·Π°Π΄Π°Π½ΠΈΠΉ
2. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π·Π°Π΄Π°Ρ
2.1 Π―ΡΠΊΠΎΡΡΡ ΡΠΎΡΠ΅ΠΊ ΠΈ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
2.2 ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ
2.3 ΠΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ
2.4 ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ ΠΎΡΡΠ΅Π½ΠΊΠ°ΠΌ ΡΠ΅ΡΠΎΠ³ΠΎ
2.5 ΠΠ΅Π³Π°ΡΠΈΠ²
2.6 ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ² Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
2.7 ΠΠ΅ΡΠΎΠ΄ ΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Ρ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°
3. ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
3.1 Π Π°ΡΡΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠΊΠΎΡΡΠ΅ΠΉ. ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ
3.2 ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±Π°Π»Π°Π½ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
3.3 ΠΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ
3.4 ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Π² ΠΏΠΎΠ»ΡΡΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
3.5 ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Π² Π½Π΅Π³Π°ΡΠΈΠ²
3.6 ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ² Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
3.7 ΠΠ΅ΡΠΎΠ΄ ΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Ρ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°
4. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
4.1 Π‘ΡΠ°ΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ
4.2 ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ ΡΡΠΊΠΎΡΡΠ΅ΠΉ ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ
4.3 ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
4.4 ΠΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
4.5 ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π³ΡΠ°Π΄Π°ΡΠΈΠΈ ΡΠ΅ΡΠΎΠ³ΠΎ
4.6 ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π½Π΅Π°Π³ΡΠΈΠ²
4.7 ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ² Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
4.8 ΠΠ΅ΡΠΎΠ΄ ΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Ρ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΡΠ²ΠΎΠ΄ Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π
80 ΠΏΡΠΎΡΠ΅Π½ΡΠΎΠ² Π²ΡΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° Ρ ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅ΠΉ ΡΡΠ΅Π΄ΠΎΠΉ, Ρ. Π΅. Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π°ΡΠΈΡ Π³Π»Π°Π·. Π§Π΅Π»ΠΎΠ²Π΅ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·ΡΠ΅Π½ΠΈΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΡ, ΡΠΎΡΠΌΡ ΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅. Π Π½Π°ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΠΈΠΌ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌ, ΠΈ ΡΠ΅ΠΌ Π»ΡΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠ΅ΠΌ Π»ΡΡΡΠ΅ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΏΠΎΠ΄Π½Π΅ΡΠ΅Π½ΠΎ, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π½Π° Π½Π΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΡΡ Π»ΡΠ΄ΠΈ ΠΈ ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΡΠ²ΠΎΡΡ, Π²Π΅Π΄Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΈΡΡΠ½Π΅Π΅ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΊΡΠ°ΡΠΈΠ²ΡΡ, ΡΡΠΊΡΡ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΡ, ΡΠ΅ΠΌ Π½Π° ΠΊΠ°ΠΊΡΡ-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π΅Π²Π·ΡΠ°ΡΠ½ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ.
ΠΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΈ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π΅ΡΠ°Π»Π΅ΠΉ, ΡΡΠΎ Π΅ΡΠ΅ ΡΠ°Π· Π΄ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π°ΠΆΠ½ΠΎΡΡΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π‘Π΅ΠΉΡΠ°Ρ ΠΈΠΌΠ΅Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, Π½ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ «ΠΏΠΎΡΠ°Π΄ΠΎΠ²Π°ΡΡ Π³Π»Π°Π·». ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΈΠ»ΡΠ½ΠΎ ΡΡΠΊΠΈΠΌΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΠΌΠ½ΡΠΌΠΈ, «ΠΏΠΎΠ»ΠΈΠ½ΡΠ²ΡΠΈΠΌΠΈ», Π·Π°ΡΡΠΌΠ»Π΅Π½Π½ΡΠΌΠΈ ΠΈ Ρ. Π΄. ΠΡΠΎΡ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΡΠ»ΡΡΡΠΈΡΡ (Ρ ΠΎΡΡ ΠΈ Π½Π΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ) ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
1. ΠΠΈΡΡ Π·Π°Π΄Π°Π½ΠΈΡ
1. ΠΡΠ²ΠΎΠ΄ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½.
2. ΠΡΠ²ΠΎΠ΄ Π½Π° ΡΠΊΡΠ°Π½ ΠΌΠ°ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠΊΠΎΡΡΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
3. ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ.
4. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ½ΠΎΡΡΠΈ:
Β· Π±ΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ (ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΠΎΠΌΡ);
Β· ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ ΠΎΡΡΠ΅Π½ΠΊΠ°ΠΌ ΡΠ΅ΡΠΎΠ³ΠΎ;
Β· Π½Π΅Π³Π°ΡΠΈΠ²
5. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΊΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ.
6. ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎ Π²Π°ΡΠΈΠ°Π½ΡΡ:
— ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Ρ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.
2. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π·Π°Π΄Π°Ρ
2.1 Π―ΡΠΊΠΎΡΡΡ ΡΠΎΡΠΊΠΈ ΠΈ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π§Π΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΈΠΉ Π³Π»Π°Π· Π±ΠΎΠ»Π΅Π΅ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΊ Π·Π΅Π»Π΅Π½ΠΎΠΌΡ ΡΠ²Π΅ΡΡ, ΡΠ΅ΠΌ ΠΊ ΠΊΡΠ°ΡΠ½ΠΎΠΌΡ ΠΈ ΡΠΈΠ½Π΅ΠΌΡ Π²ΠΌΠ΅ΡΡΠ΅ Π²Π·ΡΡΡΠΌ. ΠΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΡ ΠΏΠΎ Π·Π΅Π»Π΅Π½ΡΠΌ ΠΏΠΈΠΊΡΠ΅Π»ΡΠΌ Π΄Π°Π΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠΌΠ½ΡΠΌ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΠΊΠΈΠΌ, ΡΠ΅ΠΌ ΠΏΡΠΈ ΡΠ°Π²Π½ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΠ²Π΅ΡΠΎΠ². Π―ΡΠΊΠΎΡΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΠΎΡΠΌΡΠ»Π΅:
Y:=0.3*R+0.59*G+0.11*B
ΠΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° — ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½Π°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΡΠΈΡΠ»Π° ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΊΠΎΡΡΠΈ Π½Π° Π²ΡΡΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ 4 Π²ΠΈΠ΄Π° Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ: 3 ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ (RGB) ΠΈ ΠΎΠ΄Π½Ρ ΠΏΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΉ ΡΡΠΊΠΎΡΡΠΈ.
2.2 ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΠΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ±ΡΠΈΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ «ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±Π°Π»Π°Π½ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ», ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΊΠΎΡΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΡ ΡΡ ΠΎΠΆΠΈ, ΠΈ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΡΠ΅ΡΠ΅ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΊΠΎΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π΅Π»ΠΎΠ³ΠΎ (ΠΎΠ±Π΅ΡΡΠ²Π΅ΡΠΈΠ²Π°Π΅Ρ) ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π° ΠΊΠΎΠ½ΡΡΠ°ΡΡ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΡΠ΅Π³ΡΠ»ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ (ΡΠ΅Π½Π΅ΠΉ).
ΠΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅/ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠΈ — ΡΡΠΎ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΡ 0 Π΄ΠΎ 255. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡ ΠΎΠ΄ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°Π½Π°Π»Π° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° 0.255.
ΠΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅/ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ — ΡΡΠΎ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅/Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π²Π΅Π΄Π΅Ρ ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ²Π΅ΡΠ°ΠΌΠΈ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΊΠΈΠΌ ΡΠ²Π΅ΡΠΎΠ²ΡΠΌ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ΅Π΄Π½Π΅ΠΉ ΡΡΠΊΠΎΡΡΠΈ ΠΏΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΎΡΠΌΡΠ»ΠΎΠΉ:
NewY:=K*(OldY-AveY)+AveY
Π ΡΡΠΎΠΉ ΡΠΎΡΠΌΡΠ»Π΅ NewY — Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ°Π½Π°Π»ΠΎΠ², K — ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ (K=(0.1) — ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅, K<1 — ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ), OldY — ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ°Π½Π°Π»Π°, AveY — ΡΡΠ΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ°Π½Π°Π»Π° ΠΏΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΡΠ΅ΠΊΡΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ Π΅Π³ΠΎ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ 0.255 ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°.
2.3 ΠΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ ΠΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ — ΡΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊ ΠΎΠ΄Π½ΠΎΡΠ²Π΅ΡΠ½ΠΎΠΌΡ (ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΊ ΡΠ΅ΡΠ½ΠΎ-Π±Π΅Π»ΠΎΠΌΡ). ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π±ΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π½Π΅ΠΊΠΈΠΉ ΠΏΠΎΡΠΎΠ³ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 155), Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½ΠΈΠΆΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² ΡΠ²Π΅Ρ ΡΠΎΠ½Π°, Π° Π²ΡΡΠ΅ — Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ²Π΅Ρ. Π‘Π°ΠΌΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ, Π½ΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π² ΠΏΡΡΠΌΠΎΠΌ ΡΠΌΡΡΠ»Π΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ (ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΡΠΌ), Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ 8 ΡΠΈΡΡΡΡ ΡΠ²Π΅ΡΠΎΠ², ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΠΈΡΡΡΡ ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ, Π·Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ Π³ΠΎΠ»ΡΠ±ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠΎΠ², ΡΠΎ Π΅ΡΡΡ Π±ΡΠ΄Π΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ. ΠΠΎΡΡΠΎΠΌΡ Π»ΡΡΡΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°Π΄ «ΠΏΠΎΠ»Π½ΡΠΌ» ΡΠ²Π΅ΡΠΎΠΌ ΡΠΎΡΠΊΠΈ.
2.4 ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ ΠΎΡΡΠ΅Π½ΠΊΠ°ΠΌ ΡΠ΅ΡΠΎΠ³ΠΎ ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ ΠΎΡΡΠ΅Π½ΠΊΠ°ΠΌ ΡΠ΅ΡΠΎΠ³ΠΎ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΡΠΊΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΏΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΉ ΡΠ°Π½Π΅Π΅ ΡΠΎΡΠΌΡΠ»Π΅ Y:=0.3*R+0.59*G+0.11*B, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠ°Π½Π°Π»ΠΎΠ² RGB.
2.5 ΠΠ΅Π³Π°ΡΠΈΠ² ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅Π³Π°ΡΠΈΠ²Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°Π½Π°Π»Π° Π½Π° Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ 255. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, R=255-R.
2.6 ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ² Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π¨ΡΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ — ΡΡΠΎ Π΄Π΅ΡΠ΅ΠΊΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΡΠΈΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ½ΠΈΠΌΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΠ·-Π·Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠ²Π΅ΡΠ° ΠΈ ΡΡΠΊΠΎΡΡΠΈ.
ΠΠ»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠΈΠ»ΡΡΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°Π»ΠΎΠΆΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΠΌ. ΠΠ°ΡΡΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π»ΡΠ±ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΠΌ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ ΡΠΎΡΠ΅ΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠΌΠΎΠ² (Π°Π΄Π΄ΠΈΡΠΈΠ²Π½ΡΠΉ, ΠΌΡΠ»ΡΡΠΈΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠΉ, ΠΈΠΌΠΏΡΠ»ΡΡΠ½ΡΠΉ) Π±ΡΠ΄ΡΡ ΠΎΠΏΠΈΡΠ°Π½Ρ Π΄Π°Π»ΡΡΠ΅.
2.7 ΠΠ΅ΡΠΎΠ΄ ΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Ρ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΡΡΠΌΠ°. ΠΠ»Ρ ΡΠΈΠ»ΡΡΡΠΎΠ² Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΠΎΠ½ΡΡΠΈΠ΅ Π°ΠΏΠ΅ΡΡΡΡΡ ΡΠΈΠ»ΡΡΡΠ° — ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΈΠ»ΡΡΡ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠΎ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°Π΅ΡΡΡ ΠΏΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ Π²ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
Π‘ΠΊΠΎΠ»ΡΠ·ΡΡΠ΅Π΅ ΠΎΠΊΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΠΉ Π²ΠΈΠ΄ ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ Π°ΠΏΠ΅ΡΡΡΡΡ ΡΠΈΠ»ΡΡΡΠ°, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ Π³ΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠΊΠ½ΠΎ ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° 1 ΠΏΠΈΠΊΡΠ΅Π»Ρ Π²Π½ΠΈΠ· ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π³Π°Ρ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠΆΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°Π½Π΅Π΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ.
ΠΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠ΅Π½Π½ΠΎΡΡΠΈ ΡΠ²Π΅ΡΠΎΠ²ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π² ΠΎΠΊΠ½Π΅ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΡΠΊΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠ΅Π½Π½ΠΎΡΡΠΈ Π΅Π³ΠΎ ΡΠΎΡΠ΅Π΄Π΅ΠΉ.
3. ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
3.1 Π Π°ΡΡΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠΊΠΎΡΡΠ΅ΠΉ. ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ Π§ΡΠΎΠ±Ρ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠΊΠΎΡΡΠ΅ΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΡΡΠΈΡΠ°ΡΡ ΡΡΠΎΠ²Π½ΠΈ ΡΡΠΊΠΎΡΡΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΈ Π·Π°Π½Π΅ΡΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΡΡ (DataGridView Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅). ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠΎΡΠΌΡΠ»Ρ ΠΠ΄Π΅ i, j — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΡΠΎΠ²Π΅Π½Ρ ΡΡΠΊΠΎΡΡΠΈ, -ΡΡΠΎΠ²Π½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ.
ΠΠ»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΡΠΊΠΎΡΡΠΈ ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π½Π°ΡΡΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ RGB. ΠΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠΊΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°ΡΡΡΠΈΡΠ°Π½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΡΡΠΊΠΎΡΡΠΈ ΠΈ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΡΠΊΠΎΡΡΠΈ. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ»Ρ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ RGB Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ΄Π΅Π»Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠΎΠ»ΡΠΊΠΎ Π½Π°Π΄ ΡΡΠΎΠ²Π½ΡΠΌΠΈ Π½Π°ΡΡΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ°Π½Π°Π»ΠΎΠ².
3.2 ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±Π°Π»Π°Π½ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ: Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΈΡΠ°ΡΡ ΡΡΠΎΠ²Π½ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΏΠΈΠΊΡΠ΅Π»Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· ΡΡΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΏΡΠΈΠ±Π°Π²ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΊΠΎΡΡΠΈ: ΠΏΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ ΡΡΠΊΠΎΡΡΠΈ — Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΌ, Π° ΠΏΡΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠΈ — ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ.
ΠΠΎΡΠ»Π΅ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠ°Π½Π°Π»Ρ, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π²ΡΡΠ»ΠΎ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ .
ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΡΠΈΡΠ°ΡΡ ΡΡΠ΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· ΠΊΠ°Π½Π°Π»ΠΎΠ² RGB Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠ΄Π΅ N — ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, n-ΡΠΈΡΠΈΠ½Π°, m-Π²ΡΡΠΎΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, — ΡΡΠΎΠ²Π½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π΄Π»Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ .
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ K, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ ΡΠΎΡΠΌΡΠ»Π°ΠΌΠΈ:
ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π³Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠ°Π½Π°Π»Ρ, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π²ΡΡΠ»ΠΎ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ. ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΡΠΎΡΠΌΡΠ»Ρ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ.
3.3 ΠΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π±ΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΉΡΠΈ ΠΏΠΎΡΠΎΠ³ Π±ΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΠΈ. Π ΡΡΠΈΡ ΡΠ΅Π»ΡΡ ΡΠ½Π°ΡΠ°Π»Π° ΡΡΡΠΎΠΈΠΌ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠ»ΠΎΠ²Π½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΡΡ ΡΠΎΠ½ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠΎΡΠΎΠ³ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ΅ΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΠ½ΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π½Π΅ΡΡΡ Π² ΡΠ΅Π±Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΠΎΡΠ»Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΡΡΠΎΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π΄Π²ΡΡ ΡΠ²Π΅ΡΠΎΠ².
3.4 ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Π² ΠΏΠΎΠ»ΡΡΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΏΠΎΠ»ΡΡΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ΅ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ RGB ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΡΡΠΈΡΠ°ΡΡ ΡΡΠΊΠΎΡΡΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΠΎ ΡΠΎΡΠΌΡΠ»Π΅:
ΠΠ°ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π²ΡΠ΅ΠΌ ΡΡΠ΅ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ:
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ ΡΠΎΡΠΌΡΠ»Π°Ρ i, j-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ, — ΡΡΠΎΠ²Π½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π΄Π»Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ .
ΠΠ°Π½Π½ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
3.5 ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Π² Π½Π΅Π³Π°ΡΠΈΠ² ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊ Π΅Π³ΠΎ Π½Π΅Π³Π°ΡΠΈΠ²Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ΅ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ RGB ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ²Π»ΡΡΡΠ΅Π΅ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ°ΡΠΎΠ³ΠΎ Π΄ΠΎ 255.
ΠΠ΄Π΅Π½ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠ², i, j-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ.
3.6 ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ² Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠ°Π½Π°Π»Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. ΠΠ»Ρ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠΌΠΎΠ² ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π±ΡΠ΄Π΅Ρ Π·Π°ΡΡΠΌΠ»Π΅Π½ΠΎ. ΠΡΠΎ ΡΠΈΡΠ»ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π²ΡΡΡΠ½ΡΡ Π»ΠΈΠ±ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠΈΡΠ΅Π».
ΠΠ°ΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π»ΠΈΠ±ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² RGB ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ Π½ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
3.6.1 ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°Π΄Π΄ΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠΌΠ° Π‘ΠΌΡΡΠ» Π°Π΄Π΄ΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ ΡΡΠΊΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΠ° ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ (ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ) Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΈ.
3.6.2 ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡΠ»ΡΡΠΈΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠΌΠ° Π‘ΠΌΡΡΠ» ΠΌΡΠ»ΡΡΠΈΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΡΠΊΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΠ° ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ 1 ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½Ρ (ΡΠ»ΡΡΠ°ΠΉΠ½Ρ).
3.6.3 ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠΌΠ° Π‘ΠΌΡΡΠ» ΠΈΠΌΠΏΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΠΈ ΡΡΠΊΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΡΠ²Π΅ΡΠ° ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΠ΅ΡΡΠ΅Ρ Π²ΡΡΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ²ΠΎΠ΅ΠΌ Π½Π΅ΠΈΡΠΊΠ°ΠΆΠ΅Π½Π½ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ.
3.7 ΠΠ΅ΡΠΎΠ΄ ΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Ρ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π²ΡΠ±ΡΠ°ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π°ΠΏΠ΅ΡΡΡΡΡ ΡΠΈΠ»ΡΡΡΠ°. ΠΠ±ΡΡΠ½ΠΎ ΠΎΠ½Π° Π±Π΅ΡΠ΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ 3×3, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π΅ΡΡΡ ΡΠΌΡΡΠ» Π²Π·ΡΡΡ Π°ΠΏΠ΅ΡΡΡΡΡ ΠΈ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΊΠ½ΠΎ ΡΠΈΠ»ΡΡΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠ°ΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄ (ΠΌΠΎΠΆΠ½ΠΎ Π΅Π΅ ΠΈ Π½Π΅ ΡΡΠΈΡΡΠ²Π°ΡΡ):
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π³Π° ΡΠΈΠ»ΡΡΡ Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ, ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΡΠ΅Π΄Π½Π΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ, ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ΅ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ.
ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΎΠΊΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ. ΠΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ ΡΠΈΠ»ΡΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠΊΠ½ΠΎΠΌ, ΡΠΎΡΡΠΎΡΡΠΈΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΈ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠ°Π½Π΅Π΅ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π½ΡΠ²ΡΠΈΡ ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ.
4. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
4.1 Π‘ΡΠ°ΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΡΠΌΠ°, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½Π°Ρ Π½Π° ΡΠΈΡ. 4.1.1:
Π ΠΈΡ. 4.1.1
Π’. Π. ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ ΡΡΠ΅ΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
— Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅ ΠΊΠ»ΠΈΠΊΠ½ΡΠ² Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅»;
— Π·Π°ΠΉΡΠΈ Π² «ΠΠ΅Π½Ρ->Π€Π°ΠΉΠ»->ΠΡΠΊΡΡΡΡ»;
— Π³ΠΎΡΡΡΠ΅ΠΉ ΠΊΠ»Π°Π²ΠΈΡΠ΅ΠΉ «Ctrl+O»;
ΠΡΠ΅ ΡΡΠΈ ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° :*bmp, *.jpg, *.jpeg, *.png, *.tif, *.tiff. ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΎ Π² ΠΎΠΊΠ½Π΅ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠΎΡΠΌΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 4.1.2:
Π ΠΈΡ. 4.1.2
4.2 ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ ΡΡΠΊΠΎΡΡΠ΅ΠΉ ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΡΡ ΡΡΠΊΠΎΡΡΠ΅ΠΉ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π½Π΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ»ΠΈΠΊΠ½ΡΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ°ΡΡΠΈΡΠ° ΡΡΠΊΠΎΡΡΠ΅ΠΉ», ΠΏΠΎΡΠ»Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅ΠΊΡΠ½Π΄ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΡΠΌΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ Π½Π° ΡΠΈΡ. 4.2.3
Π ΠΈΡ. 4.2.3
Π ΡΡΠΈΡ ΡΠ°Π±Π»ΠΈΡΠ°Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΊΠΎΡΡΠ΅ΠΉ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ, ΠΏΠΎ ΡΡΠ΅ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΊΠΎΡΡΠΈ. ΠΡΠ±ΡΡ ΠΈΠ· ΡΡΠΈΡ ΡΠ°Π±Π»ΠΈΡ, ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π² Excel, ΠΏΠ΅ΡΠ΅ΠΉΠ΄Ρ Π² «ΠΠ΅Π½Ρ->ΠΠ°ΡΡΠΈΡΠ°->Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ_β».
ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
— Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ»;
— ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΡ ΡΡΠΊΠΎΡΡΠ΅ΠΉ Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΠΎΡΠΌΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² «ΠΠ΅Π½Ρ->ΠΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°->ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅»;
ΠΠ° ΡΠΊΡΠ°Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΡΠΌΠ°, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½Π°Ρ Π½Π° ΡΠΈΡ. 4.2.4:
Π ΠΈΡ. 4.2.4
ΠΡΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Ρ Π² «ΠΠ΅Π½Ρ->ΠΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°->Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅->Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ_β».
4.3 ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΠ°Π½ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ Π±Π΅Π³ΡΠ½ΠΊΠΈ «Π―ΡΠΊΠΎΡΡΡ» ΠΈ «ΠΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΡ», ΠΏΡΠΈ ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ (ΡΠΈΡ. 4.3.1):
Π ΠΈΡ. 4.3.1
4.4 ΠΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ Π±ΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΠΎΡΠΎΠ³ Π±ΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² ΠΏΠΎΠ»Π΅ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ «ΠΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ"(ΡΠΈΡ. 4.4.1):
Π ΠΈΡ. 4.4.1
ΠΠΎΡΠ»Π΅ Π²ΡΠ±ΠΎΡΠ° ΠΏΠΎΡΠΎΠ³Π° ΠΈ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠΈΠ½Π°ΡΠΈΠ·Π°ΡΠΈΡ» ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΎ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΎ Π² ΡΡΠΎΠΌ ΠΆΠ΅ ΠΎΠΊΠ½Π΅ (ΡΠΈΡ. 4.4.2):
Π ΠΈΡ. 4.4.2
private void bBinary_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
BitmapData bitmap_data;
IntPtr bitmap_pixels;
unsafe
{
//ΠΠ»ΠΎΠΊΠΈΡΡΠ΅ΠΌ ΡΡΠ°ΡΡΠΎΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ
bitmap_data = picture. LockBits (new Rectangle (0, 0, picture. Width, picture. Height), ImageLockMode. ReadWrite, PixelFormat. Format24bppRgb);
//ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ
bitmap_pixels = bitmap_data.Scan0;
byte* bitmap_pbitS = (byte*)bitmap_pixels.ToPointer ();
//Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΎΡΠΊΠ° Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 3 Π±Π°ΠΉΡΠ°
byte bytes_per_pixel = 3;
byte cc_binary = (byte)numericUpDown1.Value;
byte cc_r, cc_g, cc_b, cc_bright;
for (int x = 0; x < picture. Width; x++)
{
for (int y = 0; y < picture. Height; y++)
{
//ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ x, y
byte* pixel_gr = (byte*)bitmap_pbitS + (y * bitmap_data.Stride) + (x * bytes_per_pixel);
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ 3 ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠ²Π΅ΡΠ°
cc_b = *pixel_gr;
cc_g = *(pixel_gr + 1);
cc_r = *(pixel_gr + 2);
//ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΡΠΊΠΎΡΡΡ
cc_bright = (byte)Math.Round (cc_b * 0.3f + cc_g * 0.59f + cc_r * 0.11f);
//Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ²Π΅ΡΠ° (Π±Π΅Π»ΡΠΉ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ½ΡΠΉ)
if (cc_bright > cc_binary)
{
*pixel_gr = 255;
pixel_gr++;
*pixel_gr = 255;
pixel_gr++;
*pixel_gr = 255;
}
else
{
*pixel_gr = 0;
pixel_gr++;
*pixel_gr = 0;
pixel_gr++;
*pixel_gr = 0;
}
}
}
picture.UnlockBits (bitmap_data);
pictureBox1.BackgroundImage = picture;
}}
4.5 ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π³ΡΠ°Π΄Π°ΡΠΈΠΈ ΡΠ΅ΡΠΎΠ³ΠΎ ΠΠ΄Π΅ΡΡ ΡΠΆΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠ³Π° Π½Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π³ΡΠ°Π΄Π°ΡΠΈΠΈ ΡΠ΅ΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΆΠΌΠ΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «Π‘Π΅ΡΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅» (ΡΠΈΡ. 4.5.1):
Π ΠΈΡ. 4.5.1
private void bGray_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
BitmapData bitmap_data;
IntPtr bitmap_pixels;
unsafe
{
//ΠΠ»ΠΎΠΊΠΈΡΡΠ΅ΠΌ ΡΡΠ°ΡΡΠΎΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ
bitmap_data = picture. LockBits (new Rectangle (0, 0, picture. Width, picture. Height), ImageLockMode. ReadWrite, PixelFormat. Format24bppRgb);
//ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ
bitmap_pixels = bitmap_data.Scan0;
byte* bitmap_pbitS = (byte*)bitmap_pixels.ToPointer ();
//Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΎΡΠΊΠ° Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 3 Π±Π°ΠΉΡΠ°
byte bytes_per_pixel = 3;
byte cc_r, cc_g, cc_b, cc_gray;
for (int x = 0; x < picture. Width; x++)
{
for (int y = 0; y < picture. Height; y++)
{
//ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ x, y
byte* pixel_gr = (byte*)bitmap_pbitS + (y * bitmap_data.Stride) + (x * bytes_per_pixel);
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ 3 ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠ²Π΅ΡΠ°
cc_b = *pixel_gr;
cc_g = *(pixel_gr + 1);
cc_r = *(pixel_gr + 2);
//ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΠ΅ΡΡΠΉ
cc_gray = (byte)Math.Round (cc_b * 0.3f + cc_g * 0.59f + cc_r * 0.11f);
//Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ²Π΅ΡΠ°
*pixel_gr = cc_gray;
pixel_gr++;
*pixel_gr = cc_gray;
pixel_gr++;
*pixel_gr = cc_gray;
}
}
picture.UnlockBits (bitmap_data);
pictureBox1.BackgroundImage = picture;
}}
4.6 ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π½Π΅Π³Π°ΡΠΈΠ² ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, Π²ΡΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° «ΠΠ΅Π³Π°ΡΠΈΠ²» ΠΈ Π²ΡΠ°Π»Ρ (ΡΠΈΡ. 4.6.1):
Π ΠΈΡ. 4.6.1
private void bNegative_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
BitmapData bitmap_data;
IntPtr bitmap_pixels;
unsafe
{
//ΠΠ»ΠΎΠΊΠΈΡΡΠ΅ΠΌ ΡΡΠ°ΡΡΠΎΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ
bitmap_data = picture. LockBits (new Rectangle (0, 0, picture. Width, picture. Height), ImageLockMode. ReadWrite, PixelFormat. Format24bppRgb);
//ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ
bitmap_pixels = bitmap_data.Scan0;
byte* bitmap_pbitS = (byte*)bitmap_pixels.ToPointer ();
//Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΎΡΠΊΠ° Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 3 Π±Π°ΠΉΡΠ°
byte bytes_per_pixel = 3;
byte cc_r, cc_g, cc_b;
for (int x = 0; x < picture. Width; x++)
{
for (int y = 0; y < picture. Height; y++)
{
//ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ x, y
byte* pixel_gr = (byte*)bitmap_pbitS + (y * bitmap_data.Stride) + (x * bytes_per_pixel);
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ 3 ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠ²Π΅ΡΠ°
cc_b = *pixel_gr;
cc_g = *(pixel_gr + 1);
cc_r = *(pixel_gr + 2);
//Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ²Π΅ΡΠ°
*pixel_gr = (byte)(255 — cc_b);
//*pixel_gr++;
*(pixel_gr + 1) = (byte)(255 — cc_g);
//*pixel_gr++;
*(pixel_gr + 2) = (byte)(255 — cc_r);
}
}
picture.UnlockBits (bitmap_data);
pictureBox1.BackgroundImage = picture;
}
}
ΠΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΏΡΠ½ΠΊΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π½Π° Π΄ΠΈΡΠΊ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Ρ Π² «ΠΠ΅Π½Ρ->Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ», Π»ΠΈΠ±ΠΎ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ΅ ΠΏΡΠΎΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π°ΠΆΠ°Π² Π½Π° «ΠΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅».
4.7 ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ² Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎ, Π²ΡΡΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅Ρ Π²ΠΈΠ΄ΠΎΠ² ΡΡΠΌΠΎΠ², Π΄Π»Ρ Π·Π°ΡΡΠΌΠ»Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² «ΠΠ΅Π½Ρ->ΠΠ°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ²» ΠΈ Π²ΡΠ±ΡΠ°ΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΡΠΌ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ°ΠΊΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ (ΡΠΈΡ. 4.7.1):
Π ΠΈΡ. 4.7.1
4.8 ΠΠ΅ΡΠΎΠ΄ ΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Ρ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΠ»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π±ΡΠ»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΠΏΡΠΎΡΡΠ°Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° Ρ Π±Π΅Π»ΡΠΌ, ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½ΡΠΌ ΡΠΎΠ½ΠΎΠΌ. ΠΠ°Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠΌ (Π±Π΅Π»ΡΠΌ ΡΠΎΠ½ΠΎΠΌ) ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠΎΠΌ (ΡΡΠΌΠΎΠΌ Π½Π° Π±Π΅Π»ΠΎΠΌ ΡΠΎΠ½Π΅) ΠΎΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π±Π΅Π»ΠΎΠ΅, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π° Π±Π΅Π»ΠΎΠΌ ΡΠΎΠ½Π΅ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΏΡΡΠ½Π° (ΡΠΈΡ. 4.8.1):
Π ΠΈΡ. 4.8.1
ΠΡΠ»ΠΈ Π²Π·ΡΡΡ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π΄ΡΡΠ³ΠΈΠΌ (ΡΠΈΡ. 4.8.2):
ΠΠΎ ΠΠΎΡΠ»Π΅ Π ΠΈΡ. 4.8.2
ΠΠ»Ρ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ° ΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Π½Π° ΡΠΎΠΊΠΎΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ (ΠΠ΅Π΄ΠΈΠ°Π½Π½Π°Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠΊΠΎ ΠΎΠ½Π° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π²ΡΠ±ΠΎΡΠ΅ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ, Π½ΠΎ Π½Π΅ Π² ΡΠΌΡΡΠ»Π΅ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ, Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ ΠΏΠΎΡΡΠ΅Π΄ΠΈΠ½Π΅ (5 ΡΠ»Π΅ΠΌΠ΅Π½Ρ) ΠΈΠ· ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΡ Π΄Π΅Π²ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (Π² ΡΠ»ΡΡΠ°Π΅ Π°ΠΏΠ΅ΡΡΡΡΡ = 3×3)), ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π½Π° ΡΠΈΡ. 4.8.3:
Π ΠΈΡ. 4.8.3
ΠΠΎΠ»Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π²ΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π.
ΠΡΠ²ΠΎΠ΄Ρ Π Ρ ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΌΠ½ΠΎΡ Π±ΡΠ»ΠΈ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π° ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ ΠΊΡΡΡΠ° ΠΈ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ΅Π½Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π½Π°Π²ΡΠΊΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
Π Π°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π»ΡΠ±ΡΡ ΠΈΠ· ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π·Π°Π΄Π°Ρ, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π½Π΅ ΡΡΠ΅Π±ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Π² ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Visual Studio, Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ C#.
Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
1. ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΡΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠΎ ΠΊΡΡΡΡ «ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ»;
2. ΠΠΎΠ½ΡΠ°Π»Π΅Ρ Π ., ΠΡΠ΄Ρ Π . — Π¦ΠΈΡΡΠΎΠ²Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ;
3. Π―Π½ΡΠΈΠ½ — ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ;
4. Π―ΡΠΎΡΠ»Π°Π²ΡΠΊΠΈΠΉ — ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΠΈΡΡΠΎΠ²ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ;
ΡΡΠΊΠΎΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌ Π½Π΅Π³Π°ΡΠΈΠ²
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π ΠΠΈΡΡΠΈΠ½Π³ ΠΊΠ»Π°ΡΡΠ° Form1. cs:
using System;
using System.Collections.Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
using System. Linq;
using System. Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
namespace Kursach
{
public partial class Form1: Form
{
Bitmap bitmap1;
Graphics graphics1, g;
Image MemForImage;
int FLAG = 0, Z = 1;
string name, filename;
private Color selectionColor;
DopForm Form2 = new DopForm ();
public Form1()
{
InitializeComponent ();
}
private void LoadImage (bool jpg)
{
openFileDialog1.InitialDirectory = «» ;
if (jpg)
openFileDialog1.Filter = «All Graphics Types|*.bmp;*.jpg;*.jpeg;*.png;*.tif;*.tiff» ;
if (openFileDialog1.ShowDialog () == DialogResult. OK)
{
try
{
MemForImage = Image. FromFile (openFileDialog1.FileName);
pictureBox1.BackgroundImageLayout = ImageLayout. Zoom;
pictureBox1.BackgroundImage = MemForImage;
using (Bitmap bmp = new Bitmap (pictureBox1.BackgroundImage))
{
selectionColor = GetDominantColor (bmp, false);
selectionColor = CalculateOppositeColor (selectionColor);
}
}
catch (Exception ex)
{
MessageBox.Show («ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅» + ex. Message);
}
}
}
/// Returns the dominant color of an image
private Color GetDominantColor (Bitmap bmp, bool includeAlpha)
{
// GDI+ still lies to us — the return format is BGRA, NOT ARGB.
BitmapData bmData = bmp. LockBits (new Rectangle (0, 0, bmp. Width, bmp. Height),
ImageLockMode.ReadWrite,
PixelFormat.Format32bppArgb);
int stride = bmData. Stride;
IntPtr Scan0 = bmData. Scan0;
int r = 0;
int g = 0;
int b = 0;
int a = 0;
int total = 0;
unsafe
{
byte* p = (byte*)(void*)Scan0;
int nOffset = stride — bmp. Width * 4;
int nWidth = bmp. Width;
for (int y = 0; y < bmp. Height; y++)
{
for (int x = 0; x < nWidth; x++)
{
r += p[0];
g += p[1];
b += p[2];
a += p[3];
total++;
p += 4;
}
p += nOffset;
}
}
bmp.UnlockBits (bmData);
r /= total;
g /= total;
b /= total;
a /= total;
if (includeAlpha)
return Color. FromArgb (a, r, g, b);
else
return Color. FromArgb (r, g, b);
}
/// Calculates the opposite color of a given color.
/// Source: http://dotnetpulse.blogspot.com/2007/01/function-to-calculate-opposite-color.html
private Color CalculateOppositeColor (Color clr)
{
return Color. FromArgb (255 — clr. R, 255 — clr. G, 255 — clr. B);
}
private void button1_Click (object sender, EventArgs e)
{
LoadImage (true);
label1.Text = «Π―ΡΠΊΠΎΡΡΡ:» ;
label2.Text = «ΠΠΎΠ½ΡΡΠ°ΡΡ:» ;
trackBar1.Enabled = true;
trackBar1.Value = 50;
trackBar2.Enabled = true;
trackBar2.Value = 50;
}
private void Form1_Load (object sender, EventArgs e)
{
bitmap1 = new Bitmap (pictureBox1.Width, pictureBox1. Height);
graphics1 = Graphics. FromImage (bitmap1);
}
private void button2_Click (object sender, EventArgs e)
{
DialogResult rsl = MessageBox. Show («Π₯ΠΎΡΠΈΡΠ΅ Π²ΡΠΉΡΠΈ?», «ΠΡΡ ΠΎΠ΄», MessageBoxButtons. YesNo, MessageBoxIcon. Question);
if (rsl == DialogResult. Yes)
Application.Exit ();
}
private void button3_Click (object sender, EventArgs e)
{
button4_Click (sender, e);
Form2.ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ToolStripMenuItem_Click (sender, e);
}
private void button4_Click (object sender, EventArgs e)
{
int i, j, fl = 0;
Color mycol;
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
int[,] r = new int[picture.Height, picture. Width];
int[,] g = new int[picture.Height, picture. Width];
int[,] b = new int[picture.Height, picture. Width];
int[,] br = new int[picture.Height, picture. Width];
Form2.dataGridView1.Rows.Clear ();
Form2.dataGridView1.Columns.Clear ();
Form2.dataGridView2.Rows.Clear ();
Form2.dataGridView2.Columns.Clear ();
Form2.dataGridView3.Rows.Clear ();
Form2.dataGridView3.Columns.Clear ();
Form2.dataGridView4.Rows.Clear ();
Form2.dataGridView4.Columns.Clear ();
for (i = 0; i < picture. Height — 1; i++)
{
for (j = 0; j < picture. Width — 1; j++)
}
progressBar1.Minimum = 1;
progressBar1.Value = 1;
progressBar1.Step = 1;
if (fl == 0)
{
progressBar1.Maximum = picture. Height * picture. Width + picture. Width;
Form2.dataGridView1.RowCount = picture. Height;
Form2.dataGridView1.ColumnCount = picture. Width + 1;
Form2.dataGridView1.Columns[0]. Name = «β» ;
for (j = 0; j < picture. Width — 1; j++)
{
Form2.dataGridView1.Columns[j + 1]. Name = Convert. ToString (j + 1);
progressBar1.PerformStep ();
}
for (i = 0; i < picture. Height — 1; i++)
{
Form2.dataGridView1.Rows[i]. Cells[0].Value = Convert. ToString (i + 1);
for (j = 0; j < picture. Width — 1; j++)
{
Form2.dataGridView1.Rows[i]. Cells[j + 1]. Value = br[i, j];
progressBar1.PerformStep ();
}
}
Form2.label10.Text = «1» ;
}
else
{
progressBar1.Maximum = 4 * (picture.Height * picture. Width) + 4* picture. Width;
Form2.dataGridView1.RowCount = picture. Height;
Form2.dataGridView1.ColumnCount = picture. Width + 1;
Form2.dataGridView1.Columns[0]. Name = «β» ;
Form2.dataGridView2.RowCount = picture. Height;
Form2.dataGridView2.ColumnCount = picture. Width + 1;
Form2.dataGridView2.Columns[0]. Name = «β» ;
Form2.dataGridView3.RowCount = picture. Height;
Form2.dataGridView3.ColumnCount = picture. Width + 1;
Form2.dataGridView3.Columns[0]. Name = «β» ;
Form2.dataGridView4.RowCount = picture. Height;
Form2.dataGridView4.ColumnCount = picture. Width + 1;
Form2.dataGridView4.Columns[0]. Name = «β» ;
for (j = 0; j < picture. Width — 1; j++)
{
Form2.dataGridView1.Columns[j + 1]. Name = Convert. ToString (j + 1);
progressBar1.PerformStep ();
}
for (j = 0; j < picture. Width — 1; j++)
{
Form2.dataGridView2.Columns[j + 1]. Name = Convert. ToString (j + 1);
progressBar1.PerformStep ();
}
for (j = 0; j < picture. Width — 1; j++)
{
Form2.dataGridView3.Columns[j + 1]. Name = Convert. ToString (j + 1);
progressBar1.PerformStep ();
}
for (j = 0; j < picture. Width — 1; j++)
{
Form2.dataGridView4.Columns[j + 1]. Name = Convert. ToString (j + 1);
progressBar1.PerformStep ();
}
for (i = 0; i < picture. Height — 1; i++)
{
Form2.dataGridView1.Rows[i]. Cells[0].Value = Convert. ToString (i + 1);
for (j = 0; j < picture. Width — 1; j++)
{
Form2.dataGridView1.Rows[i]. Cells[j + 1]. Value = br[i, j];
progressBar1.PerformStep ();
}
}
for (i = 0; i < picture. Height — 1; i++)
{
Form2.dataGridView2.Rows[i]. Cells[0].Value = Convert. ToString (i + 1);
for (j = 0; j < picture. Width — 1; j++)
{
Form2.dataGridView2.Rows[i]. Cells[j + 1]. Value = r[i, j];
progressBar1.PerformStep ();
}
}
for (i = 0; i < picture. Height — 1; i++)
{
Form2.dataGridView3.Rows[i]. Cells[0].Value = Convert. ToString (i + 1);
for (j = 0; j < picture. Width — 1; j++)
{
Form2.dataGridView3.Rows[i]. Cells[j + 1]. Value = g[i, j];
progressBar1.PerformStep ();
}
}
for (i = 0; i < picture. Height — 1; i++)
{
Form2.dataGridView4.Rows[i]. Cells[0].Value = Convert. ToString (i + 1);
for (j = 0; j < picture. Width — 1; j++)
{
Form2.dataGridView4.Rows[i]. Cells[j + 1]. Value = b[i, j];
progressBar1.PerformStep ();
}
}
Form2.label10.Text = «3» ;
}
Form2.Show ();
}
private void button5_Click (object sender, EventArgs e)
{
Form2.Show ();
}
private void button6_Click (object sender, EventArgs e)
{
try
{
MemForImage = Image. FromFile (openFileDialog1.FileName);
pictureBox1.BackgroundImageLayout = ImageLayout. Zoom;
pictureBox1.BackgroundImage = MemForImage;
using (Bitmap bmp = new Bitmap (pictureBox1.BackgroundImage))
{
selectionColor = GetDominantColor (bmp, false);
selectionColor = CalculateOppositeColor (selectionColor);
}
}
catch (Exception ex)
{
MessageBox.Show («ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅» + ex. Message);
}
label1.Text = «Π―ΡΠΊΠΎΡΡΡ:» ;
label2.Text = «ΠΠΎΠ½ΡΡΠ°ΡΡ:» ;
trackBar1.Value = 50;
trackBar2.Value = 50;
}
private void ΡΠΎΡ ΡΠ°Π½ΠΈΡΡToolStripMenuItem_Click (object sender, EventArgs e)
{
Graphics gr = graphics1;
PictureBox pb = pictureBox1;
gr = pb. CreateGraphics ();
SaveFileDialog savedialog = new SaveFileDialog ();
savedialog.Title = «Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ ΠΊΠ°ΠΊ …» ;
savedialog.OverwritePrompt = true;
savedialog.CheckPathExists = true;
savedialog.Filter =
openFileDialog1.Filter = //" JPEG — Π€ΠΎΡΠΌΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ|*.jpg" ;
" JPEG File (*.jpg)|*.jpg|" +
" Bitmap File (*.bmp)|*.bmp|" +
" GIF File (*.gif)|*.gif|" +
" TIF File (*.tif)|*.tif|" +
" PNG File (*.png)|*.png" ;
savedialog.ShowHelp = true;
Rectangle r = pb. RectangleToScreen (pb.ClientRectangle);
Bitmap b = new Bitmap (r.Width, r. Height);
Graphics g = Graphics. FromImage (b);
g.CopyFromScreen (r.Location, new Point (0, 0), r. Size);
if (savedialog.ShowDialog () == DialogResult. OK)
{
// Get the user-selected file name
string fileName = savedialog. FileName;
// Get the extension
string strFilExtn =
fileName.Remove (0, fileName. Length — 3);
// Save file
pb.BackColor = System.Drawing.Color.Transparent;
name = strFilExtn;
filename = fileName;
}
switch (name)
{
case «bmp» :
pb.Image.Save (filename, System.Drawing.Imaging.ImageFormat.Bmp);
break;
case «jpg» :
b.Save (filename);
break;
case «gif» :
pb.Image.Save (filename, System.Drawing.Imaging.ImageFormat.Gif);
break;
case «tif» :
pb.Image.Save (filename, System.Drawing.Imaging.ImageFormat.Tiff);
break;
case «png» :
pb.Image.Save (filename, System.Drawing.Imaging.ImageFormat.Png);
break;
default:
break;
}
try
{
process1 = new System.Diagnostics.Process ();
this.process1.StartInfo.Domain = «» ;
this.process1.StartInfo.LoadUserProfile = false;
this.process1.StartInfo.Password = null;
this.process1.StartInfo.StandardErrorEncoding = null;
this.process1.StartInfo.StandardOutputEncoding = null;
this.process1.StartInfo.UserName = «» ;
this.process1.SynchronizingObject = this;
process1.StartInfo.FileName = filename;
process1.EnableRaisingEvents = true;
process1.Start ();
}
catch { }
}
private void button7_Click (object sender, EventArgs e)
{
ΡΠΎΡ ΡΠ°Π½ΠΈΡΡToolStripMenuItem_Click (sender, e);
}
private void button8_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
BitmapData bitmap_data;
IntPtr bitmap_pixels;
unsafe
{
//ΠΠ»ΠΎΠΊΠΈΡΡΠ΅ΠΌ ΡΡΠ°ΡΡΠΎΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ
bitmap_data = picture. LockBits (new Rectangle (0, 0, picture. Width, picture. Height), ImageLockMode. ReadWrite, PixelFormat. Format24bppRgb);
//ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ
bitmap_pixels = bitmap_data.Scan0;
byte* bitmap_pbitS = (byte*)bitmap_pixels.ToPointer ();
//Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΎΡΠΊΠ° Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 3 Π±Π°ΠΉΡΠ°
byte bytes_per_pixel = 3;
byte cc_r, cc_g, cc_b, cc_gray;
for (int x = 0; x < picture. Width; x++)
{
for (int y = 0; y < picture. Height; y++)
{
//ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ x, y
byte* pixel_gr = (byte*)bitmap_pbitS + (y * bitmap_data.Stride) + (x * bytes_per_pixel);
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ 3 ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠ²Π΅ΡΠ°
cc_b = *pixel_gr;
cc_g = *(pixel_gr + 1);
cc_r = *(pixel_gr + 2);
//ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΠ΅ΡΡΠΉ
cc_gray = (byte)Math.Round (cc_b * 0.3f + cc_g * 0.59f + cc_r * 0.11f);
//Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ²Π΅ΡΠ°
*pixel_gr = cc_gray;
pixel_gr++;
*pixel_gr = cc_gray;
pixel_gr++;
*pixel_gr = cc_gray;
}
}
picture.UnlockBits (bitmap_data);
pictureBox1.BackgroundImage = picture;
}
}
private void button10_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
BitmapData bitmap_data;
IntPtr bitmap_pixels;
unsafe
{
//ΠΠ»ΠΎΠΊΠΈΡΡΠ΅ΠΌ ΡΡΠ°ΡΡΠΎΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ
bitmap_data = picture. LockBits (new Rectangle (0, 0, picture. Width, picture. Height), ImageLockMode. ReadWrite, PixelFormat. Format24bppRgb);
//ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ
bitmap_pixels = bitmap_data.Scan0;
byte* bitmap_pbitS = (byte*)bitmap_pixels.ToPointer ();
//Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΎΡΠΊΠ° Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 3 Π±Π°ΠΉΡΠ°
byte bytes_per_pixel = 3;
byte cc_r, cc_g, cc_b;
for (int x = 0; x < picture. Width; x++)
{
for (int y = 0; y < picture. Height; y++)
{
//ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ x, y
byte* pixel_gr = (byte*)bitmap_pbitS + (y * bitmap_data.Stride) + (x * bytes_per_pixel);
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ 3 ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠ²Π΅ΡΠ°
cc_b = *pixel_gr;
cc_g = *(pixel_gr + 1);
cc_r = *(pixel_gr + 2);
//Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ²Π΅ΡΠ°
*pixel_gr = (byte)(255 — cc_b);
//*pixel_gr++;
*(pixel_gr + 1) = (byte)(255 — cc_g);
//*pixel_gr++;
*(pixel_gr + 2) = (byte)(255 — cc_r);
}
}
picture.UnlockBits (bitmap_data);
pictureBox1.BackgroundImage = picture;
}
}
private void button9_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
BitmapData bitmap_data;
IntPtr bitmap_pixels;
unsafe
{
//ΠΠ»ΠΎΠΊΠΈΡΡΠ΅ΠΌ ΡΡΠ°ΡΡΠΎΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ
bitmap_data = picture. LockBits (new Rectangle (0, 0, picture. Width, picture. Height), ImageLockMode. ReadWrite, PixelFormat. Format24bppRgb);
//ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ
bitmap_pixels = bitmap_data.Scan0;
byte* bitmap_pbitS = (byte*)bitmap_pixels.ToPointer ();
//Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΎΡΠΊΠ° Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 3 Π±Π°ΠΉΡΠ°
byte bytes_per_pixel = 3;
byte cc_binary = (byte)numericUpDown1.Value;
byte cc_r, cc_g, cc_b, cc_bright;
for (int x = 0; x < picture. Width; x++)
{
for (int y = 0; y < picture. Height; y++)
{
//ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ x, y
byte* pixel_gr = (byte*)bitmap_pbitS + (y * bitmap_data.Stride) + (x * bytes_per_pixel);
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ 3 ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠ²Π΅ΡΠ°
cc_b = *pixel_gr;
cc_g = *(pixel_gr + 1);
cc_r = *(pixel_gr + 2);
//ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΡΠΊΠΎΡΡΡ
cc_bright = (byte)Math.Round (cc_b * 0.3f + cc_g * 0.59f + cc_r * 0.11f);
//Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ²Π΅ΡΠ° (Π±Π΅Π»ΡΠΉ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ½ΡΠΉ)
if (cc_bright > cc_binary)
{
*pixel_gr = 255;
pixel_gr++;
*pixel_gr = 255;
pixel_gr++;
*pixel_gr = 255;
}
else
{
*pixel_gr = 0;
pixel_gr++;
*pixel_gr = 0;
pixel_gr++;
*pixel_gr = 0;
}
}
}
picture.UnlockBits (bitmap_data);
pictureBox1.BackgroundImage = picture;
}
}
public int CorrectColor (int C)
{
if (C >255)
{
return 255;
}
else if (C <0)
{
return 0;
}
else
return C;
}
private void Π°Π΄Π΄ΠΈΡΠΈΠ²Π½ΡΠΉToolStripMenuItem_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
int i, x, y, n;
int r, g, b;
Random rand = new Random ();
progressBar1.Value = 1;
progressBar1.Step = 1;
n = rand. Next (picture.Width * 30, picture. Width * 32);
progressBar1.Maximum = n;
i = 0;
while (i < n)
{
x = rand. Next (0, picture. Width);
y = rand. Next (0, picture. Height);
r = picture. GetPixel (x, y).R + rand. Next (-40, 40);
g = picture. GetPixel (x, y).G + rand. Next (-40, 40);
b = picture. GetPixel (x, y).B + rand. Next (-40, 40);
r = CorrectColor®;
g = CorrectColor (g);
b = CorrectColor (b);
picture.SetPixel (x, y, Color. FromArgb (r, g, b));
i++;
progressBar1.PerformStep ();
}
pictureBox1.BackgroundImage = picture;
pictureBox1.Refresh ();
}
private void ΠΌΡΠ»ΡΡΠΈΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠΉToolStripMenuItem_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
int i, x, y, n;
int r, g, b;
Random rand = new Random ();
progressBar1.Value = 1;
progressBar1.Step = 1;
n = rand. Next (picture.Width * 30, picture. Width * 32);
progressBar1.Maximum = n;
i = 0;
while (i < n)
{
x = rand. Next (0, picture. Width);
y = rand. Next (0, picture. Height);
r = picture. GetPixel (x, y).R;
g = picture. GetPixel (x, y).G;
b = picture. GetPixel (x, y).B;
r = (int)(r * (rand.NextDouble () + 0.5));
g = (int)(g * (rand.NextDouble () + 0.5));
b = (int)(b * (rand.NextDouble () + 0.5));
r = CorrectColor®;
g = CorrectColor (g);
b = CorrectColor (b);
picture.SetPixel (x, y, Color. FromArgb (r, g, b));
i++;
progressBar1.PerformStep ();
}
pictureBox1.BackgroundImage = picture;
pictureBox1.Refresh ();
}
private void ΠΈΠΌΠΏΡΠ»ΡΡΠ½ΡΠΉToolStripMenuItem_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
int i, x, y, n;
int r, g, b;
Random rand = new Random ();
progressBar1.Value = 1;
progressBar1.Step = 1;
n = rand. Next (picture.Width * 30, picture. Width * 32);
progressBar1.Maximum = n;
i = 0;
while (i < n)
{
x = rand. Next (0, picture. Width);
y = rand. Next (0, picture. Height);
r = rand. Next (0, 256);
g = rand. Next (0, 256);
b = rand. Next (0, 256);
picture.SetPixel (x, y, Color. FromArgb (r, g, b));
i++;
progressBar1.PerformStep ();
}
pictureBox1.BackgroundImage = picture;
pictureBox1.Refresh ();
}
private void ΡΠ°Π½Π³ΠΎΠ²Π°ΡΠ€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡToolStripMenuItem_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
int i, j, k, m, count;
int[] R, G, B;
int minR, minG, minB, maxR, maxG, maxB;
int sR, sG, sB;
R = new int[8];
G = new int[8];
B = new int[8];
progressBar1.Value = 1;
progressBar1.Step = 1;
progressBar1.Maximum = picture. Width * picture. Height;
//ΠΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π±ΡΠ΄Π΅Ρ Π½Π°Π»ΠΎΠΆΠ΅Π½Π° ΠΌΠ°ΡΡΠΈΡΠ° Π²ΠΈΠ΄Π°:
// 1 1 1
// 1 1 1
// 1 1 1
for (i = 1; i < (picture.Width — 1); i++)
{
for (j = 1; j < (picture.Height — 1); j++)
{
count = 0;
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ ΡΡΠΎΠ²Π½ΠΈ Π²ΡΠ΅Ρ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π² ΠΎΠΊΠ½Π΅ ΡΠΈΠ»ΡΡΡΠ°
for (k = -1; k <= 1; k++)
{
for (m = -1; m <= 1; m++)
{
if (m == 0 && k == 0)
{
continue;
}
R[count] = picture. GetPixel (i + k, j + m).R;
G[count] = picture. GetPixel (i + k, j + m).G;
B[count] = picture. GetPixel (i + k, j + m).B;
count++;
}
}
progressBar1.PerformStep ();
//ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ C#
minR = R. Min (); maxR = R. Max ();
minG = G. Min (); maxG = G. Max ();
minB = B. Min (); maxB = B. Max ();
//ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ ΡΡΠ΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠΌ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠΎΠΌ
sR = (maxR + minR) / 2;
sG = (maxG + minG) / 2;
sB = (maxB + minB) / 2;
//ΠΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΡΠ΅Π΄Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π² ΠΎΠΊΠ½Π΅ ΡΠΈΠ»ΡΡΡΠ°
picture.SetPixel (i, j, Color. FromArgb (sR, sG, sB));
}
}
pictureBox1.BackgroundImage = picture;
pictureBox1.Refresh ();
}
private void trackBar1_MouseUp (object sender, MouseEventArgs e)
{
int bright = trackBar1. Value — 50;
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
int r, g, b;
for (int i = 0; i < picture. Width — 1; i++)
{
for (int j = 0; j < picture. Height — 1; j++)
{
r = picture. GetPixel (i, j).R;
g = picture. GetPixel (i, j).G;
b = picture. GetPixel (i, j).B;
r += bright;
g += bright;
b += bright;
r = CorrectColor®;
b = CorrectColor (b);
g = CorrectColor (g);
picture.SetPixel (i, j, Color. FromArgb (r, g, b));
}
pictureBox1.BackgroundImage = picture;
pictureBox1.Refresh ();
}
}
private void Π²ΡΡ ΠΎΠ΄ToolStripMenuItem_Click (object sender, EventArgs e)
{
}
private void trackBar2_MouseUp (object sender, MouseEventArgs e)
{
double K;
K = Convert. ToDouble (trackBar2.Value) / Convert. ToDouble (50);
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
int AveR = 0, AveG = 0, AveB = 0;
int r, g, b;
for (int i = 0; i < picture. Width — 1; i++)
{
for (int j = 0; j < picture. Height — 1; j++)
{
AveR = AveR + picture. GetPixel (i, j).R;
AveG = AveG + picture. GetPixel (i, j).G;
AveB = AveB + picture. GetPixel (i, j).B;
}
}
AveR = AveR / (picture.Width * picture. Height);
AveG = AveG / (picture.Width * picture. Height);
AveB = AveB / (picture.Width * picture. Height);
for (int i = 0; i < picture. Width; i++)
{
for (int j = 0; j < picture. Height; j++)
{
r = picture. GetPixel (i, j).R;
g = picture. GetPixel (i, j).G;
b = picture. GetPixel (i, j).B;
r = (int)((r — AveR) * K) + AveR;
g = (int)((g — AveG) * K) + AveG;
b = (int)((b — AveB) * K) + AveB;
r = CorrectColor®;
g = CorrectColor (g);
b = CorrectColor (b);
picture.SetPixel (i, j, Color. FromArgb (r, g, b));
}
pictureBox1.BackgroundImage = picture;
pictureBox1.Refresh ();
}
}
private void trackBar1_Scroll (object sender, EventArgs e)
{
label1.Text = «Π―ΡΠΊΠΎΡΡΡ» + «(«+ Convert. ToString (trackBar1.Value — 50) + «)» + «:» ;
label1.Refresh ();
}
private void trackBar2_Scroll (object sender, EventArgs e)
{
label2.Text = «ΠΠΎΠ½ΡΡΠ°ΡΡ» + «(«+ Convert. ToString (Convert.ToDouble (trackBar2.Value) / Convert. ToDouble (50)) + «)» + «:» ;
label2.Refresh ();
}
private void ΠΌΠ΅Π΄ΠΈΠ°Π½Π½ΡΠΉΠ€ΠΈΠ»ΡΡΡToolStripMenuItem_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
int i, j, k, m, count;
int[] R, G, B;
R = new int[9];
G = new int[9];
B = new int[9];
//ΠΠ°ΡΡΠΈΡΠ° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠ»ΡΡΡΠ° Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄:
// 1 1 1
// 1 1 1
// 1 1 1
progressBar1.Value = 1;
progressBar1.Step = 1;
progressBar1.Maximum = picture. Width * picture. Height;
for (i = 1; i < (picture.Width — 1); i++)
{
//ΠΠ½Π°ΡΠ°Π»Π΅Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡΡΠ²ΠΏΡΠ°Π²ΠΎ
for (j = 1; j < (picture.Height — 1); j++)
{
count = 0;
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ ΡΡΠΎΠ²Π½ΠΈ Π²ΡΠ΅Ρ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π² ΠΎΠΊΠ½Π΅ ΡΠΈΠ»ΡΡΡΠ°
for (k = -1; k <= 1; k++)
{
for (m = -1; m <= 1; m++)
{
R[count] = picture. GetPixel (i + k, j + m).R;
G[count] = picture. GetPixel (i + k, j + m).G;
B[count] = picture. GetPixel (i + k, j + m).B;
count++;
}
}
progressBar1.PerformStep ();
//Π‘ΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ C#
Array.Sort®;
Array.Sort (G);
Array.Sort (B);
//ΠΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠ΅Π΄ΠΈΠ°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π° ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π² ΠΎΠΊΠ½Π΅ ΡΠΈΠ»ΡΡΡΠ°
picture.SetPixel (i, j, Color. FromArgb (R[4], G[4], B[4]));
}
}
pictureBox1.BackgroundImage = picture;
pictureBox1.Refresh ();
}
int SumMod8(int x, int y)
{
int summ =0;
summ= x + y;
while (summ >7)
{
summ= summ -8;
}
return summ;
}
private void ΠΌΠ΅ΡΠΎΠ΄ΠΠΈΡΡΠ°ToolStripMenuItem_Click (object sender, EventArgs e)
{
Bitmap picture = new Bitmap (pictureBox1.BackgroundImage);
int i, j, g;
double[] S, T, A;
S =new double[8];
T =new double[8];
A =new double[8];
double max, mod;
progressBar1.Value = 1;
progressBar1.Step = 1;
progressBar1.Maximum = picture. Width * picture. Height;
for (i =1; i < (picture.Width -1); i++)
{
for (j =1; j < (picture.Height -1); j++)
{
//ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΠΎΠ²Π½ΠΈ ΡΡΠΊΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π² ΠΎΠΊΠ½Π΅ 3Ρ 3
// A0 A1 A2
// A7 F' A3
// A6 A5 A4
A[0] =0.3* picture. GetPixel (i -1, j -1).R +0.59* picture. GetPixel (i -1, j -1).G +0.11* picture. GetPixel (i -1, j -1).B;
A[1] =0.3* picture. GetPixel (i, j -1).R +0.59* picture. GetPixel (i, j -1).G +0.11* picture. GetPixel (i, j -1).B;
A[2] =0.3* picture. GetPixel (i +1, j -1).R +0.59* picture. GetPixel (i +1, j -1).G +0.11* picture. GetPixel (i +1, j -1).B;
A[3] =0.3* picture. GetPixel (i +1, j).R +0.59* picture. GetPixel (i +1, j).G +0.11* picture. GetPixel (i +1, j).B;
A[4] =0.3* picture. GetPixel (i +1, j +1).R +0.59* picture. GetPixel (i +1, j +1).G +0.11* picture. GetPixel (i +1, j +1).B;
A[5] =0.3* picture. GetPixel (i, j +1).R +0.59* picture. GetPixel (i, j +1).G +0.11* picture. GetPixel (i, j +1).B;
A[6] =0.3* picture. GetPixel (i -1, j +1).R +0.59* picture. GetPixel (i -1, j +1).G +0.11* picture. GetPixel (i -1, j +1).B;
A[7] =0.3* picture. GetPixel (i -1, j).R +0.59* picture. GetPixel (i -1, j).G +0.11* picture. GetPixel (i -1, j).B;
for (g =0; g <8; g++)
{
//ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ ΡΡΠΌΠΌΡ Si
S[g] = A[g] +A[SumMod8(g, 1)] + A[SumMod8(g, 2)];
//ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌΡΡΠΌΠΌΡ Ti
T[g] = A[SumMod8(g, 3)] + A[SumMod8(g, 4)] + A[SumMod8(g, 5)] + A[SumMod8(g, 6)] + A[SumMod8(g, 7)];
}
max=0;
for (g =0; g <8; g++)
{
//Π Π°ΡΡΠΈΡΡΠ²Π°Π΅ΠΌΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ |5*Si-3*Ti|
mod=Math.Abs ((5* S[g]) — (3* T[g]));
//ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΈΠ· ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ
if (mod > max)
{
max = mod;
}
}
//ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Ρ ΠΎΡΠΎΡΠ΅ΠΉ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΠΈ ΠΏΠΎΠ²ΡΡΠ°Π΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° 100
max = max +100;
//ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ 0…255
if (max >255)
{
max=255;
}
else if (max <0)
{
max =0;
}
progressBar1.PerformStep ();
//ΠΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠ°Π½Π°Π»ΠΎΠ² R, G, B Π½Π° ΠΌΠ΅ΡΡΠΎ F'
picture.SetPixel (i, j, Color. FromArgb ((int)max, (int)max, (int)max));
}
}
pictureBox1.BackgroundImage = picture;
pictureBox1.Refresh ();
}
private void ΠΎΡΠΊΡΡΡΡToolStripMenuItem_Click (object sender, EventArgs e)
{
LoadImage (true);
label1.Text = «Π―ΡΠΊΠΎΡΡΡ:» ;
label2.Text = «ΠΠΎΠ½ΡΡΠ°ΡΡ:» ;
trackBar1.Enabled = true;
trackBar1.Value = 50;
trackBar2.Enabled = true;
trackBar2.Value = 50;
}
}
}
ΠΠΈΡΡΠΈΠ½Π³ ΠΊΠ»Π°ΡΡΠ° DopForm. cs:
using System;
using System.Collections.Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
using System. Linq;
using System. Text;
using System.Windows.Forms;
using Microsoft.Office.Interop;
using Excel = Microsoft.Office.Interop.Excel;
namespace Kursach
{
public partial class DopForm: Form
{
Bitmap bitmap1, bitmap2, bitmap3, bitmap4;
Graphics graphics1, graphics2, graphics3, graphics4;
double[] dop = new double[256];
int FLAG=0;
string name, filename;
public DopForm ()
{
InitializeComponent ();
}
private void refr1()
{
pictureBox1.Image = bitmap1;
}
private void refr2()
{
pictureBox2.Image = bitmap2;
}
private void refr3()
{
pictureBox3.Image = bitmap3;
}
private void refr4()
{
pictureBox4.Image = bitmap4;
}
private void DopForm_Load (object sender, EventArgs e)
{
bitmap1 = new Bitmap (pictureBox1.Width, pictureBox1. Height);
graphics1 = Graphics. FromImage (bitmap1);
bitmap2 = new Bitmap (pictureBox2.Width, pictureBox2. Height);
graphics2 = Graphics. FromImage (bitmap2);
bitmap3 = new Bitmap (pictureBox3.Width, pictureBox3. Height);
graphics3 = Graphics. FromImage (bitmap3);
bitmap4 = new Bitmap (pictureBox4.Width, pictureBox4. Height);
graphics4 = Graphics. FromImage (bitmap4);
refr1(); refr2(); refr3(); refr4();
}
public void Save_data (int opr)
{
int i, j;
Excel.Application oXL;
Excel.Workbook oWB;
Excel.Worksheet oSheet;
progressBar1.Minimum = 1;
progressBar1.Value = 1;
progressBar1.Step = 1;
DataGridView dv = new DataGridView ();
if (opr == 1)
dv = dataGridView1;
else if (opr == 2)
dv = dataGridView2;
else if (opr == 3)
dv = dataGridView3;
else
dv = dataGridView4;
progressBar1.Maximum = dv. RowCount * dv. ColumnCount;
try
{
oXL = new Excel. Application ();
oWB = (Excel.Workbook)oXL.Workbooks.Add (Type.Missing);
//oSheet = (Excel.Worksheet)oXL.Worksheets.Add (Type.Missing);
oSheet = (Excel.Worksheet)oWB.ActiveSheet;
for (i = 0; i < dv. ColumnCount — 1; i++)
oSheet.Cells[1, i+1] = i;
for (i = 0; i < dv. RowCount — 1; i++)
{
for (j = 0; j < dv. ColumnCount — 1; j++)
{
oSheet.Cells[i + 2, j+1] = dv. Rows[i]. Cells[j].Value;
progressBar1.PerformStep ();
}
}
oXL.Visible = true;
oXL.UserControl = true;
}
catch (Exception theException)
{
String errorMessage;
errorMessage = «Error: «;
errorMessage = String. Concat (errorMessage, theException. Message);
errorMessage = String. Concat (errorMessage, «Line: «);
errorMessage = String. Concat (errorMessage, theException. Source);
MessageBox.Show (errorMessage, «Error»);
}
}
private void Π·Π°ΠΊΡΡΡΡToolStripMenuItem_Click (object sender, EventArgs e)
{
Hide ();
}
private void ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ1ToolStripMenuItem_Click (object sender, EventArgs e)
{
Save_data (1);
}
private void ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ2ToolStripMenuItem1_Click (object sender, EventArgs e)
{
Save_data (2);
}
private void ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ3ToolStripMenuItem1_Click (object sender, EventArgs e)
{
Save_data (3);
}
private void ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ4ToolStripMenuItem1_Click (object sender, EventArgs e)
{
Save_data (4);
}
private void histogramm (int hist)
{
int i, j;
int zn, dl;
double dop_max;
double my;
Graphics gr;
Bitmap bp;
DataGridView dg;
if (hist == 1)
{
gr = graphics1;
//graphics1.Clear (Color.Transparent);
//graphics2.Clear (Color.Transparent);
//graphics3.Clear (Color.Transparent);
//graphics4.Clear (Color.Transparent);
bp = bitmap1;
dg = dataGridView1;
}
else if (hist == 2)
{
gr = graphics2;
//graphics2.Clear (Color.Transparent);
//graphics1.Clear (Color.Transparent);
bp = bitmap2;
dg = dataGridView2;
}
else if (hist == 3)
{
gr = graphics3;
//graphics3.Clear (Color.Transparent);
bp = bitmap3;
dg = dataGridView3;
}
else
{
gr = graphics4;
//graphics4.Clear (Color.Transparent);
bp = bitmap4;
dg = dataGridView4;
}
gr.DrawLine (new Pen (Color.Black), 5, 5, 5, bp. Height — 5);
gr.DrawLine (new Pen (Color.Black), 0, bp. Height — 15, bp. Width — 5, bp. Height — 15);
gr.DrawLine (new Pen (Color.Black), (bp.Width — 10) / 5 + 5, bp. Height — 17, (bp.Width — 10) / 5 + 5, bp. Height — 13);
gr.DrawLine (new Pen (Color.Black), ((bp.Width — 10) / 5) * 2 + 5, bp. Height — 17, ((bp.Width — 10) / 5) * 2 + 5, bp. Height — 13);
gr.DrawLine (new Pen (Color.Black), ((bp.Width — 10) / 5) * 3 + 5, bp. Height — 17, ((bp.Width — 10) / 5) * 3 + 5, bp. Height — 13);
gr.DrawLine (new Pen (Color.Black), ((bp.Width — 10) / 5) * 4 + 5, bp. Height — 17, ((bp.Width — 10) / 5) * 4 + 5, bp. Height — 13);
gr.DrawLine (new Pen (Color.Black), ((bp.Width — 10) / 5) * 5 + 5, bp. Height — 17, ((bp.Width — 10) / 5) * 5 + 5, bp. Height — 13);
gr.DrawString («50», new Font («Arial», 8), new SolidBrush (Color.Red), (bp.Width — 10) / 5 — 5, bp. Height — 15);
gr.DrawString («100», new Font («Arial», 8), new SolidBrush (Color.Red), ((bp.Width — 10) / 5) * 2 — 7, bp. Height — 15);
gr.DrawString («150», new Font («Arial», 8), new SolidBrush (Color.Red), ((bp.Width — 10) / 5) * 3 — 5, bp. Height — 15);
gr.DrawString («200», new Font («Arial», 8), new SolidBrush (Color.Red), ((bp.Width — 10) / 5) * 4 — 7, bp. Height — 15);
gr.DrawString («255», new Font («Arial», 8), new SolidBrush (Color.Red), ((bp.Width — 10) / 5) * 5 — 5, bp. Height — 15);
for (i = 0; i < dg. RowCount — 1; i++)
{
for (j = 0; j < dg. ColumnCount — 2; j++)
{
zn = (int)dg.Rows[i]. Cells[j + 1]. Value;
dop[zn]++;
}
}
dop_max = dop[0];
for (i = 1; i < 256; i++)
if (dop[i] > dop_max)
dop_max = dop[i];
my = Convert. ToDouble (bp.Height — 20) / Convert. ToDouble (dop_max);
for (i = 0; i < 255; i++)
{
dl = Convert. ToInt32(dop[i] * my);
//graphics1.DrawLine (new Pen (Color.Blue), 6 + i, bp. Height — 15, 6 + i, bp. Height — 15 — dl);
gr.DrawLine (new Pen (Color.Blue), 6 + i, bp. Height — 15, 6 + i, bp. Height — 15 — dl);
}
}
public void ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ToolStripMenuItem_Click (object sender, EventArgs e)
{
FLAG = 0;
int k;
tabControl1.SelectedIndex = 1;
graphics1.Clear (Color.Transparent);
graphics2.Clear (Color.Transparent);
graphics3.Clear (Color.Transparent);
graphics4.Clear (Color.Transparent);
if (label10.Text == «1»)
{
histogramm (1);
refr1();
}
else
{
for (k = 1; k < 5;k++)
histogramm (k);
refr1();
refr2();
refr3();
refr4();
}
}
private void ogibayushaya (int ogib)
{
FLAG = 1;
int i, j, z;
int zn;
double my, dop_max;
Graphics gr;
Bitmap bp;
DataGridView dg;
if (ogib == 1)
{
gr = graphics1;
graphics1.Clear (Color.Transparent);
graphics2.Clear (Color.Transparent);
graphics3.Clear (Color.Transparent);
graphics4.Clear (Color.Transparent);
bp = bitmap1;
dg = dataGridView1;
}
else if (ogib == 2)
{
gr = graphics2;
graphics2.Clear (Color.Transparent);
graphics1.Clear (Color.Transparent);
bp = bitmap2;
dg = dataGridView2;
}
else if (ogib == 3)
{
gr = graphics3;
graphics3.Clear (Color.Transparent);
bp = bitmap3;
dg = dataGridView3;
}
else
{
gr = graphics4;
graphics4.Clear (Color.Transparent);
bp = bitmap4;
dg = dataGridView4;
}
gr.DrawLine (new Pen (Color.Black), 5, 5, 5, bp. Height — 5);
gr.DrawLine (new Pen (Color.Black), 0, bp. Height — 15, bp. Width — 5, bp. Height — 15);
gr.DrawLine (new Pen (Color.Black), (bp.Width — 10) / 5 + 5, bp. Height — 17, (bp.Width — 10) / 5 + 5, bp. Height — 13);
gr.DrawLine (new Pen (Color.Black), ((bp.Width — 10) / 5) * 2 + 5, bp. Height — 17, ((bp.Width — 10) / 5) * 2 + 5, bp. Height — 13);
gr.DrawLine (new Pen (Color.Black), ((bp.Width — 10) / 5) * 3 + 5, bp. Height — 17, ((bp.Width — 10) / 5) * 3 + 5, bp. Height — 13);
gr.DrawLine (new Pen (Color.Black), ((bp.Width — 10) / 5) * 4 + 5, bp. Height — 17, ((bp.Width — 10) / 5) * 4 + 5, bp. Height — 13);