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

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… дистанционного зондирования

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

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Окно, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню Option/Resintez, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ для рСсинтСза изобраТСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ для выполнСния Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнта Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ значСния яркости изобраТСния ΠΎΡ‚ 0 Π΄ΠΎ 50, ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π΅Π³ΠΎ коррСкция ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π½Π° ΡΠΊΡ€Π°Π½ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Π½ΠΎΠ²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ яркости… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… дистанционного зондирования (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠ˜ΠΠ˜Π‘Π’Π•Π Π‘Π’Π’Πž ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π― И ΠΠΠ£ΠšΠ˜, ΠœΠžΠ›ΠžΠ”Π•Π–Π˜ И Π‘ПОРВА УКРАИНЫ Π“ΠžΠ‘Π£Π”ΠΠ Π‘Π’Π’Π•ΠΠΠžΠ• Π’Π«Π‘Π¨Π•Π• Π£Π§Π•Π‘ΠΠžΠ• Π—ΠΠ’Π•Π”Π•ΠΠ˜Π•

«ΠΠΠ¦Π˜ΠžΠΠΠ›Π¬ΠΠ«Π™ Π“ΠžΠ ΠΠ«Π™ Π£ΠΠ˜Π’Π•Π Π‘Π˜Π’Π•Π’»

ΠšΠ°Ρ„Π΅Π΄Ρ€Π° Π³Π΅ΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠšΠ£Π Π‘ΠžΠ’ΠΠ― Π ΠΠ‘ΠžΠ’Π ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅

«ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ аэрокосмичСских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ»

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ студСнты Π³Ρ€. КМ-08

Π‘Π°ΠΊΠ°ΠΉ А. Π  Π§Π°Π±Π°Π½ΡŽΠΊ Π . Π‘ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»Π° АссистСнт Π‘Π΅Ρ€Π³Π΅Π΅Π²Π° Π•. Π› Π”нСпропСтровск, 2012

Π—Π°Π΄Π°Π½ΠΈΠ΅ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Object Pascal ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… космичСских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, сбСрСгаСмых Π² Ρ„Π°ΠΉΠ»Π°Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° LAN. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт рСсинтСза Ρ†Π²Π΅Ρ‚Π½ΠΎΠ³ΠΎ изобраТСния, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅, инструмСнта выравнивания гистограмм яркости ΠΊΠ°Π½Π°Π»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° гистограмм.

1. Π’Π•ΠžΠ Π•Π’Π˜Π§Π•Π‘ΠšΠΠ― ЧАБВЬ

1.1 Π€Π°ΠΉΠ»Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° LAN

Π€ΠΎΡ€ΠΌΠ°Ρ‚ LAN являСтся Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π° систСмы ERDAS вСрсии Π΄ΠΎ 8-ΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… дистанционного зондирования, Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ содСрТат Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, которая ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ систСмам ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π”Π”Π— ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° составляСт 128 Π±Π°ΠΉΡ‚.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° LAN (ERDAS 7.4) прСдставлСна Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1.1.

Π’Π°Π±Π»ΠΈΡ†Π° 1.1 Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° LAN (ERDAS 7.4)

Имя поля

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°ΠΉΡ‚

ОписаниС

HDWORD

1:6

Массив ΠΈΠ· 6 Π±Π°ΠΉΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит строку «HEAD74» ΠΈΠ»ΠΈ «HEADER»

IPACK

7:8

Π¦Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сколько Π±Π°ΠΉΡ‚ отводится для Π΄Π°Π½Π½Ρ‹Ρ…:

0 = 8 Π±ΠΈΡ‚

1 = 4 Π±ΠΈΡ‚Π°

2 = 16 Π±ΠΈΡ‚

NBANDS

9:10

Π¦Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ полос/ΠΊΠ°Π½Π°Π»ΠΎΠ²

11:16

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ

ICOLS

17:20

Π¦Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — количСство столбцов

IROWS

21:24

Π¦Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — количСство строк

XSTART

25:28

Π¦Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — Ρ… — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ пиксСля Π² Ρ„Π°ΠΉΠ»Π΅ (Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»)

YSTART

29:32

Π¦Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — Ρƒ — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ пиксСля Π² Ρ„Π°ΠΉΠ»Π΅ (Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»)

33:88

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ

MAPTYP

89:90

Π¦Π΅Π»ΠΎΠ΅, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ картографичСской ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ, связанной с Ρ„Π°ΠΉΠ»ΠΎΠΌ

NCLASS

91:92

Π¦Π΅Π»ΠΎΠ΅, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ количСство классов Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (для Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° GIS)

93:106

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ

IAUTYP

107:108

Π¦Π΅Π»ΠΎΠ΅, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ измСрСния ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ, которая связана с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ пиксСлСм:

0 = отсутствуСт

1 = Π°ΠΊΡ€

2 = Π³Π΅ΠΊΡ‚Π°Ρ€

3 = Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹

ACRE

109:112

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ пиксСлС Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ значатся Π² ΠΏΠΎΠ»Π΅ IAUTYP

Имя поля

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°ΠΉΡ‚

ОписаниС

XMAP

113:116

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ…-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚Ρ‹ пиксСля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° Π² Ρ„Π°ΠΉΠ»Π΅

YMAP

117:120

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρƒ-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚Ρ‹ пиксСля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° Π² Ρ„Π°ΠΉΠ»Π΅

XCELL

121:124

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля ΠΏΠΎ Ρ…-Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ значатся Π² ΠΏΠΎΠ»Π΅ MAPTYP

YCELL

125:128

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля ΠΏΠΎ Ρƒ-Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ значатся Π² ΠΏΠΎΠ»Π΅ MAPTYP

1.2 Гистограмма яркости изобраТСния Π―Ρ€ΠΊΠΎΡΡ‚ΡŒ изобраТСния Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях опрСдСляСтся ΠΊΠΎΠ½Ρ‚Ρ€Π°ΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ, которая прСдставляСт Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ уровнями ΠΏΠΎΠ»ΡƒΡ‚ΠΎΠ½ΠΎΠ² Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ области изобраТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΠΊΠ½Π΅ (локальная ΠΊΠΎΠ½Ρ‚Ρ€Π°ΡΡ‚Π½ΠΎΡΡ‚ΡŒ) ΠΈΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΉ области изобраТСния (глобальная ΠΊΠΎΠ½Ρ‚Ρ€Π°ΡΡ‚Π½ΠΎΡΡ‚ΡŒ). ΠŸΡƒΡ‚Π΅ΠΌ усилСния контрастности ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… структур изобраТСния ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ искаТСниС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΈ условиях получСния изобраТСния.

Гистограммой яркости изобраТСния (рис 1.1) называСтся Π³Ρ€Π°Ρ„ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ частоту появлСния Ρ‚ΠΎΡ‡ΠΊΠΈ (пиксСля) Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ яркости Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ. Π¨ΠΊΠ°Π»Π° яркости Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ значСния ΠΎΡ‚ 0 Π΄ΠΎ 255.

Рис. 1.1 Гистограмма яркости изобраТСния

Гистограмма яркости ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ качСство изобраТСния Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ матСматичСской ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° изобраТСния Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹.

Π”Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ гистограммы яркости ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. Гистограммой Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния с ΡƒΡ€ΠΎΠ²Π½ΡΠΌΠΈ яркости Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [0, L-1] называСтся дискрСтная функция

h (rk) = nk

Π³Π΄Π΅ rk Π΅ΡΡ‚ΡŒ k-Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ яркости, Π° nk — количСство пиксСлСй Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΡ€ΠΊΠΎΡΡ‚ΡŒ rk.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ Π΅ΡΡ‚ΡŒ нормализация гистограммы ΠΏΡƒΡ‚Π΅ΠΌ дСлСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния Π½Π° ΠΎΠ±Ρ‰Π΅Π΅ количСство пиксСлСй Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ обозначаСтся n. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ гистограммы Π±ΡƒΠ΄Π΅Ρ‚:

p (rk) = nk/n для k=0,1,…,(L-1)

Π³Π΄Π΅ p (rk) — ΠΎΡ†Π΅Π½ΠΊΠ° вСроятности попадания пиксСля со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ яркости rk. Π‘ΡƒΠΌΠΌΠ°Ρ€Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ гистограммы Ρ€Π°Π²Π½ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅. Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π² ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… систСмах L=256.

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

1.3 Градационная коррСкция Π‘Π»Π°Π±Ρ‹ΠΉ контраст — Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнный Π΄Π΅Ρ„Π΅ΠΊΡ‚ изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обусловлСн ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° отобраТСния яркостСй, Ρ‡Ρ‚ΠΎ часто сочСтаСтся с Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΡΡ‚ΡŒΡŽ характСристики ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ (Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ характСристикой). Одним ΠΈΠ· ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ яркости изобраТСния являСтся использованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ измСнСния яркости Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ изобраТСния Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ растягиваСтся Π½Π° Π²ΡΡŽ ΡˆΠΊΠ°Π»Ρƒ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΏΠΎΠ»ΡƒΡ‚ΠΎΠ½ΠΎΠ² [0-(L-1)], Π³Π΄Π΅ L=256. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ измСнСния яркости Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ изобраТСния ΠΈ ΡΡ‚ΠΈΠΌ самым ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ контрастным. НаиболСС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΏΡ€ΠΎΡΡ‚Ρ‹ΠΌ способом Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ являСтся Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅:

Ρ†Π²Π΅Ρ‚Π½ΠΎΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ гистограмма космичСский

для

для ,

для

Π³Π΄Π΅ , — минимальноС ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ яркости Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ изобраТСния .

2. ΠŸΠ ΠΠšΠ’Π˜Π§Π•Π‘ΠšΠΠ― ЧАБВЬ

  • 2.1 Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ прилоТСния появляСтся Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ интСрфСйс, прСдставлСнный Π½Π° Ρ€ΠΈΡ. 2.1.
  • На Ρ„ΠΎΡ€ΠΌΠ΅ прилоТСния располоТСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:
  • Β· TMainMenu — Π³Π»Π°Π²Π½ΠΎΠ΅ мСню ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • Β· TPaintBoxΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°ΠΈΠΈ изобраТСния
  • Β· TOpenDialog — ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для открытия изобраТСния
  • ПослС запуска ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, описанныС Π² Ρ‚Π°Π± 2.1:
  • Π’Π°Π±Π»ΠΈΡ†Π° 2.1
  • ΠŸΡƒΠ½ΠΊΡ‚ мСню

    ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ

    File

    Open

    ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ изобраТСния

    Close

    Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ изобраТСния

    Exit

    Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

    Operation

    Resintez

    Π’Ρ‹Π·ΠΎΠ² инструмСнта рСсинтСза ΠΈ Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ

    Histogram

    ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ гистограммы изобраТСния

    Рис. 2.1 Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ: TViewer, TResintez ΠΈ THistogram.

    Π“Π»Π°Π²Π½Ρ‹ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ прилоТСния являСтся TViewer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… модуля. Π’ Π½Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° LAN, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° исходного ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π° ΡΠΊΡ€Π°Π½.

    Π’ ΠΌΠΎΠ΄ΡƒΠ»Π΅ TResintez Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ инструмСнты Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Ρ€Π΅ΡΠΈΠ½Ρ‚Π΅Π·Π°. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ устанавливаСт соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ изобраТСния (красный, Π·Π΅Π»Π΅Π½Ρ‹ΠΉ, синий) ΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ космоснимка. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ яркости, для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ контрастности снимка.

    ΠœΠΎΠ΄ΡƒΠ»ΡŒ THistogram ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹Π²ΠΎΠ΄ гистограмм яркости исходного ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ изобраТСния. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

    Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ UML-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ классов (ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π‘) прСдставлСны ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΏΠΎΠ»Ρ Π΄Π°Π½Π½Ρ‹Ρ…, содСрТащиСся Π² ΠΊΠ»Π°ΡΡΠ°Ρ… прилоТСния.

    2.2 Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Окно, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню Option/Resintez, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ для рСсинтСза изобраТСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ для выполнСния Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнта Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ значСния яркости изобраТСния ΠΎΡ‚ 0 Π΄ΠΎ 50, ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π΅Π³ΠΎ коррСкция ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π½Π° ΡΠΊΡ€Π°Π½ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Π½ΠΎΠ²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ яркости.

    Окно состоит ΠΈΠ· Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: Π’SplinEdit, TLable, TBitBtn, TComboBox, TPanel.

    Рис 2.2 Окно Π²Ρ‹Π±ΠΎΡ€ ΠΊΠ°Π½Π°Π»ΠΎΠ²

    Окно, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню Option/Histogram, для построСния гистограммы яркости ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ для Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ изобраТСния. Π’ Π»Π΅Π²ΠΎΠΉ части ΠΎΠΊΠ½Π°-прилоТСния всСгда ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ гистограмма яркости исходного изобраТСния, Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ Π±Ρ‹Π»ΠΎ Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ значСния яркости Π΄ΠΎ ΡΡ‚ΠΎΠ³ΠΎ.

    Окно состоит ΠΈΠ· Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: Π’SplinEdit, TLable, TBitBtn, TComboBox, TPanel, NChar.

    Рис. 2.3 Окно построСния гистограмм

    2.3 Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Визуализация изобраТСния delt1234 с ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ яркости = 5.

    Рис. 2.4 Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

    3. ΠŸΠžΠ‘Π’Π ΠžΠ•ΠΠ˜Π• Π“Π˜Π‘Π’ΠžΠ“Π ΠΠœΠœΠ« ЯРКОБВИ Π’ Π‘Π Π•Π”Π• MATLAB

    Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ коррСктности Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния Π±Ρ‹Π»ΠΈ сравнСны Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ построСния гистограмм яркости ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² с Π³ΠΈΡΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, построСнными Π² ΡΡ€Π΅Π΄Π΅ MATLAB.

    Для построСния гистограмм яркости Π² MATLAB прСдусмотрСна встроСнная функция imhist. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

    clc

    clear

    a=imread ('butovo.bmp');

    a1=imread ('butovo_r.bmp');

    fr=a (, 1);

    fg=a (, 2);

    fb=a (, 3);

    max_stat=max (imhist (fr))

    b=imhist (fr)*100/max_stat;

    plot (b);

    Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 3.1 прСдставлСны изобраТСния гистограмм

    Π’Π°Π±Π»ΠΈΡ†Π° 3.1

    Viewer

    MATLAB

    Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ инструмСнт построСния гистограмм Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

    Π’Ρ‹Π²ΠΎΠ΄Ρ‹ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния задания являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ космичСских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, сохранСнных Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ LAN. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ инструмСнты рСсинтСза Ρ†Π²Π΅Ρ‚Π½ΠΎΠ³ΠΎ изобраТСния, построСния гистограмм яркости для исходного изобраТСния ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΠΎΠ³ΠΎ Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° Π±Π°Π·Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° кусочно-Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ прСобразования яркости.

    ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ протСстировано Π½Π° Ρ‚Ρ€Π΅Ρ… изобраТСниях Ρ‚ΠΈΠΏΠ° LAN: Butovo, delt1234, TIPJUL1. Для Π°Π½Π°Π»ΠΈΠ·Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΡΡ€Π΅Π΄Π΅ MatLab Π±Ρ‹Π»ΠΈ рассчитаны срСдниС значСния яркости исходного изобраТСния ΠΈ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… Π΄ΠΈΡΠΏΠ΅Ρ€ΡΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ построСны гистограммы яркости. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

    1. ГонсалСс Π ., Вудс Π ., Эддинс Π‘. «Π¦ΠΈΡ„ровая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΡΡ€Π΅Π΄Π΅ MatLab»: Москва: ВСхносфСра, 2006 — 616с.

    2. ГонсалСс Π ., Вудс Π ., Эддинс Π‘. «Π¦ΠΈΡ„ровая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ»: Москва: ВСхносфСра, 2006 — 1072с.

    3. Π“Π°Ρ€ΠΊΡƒΡˆΠ° И. М., Π‘Π°Π±Π΅Π½ΠΊΠΎ Π“. М., «ΠžΠ±Ρ€ΠΎΠ±ΠΊΠ° Ρ‚Π° Π΄Π΅ΡˆΠΈΡ„рування аСрокосмiΡ‡Π½ΠΈΡ… Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΡŒ»: ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π½i Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ii Π”.: Нацiональний Π³iΡ€Π½ΠΈΡ‡ΠΈΠΉ ΡƒΠ½iвСрситСт, 2008 — 72с.

    4. Leica Geosystems, Erdas Imgine, ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ руководство TourGuides, 2005 — 707с.

    ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, А ΠšΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, Menus, ExtCtrls, Unit2, Unit3, StdCtrls;

    type

    TViewer = class (TForm)

    OD: TOpenDialog;

    PB: TPaintBox;

    Menu: TMainMenu;

    File1: TMenuItem;

    Open1: TMenuItem;

    Close1: TMenuItem;

    Exit1: TMenuItem;

    Operation: TMenuItem;

    Resintez1: TMenuItem;

    Histogram1: TMenuItem;

    TScrollBox1: TScrollBox;

    function OpenDialog: boolean;

    procedure CreateBitmap;

    procedure DestroyData;

    procedure PBPaint (Sender:TObject);

    procedure FormClose (Sender: TObject; var Action: TCloseAction);

    procedure LoadLan;

    procedure Open1Click (Sender: TObject);

    procedure Close1Click (Sender: TObject);

    procedure Exit1Click (Sender: TObject);

    procedure Resintez1Click (Sender: TObject);

    procedure Histogram1Click (Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    bmp:TBitmap;

    end;

    var

    Viewer: TViewer;

    nRows:integer;

    nCols:integer;

    nBands:integer;

    flLoadData:boolean;

    type LAN_HEADER=record

    HDWORD:array[0.5]of Byte;

    IPACK:WORD;

    IBANDS:WORD;

    unused1:array[0.5] of Byte;

    ICOLS:integer;

    IROWS:integer;

    xstart:integer;

    ystart:integer;

    unused2:array[0.55]of byte;

    maptyp:word;

    nclass:word;

    unused3:array[0.13]of byte;

    iautyp:word;

    acre:single;

    xmap:single;

    ymap:single;

    xcell:single;

    ycell:single;

    end;

    implementation

    {$R *.dfm}

    //ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ изобраТСния *.LAN

    function TViewer. OpenDialog:boolean;

    begin

    OD.Filter:='LAN Files (*.lan)|*.lan';

    result:=OD.Execute;

    end;

    procedure TViewer. CreateBitmap;

    var

    i, j: integer;

    begin

    for i:=0 to nRows-1 do

    for j:=0 to nCols-1 do

    bmp.canvas.Pixels[j, i]: =RGB (histogram.data[i, j, Resintez. b1−1], histogram. data[i, j, Resintez. b2−1], histogram. data[i, j, Resintez. b3−1]);

    end;

    //Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ изобраТСниСя

    procedure TViewer. DestroyData;

    begin

    if flLoadData then

    begin

    flLoadData:=false;

    bmp.Dormant;

    bmp.FreeImage;

    bmp.Free;

    bmp:=nil;

    histogram.data:=nil;

    end;

    if (Resintez.bmp1<>nil) then

    begin

    Resintez.bmp1.Dormant;

    Resintez.bmp1.FreeImage;

    Resintez.bmp1.Free;

    Resintez.bmp1:=nil;

    Resintez.ch1:=false;

    end;

    end;

    //ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° изобраТСния

    procedure TViewer. PBPaint (Sender:TObject);

    begin

    if flLoadData then begin

    if Resintez. ch1=true then

    PB.Canvas.Draw (0,0,Resintez.bmp1)

    else

    PB.Canvas.Draw (0,0,bmp);

    end;

    end;

    procedure TViewer. FormClose (Sender: TObject; var Action: TCloseAction);

    begin

    DestroyData;

    end;

    //Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ структуры Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° LAN

    procedure TViewer. LoadLan;

    var

    FHeader:file;

    lan:LAN_HEADER;

    buf:Byte;

    i, j, k:integer;

    begin

    try

    AssignFile (FHeader, OD. FileName);

    Reset (FHeader, 1);

    BlockRead (FHeader, lan, sizeof (lan));

    SetLength (histogram.data, lan. IROWS, lan. ICOLS, lan. IBANDS);

    PB.width:=lan.ICOLS;

    PB.Height:=lan.IROWS;

    bmp:=TBitmap.Create;

    bmp.width:=lan.ICOLS;

    bmp.Height:=lan.IROWS;

    nRows:=lan.IROWS;

    nCols:=lan.ICOLS;

    nBands:=lan.IBANDS;

    for i:=0 to lan. IROWS-1 do

    for k:=0 to lan. IBANDS-1 do

    for j:=0 to lan. ICOLS-1 do

    begin

    BlockRead (FHeader, buf, 1);

    histogram.data[i, j, k]: =buf;

    end;

    flLoadData:=true;

    finally

    CloseFile (FHeader);

    end;

    end;

    procedure TViewer. Open1Click (Sender: TObject);

    var i: integer;

    begin

    if OpenDialog then

    begin

    DestroyData;

    LoadLAN;

    Resintez.Repaint;

    with Resintez do

    begin

    R.ItemIndex:=-1;

    G.ItemIndex:=-1;

    B.ItemIndex:=-1;

    R.Items.Clear;

    G.Items.Clear;

    B.Items.Clear;

    OK.Enabled:=false;

    for i:=0 to nbands-1 do

    begin

    R.Items.Add (inttostr (1+i));

    G.Items.Add (inttostr (1+i));

    B.Items.Add (inttostr (1+i));

    end;

    end;

    Resintez.ShowModal;

    CreateBitmap;

    W:=bmp.Width;

    H:=bmp.Height;

    PB.Repaint;

    Open1.Enabled:=false;

    Close1.Enabled:=true;

    Resintez1.Enabled:=true;

    Histogram1.Enabled:=true;

    end;

    end;

    procedure TViewer. Close1Click (Sender: TObject);

    begin

    DestroyData;

    Open1.Enabled:=true;

    Close1.Enabled:=false;

    Resintez1.Enabled:=false;

    Histogram1.Enabled:=false;

    pb.Repaint;

    Resintez.Porog.Value:=0;

    Resintez.R.ItemIndex:=-1;

    Resintez.g.ItemIndex:=-1;

    Resintez.B.ItemIndex:=-1;

    end;

    procedure TViewer. Exit1Click (Sender: TObject);

    begin

    Viewer.Close;

    end;

    //ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ инструмСнта рСситнСза изобраТСния

    procedure TViewer. Resintez1Click (Sender: TObject);

    begin

    Resintez.ShowModal;

    CreateBitmap;

    PB.Repaint;

    end;

    //ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ инструмСнта построСния гистограммы

    procedure TViewer. Histogram1Click (Sender: TObject);

    begin

    Histogram.ShowModal;

    end;

    end.

    unit Unit2;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, Spin, Buttons, Math, ExtCtrls;

    type A=array of array of integer;

    type

    TResintez = class (TForm)

    Panel1: TPanel;

    Porog: TSpinEdit;

    Panel2: TPanel;

    Label1: TLabel;

    LabelR: TLabel;

    R: TComboBox;

    LabelG: TLabel;

    G: TComboBox;

    LabelB: TLabel;

    B: TComboBox;

    OK: TBitBtn;

    Close: TBitBtn;

    procedure OKClick (Sender: TObject);

    procedure RChange (Sender: TObject);

    procedure GChange (Sender: TObject);

    procedure BChange (Sender: TObject);

    procedure BrightHist;

    procedure Grad_cor (mas:A);

    procedure PorogChange (Sender: TObject);

    procedure FormCreate (Sender: TObject);

    procedure Panel2MouseMove (Sender: TObject; Shift: TShiftState; X,

    Y: Integer);

    private

    { Private declarations }

    public

    { Public declarations }

    massivR:A;

    massivG:A;

    massivB:A;

    bmp1:TBitmap;

    ch, ch1: boolean;

    b1,b2,b3:integer;

    end;

    var

    Resintez: TResintez;

    implementation

    uses Unit1, Unit3;

    {$R *.dfm}

    procedure TResintez. OKClick (Sender: TObject);

    var

    i, j: integer;

    begin

    //Если ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ яркости,

    //Ρ‚ΠΎ создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ bmp1 Ρ‚ΠΈΠΏΠ° TBitmap, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ

    //Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

    if (ch1=true) then begin

    bmp1:=TBitmap.Create;

    bmp1.width:=Viewer.bmp.width;

    bmp1.Height:=viewer.bmp.height;

    BrightHist;

    for i:=0 to bmp1. width-1 do

    for j:=0 to bmp1. Height-1 do

    //созданиС изобраТСния, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… яркостСй //ΠΊΠ°Π½Π°Π»ΠΎΠ² bmp1.canvas.Pixels[i, j]: =RGB (massivR[i, j], massivG[i, j], massivB[i, j]);

    end;

    end;

    //Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ²

    procedure TResintez. RChange (Sender: TObject);

    begin

    b1:=Strtoint (Resintez.R.Items.Strings[Resintez.R.ItemIndex]);

    end;

    procedure TResintez. GChange (Sender: TObject);

    begin

    b2:=Strtoint (Resintez.G.Items.Strings[Resintez.G.ItemIndex]);

    end;

    procedure TResintez. BChange (Sender: TObject);

    begin

    b3:=Strtoint (Resintez.B.Items.Strings[Resintez.B.ItemIndex]);

    end;

    //Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массивов ΠΊΠ°Π½Π°Π»ΠΎΠ² яркостСй

    procedure TResintez. BrightHist;

    var

    stat:array[0.255] of double;

    y:array[0.255] of double;

    MAX_STAT, x: extended;

    L, h, w, percent, max, i, j, u1, u2,z:integer;

    begin

    L:=256;

    h:=bmp1.Height;

    w:=bmp1.Width;

    Setlength (massivR, w, h);

    Setlength (massivG, w, h);

    Setlength (massivB, w, h);

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    massivR[i, j]: =histogram.data[j, i, Resintez. b1−1];

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    massivG[i, j]: =histogram.data[j, i, Resintez. b2−1];

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    massivB[i, j]: =histogram.data[j, i, Resintez. b3−1];

    //Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ

    grad_cor (massivR);

    grad_cor (massivG);

    grad_cor (massivB);

    end;

    //ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅Ρ†ΠΈΠΈ

    procedure TResintez. Grad_cor (mas:A);

    var

    stat:array[0.255] of double;

    y:array[0.255] of double;

    MAX_STAT, x: extended;

    L, h, w, percent, max, i, j, u1, u2,z:integer;

    begin

    h:=bmp1.Height;

    w:=bmp1.Width;

    L:=256;

    for i:=0 to 255 do

    stat[i]: =0;

    //ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ количСства элСмСнтов

    //ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ яркости

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    stat[mas[i, j]]: =stat[mas[i, j]]+1;

    MAX_STAT:=0;

    for i:=0 to 255 do

    if MAX_STAT

    for i:=0 to 255 do

    y[i]: =((stat[i]*100)/MAX_STAT);

    //НахоТдСниС минимального ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнтов яркости

    percent:=Porog.Value;

    max:=100;

    i:=0;

    while i<256 do begin

    if (y[i]=100) then z:=i;

    i:=i+1;

    end;

    x:=max*percent/100;

    u1:=0;

    u2:=0;

    i:=0;

    repeat

    if (y[i]>=x) then begin u1:=i; break; end;

    i:=i+1;

    until i>(z-1);

    i:=z;

    repeat

    if (y[i]>=x) then u2:=i;

    i:=i+1;

    until i>255;

    //ΠšΡƒΡΠΎΡ‡Π½ΠΎ-Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    begin

    if mas[i, j]

    then mas[i, j]: =0

    else if (mas[i, j]>=u1) and (mas[i, j]<=u2)

    then mas[i, j]: =trunc (((mas[i, j]-u1)/(u2-u1))*(L-1))

    else if mas[i, j]>u2

    then mas[i, j]: =L-1;

    end;

    end;

    procedure TResintez. PorogChange (Sender: TObject);

    begin

    ch1:=true;

    end;

    procedure TResintez. FormCreate (Sender: TObject);

    begin

    ch1:=false;

    end;

    procedure TResintez. Panel2MouseMove (Sender: TObject;

    Shift: TShiftState; X, Y: Integer);

    begin

    ch:=false;

    if (R.ItemIndex>-1) and (G.ItemIndex>-1) and (B.ItemIndex>-1)

    then

    OK.Enabled:=true;

    end;

    end.

    unit Unit3;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Unit2, Buttons,

    Spin, Series, Math;

    type

    THistogram = class (TForm)

    Panel1: TPanel;

    Bands: TLabel;

    BandNum: TComboBox;

    Chart1: TChart;

    Chart2: TChart;

    Porog: TSpinEdit;

    Correction: TBitBtn;

    procedure BandNumChange (Sender: TObject);

    procedure BandHist;

    procedure CorrectionClick (Sender: TObject);

    procedure FormClose (Sender: TObject; var Action: TCloseAction);

    private

    { Private declarations }

    public

    data:array of array of array of byte;

    { Public declarations }

    end;

    var

    Histogram: THistogram;

    MAX_STAT:extended;

    massiv:array of array of integer;

    w, h: integer;

    y:array [0.255] of double;

    implementation

    uses Unit1;

    {$R *.dfm}

    //ИзмСнСниС канала

    procedure THistogram. BandNumChange (Sender: TObject);

    begin

    chart2.SeriesList.Clear;

    chart2.Repaint;

    Porog.Value:=0;

    chart1.SeriesList.Clear;

    BandHist;

    Chart1.Repaint;

    Correction.Enabled:=true;

    end;

    //ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ гистограммы исходного изобраТСния

    procedure THistogram. Bandhist;

    var

    i, j: integer;

    gr:TLineSeries;

    stat:array[0.255] of double;

    begin

    gr:=TLineSeries.Create (nil);

    h:=viewer.PB.Height;

    w:=Viewer.PB.Width;

    Setlength (massiv, w, h);

    for i:=0 to h-1 do

    for j:=0 to w-1 do begin

    case BandNum. ItemIndex of

    0: massiv[j, i]: = data[i, j, Resintez. b1−1];

    1: massiv[j, i]: = data[i, j, Resintez. b2−1];

    2: massiv[j, i]: = data[i, j, Resintez. b3−1];

    end;

    end;

    for i:=0 to 255 do

    stat[i]: =0;

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    stat[massiv[i, j]]: =stat[massiv[i, j]]+1;

    MAX_STAT:=0;

    for i:=0 to 255 do

    if MAX_STAT

    for i:=0 to 255 do

    y[i]: =((stat[i]*100)/MAX_STAT);

    i:=0;

    while i<=255 do

    begin

    gr.AddXY (i, y[i]);

    i:=i+1;

    end;

    gr.Marks.Visible:=false;

    Chart1.AddSeries (gr);

    end;

    //ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ гистограммы ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ изобраТСния

    procedure THistogram. CorrectionClick (Sender: TObject);

    var

    sgr:TLineSeries;

    stat:array[0.255] of double;

    x, max: double;

    i, ii, j, z, ind, percent, u1, u2:integer;

    L:integer;

    mas_corrected:array of array of integer;

    y1:array [0.255] of double;

    begin

    mas_corrected:=nil;

    SetLength (mas_corrected, Viewer.PB.Width, Viewer.PB.Height);

    Chart2.SeriesList.Clear;

    Chart2.Repaint;

    L:=256;

    sgr:=TLineSeries.Create (nil);

    percent:=Porog.Value;

    max:=100;

    ii:=0;

    while ii<256 do begin

    if (y[ii]=100) then z:=ii;

    ii:=ii+1;

    end;

    x:=max*percent/100;

    u1:=0;

    u2:=0;

    ii:=0;

    repeat

    if (y[ii]>=x) then begin u1:=ii; break; end;

    ii:=ii+1;

    until ii>(z-1);

    ii:=z;

    repeat

    if (y[ii]>=x) then begin u2:=ii; end;

    ii:=ii+1;

    until ii>255;

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    begin

    if massiv[i, j]

    then mas_corrected[i, j]: =0

    else if (massiv[i, j]>=u1) and (massiv[i, j]<=u2)

    then mas_corrected[i, j]: =trunc (((massiv[i, j]-u1)/(u2-u1))*(L-1))

    else if massiv[i, j]>u2

    then mas_corrected[i, j]: =L-1;

    end;

    for i:=0 to 255 do

    stat[i]: =0;

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    stat[mas_corrected[i, j]]: =stat[mas_corrected[i, j]]+1;

    MAX_STAT:=0;

    for i:=0 to 255 do

    if MAX_STAT

    for i:=0 to 255 do

    y1[i]: =((stat[i]*100)/MAX_STAT);

    i:=0;

    while i<=255 do

    begin

    sgr.AddXY (i, y1[i]);

    i:=i+1;

    end;

    sgr.Marks.Visible:=false;

    Chart2.AddSeries (sgr);

    end;

    procedure THistogram. FormClose (Sender: TObject; var Action: TCloseAction);

    begin

    Chart2.SeriesList.Clear;

    Chart2.Repaint;

    Chart1.SeriesList.Clear;

    Chart1.Repaint;

    BandNum.ItemIndex:=-1;

    Porog.Value:=0;

    end;

    end.

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