画像処理('24)#6 空間フィルタリング
またしても、プログラムを入力するときに誤記(-_-;) 上手く動かないときは、これ。あとは、改行には¥を入れなければならなかった。慣れていないので仕方ない。
平均化フィルタは、差がわかりにくい。単調な画像を準備すればよかった。拡大してみると計算できていると判断できた。プログラムの9分割を16分割にしても良いのだろうけど、プログラム行を多くするとわかりにくくなる。原理を確認したいので。
それと計算は、6分/回くらいかかる。最後のファイル保存で失敗したら、改修に時間がかかる。それで、平均化フィルタを3回かけると18分かかる。古いパソコンを使っているのもあるが、小さな画像ファイルが良かったかも。
#プログラム6-1平均化フィルタ
from PIL import Image
import numpy as np
i1=Image.open("IMG_2348.png").convert("L")
h=i1.height
w=i1.width
image1=np.array(i1)
image2=np.zeros((h,w), dtype="uint8")
for y in range(1,h-1):
for x in range(1,w-1):
tem=(int)(1./9image1[y-1][x-1]+1./9image1[y-1][x]+1./9image1[y-1][x+1]+
1./9image1[y][x-1]+1./9image1[y][x]+1./9image1[y][x+1]+
1./9image1[y+1][x-1]+1./9image1[y+1][x]+1./9*image1[y+1][x+1])
if tem<0:
tem=0
if tem>255:
tem=255
image2[y][x]=tem
i2=Image.fromarray(image2)
i2.save("IMG_2348_6.png")
#プログラム6-1平均化フィルタ n=3
from PIL import Image
import numpy as np
i1=Image.open("IMG_2348_6.png").convert("L")
h=i1.height
w=i1.width
image1=np.array(i1)
image2=np.zeros((h,w), dtype="uint8")
for y in range(1,h-1):
for x in range(1,w-1):
tem=(int)(1./9image1[y-1][x-1]+1./9image1[y-1][x]+1./9image1[y-1][x+1]+
1./9image1[y][x-1]+1./9image1[y][x]+1./9image1[y][x+1]+
1./9image1[y+1][x-1]+1./9image1[y+1][x]+1./9*image1[y+1][x+1])
if tem<0:
tem=0
if tem>255:
tem=255
image2[y][x]=tem
i2=Image.fromarray(image2)
i2.save("IMG_2348_6-2.png")
for y in range(1,h-1):
for x in range(1,w-1):
tem=(int)(1./9image1[y-1][x-1]+1./9image1[y-1][x]+1./9image1[y-1][x+1]+
1./9image1[y][x-1]+1./9image1[y][x]+1./9image1[y][x+1]+
1./9image1[y+1][x-1]+1./9image1[y+1][x]+1./9*image1[y+1][x+1])
if tem<0:
tem=0
if tem>255:
tem=255
image2[y][x]=tem
i2=Image.fromarray(image2)
i2.save("IMG_2348_6-3.png")
#プログラム6-2エッジ抽出フィルタ
from PIL import Image
import numpy as np
i1=Image.open("IMG_2348.png").convert("L")
h=i1.height
w=i1.width
image1=np.array(i1)
image2=np.zeros((h,w), dtype="uint8")
for y in range(1,h-1):
for x in range(1,w-1):
tem=(int)(4.0*abs(-1.*image1[y][x]+1.*image1[y][x+1]))
if tem<0:
tem=0
if tem>255:
tem=255
image2[y][x]=tem
i2=Image.fromarray(image2)
i2.save("IMG_2348_6-4.png")
この記事が気に入ったらサポートをしてみませんか?