Ваша задача состоит в том, чтобы написать программу, которая берет входное изображение и запускает его через обнаружение краев, чтобы стать выходным изображением.
Обнаружение кромок работает следующим образом (если неясно, см. Раздел Обнаружение кромок ):
- Значение для пикселя - это общая яркость пикселя, поэтому, если он цветной, вам нужно сначала преобразовать его в оттенки серого (для простоты и возможности игры в гольф вы можете взять среднее значение для 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% к конечному результату.
- Примите во внимание угол края. Вы даете выходному пикселю некоторый цвет, беря то же значение градаций серого и добавляя цвет из цветового круга, используя угол, полученный из формулы arctan (G y / G x ). Это дает еще один бонус -30% на конечный результат.
Правила:
- Вы можете опустить значение для крайних пикселей и установить для них черный цвет, или вы можете использовать 0 для любого пикселя за пределами изображения.
- Ваше выходное изображение должно быть в формате изображения, который можно открыть на большинстве компьютеров.
- Вывод должен быть записан на диск или передан в файл.
- Входные данные задаются в качестве аргумента командной строки, в форме относительного пути к изображению или передаются из командной строки.
- Это код гольф, поэтому выигрывает самый короткий код в байтах!