目が悪い人にしか見えない画像を復元してみるよ!Part2
いつかの記事http://d.hatena.ne.jp/aki33524/20120310/1331384580の続編
import Image import math from sets import Set def show_rem(): for i in range(len(rem_list)): print rem_list[i] def rem_noise(point): r, g, b = im.getpixel(point) euclid = math.sqrt(r**2 + g**2 + b**2) if(euclid < 200 ): rem_list.append(point) dump1.putpixel(point, (255, 0, 0)) dump2.putpixel(point, (255, 255, 255)) def num_of_NP((x, y)): sum = 0 for i in (-1, 0, 1): for j in (-1, 0, 1): if (x+i, y+j) in set_rem_list: sum += 1 return sum def adj_color(point): r, g, b = im.getpixel(point) r = 255-(255-r)*10 g = 255-(255-g)*10 b = 255-(255-b)*10 dump2.putpixel(point, (r, g, b)) def interpolation((x, y)): num = 0 if 0<x and x+1<w and 0<y and y+1<h: list1 = [] for i in (-1, 0, 1): for j in (-1, 0, 1): if not (x+i, y+j) in set_rem_list: num += 1 list1.append((x+i, y+j)) if 1<num: r = 0 g = 0 b = 0 for point in list1: r += dump2.getpixel(point)[0] g += dump2.getpixel(point)[1] b += dump2.getpixel(point)[2] rem_list.remove((x, y)) dump2.putpixel((x, y), (r/num, g/num, b/num)) ''''''''''''''''''''''' Entory POINT ''''''''''''''''''''''' rem_list = [] tmp_list = [] im = Image.open("youjo.bmp", 'r') w, h = im.size dump1 = Image.new("RGB", im.size) dump2 = im.copy() dump3 = im.copy() ''' Remove noise and adjust ''' for i in range(w): for j in range(h): rem_noise((i, j)) adj_color((i, j)) ''' Remove noise 2 ''' set_rem_list = Set(rem_list) for i in range(1, w-1): for j in range(1, h-1): point = (i, j) if num_of_NP(point) > 2: rem_list.append(point) dump1.putpixel(point, (255, 0, 0)) dump2.putpixel(point, (255, 255, 255)) ''' for point in rem_list: dump2.putpixel(point, (255, 255, 0)) ''' set_rem_list = Set(rem_list) while 2000<len(rem_list): for point in rem_list: interpolation(point) set_rem_list = Set(rem_list) print "len(rem_list):",len(rem_list) print "end" dump1.save("dump1.bmp") dump2.save("dump2.bmp")
前回に比べてかなりソースが見やすくなったと思う。
このソースを書いてる時に、setsの存在を知って心が折れたので更新する。
dump1.bmp
dump2.bmp
さて、このプログラムListを使って色々しているが、非常に効率が悪い。実行終了まで一時間ほど掛かる。
かなりいい加減な作りだったりして考えたアルゴリズムになってない途中段階な感じ。
結局まだ未完なんで早いところPart3作りたい。
見比べると多少綺麗になった気もする