数字图像处理 第六章 图像增强2

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()

在这里插入图片描述


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

猜你喜欢

转载自blog.csdn.net/weixin_43820665/article/details/106397400