更新:没关系!我想到了。我必须使用image-ref
. 不过感谢您的帮助!(在2013-04-17的评论中说OP )。
因此,我必须使用以下方法创建一个函数来查找像素的能量:
给定一张图像,我们首先计算每个像素的“能量”,它衡量该像素从周围环境中突出的程度,并让我们大致了解其重要性。
要计算由像素 A 到 I 包围的像素 E 的能量,
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))))))