Photo Vignette删除工具(Jython,Python)

时间:2012-04-16 08:07:58

标签: python jython

我需要为这个问题构建代码。

  1. 首先,我们需要孤立地了解小插图的样子,而不是一个美丽场景的混乱。为此,获得均匀照亮的单色平坦表面的图片(例如在中午期间的白墙或纯蓝色天空)并将其用作“晕影轮廓”。您将获得以下小插图个人资料图片。

    在此图像中,朝向图像中心的像素具有更高的RGB值(即 更亮的像素)比远离中心的像素。图像也是黑色的 白色,任何给定像素的红色,绿色和蓝色值都是相同的。你不能修改 这个图片。

  2. 我们需要使用步骤#1中的晕影个人资料图片作为我们普通照片的过滤器 我们的相机拍摄,以便可以删除晕影。为此,你需要划分 小插图轮廓图像的照片图像(带有晕影)。由于晕影图像中的像素具有朝向其边缘较小(较暗)的RGB值,因此将原始图像的相应像素除以较小的数字将使它们更亮

  3. 这些是提示

    提示1:这要求您逐个像素地对图像执行操作。即你不能一步到位。

    提示2:对您而言,第一个挑战是将每个通道的划分产生的RGB值保持在0-255范围内,因为有效RGB值介于0(最暗)和255(最亮)之间。


    编辑:

    示例代码:

    def runA1(picture): myFile = pickAFile() picture = makePicture(myFile)
    
     myFile2 = pickAFile()
    picture2 = makePicture(myFile2)
    
    
    for x in range(0,getWidth(picture)):
        for y in range(0,getHeight(picture)):
          px = getPixel(picture,x,y)
          color = getColor(px)
          color = makeLighter(color)
          setColor(px,color)
    
    for x in range(2,getWidth(picture)):
        for y in range(2,getHeight(picture)):
          px = getPixel(picture,x,y)
          color = getColor(px)
          color = makeDarker(color)
          setColor(px,color)
    
    
    
    show(picture2)
    

1 个答案:

答案 0 :(得分:2)

既然你没有证明自己已经尝试过任何东西,我只会提示你应该尝试什么。

  1. 考虑以(R,G,B)形式表示为三个整数0-255的单个像素。来自晕影模板的相应像素具有值A,再次为0-255。将(R,G,B)除以A乘以255 ,得到未渐晕的像素(RR,GG,BB)。 (为什么我们需要乘以256?)

  2. 决定您要对R,G,B超过255的值做些什么。如果晕影值A为零,会发生什么?

  3. 对图像中的每个像素执行此操作,从左到右工作的顶行像素开始,然后向下一行,依此类推,直到完成为止。


  4. 顺便提一下,这种事情 是一种具有一流数值矩阵支持的语言的一步操作 - 比如MATLAB,Octave, Numpy / Scipy 。这是一个MATLAB示例:

    processed_image = original_image ./ repmat(vignette_image,[1 1 3]) * 256
    

    编辑2:

    对示例代码的一些评论:

    1. 您的缩进错误 - 此代码无法运行。当你把它粘贴到StackOverflow中时,这可能会被破坏。请修理它。特别是,

      • def语句必须由一行开始。
      • myFile2 =....必须从def:statement缩进。
    2. myFile1myFile2 - 这些变量名称可能更有意义。 (这些是原始照片中的哪一个?哪个是小插图面具?您可以尝试调用这些变量original_filevignette_file。同样适用于myPicture1myPicture2。)< / p>

    3. 您的代码中的注释在哪里?很难说出你的代码是做什么的。

    4. 除此之外,您还需要发布更多代码。您的示例必须是Short, Self Contained, Correct Example。现在您的代码示例不是自包含的,因为要运行它,我们还需要getPixel()getColor()makeLighter()等功能。由于缩进错误,它也无法编译。