python - 提高缩小图像的准确性

标签 python python-2.7 image-processing python-imaging-library

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

我有一个脚本,可以拍摄相当粗糙的迷宫图像,并制作出更干净、更小的图像。示例输入和输出:

Sample

这是从这张图片生成的:

This one

在那种情况下,脚本不能完美运行,但运行良好。

然而,another image同一个迷宫产生了这个结果:

less good

这不太好。

我通过查看 16x16 网格上每个方 block 的平均值来生成并排显示的图像,然后确定该方 block 是主要代表黑色像素还是主要代表白色像素。然而,由于透视变换并不完美,方 block 并不总是排成一行。

是否有任何算法可以帮助提高准确性?有什么方法可以查看不是完全正方形 block 的网格正方形?

我的一段代码:

#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

最佳答案

(应要求,重新发布评论作为答案。)

请考虑对靠近您正在评估的正方形中心的像素赋予更多权重,而对靠近边缘的像素赋予更少的权重 - 这将有助于解决小的未对齐问题。您也可以尝试定位角点,然后调整图像,使角点形成一个完美的正方形,以帮助防止倾斜。

关于python - 提高缩小图像的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33465206/

相关文章:

python - 如何在 OpenCV 中校正裁剪后的立体图像?

python - matplotlib/Pandas 中的水平箱线图

python - 删除字符出现后的行的剩余部分

python - 如何在 Windows 中设置 PYTHONPATH?

java - Integer[][] 矩阵中的圆圈选择 - Java

c++ - 霍夫变换

javascript - 在浏览器中运行 C

python - 如何编写 for 循环,以便程序针对一组 94 个 DNA 样本重复自身?

python - 将 perl 正则表达式转换为 python 正则表达式

python - 在 Python 中打印函数时回显结果的正确术语