Python 逐像素滤波器消除混叠

Python 逐像素滤波器消除混叠,python,antialiasing,Python,Antialiasing,我已经四处寻找了一段时间,寻找可能有效的抗锯齿算法,但它们都会产生模糊的图像和/或不适用于我当前的方法 我已经用Python和PIL创建了一个逐像素的过滤器,它创建了一个颜色调色板(如何确定颜色并不重要)。正如你所见,它的别名非常复杂 我听说消除图像别名的最佳方法是在绘制图像时进行,而不是在绘制之后;然而,我不确定我目前的方法是否可行,即循环通过每个单独的像素。如果有一种方法可以在绘制图像时消除图像的别名,请在此处发布 代码如下: import Image, ImageDraw from co

我已经四处寻找了一段时间,寻找可能有效的抗锯齿算法,但它们都会产生模糊的图像和/或不适用于我当前的方法

我已经用Python和PIL创建了一个逐像素的过滤器,它创建了一个颜色调色板(如何确定颜色并不重要)。正如你所见,它的别名非常复杂

我听说消除图像别名的最佳方法是在绘制图像时进行,而不是在绘制之后;然而,我不确定我目前的方法是否可行,即循环通过每个单独的像素。如果有一种方法可以在绘制图像时消除图像的别名,请在此处发布

代码如下:

import Image, ImageDraw
from collections import Counter

def avg_color(arr):
    r,g,b = 0,0,0
    for item in arr:
        r += item[0]
        g += item[1]
        b += item[2]
    l = len(arr)
    return (r//l,g//l,b//l)

COLOR_NUMBER = 12

PATH = "test.png"

COLORS = [
(255,255,255),
(0,0,0)
]

im = Image.open(PATH)
rgbim = im.convert('RGB')

size = rgbim.size

nim = Image.new('RGB', size)
draw = ImageDraw.Draw(nim)

for i in range(COLOR_NUMBER-2):
    devs = [[765 for j in range(size[1])] for k in range(size[0])]
    cols = [[765 for j in range(size[1])] for k in range(size[0])]
    ind = []
    for x in range(size[0]):
        for y in range(size[1]):
            r,g,b = rgbim.getpixel((x,y))
            cols[x][y] = (r,g,b)
            for c in COLORS:
                diff = abs(c[0]-r)+abs(c[1]-g)+abs(c[2]-b)
                devs[x][y] = min(diff,devs[x][y])

    h = (0,0)
    for x in range(size[0]):
        for y in range(size[1]):
            if devs[x][y] > devs[h[0]][h[1]]:
                h = (x,y)
    print "Added color",cols[h[0]][h[1]]
    COLORS.append(cols[h[0]][h[1]])



print("Created palette.")
print(COLORS)

for x in range(size[0]):
    for y in range(size[1]):
        r,g,b = rgbim.getpixel((x,y))
        devarray = []
        col = COLORS[0]
        for c in COLORS:
            diff = abs(c[0]-r)+abs(c[1]-g)+abs(c[2]-b)
            devarray.append(diff)
        smallest = 0
        for i in range(len(devarray)):
            if devarray[i] < devarray[smallest]:
                smallest = i
        col = COLORS[smallest]
        draw.point((x,y),fill=col)

print "Finished rough image."


nim.show()
导入图像,图像绘制
从收款进口柜台
def平均颜色(arr):
r、 g,b=0,0,0
对于arr中的项目:
r+=项目[0]
g+=项目[1]
b+=项目[2]
l=长度(arr)
返回(r//l,g//l,b//l)
颜色编号=12
PATH=“test.png”
颜色=[
(255,255,255),
(0,0,0)
]
im=图像。打开(路径)
rgbim=im.convert('RGB')
大小=rgbim.size
nim=图像。新建('RGB',大小)
draw=ImageDraw.draw(nim)
对于范围内的i(颜色\u编号-2):
devs=[[765代表范围内的j(大小[1])]代表范围内的k(大小[0])]
cols=[[765表示范围内的j(大小[1])]表示范围内的k(大小[0])]
ind=[]
对于范围内的x(尺寸[0]):
对于范围内的y(尺寸[1]):
r、 g,b=rgbim.getpixel((x,y))
cols[x][y]=(r,g,b)
对于颜色中的c:
差异=abs(c[0]-r)+abs(c[1]-g)+abs(c[2]-b)
devs[x][y]=min(差异,devs[x][y])
h=(0,0)
对于范围内的x(尺寸[0]):
对于范围内的y(尺寸[1]):
如果devs[x][y]>devs[h[0]][h[1]]:
h=(x,y)
打印“添加颜色”,cols[h[0]][h[1]]
COLORS.append(cols[h[0]][h[1]])
打印(“已创建调色板”)
印刷品(颜色)
对于范围内的x(尺寸[0]):
对于范围内的y(尺寸[1]):
r、 g,b=rgbim.getpixel((x,y))
德瓦里=[]
col=颜色[0]
对于颜色中的c:
差异=abs(c[0]-r)+abs(c[1]-g)+abs(c[2]-b)
devarray.append(差异)
最小值=0
对于范围内的i(len(devarray)):
如果devarray[i]
可以通过像素相加像素子样本来实现消除混叠。您可以通过将原始图像中的像素加倍,并应用过滤器来伪造它。然后将尺寸减半。在最后一步中,每个最终像素的颜色可能是被替换的对应四个像素组的简单平均值。@martineau,问题是我正在获取输入图像并添加像素变换。因此,四个像素中的每一个都将完全相同,从而导致更多的内存使用,并且没有抗锯齿。