提高缩小图像的准确性
Improve accuracy of scaling down image
我正在使用 Python 2.7 和 PIL(枕头)
我有一个脚本可以拍摄相当粗糙的迷宫图像,并制作出更干净、更小的图像。示例输入和输出:
根据这张图片生成的图片:
在那种情况下,脚本不能完美运行,但运行良好。
然而,同一个迷宫的 another image 产生了这个结果:
这不太好。
我通过查看 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
(应要求,转发评论作为回答。)
考虑对靠近您正在评估的正方形中心的像素加权,而对靠近边缘的像素加权较少 - 这将有助于解决小的未对齐问题。您也可以尝试定位角点,然后调整图像,使角点形成一个完美的正方形,以帮助防止偏斜。
我正在使用 Python 2.7 和 PIL(枕头)
我有一个脚本可以拍摄相当粗糙的迷宫图像,并制作出更干净、更小的图像。示例输入和输出:
根据这张图片生成的图片:
在那种情况下,脚本不能完美运行,但运行良好。
然而,同一个迷宫的 another image 产生了这个结果:
这不太好。
我通过查看 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
(应要求,转发评论作为回答。)
考虑对靠近您正在评估的正方形中心的像素加权,而对靠近边缘的像素加权较少 - 这将有助于解决小的未对齐问题。您也可以尝试定位角点,然后调整图像,使角点形成一个完美的正方形,以帮助防止偏斜。