图像处理大纲

时间:2012-02-05 04:43:22

标签: python arrays image processing

我正在编写一个执行基本图像处理的程序。

请记住,图像是灰度的,而不是RGB,我也是Python的新手,所以解释我做错了什么/对,这将非常有帮助。

我正在尝试编写遵循这套规则的大纲算法:

原始图像中的所有亮像素必须为白色。 在轮廓图像中,图像边缘上的所有暗像素都必须为黑色。 如果不在图像边缘的像素是暗的并且所有8个周围像素都是暗的,则该像素位于形状的内部并且在轮廓图像中必须是白色的。 所有其他暗像素在轮廓图像中必须为黑色。

到目前为止,我有这个:

def outlines(image):
    """
    Finds the outlines of shapes in an image.  The parameter must be
    a two-dimensional list of pixels.  The return value is another
    two-dimensional list of pixels which describes an image showing
    outlines of the shapes in the original image.  Each pixel in the
    return value will be either black (0) or white (255).
    """
    height=len(image)
    width=len(image[0])
    new_image=[]
    for r in range(height):
        new_row=[]
        index=0
        for c in range(width):
            if image[r][c]>128:
                new_row.append(255)
            if image[r][c]<=128:
                new_row.append(0])
        new_image.append(new_row)

有人可以告诉我如何将算法实现到我的轮廓函数中吗?

提前致谢。 编辑:这是我的大学Comp Sci课程的作业,我不是要求别人做我的作业,而是因为我几乎不知道下一步是什么。 编辑2:如果有人能向我解释一个简单的边缘检测功能,它类似于我需要创建的算法,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

除了检查你的像素是暗还是清晰之外,你还应该在天黑时检查周围的其余像素是否也是黑暗的,以便使该点变为白色。

检查此功能并尝试将其用于此目的:

def all_are_dark_around(image, r, c):
    # range gives the bounds [-1, 0, 1]
    # you could use the list directly. Probably better for this especific case
    for i in range(-1,2):              
        for j in range(-1,2):
            # if the pixel is clear return False.
            # note that image[r+0][c+0] is always dark by definition
            if image[r+i][c+j] <= 128:  
                return False
    #the loop finished -> all pixels in the 3x3 square were dark
    return True

建议:

  1. 请注意,image[r][c]r相等时,切勿检查c0heightwidth。也就是说,当检查的像素在 边界因为在这种情况下至少有一边在哪里 没有相邻的像素可以在图像中查看,你会得到 一个IndexError
  2. 不要指望此代码直接工作并成为最佳代码 效率或良好风格。这是你作业的一个提示。 你应该这样做。所以看看代码,花点时间(最好是) 应该等于或长于我写这篇文章的时间 功能),了解它的工作原理并使其适应您的代码修复 你遇到的任何例外情况和边境情况。