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

Image processing (方案)如何计算像素的能量?(接缝雕刻),image-processing,scheme,pixel,file-access,seam-carving,Image Processing,Scheme,Pixel,File Access,Seam Carving,更新:无需担心!我想出来了。我必须使用图像参考。谢谢你的帮助!(OP在2013年4月17日表示) 所以,我必须做一个函数,用这个函数找到像素的能量: 给定一幅图像,我们首先计算每个像素的“能量”,它测量该像素在其周围环境中的突出程度,并让我们大致了解其重要性 要计算由像素a到I包围的像素E的能量 使用公式 在哪里 每个大写字母表示对应像素的亮度(红色、蓝色和绿色值之和) 要计算边缘像素的能量,应假设图像由1像素宽的黑色像素边界(亮度为0)包围 现在,我的函数查找像素周围像素的位置。我不明白的是

更新:无需担心!我想出来了。我必须使用
图像参考
。谢谢你的帮助!(OP在2013年4月17日表示)


所以,我必须做一个函数,用这个函数找到像素的能量:

给定一幅图像,我们首先计算每个像素的“能量”,它测量该像素在其周围环境中的突出程度,并让我们大致了解其重要性

要计算由像素a到I包围的像素E的能量

使用公式

在哪里

每个大写字母表示对应像素的亮度(红色、蓝色和绿色值之和)

要计算边缘像素的能量,应假设图像由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))))))

我不太明白你的问题。如果我只有位置=>你不能得到给定位置的像素的RVB值并将其输入亮度函数吗?图像是如何存储的?@Jean我该怎么做?我从来没有用scheme编程过,所以我不知道。也许我们能找到答案。如何加载图像文件?它是如何存储在内存中的?你有什么图像(.bmp、.jpg等)?没关系!我想出来了。我必须使用image-ref。谢谢你的帮助!
    energy(E) = sqrt(xenergy^2 + yenergy^2)
    xenergy = A + 2D + G - C - 2F - I
    yenergy = A + 2B + C - G - 2H - I
(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))))))