Ваше завдання - написати програму, яка приймає вхідне зображення і запустити його через виявлення краю, щоб стати вихідним зображенням.
Виявлення краю працює наступним чином (якщо незрозуміло, див. Розпізнавання крайових міток ):
- Значення пікселя - це загальна яскравість пікселя, тому, якщо він кольоровий, вам потрібно спочатку перетворити його в масштаб сірого (щоб все було просто та в гольф, ви можете взяти середнє значення для R, G та Б).
- Формули для G x і G y для пікселя p (i, j) такі:
- G x = -1 * p (i-1, j-1) - 2 * p (i-1, j) - 1 * p (i-1, j + 1) + 1 * p (i + 1, j -1) + 2 * p (i + 1, j) + 1 * p (i + 1, j + 1)
- G y = -1 * p (i-1, j-1) - 2 * p (i, j-1) - 1 * p (i + 1, j-1) + 1 * p (i-1, j +1) + 2 * p (i, j + 1) + 1 * p (i + 1, j + 1)
- Значення для розміру краю в цьому пікселі дорівнює: √ (G x 2 + G y 2 )
Вихідне зображення має для кожного пікселя розмір краю √ (G x 2 + G y 2 ) у вигляді відтінків сірого.
Бонуси:
- Виконайте гаусову розмитість, щоб згладити зображення, перш ніж починати виявлення ребер, щоб опустити будь-які менші краї. Це дає бонус -30% на кінцевий результат.
- Враховуйте кут ребра. Ви надаєте вихідному пікселю деякий колір, беручи те саме значення сірого масштабу і додаючи колір з кольорового колеса, використовуючи кут, отриманий з формули арктан (G y / G x ). Це дає ще один бонус -30% на кінцевий результат.
Правила:
- Ви можете опустити значення крайових пікселів і встановити їх на чорний колір, або ви можете використовувати 0 для будь-якого пікселя поза зображенням.
- Ваше зображення має бути у форматі зображення, який можна відкрити на більшості комп'ютерів.
- Вихідні дані повинні бути записані на диск або передаватися у файл.
- Введення задається у вигляді аргументу командного рядка у вигляді відносного шляху до зображення або введено з командного рядка.
- Це код гольфу, тому найкоротший код у байтах виграє!