资讯专栏INFORMATION COLUMN

Programming Computer Vision with Python (学习笔记八)

FleyX / 3245人阅读

摘要:简称库是从扩展下来的,提供了更丰富的图像处理函数,去噪函数除了还有算法,比如边缘检测还有以前简单提过的算子滤波器。下面我用看具体的例子,将和高斯平滑进行对比效果对比如下明显感觉使用的效果要比高斯平滑好很多。

图像去噪(Image Denoising)的过程就是将噪点从图像中去除的同时尽可能的保留原图像的细节和结构。这里讲的去噪跟前面笔记提过的去噪不一样,这里是指高级去噪技术,前面提过的高斯平滑也能去噪,但高斯平滑去噪的同时也把边缘模糊化了,另外使用形态学的方法去噪是指去除一些粗的椒盐噪声。对于一幅密布噪点的图像,如果使其变得清晰又保留边缘细节,这是高级去噪技术所要解决的问题。

全变差

全变差去噪(Total variation denoising)是一种常用的去噪模型。全变差(或叫总变差)大概是指图像梯度的范数(norm)的积分。
一幅图像的细节(噪声或是干扰的不必要的)过多,全变差的值越高,所以让全变差最小化,去掉噪声和没用细节的同时,保留边缘等主要细节,正是这种模型的处理思想。用这种去噪技术产生的图像有点接近卡通的感觉。
下面要介绍的Chambolle去噪算法就是基于全变差去噪模型实现的。

chambolle去噪

scipy.ndimage模块只是提供了基本的图像处理方法,并没有提供Chambolle去噪函数,所以就要借助另一个库——scikit-image。

scikit-image
scikit-image(简称skimage)库是从scipy.ndimage扩展下来的,提供了更丰富的图像处理函数,去噪函数除了Chambolle还有Bilateral算法,比如边缘检测还有以前简单提过的Canny算子滤波器。
它也是由 SciPy 社区所开发的,可以跟NumPy等完美配合。

安装:

sudo apt-get install python-skimage

函数说明:

skimage.restoration.denoise_tv_chambolle(im, weight=50, eps=0.0002, n_iter_max=200, multichannel=False)
im: ndarray类型,2维或3维
weight:越大去噪越多,但图像也会越失真
multichannel:对彩色图像而言,true表示对每一通道去噪

返回去噪后的图像,ndarray类型。

下面我用看具体的例子,将chambolle和高斯平滑进行对比:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import filters
from skimage.filter import denoise_tv_chambolle  #for versoin: 0.9.3
#from skimage.restoration import denoise_tv_chambolle  #for new version

im = np.array(Image.open("noising.jpg").convert("L"))

index = 221
plt.subplot(index)
plt.gray()
plt.imshow(im)
plt.axis("off")
plt.title("original")

chdnim = denoise_tv_chambolle(im, weight=0.2)
plt.subplot(index+1)
plt.imshow(chdnim)
plt.axis("off")
plt.title("chambolle weight=0.2")

gs2dnim = filters.gaussian_filter(im, sigma=2)
plt.subplot(index+2)
plt.imshow(gs2dnim)
plt.axis("off")
plt.title("gaussion sigma=2")

gs3dnim = filters.gaussian_filter(im, sigma=3)

plt.subplot(index+3)
plt.imshow(gs3dnim)
plt.axis("off")
plt.title("gaussion sigmal=3")

plt.show()

效果对比如下:

明显感觉使用chambolle的效果要比高斯平滑好很多。

Bilateral滤波器
Bilateral滤波器跟之前介绍过的高斯模糊运算过程相似,而且它也使用了高斯核,但它的特点是在对图像进行平滑的同时能保留边缘。因为它在平滑滤波时同时考虑了像素间的几何距离和色彩距离。具体点说,如果要处理的像素与邻近像素的欧式距离比较大(即像素值相差比较大)时,那么这些邻近像素的权重就比较小,从而使得对滤波后的新像素值影响较小。另外,每个滤波后像素点的值,受与他色彩相近并且距离较近的像素点的影响较大,这两种权值分配方法起到了保护边缘的作用。

Bilateral去噪函数:

skimage.restoration.denoise_bilateral(image, win_size=5, sigma_range=None, sigma_spatial=1, bins=10000, mode="constant", cval=0)

示例:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import filters
from skimage.filter import denoise_bilateral  #for versoin: 0.9.3
#from skimage.restoration import denoise_bilateral  #for new version

im = np.array(Image.open("noising.jpg").convert("L"))

index = 221
plt.subplot(index)
plt.gray()
plt.imshow(im)
plt.axis("off")
plt.title("original")

plt.subplot(index+1)
plt.imshow(denoise_bilateral(im))
plt.axis("off")
plt.title("default")

plt.subplot(index+2)
plt.imshow(denoise_bilateral(im, sigma_range=0.2, sigma_spatial=10))
plt.axis("off")
plt.title("0.2/10")

plt.subplot(index+3)
plt.imshow(denoise_bilateral(im, sigma_range=0.8, sigma_spatial=10))
plt.axis("off")
plt.title("0.8/10")

plt.show()

效果如图:

感觉比高斯平滑要好一些,但比Chambolle还是要逊色不少。

小结

因全变差的数学原理比较高深,所以暂时没去研究,只大概了解下并使用skimage库的接口进行了一番对比,结论就是使用chambolle去噪效果非常好。

至此,书中第一章的内容结束了。后面将开始下一章节的内容学习——图像描述。

你还可以查看我的其它笔记。

参考资料

scikit-image.org
scikit denoising example
Bilateral Filtering

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37657.html

相关文章

  • SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

    摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...

    lifesimple 评论0 收藏0
  • Programming Computer Vision with Python学习笔记一)

    摘要:接下来的学习笔记本人都将使用来代替。库中提供的很多图像操作都是分别作用于某个通道的数据。是最流行的开源色彩管理库之一。目前只支持在增加和。模块支持从图像对象创建或的对象,方便被使用和显示。模块对图像或指定区域的每个通道进行统计,包括等。 介绍 《Programming Computer Vision with Python》是一本介绍计算机视觉底层基本理论和算法的入门书,通过这本收可以...

    huashiou 评论0 收藏0
  • Programming Computer Vision with Python学习笔记五)

    摘要:下面是二维空间的高斯分布函数公式这个公式被称作高斯核。高斯模糊使用高斯平均算子来实现的图像模糊叫高斯模糊,也叫高斯平滑被认为是一种最优的图像平滑处理。 SciPy库 SciPy库,与之前我们使用的NumPy和Matplotlib,都是scipy.org提供的用于科学计算方面的核心库。相对NumPy,SciPy库提供了面向更高层应用的算法和函数(其实也是基于NumPy实现的),并以子模块...

    Rocko 评论0 收藏0
  • Programming Computer Vision with Python学习笔记十二)

    摘要:图像矩图像矩或称几何矩是由在年提出的。矩给出了对图像形状的一种度量。使用建议的第二种采样方法即以图像中心进行高斯分布采样,长度使用,然后在基础上增加了旋转的描述以及快速的计算方法,这种方法被称为。 ORB(Oriented FAST and Rotated BRIEF)可用来替代SIFT(或SURF),它对图像更具有抗噪特性,是一种特征检测高效算法,其速度满足实时要求,可用于增强图像匹...

    xbynet 评论0 收藏0

发表评论

0条评论

阅读需要支付1元查看
<