提高缩小图像的准确性

3

我正在使用Python 2.7和PIL(pillow)。

我有一个脚本,可以将相对较粗糙的迷宫图像变成更干净、更小的图像。以下是样例输入和输出:

样例

这张图片是由以下图片生成的:

这张

在这种情况下,脚本并不完美,但效果还不错。

然而,相同迷宫的另一张图片却得到了这个结果:

较差

这个效果相对较差。

我通过查看16x16网格上每个方块的平均值,然后确定该方块是否代表大多数黑色或白色像素来生成并显示并排的图像。然而,由于透视变换不是完美的,方块并不总是对齐的。

有没有算法可以提高精度?有没有办法查看不完全是正方形块的网格方块?

以下是我的部分代码:

#This image is already transformed and thresholded, like the first half of my side-by-side images
thresh = Image.open('Thresholded_Image.jpg')
pixsize = thresh.size[0]/16
segments = []
for i in range(16):
    for j in range(16):
        box = (j*pixsize,i*pixsize,(j+1)*pixsize,(i+1)*pixsize)
        segments.append(thresh.crop(box))
def blackWhite(image):
    '''Return `True` if the image is mostly white, else `False`'''
    l=image.convert('L').load()
    w,h=image.size
    lums=sum([[l[x,y] for x in range(w)] for y in range(h)],[])
    return sum(lums)/float(len(lums))>127
whites = []
for y in range(16):
    for x in range(16):
        seg = segments[16*y+x]
        if blackWhite(seg):
            whites.append((x,y))

maze = Image.new('L',(16,16))
l=maze.load()
for w in whites:
    x,y=w
    l[x,y] = 255

你能复制你目前正在使用的代码,以便我们可以帮助你进行故障排除吗? - Steven Hewitt
好的,我会加上。 - Luke Taylor
1
考虑对评估的正方形中心附近的像素进行更重的加权,而对边缘处的像素进行较少的加权 - 这将有助于解决小的错位问题。您还可以尝试定位角落,然后调整图像,使角落形成一个完美的正方形,以帮助解决倾斜问题。 - Amber
@Amber 我会试一下。看起来很有前途。 - Luke Taylor
@Amber,请把你的评论发表为答案,这样我就可以接受它。它非常有帮助。 - Luke Taylor
显示剩余2条评论
1个回答

1
考虑更重视接近您正在评估的正方形中心的像素,较少关注边缘的像素 - 这将有助于解决小误差。您还可以尝试定位角落,然后调整图像使角落形成一个完美的正方形,帮助解决倾斜问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接