dream_people 发表于 2013-1-15 02:57:29

把图像去噪算法用python实现

#coding:utf-8import sys,osfrom PIL import Image,ImageDraw#二值数组t2val = {}def twoValue(image,G):    for y in xrange(0,image.size):      for x in xrange(0,image.size):            g = image.getpixel((x,y))            if g > G:                t2val[(x,y)] = 1            else:                t2val[(x,y)] = 0# 降噪 # 根据一个点A的RGB值,与周围的8个点的RBG值比较,设定一个值N(0 <N <8),当A的RGB值与周围8个点的RGB相等数小于N时,此点为噪点 # G: Integer 图像二值化阀值 # N: Integer 降噪率 0 <N <8 # Z: Integer 降噪次数 # 输出 #0:降噪成功 #1:降噪失败 def clearNoise(image,N,Z):    for i in xrange(0,Z):      t2val[(0,0)] = 1      t2val[(image.size - 1,image.size - 1)] = 1      for x in xrange(1,image.size - 1):            for y in xrange(1,image.size - 1):                nearDots = 0                L = t2val[(x,y)]                if L == t2val[(x - 1,y - 1)]:                  nearDots += 1                if L == t2val[(x - 1,y)]:                  nearDots += 1                if L == t2val[(x- 1,y + 1)]:                  nearDots += 1                if L == t2val[(x,y - 1)]:                  nearDots += 1                if L == t2val[(x,y + 1)]:                  nearDots += 1                if L == t2val[(x + 1,y - 1)]:                  nearDots += 1                if L == t2val[(x + 1,y)]:                  nearDots += 1                if L == t2val[(x + 1,y + 1)]:                  nearDots += 1                if nearDots < N:                  t2val[(x,y)] = 1def saveImage(filename,size):    image = Image.new("1",size)    draw = ImageDraw.Draw(image)    for x in xrange(0,size):      for y in xrange(0,size):            draw.point((x,y),t2val[(x,y)])    image.save(filename)image = Image.open("d:/1.jpg").convert("L")twoValue(image,100)clearNoise(image,4,1)saveImage("d:/5.jpg",image.size)
页: [1]
查看完整版本: 把图像去噪算法用python实现