🐛 Детектор Шкідників Урожаю — Класифікатор Текстурних Ознак Наживо
Спостерігайте, як справжній класифікатор текстурних ознак (локальна дисперсія/щільність країв) сканує сітку синтетичного зображення листка ділянку за ділянкою, позначаючи наживо зони пошкодження шкідниками як голосування k-NN проти здорових/пошкоджених еталонних ділянок.
Про цю симуляцію
Ця симуляція будує справжній, хоч і компактний, конвеєр комп'ютерного зору з нуля. Процедурне синтетичне зображення листка генерується піксель за пікселем, з нерівними плямами пошкоджень від шкідників, чия локальна статистика справді відрізняється від здорової тканини. Скануюче вікно проходить листок ділянка за ділянкою, і для кожної ділянки обчислюються три справжні текстурні ознаки прямо з буфера пікселів: середня інтенсивність, локальна дисперсія та щільність країв на основі фільтра Собеля. Кожна ділянка класифікується як здорова чи пошкоджена справжнім голосуванням k найближчих сусідів проти міченого еталонного набору, з рішенням, візуалізованим наживо у просторі ознак.
🔬 Що показано
Листок, відрендерений через CanvasTexture, зі скануючим вікном, що проходить сітку ділянок 12×12. Середня інтенсивність, дисперсія та щільність країв Собеля кожної ділянки обчислюються з реальних піксельних даних, нормалізуються та порівнюються за евклідовою відстанню з міченим еталонним набором здорових/пошкоджених зразків, взятих з того самого листка. Панель розсіювання у просторі ознак відображає кожну еталонну ділянку разом з поточною та малює лінії до її k найближчих сусідів.
🎮 Як користуватися
Налаштуйте k (1–11), щоб змінити кількість голосуючих сусідів, і поріг голосування пошкодження (0.1–0.9), щоб змінити, скільки з цих сусідів повинні сказати «пошкоджено», перш ніж ділянку буде позначено. Швидкість сканування керує тим, як швидко рухається вікно. Регенерація листка перегенерує новий синтетичний листок із новими плямами пошкоджень і перебудовує еталонний набір; Пауза/Відновлення зупиняє сканування для огляду.
💡 Чи знали ви?
Виявлення країв за Собелем, винайдене на початку 1970-х, і досі є одним із найпоширеніших операторів країв, оскільки його два малі ядра 3×3 наближають градієнт зображення достатньо дешево, щоб працювати в реальному часі — саме це дозволяє цій симуляції перераховувати справжню щільність країв для кожної ділянки, кожного кадру, ніколи не готуючи відповідь заздалегідь.
Часті питання
Які реальні ознаки обчислює класифікатор для кожної ділянки?
Для кожної сканованої ділянки симуляція зчитує реальні піксельні дані синтетичного зображення листка й обчислює три справжні текстурні статистики: середню інтенсивність у відтінках сірого, дисперсію інтенсивностей у межах ділянки (міру локальної шорсткості) та щільність країв, отриману запуском справжніх згорткових ядер Собеля Gx/Gy над кожним внутрішнім пікселем і підрахунком, скільки з них перевищують поріг величини градієнта. Жодне з цих чисел не підроблене й не взяте із таблиці — вони обчислюються безпосередньо з буфера RGBA, який також визначає те, що ви бачите на екрані.
Як класифікатор k найближчих сусідів насправді вирішує, здорова ділянка чи пошкоджена?
Еталонний набір ділянок вибирається з того самого листка й позначається на основі справжнього покриття плямами шкідників (використовується лише для побудови цього міченого набору, ніколи не передається класифікатору для невідомих ділянок). Три ознаки кожної еталонної ділянки нормалізуються за z-показником. Коли сканується нова ділянка, її ознаки нормалізуються так само, обчислюється реальна евклідова відстань до кожної еталонної ділянки, зберігаються k найближчих, і ділянка позначається як пошкоджена, якщо частка пошкоджених сусідів серед цих k відповідає повзунку порогу голосування пошкодження — інакше вона здорова.
Чому пошкодження шкідниками підвищує локальну дисперсію та щільність країв?
Некротична або з'їдена тканина листка зазвичай має нерівномірну, високо контрастну плямистість замість гладкої плямистої зелені здорової тканини, тож дисперсія інтенсивності пікселів у пошкодженій ділянці вища. Нерівна межа між пошкодженою та здоровою тканиною також створює набагато більше різких переходів інтенсивності, що саме й покликаний виявляти фільтр Собеля, тож щільність країв різко зростає біля пошкодження та всередині нього.
Що змінюють елементи керування значенням k і порогом голосування пошкодження?
k визначає, скільки найближчих еталонних ділянок враховується для кожного голосування — мале k швидко реагує на локальну текстуру, але шумніше, велике k згладжує рішення, але може розмити невеликі плями пошкоджень. Поріг голосування пошкодження визначає, яка частка цих k сусідів повинна бути позначена як пошкоджена, перш ніж саму ділянку буде позначено пошкодженою; зниження порогу робить детектор чутливішим (більше хибнопозитивних), підвищення робить його суворішим (більше пропущених пошкоджень).
Це справжній класифікатор чи просто замаскований кольоровий поріг?
Це справжній, хоча й спрощений, конвеєр машинного навчання: справжнє вилучення ознак (дисперсія, щільність країв Собеля, середня інтенсивність) з реальних піксельних даних, справжній мічений еталонний набір, реальне обчислення евклідової відстані та справжнє правило рішення k-NN за більшістю голосів. Він навмисно опускає такі речі, як аугментація даних чи навчена метрика, але кожне число, що керує класифікацією, обчислюється наживо із зображення, а не вручну проставляється для кожної ділянки.
Справжній класифікатор текстурних ознак (локальна дисперсія/щільність країв) сканує сітку синтетичного зображення листка ділянку за ділянкою, позначаючи наживо зони пошкодження шкідниками як голосування k-NN проти здорових/пошкоджених еталонних ділянок.
3D · рушій Three.js / WebGL · ціль 60 FPS · працює повністю на клієнті, без встановлення