基本图像操作
1.直方图(histograms)
定义
直方图是对图像在某个指标的不同值的数量的统计,如亮度直方图,灰度直方图,颜色直方图。
例子:
亮度直方图 -> 表达了每个亮度级的像素数,图像对比度
亮度 = (R + B + G) / 3 范围 0-255
优缺点
优点:简单,快速,高效
缺点:不能描述空间信息;不能描述图像细节(因为仅表达了不同级的统计值分布,不同图像可以有很接近的直方图)
金字塔直方图
将图片分为n x n的子图,每个子图一个直方图,从而能够区分总体直方图相近的不同图像。
<img src="/visual_images/pyramid_histogram.png" width="800" height="400"/>
Q: 图像的局部不变特征
图像在经过一些变换后仍保持不变的特征,变换有尺度,平移,旋转,仿射,投影,光度,卷积等。
基本问题:局部不变特征的检测,描述,匹配。
特征除了具备不变性,还应具有可靠性,对噪声等的鲁棒性等。目前的特征算子有SIFT等。【HOG(方向梯度直方图),用于物体检测的特征。 介绍】
综述:Tinne Tuytelaars. Local Invariant Feature Detectors: A Survey, 2007 Computer Graphic & Vision
2.点运算(point operation)
点运算将输入图象映射为输出图象,输出图象每个象素点的灰度值仅由对应的输入象素点的值决定。它常用于改变图象的灰度范围及分布,是图象数字化及图象显示的重要工具。点运算因其作用性质有时也被称为对比度增强、对比度拉伸或灰度变换。
点运算实际上是灰度到灰度的映射过程,设输入图象为A(x,y),输出图象为B(x,y),则点运算可表示为
B(x,y)=f(A(x,y))
Basic点运算
linear brightness relation
其中k为增益,l为偏移
<img src="/visual_images/linear_func.jpg" width="600" height="300"/>
锯齿算子sawtooth
<img src="/visual_images/sawtooth.jpg" width="250" height="350"/>
其他数学函数
- logarithm
<img src="/visual_images/log.jpg" width="600" height="250"/> - exponent
<img src="/visual_images/exp.png" width="600" height="250"/>
直方图操作histogram
直方图正则化normalization
拉伸平移原始直方图
其中是想要归一化到的范围,如0,255。
<img src="/visual_images/histogram_norm.jpg" width="600" height="400"/>
直方图均衡化equalization
使直方图分布均匀
对于连续值:
<img src="/visual_images/histogram_equalization.jpg" width="650" height="400"/>
对于离散值:
其中s表示累积概率分布。
变换函数g:
example:
<img src="/visual_images/he_example.png" width="650" height="300"/>
<img src="/visual_images/he_example2.png" width="600" height="380"/>
<img src="/visual_images/he_example3.png" width="650" height="450"/>
可以看出均衡化增强了对比度,使得表示的级数范围更大了
均衡化和归一化也可以对颜色通道进行的。
<img src="/visual_images/color_histogram_trans.png" width="600" height="300"/>
均衡化与归一化对比:
归一化:线性可逆过程,对比度变化比较缓和soft
均衡化:非线性不可逆变换,对比度变化明显,强烈。
直方图匹配specification
直方图匹配将原图的直方图转变为目标直方图的形式。
<img src="/visual_images/histogram_specification_steps.png" width="650" height="450"/>
步骤是:将两个直方图做均衡化(求累积概率),取最接近的级数匹配,匹配关系就是转换关系。最接近匹配的目的就是让转换后的累积概率近似,从而原始级数概率分布就会相似。
<img src="/visual_images/histogram_specification.png" width="650" height="450"/>
阈值处理Thresholding
阈值处理是给定一个阈值T,让大于T的为255白色,小于T的为0黑色的二值化处理。
<img src="/visual_images/threshold.png" width="600" height="200"/>
自适应阈值处理
- Otsu's method
最大化下面的值:
<img src="/visual_images/ada_threshold.png" width="700" height="400"/>
图像噪声
图像噪声可以分为两类:
- 高斯噪声gaussian noise
来源:传感器噪声,光照不足,高温;电子电路噪声。
公示表示:
其中x,y是位置,i是通道;noise是高斯噪声满足
<img src="/visual_images/gaussian_noise.png" width="500" height="200"/> - 椒盐噪声salt and pepper noise
来源:信号到数字转换错误,位传输错误。
salt:指某个像素为255; pepper:某个像素为0; 噪声密度为常数
<img src="/visual_images/salt_pepper_noise.png" width="530" height="230"/>
组操作
指利用了像素周围的信息。
模版卷积
这个其实就是一个卷积操作
平均算子
当卷积核数值都为为1/n时,称平均算子。
作用是可以减少噪声,但是平均操作会造成图片模糊和细节丢失。
<img src="/visual_images/average_filter.png" width="700" height="400"/>
高斯平均
为了保留更多原始细节,有了高斯平均算子:
<img src="/visual_images/gaussian_averageing.png" width="600" height="400"/>
与平均算子对比:
<img src="/visual_images/averageing_gaussian.png" width="600" height="300"/>
减少噪声对比:
<img src="/visual_images/reduce_noise_comp.png" width="700" height="400"/>
中值滤波
用中值代替。
有个有趣的应用就是找背景:
<img src="/visual_images/median_filter.png" width="700" height="400"/>
相比于模版平均,时空平均,中值能完全得到背景。
mode filter
用最频繁的像素值;
当每个值只有一个时,使用截断中值去逼近mode
truncated median filter:
<img src="/visual_images/truncated_median.png" width="600" height="400"/>
结果:
<img src="/visual_images/truncated_results.png" width="700" height="400"/>
方法对比
- 平均算子
减少很多噪声但是图片更模糊了 - 高斯平均
相比于平均算子保留了跟多细节,但是优势不明显 - 中值
保留了一些噪声但是有清晰的边界 - 截断中值
减少噪声,保留了很多细节
<img src="/visual_images/reduce_comparision.png" width="700" height="400"/>
二值形态变化操作
对二值图像进行膨胀(放大),腐蚀(缩小)操作。
erosion
腐蚀操作:扫描图像的每一个像素,用结构元素(可自定义的,水平线竖线等等)与其覆盖的二值图像做“与”操作:如果都为1,结果图像的该像素为1,否则为0。
<img src="/visual_images/erosion.png" width="600" height="250"/>
dilation
膨胀操作:扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作:如果都为0,结果图像的该像素为0,否则为1。
<img src="/visual_images/dilation.png" width="600" height="250"/>
opening operator
在腐蚀后加膨胀操作
closing operator
在膨胀后加腐蚀操作
<img src="/visual_images/opening_closing.png" width="700" height="200"/>
作用
- 膨胀: 最直接的就是对物体形状的扩展,且能连接相近物体,填充物体内空白
- 腐蚀:缩小形状,看起来细些,做多次后会得到形状线条,比如指纹,提取形态骨架;分离邻近物体;去除小噪声,小点。
- 开运算:分离邻近物体和平滑边界
- 闭运算:填充物体内细小空洞,连接邻近物体和平滑边界
关于操作的代码可以参考文章Matlab DIP(瓦)ch9形态学图像处理