更新:没关系!我想到了。我必须使用image-ref
。谢谢你的帮助! (2013-04-17表示OP in the comments)。
所以,我必须使用这个来创建一个能够找到像素能量的函数:
给定一个图像,我们首先计算每个像素的“能量”,它测量该像素与周围环境的突出程度,并让我们粗略地了解它的重要性。
计算由像素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))))))