python 简单图像处理(10) 空间域图像平滑

图象平滑的主要目的是减少图像噪声

图像噪声来自多方面,常见的噪声有以下几种:

加性噪声、乘性噪声、量化噪声、椒盐噪声

减少噪声的方法可以在空间域或是在频率域

在空间域,基本方法是求像素的平均值或中值

在频率域,运用的是低通滤波技术

在这里我们只讲空间域的图象平滑。频率域以后有机会再讲

空间域的各种滤波器虽然形状不同,但在空间域实现图像滤波的方法是相似的。

都是利用模板卷积,即将图像模板下的像素与模板系数的乘积求和操作。

我们先来看3×3的模板:

 

我们先来看看领域平均法:

常用的平滑掩模算子有

 

我们写程序来实现:

 
  
import cv

def Filter(image,array):
w
= image.width
h
= image.height
size
= (w,h)
iFilter
= cv.CreateImage(size, 8 , 1 )
for i in range(h):
for j in range(w):
if i in [0,h - 1 ] or j in [0,w - 1 ]:
iFilter[i,j]
= image[i,j]
else :
a
= [0] * 9
for k in range( 3 ):
for l in range( 3 ):
a[k
* 3 + l] = image[i - 1 + k,j - 1 + l]
sum
= 0
for m in range( 9 ):
sum
= sum + array[m] * a[m]
iFilter[i,j]
= int(sum)
return iFilter

H1
= [ 1.0 / 9 ] * 9
H2
= [ 1.0 / 10 ] * 9
H2[
4 ] = 0.2
H3
= [ 1.0 / 16 , 2.0 / 16 , 1.0 / 16 , 2.0 / 16 , 4.0 / 16 , 2.0 / 16 , 1.0 / 16 , 2.0 / 16 , 1.0 / 16 ]
H4
= [ 1.0 / 8 ] * 9
H4[
4 ] = 0

image
= cv.LoadImage( ' lena.jpg ' ,0)
iH1F
= Filter(image,H1)
iH2F
= Filter(image,H2)
iH3F
= Filter(image,H3)
iH4F
= Filter(image,H4)
cv.ShowImage(
' image ' ,image)
cv.ShowImage(
' iH1F ' ,iH1F)
cv.ShowImage(
' iH2F ' ,iH2F)
cv.ShowImage(
' iH3F ' ,iH3F)
cv.ShowImage(
' iH4F ' ,iH4F)
cv.WaitKey(0)

 

效果如下:

不同算子间差别很小,至少这幅图是这样的

 

我们再来看看中值滤波器

中值滤波器不存在算子的概念,只有窗口的概念

选取以某一点为中心的窗口,对窗口中所有点灰度值取中值,将灰度值的中值付给这一点。这就是中值滤波的全部

改造一下刚才的程序:

 
  
import cv

def MFilter(image):
w
= image.width
h
= image.height
size
= (w,h)
iMFilter
= cv.CreateImage(size, 8 , 1 )
for i in range(h):
for j in range(w):
if i in [0,h - 1 ] or j in [0,w - 1 ]:
iMFilter[i,j]
= image[i,j]
else :
a
= [0] * 9
for k in range( 3 ):
for l in range( 3 ):
a[k
* 3 + l] = image[i - 1 + k,j - 1 + l]
a.sort()
iMFilter[i,j]
= a[ 4 ]
return iMFilter

image
= cv.LoadImage( ' lena.jpg ' ,0)
iMF
= MFilter(image)
cv.ShowImage(
' image ' ,image)
cv.ShowImage(
' iMF ' ,iMF)
cv.WaitKey(0)
看看效果:

 

中间为平均值滤波,右边是中值滤波。有没有看出差别?

我们来更直观的看看两种滤波方式对不同信号的处理效果吧

对线性信号,为了处理简单,我用的窗的长度为3

我们从效果可以看出中值平滑只对特别尖锐的信号平滑,而平均值平滑对所有的信号都平滑

所有平均值平滑不仅消除了噪声,还损失了原图中陡峭的边缘

 

对于含有点,线,尖角较多的图不适应采取中值滤波,他们容易被误认为噪声

好啦,简单的空域平滑滤波就讲到这里了

 

 

转载于:https://www.cnblogs.com/xianglan/archive/2010/12/29/1919249.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值