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()
无语无语无语昨天和弟弟跑了几圈又去立定跳远了今早浑身疼,半梦半醒间还把闹钟给关了,上课都迟到了,对我自己无语,下次设两个闹钟:(
但是高老师人真的好好哦,还让我们回去看回放,怎么会有这么好的老师,而且还贴心讲解一下期末大作业真好啊