(方案)如何计算像素的能量? (缝雕)

时间:2013-04-17 19:34:00

标签: image-processing scheme pixel file-access seam-carving

更新:没关系!我想到了。我必须使用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))))))

0 个答案:

没有答案