c语言 图像形态学滤波,图像处理理论(二)——滤波基础, 形态学, 边缘检测
二值化(续)
一维交叉熵值法
对于两个分布R和Q,定义其信息交叉熵D如下:
\[R=\{r_1,r_2,\dots,r_n\},Q=\{q_1,q_2,\dots,q_n\}\]
\[D(Q,R)=\sum_{k=1}^{n}q_k log_2\frac{q_k}{r_k}\]
注:严格来说,这里定义的是相对熵(relative entropy),又称为KL散度(Kullback-Leibler divergence)或KL距离,是两个随机分布间距离的度量。从公式可以看出,KL距离和经典概率论中的二项分布有很密切的关系。
交叉熵的严格定义参见:
https://en.wikipedia.org/wiki/Cross_entropy
http://www.voidcn.com/blog/rtygbwwwerr/article/p-5047519.html
交叉熵(Cross-Entropy)
二值化过程实际上就是从分布\(R=\{r_1,r_2,\dots,r_L\}\)到分布\(Q=\{q_A,q_B\}\)的过程。
因此
\[D(t)=\sum_{i=0}^{t}ip_i log_2(\frac{p_i}{\omega_A})+\sum_{i=t+1}^{L-1}ip_i log_2(\frac{p_i}{\omega_B})\]
其中,使得D最小的t即为最小交叉熵意义下的最优阈值。
二维Otsu法
Otsu法对噪音和目标大小十分敏感,它仅对类间方差为单峰的图像产生较好的分割效果。
当目标与背景的大小比例悬殊时,类间方差准则函数可能呈现双峰或多峰,此时效果不好,但是Otsu法是用时最少的。
二维Otsu法,在考虑像素点灰度级p的基础上,增加了对像素点邻域平均像素值s的考虑。
如果p比s大很多,说明像素的灰度值远远大于其临域的灰度均值,故而该点很可能是噪声点,反之如果p比s小很多,即该点的像素值比其临域均值小很多,则说明是一个边缘点。这两种点在后续的计算中,都要去除掉。
二维Otsu法的推导过程极为复杂,可参见:
http://blog.csdn.net/likezhaobin/article/details/6915755
灰度图像阈值化分割常见方法总结及VC实现
参考
https://mp.weixin.qq.com/s/xCmagMDmcPRf3xAkOMT4rw
视觉与图像:阈值分割
https://mp.weixin.qq.com/s/Us7K5SBLltJIKzaJZQqltw
简单粗暴二分类分割方法Riddler-Calvard详解
https://mp.weixin.qq.com/s/gylWAKk4q0UNlhxIXrFHkQ
基于OpenCV的图像阈值分割处理
方框滤波(Box Filter)
\[g=f\otimes h,h=\alpha
\begin{bmatrix}
1 & 1 & 1 & \cdots & 1 \\
1 & 1 & 1 & \cdots & 1 \\
\cdots & \cdots & \cdots & \cdots & \cdots \\
1 & 1 & 1 & \cdots & 1
\end{bmatrix}
,\alpha =
\begin{cases}
\frac{1}{SUM(h)}, & \text{normalize=true} \\
1, & \text{normalize=false} \\
\end{cases}\]
当normalize=true时的方框滤波,也被称为均值滤波(Mean filter)。
高斯滤波(Gauss filter)
高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。
正态分布的概率密度函数为:
\[f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}\]
其标准化后的概率密度函数为:
\[f(x)=\frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}\]
标准二维正态分布的概率密度函数为:
\[f(x,y)=\frac{1}{2\pi}e^{-\frac{x^2+y^2}{2}}=f(x)f(y)\]
这个公式表明标准二维正态分布,可以分解为两个正交方向上的标准一维正态分布。也就是说标准二维正态分布不仅是中心对称,也是轴对称的。
正态分布的性质:
1.两个正态分布密度的乘积、卷积,还是正态分布。
2.正态分布的傅立叶变换、共轭分布,还是正态分布。
3.正态分布和其它具有相同均值、方差的概率分布相比,具有最大熵。
4.二项分布、泊松分布、\(\chi^2\)分布、t分布等在样本增大的情况下,都趋向于正态分布。
正态分布的相关内容可参考:
标准正态分布的最佳逼近符合杨辉三角,比如一个具有5个点的一维标准正态分布的最佳逼近为:
\[\left[ \begin{array}{ccccc} 1&4&6&4&1\end{array} \right]\]
同理,最常用的3*3高斯滤波h矩阵为:
\[\left[\begin{array}{c} 1\\2\\1\end{array} \right]\times \left[\begin{array}{ccc} 1&2&1\end{array} \right]=\left[\begin{array}{ccc} 1&2&1\\ 2&4&2 \\ 1&2&1\end{array} \right]\]
其归一化形式为:
\[\left[\begin{array}{ccc} 0.0625&0.125&0.0625\\ 0.125&0.25&0.125 \\ 0.0625&0.125&0.0625\end{array}\right]\]
从效果来说,高斯滤波可产生类似毛玻璃的效果。
参考:
https://mp.weixin.qq.com/s/pJhfdLZxcKTI30xzbU2UoA
5分钟让你看懂高斯模糊算法
https://mp.weixin.qq.com/s/V8zMnADGHW_owfMPDtXvgQ
如何让8岁表妹学会正态分布
https://mp.weixin.qq.com/s/q252Lc0Wl5uNc8-tw9nlgw
高中就开始学的正态分布,原来如此重要
https://mp.weixin.qq.com/s/KYxUoaz4dlheFLz3ZinB2w
十种图像模糊算法的总结与实现
https://mp.weixin.qq.com/s/6PQt-XcxdYJwIItf2RNuBg
图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波
https://mp.weixin.qq.com/s/6-JK8HA40Q0FQNUkB62Fug
一个简单方法识别毛玻璃、高斯模糊
二维高斯滤波
由标准二维正态分布的正交性,可知二维高斯滤波实际上可以分解为x、y两个方向上的一维高斯滤波。当然,这时候的kernel的尺寸不再是方形的,而是1*n的长条形。
这是一项有用的特性,因为这样只需要\(O(n \times M \times N)+O(m \times M \times N)\)次运算,而直接使用二维高斯滤波的计算量为\(O(m \times n \times M \times N)\)。其中m,n,M,N分别是kernel和图像的长、宽。
高斯积分
\[\int_{-\infty}^\infty e^{-x^2}\mathrm{d}x=\sqrt{\pi}\]
中值滤波(Median filter)
中值滤波是一种典型的非线性滤波技术,对于斑点噪声(speckle noise)和椒盐噪声(salt-and-pepper noise)来说尤其有用,对滤除脉冲干扰及图像扫描噪声非常有效,也常用于保护边缘信息。
以3*3的滤波窗口为例,计算以点\([i,j]\)为中心的像素中值步骤如下:
1)对\(U^+(A,1)\)的9个像素点\(a_0\sim a_8\),按强度值大小排列像素点,得到有序数组\(A_0\sim A_8\)
2)选择排序像素集的中间值\(A_4\)作为点\([i,j]\)的新值。
从效果来说,中值滤波可产生类似油彩画的效果。
上面这些滤波的效果如图所示:
膨胀与腐蚀(Dilation & Erosion)
腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。膨胀就是图像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中的高亮部分被腐蚀,“领域被蚕食”,效果图拥有比原图更小的高亮区域。
具体方法如下:
1.膨胀。
\[g(i,j)=max_{k,l}f(i,j)\]
2.腐蚀。
\[g(i,j)=min_{k,l}f(i,j)\]
这里仿照C语言的记法,将膨胀操作记为\(dilate(src)\),其中src表示源图像。同理,将腐蚀操作记为\(erode(src)\)。
效果如下:
膨胀和腐蚀不仅是基本的形态学操作,而且也是一种滤波器。它们和中值滤波一样,都是百分比(percentile)滤波的特例。当百分比为100%时,为最大值滤波,即膨胀操作;当百分比为0%时,为最小值滤波,即腐蚀操作;当百分比为50%时,即为中值滤波。
高级形态学操作
1.开运算(Opening Operation)
\[open(src)=dilate(erode(src))\]
开运算可以用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
2.闭运算(Closing Operation)
\[close(src)=erode(dilate(src))\]
闭运算能够排除小型黑洞(黑色区域)。
3.形态学梯度(Morphological Gradient)
\[morphgrad(src)=dilate(src)-erode(src)\]
对二值图像进行这一操作可以将团块(blob)的边缘突出出来。我们可以用形态学梯度来保留物体的边缘轮廓。
4.顶帽(Top Hat)
\[tophat(src)=src-open(src)\]
顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。
5.黑帽(Black Hat)
\[blackhat(src)=close(src)-src\]
黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域。
效果如下:
边缘检测
梯度
从数学概念上来说,一维梯度G,实际上就是函数的斜率,也就是一阶导数。二维梯度G是个向量,一般用两个维度上的偏导数\(G_x\)和\(G_y\)来刻画,即\(G=[G_x,G_y]\)。显然,沿梯度向量方向,函数值增加最快。
梯度向量求模的常见方法有:
\[G=\mid G_x\mid +\mid G_y\mid (模1)\]
\[G=\sqrt{G_x^2+G_y^2}(模2)\]
\[G=max(\mid G_x\mid ,\mid G_y\mid )(模\infty)\]
显然,梯度的模大的点,有很大可能是边缘点。常用的梯度算子有Roberts算子、Sobel算子和Prewitt算子。
Roberts算子
\[s_x=\left[\begin{array}{cc} 1&0\\ 0&-1\end{array} \right],s_y=\left[\begin{array}{cc} 0&-1\\ 1&0\end{array} \right]\]
\[G(i,j)=\mid s_x\otimes f\mid +\mid s_y\otimes f\mid\]
\[=\mid f(i,j)-f(i+1,j+1)\mid +\mid f(i+1,j)-f(i,j-1)\mid\]
以下将\(s_x\otimes f\)简记做\(G_x\)。
Sobel算子
\[s_x=\left[\begin{array}{ccc} -1&0&1\\ -2&0&2 \\ -1&0&1\end{array} \right],s_y=\left[\begin{array}{ccc} 1&2&1\\ 0&0&0 \\ -1&-2&-1\end{array} \right]\]
\[G=\sqrt{G_x^2+G_y^2}\]
\[梯度方向\theta=arctan(\frac{G_y}{G_x})\]
Prewitt算子
\[s_x=\left[\begin{array}{ccc} -1&0&1\\ -1&0&1 \\ -1&0&1\end{array} \right],s_y=\left[\begin{array}{ccc} 1&1&1\\ 0&0&0 \\ -1&-1&-1\end{array} \right]\]
其他与Sobel算子相同。
拉普拉斯算子
拉普拉斯算子是一种二阶微分算子,因此,它一般用二阶微分符号\(\nabla^2f\)来表示。其常用的相关核有:
\[h_1=\left[\begin{array}{ccc} 0&-1&0\\ -1&4&-1 \\ 0&-1&0\end{array} \right],h_2=\left[\begin{array}{ccc} -1&-1&-1\\ -1&8&-1 \\ -1&-1&-1\end{array} \right]\]
从中可以看出,拉普拉斯算子的相关核有以下特点:
1.各元素中心对称。
2.中心元素为正值。(在有些课本中,中心元素也可为负值,但相关公式就需要做相应的符号上的修改。在本教程中,中心元素一律为正值。)
3.所有元素的和为0。
拉普拉斯算子和正态分布有很大关联,也有标准差\(\sigma\)的概念。一般来说,中心元素的值越大,\(\sigma\)越小。算子对图像的模糊(或锐化)程度与\(\sigma\)成正比。
对称梯度算子
\[s_x=\left[\begin{array}{ccc} -1&0&1\\ -d&0&d \\ -1&0&1\end{array} \right],s_y=\left[\begin{array}{ccc} 1&d&1\\ 0&0&0 \\ -1&-d&-1\end{array} \right]\]
可以看出Sobel算子\((d=2)\)和Prewitt算子\((d=1)\),都是对称梯度算子的特例。d的常用值还有\(\sqrt{2}\)。
c语言 图像形态学滤波,图像处理理论(二)——滤波基础, 形态学, 边缘检测相关推荐
- 使用c语言实现图像中值滤波,图像处理之中值滤波介绍及C实现
原标题:图像处理之中值滤波介绍及C实现 1.中值滤波概述 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号平滑处理技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. ...
- 数字图像处理 实验二:图像的平滑滤波
基于Matlab的图像的平滑滤波 DIP实验2:图像的平滑滤波 实验目的 实验内容 参考代码 实验结果 DIP实验2:图像的平滑滤波 实验目的 平滑的目的是减少噪声对图像的影响.掌握线性滤波和中值滤波 ...
- 传统基本图像处理方法:图像增强(灰度变换、直方图增强、空间域滤波、频率域滤波)、图像分割、图像配准等
图像处理设计主要有以下几种处理:图像增强(灰度变换.直方图增强.空间域滤波.频率域滤波).图像分割.图像配准等等. 图像增强: 图像增强作为基本的图像处理技术,目的在于通过对图像进行加工使其比原始图像 ...
- 图像算法七:【形态学图像处理】二值运算、膨胀、腐蚀
二值图像腐蚀函数 [算法说明]:二值图像腐蚀操作属于图像形态学的范畴,形态学运算是只针对二值图像进行,并依据数学形态学(Mathermatical Morphogy)集合论方法发展起来的数字图像处理方 ...
- 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCV3编程入门》学习笔记6 图像处理(二)非线性滤波:中值滤波、双边滤波
第6章 图像处理 6.2 非线性滤波:中值滤波.双边滤波 6.2.1 非线性滤波 很多情况下,使用领域像素的非线性滤波会得到更好的效果,如在噪声是散粒噪声而不是高斯噪声,即图像偶尔会出现很大值时,高斯 ...
- 【图像处理】——图像滤波(Python+opencv实现三种方法:均值滤波、中值滤波、高斯滤波等)
目录 一.什么是滤波以及滤波的目的? 二.均值滤波(cv2.blur()) 1.原理 2.关键代码 3.封装代码 二.中值滤波(cv2.medianBlur()) 1.原理 2.关键代码 3.封装代码 ...
- 【图像处理】二维付立叶变换和滤波 (Two-Dimensional Fourier Transform and Filtering)
实验要求 该实验的目的是开发一个2-D FFT 程序包.要求程序能完成下面的功能: (1.a) 用因子 (-1)x+y 乘以输入图像,以实现滤波的中心化变换: (1.b) 计算付立叶变换: ...
- 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验
图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...
最新文章
- dae模型如何合并_FBX、DAE模型的格式、导入与骨骼动画
- Detach Volume 操作 - 每天5分钟玩转 OpenStack(55)
- linux 命令改配置文件,linux下 修改配置文件的命令
- Keil 编译太慢怎么办?教你一招,提速10倍
- 带权中位数-算法导论第三版第九章思考题9-2
- java @valid 密码不一致_一个成熟的Java项目如何优雅地处理异常
- Linux下Vim工具常用命令
- MSDN WebCast网站全新改版
- ldr和adr的区别
- 工信部:2020年启动5G商用
- 如何才能写出“高质量”的代码?
- Apache Kafka + Spark Streaming Integration
- python定时任务_Python3.x:定时任务实现方式
- OBS推流 rtmp服务器(docker) python opencv拉流
- STL与Boost对比
- 欧洲最大笔融资,骗过软银!印度AI公司被曝造假,自动开发背后是真人码农
- c语言大数乘方算法,用c语言实现大数乘方
- java阴阳师抽卡算法_阴阳师最强召唤黑科技:如何抽卡必出SSR
- 计算机如何去除桌面名称阴影,去除桌面图标阴影 - 桌面图标有蓝色阴影怎么去掉 - 安全专题...
- IBM出手 蓝色巨人收购蓝色巨狼