Онлайн час в Google Meet
Лого на 91. НЕГ „Проф. Константин Гълъбов“

11. клас · Избираем модул · Урок 22

Филтри върху изображение

Осветяване, контраст, размиване и откриване на контури като аритметика върху матрицата. Ядрото 3×3, което се плъзга по картината — на ръка и в браузърен редактор.

Филтърът е сметка

Всяко приложение за снимки има бутони „по-светло“, „по-контрастно“, „размий фона“, „контури“. След миналия урок знаем какво стои зад тях: изображението е матрица, значи филтърът е операция върху числата. Днес ще направим четири такива операции на ръка — и ще видим, че същите сметки са първото нещо, което прави невронна мрежа за образи.

Филтър

Правило, което от старата матрица прави нова. Точковите филтри сменят всеки пиксел сам за себе си; филтрите със съседи гледат и околните пиксели.

Точкови филтри: всеки пиксел сам за себе си

Осветяване и потъмняване: +число

Към всяко число прибавяме едно и също. +60 осветява, −60 потъмнява. Каквото излезе над 255 или под 0, се отрязва до границата — както в миналия урок.

ред:      200  120   40   10  250
+60:      255  180  100   70  255    ← 260 и 310 се отрязват

Контраст: ×число

Умножаваме всяко число по едно и също. Умножението разтяга разликите: ако два пиксела се различават с 30, след ×2 се различават с 60 — тъмното става по-тъмно спрямо светлото. Умножение по число под 1 (например ×0,5) свива разликите и картината става „сива“ и плоска.

ред:       30   60  100  128  200
×2:        60  120  200  255  255    ← 256 и 400 се отрязват
×0,5:      15   30   50   64  100

Филтри със съседи: ядрото 3×3

Размиването и контурите не могат да се направят пиксел по пиксел — трябва да се знае какво има около него. Гледаме прозорец 3×3 с центъра в пиксела, смятаме едно число от деветте и го записваме в новата матрица на същото място. После местим прозореца с една позиция и повтаряме.

Ядро (kernel)

Малка таблица 3×3 с тегла. Всеки пиксел в прозореца се умножава по теглото под него, произведенията се събират и сборът е новият пиксел. Различни тегла — различни филтри.

101010190190101010190190101010190190101010190190101010190190входна матрицаядро „размиване“1/91/91/91/91/91/91/91/91/970нов пиксел (2, 2)(6 × 10 + 3 × 190) / 9 = 630 / 9 = 70. После прозорецът се мести с една колона надясно.
Прозорецът се плъзга по матрицата. За всяко положение — една сметка, един нов пиксел.

Размиване: средно на съседите

Всичките девет тегла са 1/9, тоест новият пиксел е средното аритметично на прозореца. Рязка граница между 10 и 190 става стълбичка 10 → 70 → 130 → 190: ръбът се размазва. Колкото по-голям е прозорецът (5×5, 7×7), толкова по-силно е размиването.

Откриване на контури: разлика между съседи

Контур има там, където числата се сменят рязко. Най-простото ядро за вертикални контури изважда левия съсед от десния:

ядро:        -1   0   1          ред:      10   10  190  190  190
(само среден ред)                разлики:       0  180    0   ← десен − ляв

Там, където лявото и дясното са еднакви, излиза 0 (черно). Там, където има скок, излиза голямо число (светло). Резултатът е картина, в която светят само границите на предметите. За хоризонтални контури ядрото се завърта — изваждаме горния съсед от долния.

ФилтърЯдро 3×3Какво прави с числата
Размиваневсички 1/9средно на прозореца — изглажда скоковете
Вертикални контури−1 0 1 (среден ред)десен − ляв съсед — светят вертикалните граници
Хоризонтални контури−1 0 1 (средна колона)долен − горен съсед — светят хоризонталните граници
Изостряне5 в центъра, −1 отстранипикселът минус съседите — подчертава ръбовете

Защо това е урок по изкуствен интелект

Мрежа, която разпознава образи, започва точно с такива ядра: първият ѝ слой е десетки филтри 3×3, които се плъзгат по картината и светват там, където има ръб, ъгъл или петно. Разликата с редактора е една, но решаваща: теглата в ядрата не са зададени от човек, а са научени от данните — както теглата на перцептрона от урок 17. Следващият урок проследява какво става с тези ръбове по- нататък в мрежата.

Какво трябва да запомниш

  • Филтърът е операция върху числата в матрицата; резултатът винаги се отрязва до 0–255.
  • Осветяване е +число, контраст е ×число — всеки пиксел се сменя сам за себе си.
  • Размиването заменя пиксела със средното на прозореца 3×3 около него.
  • Контурите се откриват с разлика между съседи — голяма разлика означава ръб.
  • Ядрото е таблица 3×3 с тегла, която се плъзга по картината; различни тегла — различни филтри.
  • Първият слой на мрежа за образи е набор от такива ядра, но с тегла, научени от данните.