6.5 空域濾波增強技術
- 空域濾波:是基於鄰域處理的增強方法,它應用某一模板對每個像素與其周圍鄰域的所有像素進行某種數學運算得到該像素的新的灰度值。
- 新的灰度值的大小不僅與該像素的灰度值有關,而且還與其鄰域內的像素的灰度值有關。
- 空域模板也稱爲空域濾波器
空域濾波模板(Mask)
- 空域濾波的實現方法:應用模版卷積方法對每一像素點的鄰域進行處理。(加權求和)
- 模板應用:是數字圖像處理中常用的一種運算方式,圖像的平滑、銳化、細化和邊緣檢測等運用到模版操作
模板處理的一般過程
- 將模版在原圖像中依次移動,並將模版中心與每個像素點依次重合
- 模版中的各系數與其對應的像素點值相乘,並將所有結果相加(或其它);
- 平均值或加權值保存爲目標圖像中對應模版中心位置的像素點灰度值
圖像平滑濾波法
簡單平均:
# -*- coding: utf-8 -*-
"""
Created on Thu May 28 08:40:47 2020
@author: 張若昀的對象
"""
from PIL import Image
import matplotlib.pyplot as plt
import random
import numpy as np
im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\lena_256.bmp")
im_new=im.copy()
width,height=im.size
for i in range(width):
for j in range(height):
if(i-1)>=0 and (j-1)>=0 and (i+1)<=255 and (j+1)<=255:
a1=im.getpixel((i-1,j-1))
a2=im.getpixel((i-1,j))
a3=im.getpixel((i-1,j+1))
a4=im.getpixel((i,j-1))
a5=im.getpixel((i,j))
a6=im.getpixel((i,j+1))
a7=im.getpixel((i+1,j-1))
a8=im.getpixel((i+1,j))
a9=im.getpixel((i+1,j+1))
g=int((a1+a2+a3+a4+a5+a6+a7+a8+a9)/9)
im_new.putpixel((i,j),g)
im_new.show()
超限平均:
# -*- coding: utf-8 -*-
"""
Created on Thu May 28 08:40:47 2020
@author: 張若昀的對象
"""
from PIL import Image
import matplotlib.pyplot as plt
import random
import numpy as np
im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\Lena_椒鹽噪聲.jpg")
im_new=im.copy()
width,height=im.size
# =============================================================================
# for i in range(width):
# for j in range(height):
# if(i-1)>=0 and (j-1)>=0 and (i+1)<=255 and (j+1)<=255:
# a1=im.getpixel((i-1,j-1))
# a2=im.getpixel((i-1,j))
# a3=im.getpixel((i-1,j+1))
# a4=im.getpixel((i,j-1))
# a5=im.getpixel((i,j))
# a6=im.getpixel((i,j+1))
# a7=im.getpixel((i+1,j-1))
# a8=im.getpixel((i+1,j))
# a9=im.getpixel((i+1,j+1))
# g=int((a1+a2+a3+a4+a5+a6+a7+a8+a9)/9)
# im_new.putpixel((i,j),g)
# im_new.show()
# =============================================================================
for i in range(width):
for j in range(height):
if(i-1)>=0 and (j-1)>=0 and (i+1)<=255 and (j+1)<=255:
a1=im.getpixel((i-1,j-1))
a2=im.getpixel((i-1,j))
a3=im.getpixel((i-1,j+1))
a4=im.getpixel((i,j-1))
a5=im.getpixel((i,j))
a6=im.getpixel((i,j+1))
a7=im.getpixel((i+1,j-1))
a8=im.getpixel((i+1,j))
a9=im.getpixel((i+1,j+1))
g=int((a1+a2+a3+a4+a5+a6+a7+a8+a9)/9)
if np.abs(g-a5)>40:
im_new.putpixel((i,j),g)
im.show()
im_new.show()
中值濾波
90 110 120
# -*- coding: utf-8 -*-
"""
Created on Thu May 28 08:40:47 2020
@author: 張若昀的對象
"""
from PIL import Image
import matplotlib.pyplot as plt
import random
import numpy as np
im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\Lena_椒鹽噪聲.jpg")
im_new=im.copy()
width,height=im.size
# =============================================================================
# for i in range(width):
# for j in range(height):
# if(i-1)>=0 and (j-1)>=0 and (i+1)<=255 and (j+1)<=255:
# a1=im.getpixel((i-1,j-1))
# a2=im.getpixel((i-1,j))
# a3=im.getpixel((i-1,j+1))
# a4=im.getpixel((i,j-1))
# a5=im.getpixel((i,j))
# a6=im.getpixel((i,j+1))
# a7=im.getpixel((i+1,j-1))
# a8=im.getpixel((i+1,j))
# a9=im.getpixel((i+1,j+1))
# g=int((a1+a2+a3+a4+a5+a6+a7+a8+a9)/9)
# im_new.putpixel((i,j),g)
# im_new.show()
# =============================================================================
for i in range(width):
for j in range(height):
if(i-1)>=0 and (j-1)>=0 and (i+1)<=255 and (j+1)<=255:
a1=im.getpixel((i-1,j-1))
a2=im.getpixel((i-1,j))
a3=im.getpixel((i-1,j+1))
a4=im.getpixel((i,j-1))
a5=im.getpixel((i,j))
a6=im.getpixel((i,j+1))
a7=im.getpixel((i+1,j-1))
a8=im.getpixel((i+1,j))
a9=im.getpixel((i+1,j+1))
list=[a1,a2,a3,a4,a5,a6,a7,a8,a9]
list.sort()
g=list[4]
im_new.putpixel((i,j),g)
im.show()
im_new.show()
超額中值:
# -*- coding: utf-8 -*-
"""
Created on Thu May 28 08:40:47 2020
@author: 張若昀的對象
"""
from PIL import Image
import matplotlib.pyplot as plt
import random
import numpy as np
im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\Lena_椒鹽噪聲.jpg")
im_new=im.copy()
width,height=im.size
# =============================================================================
# for i in range(width):
# for j in range(height):
# if(i-1)>=0 and (j-1)>=0 and (i+1)<=255 and (j+1)<=255:
# a1=im.getpixel((i-1,j-1))
# a2=im.getpixel((i-1,j))
# a3=im.getpixel((i-1,j+1))
# a4=im.getpixel((i,j-1))
# a5=im.getpixel((i,j))
# a6=im.getpixel((i,j+1))
# a7=im.getpixel((i+1,j-1))
# a8=im.getpixel((i+1,j))
# a9=im.getpixel((i+1,j+1))
# g=int((a1+a2+a3+a4+a5+a6+a7+a8+a9)/9)
# im_new.putpixel((i,j),g)
# im_new.show()
# =============================================================================
for i in range(width):
for j in range(height):
if(i-1)>=0 and (j-1)>=0 and (i+1)<=255 and (j+1)<=255:
a1=im.getpixel((i-1,j-1))
a2=im.getpixel((i-1,j))
a3=im.getpixel((i-1,j+1))
a4=im.getpixel((i,j-1))
a5=im.getpixel((i,j))
a6=im.getpixel((i,j+1))
a7=im.getpixel((i+1,j-1))
a8=im.getpixel((i+1,j))
a9=im.getpixel((i+1,j+1))
list=[a1,a2,a3,a4,a5,a6,a7,a8,a9]
list.sort()
g=list[4]
if np.abs(list[4]-im.getpixel((i,j)))>40:
im_new.putpixel((i,j),g)
im.show()
im_new.show()
圖像銳化濾波技術
- 平滑的數學本質?微分
- 銳化濾波的方法?
- 銳化濾波器是以對圖像的微分運算爲基礎。
圖像邊緣與微分
- 圖像邊緣:一般指着局部不連續的圖像特徵
圖像細節的灰度變化微分特性
- 二階倒數比一階導數變化大
Roberts算子
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 4 08:45:21 2020
@author: 張若昀的對象
"""
from PIL import Image
import matplotlib.pyplot as plt
import random
import numpy as np
im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\Lena_256.bmp")
im_new=Image.new('L',im.size,0)
width,height=im.size
for i in range(1,width-1):
for j in range(1,height-1):
gx=im.getpixel((i,j))-im.getpixel((i+1,j+1))
gy=im.getpixel((i+1,j))-im.getpixel((i,j))
mag=np.abs(gx)+np.abs(gy)
im_new.putpixel((i,j),int(mag))
im.show()
im_new.show()
對角線交叉差分。
prewitt算子
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 4 08:45:21 2020
@author: 張若昀的對象
"""
from PIL import Image
import matplotlib.pyplot as plt
import random
import numpy as np
im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\Lena_256.bmp")
im_new=Image.new('L',im.size,0)
width,height=im.size
for i in range(1,width-2):
for j in range(1,height-2):
z1=im.getpixel((i,j))
z2=im.getpixel((i,j+1))
z3=im.getpixel((i,j+2))
z4=im.getpixel((i+1,j))
z5=im.getpixel((i+1,j+1))
z6=im.getpixel((i+1,j+2))
z7=im.getpixel((i+2,j))
z8=im.getpixel((i+2,j+1))
z9=im.getpixel((i+2,j+2))
gx=(z7+z8+z9)-(z1+z2+z3)
gy=(z3+z6+z9)-(z1+z4+z7)
mag=np.abs(gx)+np.abs(gy)
im_new.putpixel((i,j),int(mag))
im.show()
im_new.show()
Sobel 算子
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 4 08:45:21 2020
@author: 張若昀的對象
"""
from PIL import Image
import matplotlib.pyplot as plt
import random
import numpy as np
im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\Lena_256.bmp")
im_new=Image.new('L',im.size,0)
width,height=im.size
for i in range(1,width-2):
for j in range(1,height-2):
z1=im.getpixel((i,j))
z2=im.getpixel((i,j+1))
z3=im.getpixel((i,j+2))
z4=im.getpixel((i+1,j))
z5=im.getpixel((i+1,j+1))
z6=im.getpixel((i+1,j+2))
z7=im.getpixel((i+2,j))
z8=im.getpixel((i+2,j+1))
z9=im.getpixel((i+2,j+2))
gx=(z7+2*z8+z9)-(z1+2*z2+z3)
gy=(z3+2*z6+z9)-(z1+2*z4+z7)
mag=np.abs(gx)+np.abs(gy)
im_new.putpixel((i,j),int(mag))
im.show()
im_new.show()
浮雕效果
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 4 08:45:21 2020
@author: 張若昀的對象
"""
from PIL import Image
import matplotlib.pyplot as plt
import random
import numpy as np
im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\Lena_256.bmp")
im_new=Image.new('L',im.size,0)
width,height=im.size
for i in range(1,width-1):
for j in range(1,height-1):
gx=im.getpixel((i,j))-im.getpixel((i+1,j+1))
gy=im.getpixel((i+1,j))-im.getpixel((i,j))
mag=gx+gy+110
im_new.putpixel((i,j),int(mag))
im.show()
im_new.show()
在原有的圖片基礎上銳化
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 4 08:45:21 2020
@author: 張若昀的對象
"""
from PIL import Image
import matplotlib.pyplot as plt
import random
import numpy as np
im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\Lena_256.bmp")
im_new=Image.new('L',im.size,0)
width,height=im.size
for i in range(1,width-1):
for j in range(1,height-1):
gx=im.getpixel((i,j))-im.getpixel((i+1,j+1))
gy=im.getpixel((i+1,j))-im.getpixel((i,j))
mag=gx+gy+im.getpixel((i,j))
im_new.putpixel((i,j),int(mag))
im.show()
im_new.show()
拉普拉斯算子
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 4 08:45:21 2020
@author: 張若昀的對象
"""
from PIL import Image
import matplotlib.pyplot as plt
import random
import numpy as np
im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\Lena_256.bmp")
im_new=Image.new('L',im.size,0)
width,height=im.size
for i in range(1,width-1):
for j in range(1,height-1):
z1=im.getpixel((i+1,j-1))
z2=im.getpixel((i+1,j+1))
z3=im.getpixel((i-1,j+1))
z4=im.getpixel((i-1,j-1))
z5=im.getpixel((i+1,j))
z6=im.getpixel((i-1,j))
z7=im.getpixel((i,j+1))
z8=im.getpixel((i,j-1))
z9=im.getpixel((i,j))
mag=(z1+z2+z3+z4+z5+z6+z7+z8)-8*z9
im_new.putpixel((i,j),int(mag))
im.show()
im_new.show()
USM銳化
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 4 08:45:21 2020
@author: 張若昀的對象
"""
from PIL import Image,ImageFilter
import matplotlib.pyplot as plt
import random
import numpy as np
#im = Image.open(r"C:\課堂\數字圖像處理\實驗參考圖像\實驗參考圖像\Lena_256.bmp")
im = Image.open(r"C:\課堂\數字圖像處理\1.jpg")
im_new=im.copy()
im_nn=im.filter(ImageFilter.GaussianBlur(radius=2))
width,height=im.size
# =============================================================================
# #prewitt算子
# for i in range(1,width-2):
# for j in range(1,height-2):
# z1=im.getpixel((i,j))
# z2=im.getpixel((i,j+1))
# z3=im.getpixel((i,j+2))
# z4=im.getpixel((i+1,j))
# z5=im.getpixel((i+1,j+1))
# z6=im.getpixel((i+1,j+2))
# z7=im.getpixel((i+2,j))
# z8=im.getpixel((i+2,j+1))
# z9=im.getpixel((i+2,j+2))
#
# gx=(z7+z8+z9)-(z1+z2+z3)
# gy=(z3+z6+z9)-(z1+z4+z7)
# mag=np.abs(gx)+np.abs(gy)
# im_new.putpixel((i,j),int(mag))
# =============================================================================
#USM銳化
w=0.5
for i in range(width):
for j in range(height):
a,b,c=im.getpixel((i,j))
a1,b1,c1=im_nn.getpixel((i,j))
a2=(a-w*a1)/(1-w)
b2=(b-w*b1)/(1-w)
c2=(c-w*c1)/(1-w)
im_new.putpixel((i,j),(int(a2),int(b2),int(c2)))
im.show()
im_new.show()
無語無語無語昨天和弟弟跑了幾圈又去立定跳遠了今早渾身疼,半夢半醒間還把鬧鐘給關了,上課都遲到了,對我自己無語,下次設兩個鬧鐘:(
但是高老師人真的好好哦,還讓我們回去看回放,怎麼會有這麼好的老師,而且還貼心講解一下期末大作業真好啊