Python 逐像素滤波器消除混叠
我已经四处寻找了一段时间,寻找可能有效的抗锯齿算法,但它们都会产生模糊的图像和/或不适用于我当前的方法 我已经用Python和PIL创建了一个逐像素的过滤器,它创建了一个颜色调色板(如何确定颜色并不重要)。正如你所见,它的别名非常复杂 我听说消除图像别名的最佳方法是在绘制图像时进行,而不是在绘制之后;然而,我不确定我目前的方法是否可行,即循环通过每个单独的像素。如果有一种方法可以在绘制图像时消除图像的别名,请在此处发布 代码如下:Python 逐像素滤波器消除混叠,python,antialiasing,Python,Antialiasing,我已经四处寻找了一段时间,寻找可能有效的抗锯齿算法,但它们都会产生模糊的图像和/或不适用于我当前的方法 我已经用Python和PIL创建了一个逐像素的过滤器,它创建了一个颜色调色板(如何确定颜色并不重要)。正如你所见,它的别名非常复杂 我听说消除图像别名的最佳方法是在绘制图像时进行,而不是在绘制之后;然而,我不确定我目前的方法是否可行,即循环通过每个单独的像素。如果有一种方法可以在绘制图像时消除图像的别名,请在此处发布 代码如下: import Image, ImageDraw from co
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,问题是我正在获取输入图像并添加像素变换。因此,四个像素中的每一个都将完全相同,从而导致更多的内存使用,并且没有抗锯齿。