(Схема) Как рассчитать энергию пикселя? (резьба по шву)
обновление: Nevermind! Я понял. Я должен использовать image-ref
, Спасибо за вашу помощь, хотя! (сказал ОП в комментариях в 2013-04-17).
Итак, я должен сделать функцию, которая находит энергию пикселя, используя это:
Для данного изображения мы сначала вычисляем "энергию" каждого пикселя, которая измеряет, насколько этот пиксель выделяется из его окружения, и дает нам приблизительное представление о его важности.
Чтобы вычислить энергию пикселя E, окруженного пикселями от A до I,
A B C
D E F
G H I
используйте формулу
energy(E) = sqrt(xenergy^2 + yenergy^2)
где
xenergy = A + 2D + G - C - 2F - I
yenergy = A + 2B + C - G - 2H - I
и каждая заглавная буква представляет яркость (сумму значений красного, синего и зеленого) соответствующего пикселя.
Чтобы вычислить энергию краевых пикселей, вы должны сделать вид, что изображение окружено черной рамкой шириной в 1 пиксель (с яркостью 0).
Прямо сейчас, моя функция находит местоположение пикселей в пикселях. Чего я не понимаю, так это как определить местоположение пикселя и найти его яркость. У меня есть функция яркости, но она принимает цвет, а не местоположение пикселя. Как я могу найти цвет пикселя, если у меня есть только местоположение?
Вот мой код:
(define (brightness c)
(+ (color-ref c 'red) (color-ref c 'green) (color-ref c 'blue)))
(define (energy img rows cols)
(let ([a '((add1 rows), (sub1 cols))]
[b '((add1 rows), (add1 cols))]
[c '(rows, (sub1 cols))]
[d '(rows, (add1 cols))]
[g '((sub1 rows), (sub1 cols))]
[f '((sub1 rows), (add1 cols))])
(let ([xenergy (- (+ a (* 2 c) g) (- b (* 2 d) h))]
[yenergy (- (+ a (* 2 b)) (- d (* 2 h)))])
(sqrt (+ (xenergy * xenergy) (yenergy * yenergy))))))